修复冲突
commit
a1d5193e92
|
@ -0,0 +1,11 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,39 @@
|
|||
namespace CompressToExe
|
||||
{
|
||||
partial class Form1
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||
this.Text = "Form1";
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
namespace CompressToExe
|
||||
{
|
||||
public partial class Form1 : Form
|
||||
{
|
||||
public Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
namespace CompressToExe
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
// To customize application configuration such as set high DPI settings or default font,
|
||||
// see https://aka.ms/applicationconfiguration.
|
||||
ApplicationConfiguration.Initialize();
|
||||
Application.Run(new Form1());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,723 @@
|
|||
"DeployProject"
|
||||
{
|
||||
"VSVersion" = "3:800"
|
||||
"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
|
||||
"IsWebType" = "8:FALSE"
|
||||
"ProjectName" = "8:EI_Image_Viewer"
|
||||
"LanguageId" = "3:2052"
|
||||
"CodePage" = "3:936"
|
||||
"UILanguageId" = "3:2052"
|
||||
"SccProjectName" = "8:"
|
||||
"SccLocalPath" = "8:"
|
||||
"SccAuxPath" = "8:"
|
||||
"SccProvider" = "8:"
|
||||
"Hierarchy"
|
||||
{
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_671ACE803849427ABF43662CDE6B54E3"
|
||||
"OwnerKey" = "8:_UNDEFINED"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_6BD8B282CE934C3AAD3841638BE9D51E"
|
||||
"OwnerKey" = "8:_UNDEFINED"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
}
|
||||
"Configurations"
|
||||
{
|
||||
"Debug"
|
||||
{
|
||||
"DisplayName" = "8:Debug"
|
||||
"IsDebugOnly" = "11:TRUE"
|
||||
"IsReleaseOnly" = "11:FALSE"
|
||||
"OutputFilename" = "8:Debug\\EI_Image_Viewer.msi"
|
||||
"PackageFilesAs" = "3:2"
|
||||
"PackageFileSize" = "3:-2147483648"
|
||||
"CabType" = "3:1"
|
||||
"Compression" = "3:2"
|
||||
"SignOutput" = "11:FALSE"
|
||||
"CertificateFile" = "8:"
|
||||
"PrivateKeyFile" = "8:"
|
||||
"TimeStampServer" = "8:"
|
||||
"InstallerBootstrapper" = "3:2"
|
||||
}
|
||||
"Release"
|
||||
{
|
||||
"DisplayName" = "8:Release"
|
||||
"IsDebugOnly" = "11:FALSE"
|
||||
"IsReleaseOnly" = "11:TRUE"
|
||||
"OutputFilename" = "8:Release\\EI_Image_Viewer.msi"
|
||||
"PackageFilesAs" = "3:2"
|
||||
"PackageFileSize" = "3:-2147483648"
|
||||
"CabType" = "3:1"
|
||||
"Compression" = "3:2"
|
||||
"SignOutput" = "11:FALSE"
|
||||
"CertificateFile" = "8:"
|
||||
"PrivateKeyFile" = "8:"
|
||||
"TimeStampServer" = "8:"
|
||||
"InstallerBootstrapper" = "3:2"
|
||||
}
|
||||
}
|
||||
"Deployable"
|
||||
{
|
||||
"CustomAction"
|
||||
{
|
||||
}
|
||||
"DefaultFeature"
|
||||
{
|
||||
"Name" = "8:DefaultFeature"
|
||||
"Title" = "8:"
|
||||
"Description" = "8:"
|
||||
}
|
||||
"ExternalPersistence"
|
||||
{
|
||||
"LaunchCondition"
|
||||
{
|
||||
}
|
||||
}
|
||||
"File"
|
||||
{
|
||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6BD8B282CE934C3AAD3841638BE9D51E"
|
||||
{
|
||||
"SourcePath" = "8:D:\\Soft\\WX\\WeChat Files\\WeChat Files\\wxid_r2imdzb7j3q922\\FileStorage\\File\\2023-04\\favicon.ico"
|
||||
"TargetName" = "8:favicon.ico"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_FC6A2494EDBE4963A84EBD88E04B3F04"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Vital" = "11:TRUE"
|
||||
"ReadOnly" = "11:FALSE"
|
||||
"Hidden" = "11:FALSE"
|
||||
"System" = "11:FALSE"
|
||||
"Permanent" = "11:FALSE"
|
||||
"SharedLegacy" = "11:FALSE"
|
||||
"PackageAs" = "3:1"
|
||||
"Register" = "3:1"
|
||||
"Exclude" = "11:FALSE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"IsolateTo" = "8:"
|
||||
}
|
||||
}
|
||||
"FileType"
|
||||
{
|
||||
}
|
||||
"Folder"
|
||||
{
|
||||
"{1525181F-901A-416C-8A58-119130FE478E}:_8D81C358540F4384A07E881ECA670B06"
|
||||
{
|
||||
"Name" = "8:#1919"
|
||||
"AlwaysCreate" = "11:FALSE"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Property" = "8:ProgramMenuFolder"
|
||||
"Folders"
|
||||
{
|
||||
}
|
||||
}
|
||||
"{1525181F-901A-416C-8A58-119130FE478E}:_CEB3ABC1E0034A319A55466553922586"
|
||||
{
|
||||
"Name" = "8:#1916"
|
||||
"AlwaysCreate" = "11:FALSE"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Property" = "8:DesktopFolder"
|
||||
"Folders"
|
||||
{
|
||||
}
|
||||
}
|
||||
"{3C67513D-01DD-4637-8A68-80971EB9504F}:_FC6A2494EDBE4963A84EBD88E04B3F04"
|
||||
{
|
||||
"DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
|
||||
"Name" = "8:#1925"
|
||||
"AlwaysCreate" = "11:FALSE"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Property" = "8:TARGETDIR"
|
||||
"Folders"
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
"LaunchCondition"
|
||||
{
|
||||
}
|
||||
"Locator"
|
||||
{
|
||||
}
|
||||
"MsiBootstrapper"
|
||||
{
|
||||
"LangId" = "3:2052"
|
||||
"RequiresElevation" = "11:FALSE"
|
||||
}
|
||||
"Product"
|
||||
{
|
||||
"Name" = "8:Microsoft Visual Studio"
|
||||
"ProductName" = "8:EI_Image_Viewer"
|
||||
"ProductCode" = "8:{E8F96E3C-EA54-429B-BB58-B5ED2D6FCA8C}"
|
||||
"PackageCode" = "8:{908AC8AE-E525-45D8-A456-9C695A3B4D9C}"
|
||||
"UpgradeCode" = "8:{DAEA1B25-CE0C-4ED7-A6E1-A0E32F09B34B}"
|
||||
"AspNetVersion" = "8:4.0.30319.0"
|
||||
"RestartWWWService" = "11:FALSE"
|
||||
"RemovePreviousVersions" = "11:FALSE"
|
||||
"DetectNewerInstalledVersion" = "11:TRUE"
|
||||
"InstallAllUsers" = "11:FALSE"
|
||||
"ProductVersion" = "8:1.0.0"
|
||||
"Manufacturer" = "8:微软中国"
|
||||
"ARPHELPTELEPHONE" = "8:"
|
||||
"ARPHELPLINK" = "8:"
|
||||
"Title" = "8:EI_Image_Viewer"
|
||||
"Subject" = "8:"
|
||||
"ARPCONTACT" = "8:微软中国"
|
||||
"Keywords" = "8:"
|
||||
"ARPCOMMENTS" = "8:"
|
||||
"ARPURLINFOABOUT" = "8:"
|
||||
"ARPPRODUCTICON" = "8:"
|
||||
"ARPIconIndex" = "3:0"
|
||||
"SearchPath" = "8:"
|
||||
"UseSystemSearchPath" = "11:TRUE"
|
||||
"TargetPlatform" = "3:0"
|
||||
"PreBuildEvent" = "8:"
|
||||
"PostBuildEvent" = "8:"
|
||||
"RunPostBuildEvent" = "3:0"
|
||||
}
|
||||
"Registry"
|
||||
{
|
||||
"HKLM"
|
||||
{
|
||||
"Keys"
|
||||
{
|
||||
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_4B3A8DDB66C14C26B1FDEB73E654D73E"
|
||||
{
|
||||
"Name" = "8:Software"
|
||||
"Condition" = "8:"
|
||||
"AlwaysCreate" = "11:FALSE"
|
||||
"DeleteAtUninstall" = "11:FALSE"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Keys"
|
||||
{
|
||||
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_D4DC14C1806A4415B3D158086D20A384"
|
||||
{
|
||||
"Name" = "8:[Manufacturer]"
|
||||
"Condition" = "8:"
|
||||
"AlwaysCreate" = "11:FALSE"
|
||||
"DeleteAtUninstall" = "11:FALSE"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Keys"
|
||||
{
|
||||
}
|
||||
"Values"
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
"Values"
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"HKCU"
|
||||
{
|
||||
"Keys"
|
||||
{
|
||||
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FDC39226C9AF424BA1A2EB9CB480C9AF"
|
||||
{
|
||||
"Name" = "8:Software"
|
||||
"Condition" = "8:"
|
||||
"AlwaysCreate" = "11:FALSE"
|
||||
"DeleteAtUninstall" = "11:FALSE"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Keys"
|
||||
{
|
||||
"{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_EA384AA6FD9B43348966A96518AFEDCB"
|
||||
{
|
||||
"Name" = "8:[Manufacturer]"
|
||||
"Condition" = "8:"
|
||||
"AlwaysCreate" = "11:FALSE"
|
||||
"DeleteAtUninstall" = "11:FALSE"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Keys"
|
||||
{
|
||||
}
|
||||
"Values"
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
"Values"
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"HKCR"
|
||||
{
|
||||
"Keys"
|
||||
{
|
||||
}
|
||||
}
|
||||
"HKU"
|
||||
{
|
||||
"Keys"
|
||||
{
|
||||
}
|
||||
}
|
||||
"HKPU"
|
||||
{
|
||||
"Keys"
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
"Sequences"
|
||||
{
|
||||
}
|
||||
"Shortcut"
|
||||
{
|
||||
"{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_36E629868FD94281A9512B653A68C76E"
|
||||
{
|
||||
"Name" = "8:Shortcut to 发布项 from Start (Active)"
|
||||
"Arguments" = "8:"
|
||||
"Description" = "8:"
|
||||
"ShowCmd" = "3:1"
|
||||
"IconIndex" = "3:0"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Target" = "8:_671ACE803849427ABF43662CDE6B54E3"
|
||||
"Folder" = "8:_FC6A2494EDBE4963A84EBD88E04B3F04"
|
||||
"WorkingFolder" = "8:_FC6A2494EDBE4963A84EBD88E04B3F04"
|
||||
"Icon" = "8:_6BD8B282CE934C3AAD3841638BE9D51E"
|
||||
"Feature" = "8:"
|
||||
}
|
||||
}
|
||||
"UserInterface"
|
||||
{
|
||||
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1CCA0CBF4AED4FC48560F2AF5AAD31B6"
|
||||
{
|
||||
"Name" = "8:#1900"
|
||||
"Sequence" = "3:2"
|
||||
"Attributes" = "3:1"
|
||||
"Dialogs"
|
||||
{
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_36E70F23303C475EAD3030D279A6D0AE"
|
||||
{
|
||||
"Sequence" = "3:200"
|
||||
"DisplayName" = "8:安装文件夹"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D5D84CAA84CE405B84FCD1F603BF5A04"
|
||||
{
|
||||
"Sequence" = "3:100"
|
||||
"DisplayName" = "8:欢迎使用"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
"CopyrightWarning"
|
||||
{
|
||||
"Name" = "8:CopyrightWarning"
|
||||
"DisplayName" = "8:#1002"
|
||||
"Description" = "8:#1102"
|
||||
"Type" = "3:3"
|
||||
"ContextData" = "8:"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:1"
|
||||
"Value" = "8:#1202"
|
||||
"DefaultValue" = "8:#1202"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
"Welcome"
|
||||
{
|
||||
"Name" = "8:Welcome"
|
||||
"DisplayName" = "8:#1003"
|
||||
"Description" = "8:#1103"
|
||||
"Type" = "3:3"
|
||||
"ContextData" = "8:"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:1"
|
||||
"Value" = "8:#1203"
|
||||
"DefaultValue" = "8:#1203"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F2AE58A5FFC9409F8C3BC02EC666A4E1"
|
||||
{
|
||||
"Sequence" = "3:300"
|
||||
"DisplayName" = "8:确认安装"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_621AF3658AF94FB7B1CDFF5DF1609491"
|
||||
{
|
||||
"Name" = "8:#1902"
|
||||
"Sequence" = "3:2"
|
||||
"Attributes" = "3:3"
|
||||
"Dialogs"
|
||||
{
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_818FD021D326496AB2F1D52C8713ACE1"
|
||||
{
|
||||
"Sequence" = "3:100"
|
||||
"DisplayName" = "8:已完成"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_8B8A18872BD040FF9FD618D775AFD701"
|
||||
{
|
||||
"Name" = "8:#1901"
|
||||
"Sequence" = "3:2"
|
||||
"Attributes" = "3:2"
|
||||
"Dialogs"
|
||||
{
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C476041D34EB4C48B4BBF6EE9B23EB0B"
|
||||
{
|
||||
"Sequence" = "3:100"
|
||||
"DisplayName" = "8:进度"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
"ShowProgress"
|
||||
{
|
||||
"Name" = "8:ShowProgress"
|
||||
"DisplayName" = "8:#1009"
|
||||
"Description" = "8:#1109"
|
||||
"Type" = "3:5"
|
||||
"ContextData" = "8:1;True=1;False=0"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:0"
|
||||
"Value" = "3:1"
|
||||
"DefaultValue" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_A83D160A087845238F7A677809EDA0C8"
|
||||
{
|
||||
"UseDynamicProperties" = "11:FALSE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
|
||||
}
|
||||
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_AA1E9CA25272498B836014BB47156D90"
|
||||
{
|
||||
"Name" = "8:#1901"
|
||||
"Sequence" = "3:1"
|
||||
"Attributes" = "3:2"
|
||||
"Dialogs"
|
||||
{
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_251EAFC6E38642FBB5C702BE6B1FDB30"
|
||||
{
|
||||
"Sequence" = "3:100"
|
||||
"DisplayName" = "8:进度"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
"ShowProgress"
|
||||
{
|
||||
"Name" = "8:ShowProgress"
|
||||
"DisplayName" = "8:#1009"
|
||||
"Description" = "8:#1109"
|
||||
"Type" = "3:5"
|
||||
"ContextData" = "8:1;True=1;False=0"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:0"
|
||||
"Value" = "3:1"
|
||||
"DefaultValue" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_C9A8427C4B4A483095D2544D9175A5E4"
|
||||
{
|
||||
"Name" = "8:#1900"
|
||||
"Sequence" = "3:1"
|
||||
"Attributes" = "3:1"
|
||||
"Dialogs"
|
||||
{
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_70E6B3E76711448496915BDC2763B21F"
|
||||
{
|
||||
"Sequence" = "3:100"
|
||||
"DisplayName" = "8:欢迎使用"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
"CopyrightWarning"
|
||||
{
|
||||
"Name" = "8:CopyrightWarning"
|
||||
"DisplayName" = "8:#1002"
|
||||
"Description" = "8:#1102"
|
||||
"Type" = "3:3"
|
||||
"ContextData" = "8:"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:1"
|
||||
"Value" = "8:#1202"
|
||||
"DefaultValue" = "8:#1202"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
"Welcome"
|
||||
{
|
||||
"Name" = "8:Welcome"
|
||||
"DisplayName" = "8:#1003"
|
||||
"Description" = "8:#1103"
|
||||
"Type" = "3:3"
|
||||
"ContextData" = "8:"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:1"
|
||||
"Value" = "8:#1203"
|
||||
"DefaultValue" = "8:#1203"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_978CF68169D34FF7A0C440DCE87C41F7"
|
||||
{
|
||||
"Sequence" = "3:300"
|
||||
"DisplayName" = "8:确认安装"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E17D627579F34787981DEE6B595B7F1E"
|
||||
{
|
||||
"Sequence" = "3:200"
|
||||
"DisplayName" = "8:安装文件夹"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
"InstallAllUsersVisible"
|
||||
{
|
||||
"Name" = "8:InstallAllUsersVisible"
|
||||
"DisplayName" = "8:#1059"
|
||||
"Description" = "8:#1159"
|
||||
"Type" = "3:5"
|
||||
"ContextData" = "8:1;True=1;False=0"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:0"
|
||||
"Value" = "3:1"
|
||||
"DefaultValue" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_CF08905C7B824DAA802D43F4223E1BA2"
|
||||
{
|
||||
"UseDynamicProperties" = "11:FALSE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
|
||||
}
|
||||
"{DF760B10-853B-4699-99F2-AFF7185B4A62}:_D2E0AB446E6241D8ABE6FD9CD0E01163"
|
||||
{
|
||||
"Name" = "8:#1902"
|
||||
"Sequence" = "3:1"
|
||||
"Attributes" = "3:3"
|
||||
"Dialogs"
|
||||
{
|
||||
"{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_315C6B4D72B74607BEDFF0BCFC8DD40F"
|
||||
{
|
||||
"Sequence" = "3:100"
|
||||
"DisplayName" = "8:已完成"
|
||||
"UseDynamicProperties" = "11:TRUE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
|
||||
"Properties"
|
||||
{
|
||||
"BannerBitmap"
|
||||
{
|
||||
"Name" = "8:BannerBitmap"
|
||||
"DisplayName" = "8:#1001"
|
||||
"Description" = "8:#1101"
|
||||
"Type" = "3:8"
|
||||
"ContextData" = "8:Bitmap"
|
||||
"Attributes" = "3:4"
|
||||
"Setting" = "3:1"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
"UpdateText"
|
||||
{
|
||||
"Name" = "8:UpdateText"
|
||||
"DisplayName" = "8:#1058"
|
||||
"Description" = "8:#1158"
|
||||
"Type" = "3:15"
|
||||
"ContextData" = "8:"
|
||||
"Attributes" = "3:0"
|
||||
"Setting" = "3:1"
|
||||
"Value" = "8:#1258"
|
||||
"DefaultValue" = "8:#1258"
|
||||
"UsePlugInResources" = "11:TRUE"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"MergeModule"
|
||||
{
|
||||
}
|
||||
"ProjectOutput"
|
||||
{
|
||||
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_671ACE803849427ABF43662CDE6B54E3"
|
||||
{
|
||||
"SourcePath" = "8:..\\Start\\obj\\Debug\\net6.0-windows\\apphost.exe"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_FC6A2494EDBE4963A84EBD88E04B3F04"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Vital" = "11:TRUE"
|
||||
"ReadOnly" = "11:FALSE"
|
||||
"Hidden" = "11:FALSE"
|
||||
"System" = "11:FALSE"
|
||||
"Permanent" = "11:FALSE"
|
||||
"SharedLegacy" = "11:FALSE"
|
||||
"PackageAs" = "3:1"
|
||||
"Register" = "3:1"
|
||||
"Exclude" = "11:FALSE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"IsolateTo" = "8:"
|
||||
"ProjectOutputGroupRegister" = "3:1"
|
||||
"OutputConfiguration" = "8:"
|
||||
"OutputGroupCanonicalName" = "8:PublishItems"
|
||||
"OutputProjectGuid" = "8:{D96F4B52-359C-43C9-8110-BAD1437F9280}"
|
||||
"ShowKeyOutput" = "11:TRUE"
|
||||
"ExcludeFilters"
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<ApplicationIcon>icons8-access-control-64.ico</ApplicationIcon>
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="icons8-access-control-64.ico" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,120 @@
|
|||
namespace EI_Image_Viewer_Activation
|
||||
{
|
||||
partial class Main
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
|
||||
label1 = new Label();
|
||||
label2 = new Label();
|
||||
codeTBox = new TextBox();
|
||||
activeSecreteTbox = new TextBox();
|
||||
btnCopy = new Button();
|
||||
SuspendLayout();
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.AutoSize = true;
|
||||
label1.Font = new Font("Microsoft YaHei UI", 15F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
label1.Location = new Point(54, 69);
|
||||
label1.Margin = new Padding(4, 0, 4, 0);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(72, 27);
|
||||
label1.TabIndex = 0;
|
||||
label1.Text = "机器码";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
label2.AutoSize = true;
|
||||
label2.Font = new Font("Microsoft YaHei UI", 15F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
label2.Location = new Point(54, 183);
|
||||
label2.Margin = new Padding(4, 0, 4, 0);
|
||||
label2.Name = "label2";
|
||||
label2.Size = new Size(72, 27);
|
||||
label2.TabIndex = 1;
|
||||
label2.Text = "激活码";
|
||||
//
|
||||
// codeTBox
|
||||
//
|
||||
codeTBox.Font = new Font("Microsoft YaHei UI", 15F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
codeTBox.Location = new Point(168, 69);
|
||||
codeTBox.Margin = new Padding(4);
|
||||
codeTBox.Name = "codeTBox";
|
||||
codeTBox.Size = new Size(424, 33);
|
||||
codeTBox.TabIndex = 2;
|
||||
codeTBox.TextChanged += codeTBox_TextChanged;
|
||||
//
|
||||
// activeSecreteTbox
|
||||
//
|
||||
activeSecreteTbox.Enabled = false;
|
||||
activeSecreteTbox.Font = new Font("Microsoft YaHei UI", 15F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
activeSecreteTbox.Location = new Point(168, 183);
|
||||
activeSecreteTbox.Margin = new Padding(4);
|
||||
activeSecreteTbox.Name = "activeSecreteTbox";
|
||||
activeSecreteTbox.Size = new Size(424, 33);
|
||||
activeSecreteTbox.TabIndex = 3;
|
||||
//
|
||||
// btnCopy
|
||||
//
|
||||
btnCopy.Font = new Font("Microsoft YaHei UI", 15F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
btnCopy.Location = new Point(619, 178);
|
||||
btnCopy.Margin = new Padding(4);
|
||||
btnCopy.Name = "btnCopy";
|
||||
btnCopy.Size = new Size(144, 41);
|
||||
btnCopy.TabIndex = 4;
|
||||
btnCopy.Text = "拷贝";
|
||||
btnCopy.UseVisualStyleBackColor = true;
|
||||
btnCopy.Click += btnCopy_Click;
|
||||
//
|
||||
// Main
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(10F, 21F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(818, 498);
|
||||
Controls.Add(btnCopy);
|
||||
Controls.Add(activeSecreteTbox);
|
||||
Controls.Add(codeTBox);
|
||||
Controls.Add(label2);
|
||||
Controls.Add(label1);
|
||||
Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
Icon = (Icon)resources.GetObject("$this.Icon");
|
||||
Margin = new Padding(4);
|
||||
Name = "Main";
|
||||
Text = "EI_Image_viewer Activation";
|
||||
ResumeLayout(false);
|
||||
PerformLayout();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private Label label1;
|
||||
private Label label2;
|
||||
private TextBox codeTBox;
|
||||
private TextBox activeSecreteTbox;
|
||||
private Button btnCopy;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace EI_Image_Viewer_Activation
|
||||
{
|
||||
public partial class Main : Form
|
||||
{
|
||||
public Main()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void btnCopy_Click(object sender, EventArgs e)
|
||||
{
|
||||
Clipboard.SetText(activeSecreteTbox.Text);
|
||||
|
||||
MessageBox.Show("拷贝成功!");
|
||||
}
|
||||
|
||||
private void codeTBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.activeSecreteTbox.Text = Md5($"{this.codeTBox.Text.Trim()}_XINGCANG");
|
||||
}
|
||||
|
||||
public static string Md5(string target)
|
||||
{
|
||||
using (MD5 md5 = MD5.Create())
|
||||
{ // MD5非线程安全
|
||||
byte[] bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(target));
|
||||
StringBuilder sb = new StringBuilder(32);
|
||||
for (int i = 0; i < bytes.Length; ++i)
|
||||
sb.Append(bytes[i].ToString("x2"));
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,348 @@
|
|||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAABMLAAATCwAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVVaoDdW+EYnVvhGJVVaoDAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1bYU/dW6Dz3Ru
|
||||
g/J0boPydW6Dz3VthT8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZt
|
||||
fxx0b4SidG6E/XRvhKJ0an8YcnJ/FHVug5F1b4P8dG+Es3NsgyEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAf2Z/CnVvg4B1boP2dW+EynRvhjkAAAAAAAAAAAAAAAAAAAAAdXCEMnRvhMN0boT5dW6DkXV1
|
||||
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
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNugjN1boPEdW6D9nRug4h1dYkNAAAAAAAAAADw4vAS8ubrkfHm
|
||||
6vvx5ur98ufqovPn5xYAAAAAAAAAAH9mfwp1b4R3dG+E83Rug8t2bYM6AAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AXVvhFV1b4TgdW6D5HRv
|
||||
hF4AAP8BAAAAAAAAAADy5uwp8ubsKQAAAAAAAAAAAAAAAHNwhE10boPfdG+E5XVuhGZ/f38CAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAf2Z/CnVvg4B1boP2dW+EynRvhjkAAAAAAAAAAAAAAAAAAAAAdXCEMnRug8J0boT5dW6DkXV1
|
||||
iQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdm1/HHRvhKJ0boT9dG+EonRqfxhycn8UdW6DkXVv
|
||||
g/x0b4Szc2yDIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdW2FP3Vu
|
||||
g890boPydG6D8nVug891bYU/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAABVVaoDdW+EYnVvhGJVVaoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA/////////////////////////////////////////////////////////////////////D//
|
||||
///////4H////////+AH////////g8H///////4GcH///////BgYP//////wYAYP/////8HBg4P/////
|
||||
gwfgwf////4MH/gwf///+DB//gwf///g4P//Bwf//8GD///Bg///hg4AAHBh//+MHgAAeBH//4h+AAB+
|
||||
Ef//if5//n+R//+J/n/+f5H//4n+fn5/kf//if5+fn+R//+J/n5+f5H//4n+fn5/kf//if58Pn+R//+J
|
||||
/ngef5H//4n+eB5/kf//if55nn+R//+J/ngef5H//4n+fD5/kf//if5//n+R//+J/n/+f5H//4n+f/5/
|
||||
kf//if4AAH+R//+J/gAAf5H//4n/z/P/kf//if/P8/+R//+J/8/z/5H//4h/z/P+Ef//jB/H4/gR//+G
|
||||
D8PD8GH//8GD4AfBg///4ODwDwcH///4MH5+DB////4MH/gwf////4MH4MH/////wcGDg//////wYAYP
|
||||
//////wYGD///////gZwf///////g8H////////gB/////////gf/////////D//////////////////
|
||||
//////////////////////////////////////////////////8=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,17 @@
|
|||
namespace EI_Image_Viewer_Activation
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
// To customize application configuration such as set high DPI settings or default font,
|
||||
// see https://aka.ms/applicationconfiguration.
|
||||
ApplicationConfiguration.Initialize();
|
||||
Application.Run(new Main());
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
|
@ -11,80 +11,174 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Application", "
|
|||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Domain.Share", "IRaCIS.Core.Domain.Share\IRaCIS.Core.Domain.Share.csproj", "{7CBC76F5-3817-46B7-8D9D-79253A89B578}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.JWT.RS256", "ZhiZhunAuthenticationCenter\IRaCIS.JWT.RS256.csproj", "{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Test", "IRaCIS.Core.Test\IRaCIS.Core.Test.csproj", "{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Infra.EFCore", "IRaCIS.Core.Infra.EFCore\IRaCIS.Core.Infra.EFCore.csproj", "{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.Infrastructure", "IRaCIS.Core.Infrastructure\IRaCIS.Core.Infrastructure.csproj", "{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IRaCIS.AuthenticationCenter", "IRaCIS.AuthenticationCenter", "{481329D6-B8A0-491F-A398-1DF66A0FBB62}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EI_Image_Viewer_Installer", "Start\EI_Image_Viewer_Installer.csproj", "{D96F4B52-359C-43C9-8110-BAD1437F9280}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.IdentityServer4", "IRaCIS.Core.IdentityServer4\IRaCIS.Core.IdentityServer4.csproj", "{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Install", "Install\Install.csproj", "{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IRaCIS.Core.IdentityServer4.MVC", "IRaCIS.Core.IdentityServer4.MVC\IRaCIS.Core.IdentityServer4.MVC.csproj", "{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnInstall", "UnInstall\UnInstall.csproj", "{60B9AC72-5744-4517-93A5-A1ECD573A529}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F852ABFB-88AC-48BE-B876-2228BE2373D6}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.editorconfig = .editorconfig
|
||||
EndProjectSection
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EI_Image_Viewer_Activation", "EI_Image_Viewer_Activation\EI_Image_Viewer_Activation.csproj", "{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PublishSite", "PublishSite\PublishSite.csproj", "{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{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|x64.ActiveCfg = Debug|x64
|
||||
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Debug|x64.Build.0 = Debug|x64
|
||||
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|x64.ActiveCfg = Release|x64
|
||||
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|x64.Build.0 = Release|x64
|
||||
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{F15CE209-6039-46A6-AE7F-E81ADA795F28}.Release|x86.Build.0 = Release|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|x64.ActiveCfg = Debug|x64
|
||||
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Debug|x64.Build.0 = Debug|x64
|
||||
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|x64.ActiveCfg = Release|x64
|
||||
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|x64.Build.0 = Release|x64
|
||||
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D4DF27AC-3739-4264-BFB8-AED6DC2B84C7}.Release|x86.Build.0 = Release|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|x64.ActiveCfg = Debug|x64
|
||||
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Debug|x64.Build.0 = Debug|x64
|
||||
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|x64.ActiveCfg = Release|x64
|
||||
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|x64.Build.0 = Release|x64
|
||||
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{037E7DE9-0AE2-4987-8C69-F51D5B9CA19D}.Release|x86.Build.0 = Release|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|x64.ActiveCfg = Debug|x64
|
||||
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Debug|x64.Build.0 = Debug|x64
|
||||
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|x64.ActiveCfg = Release|x64
|
||||
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|x64.Build.0 = Release|x64
|
||||
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{7CBC76F5-3817-46B7-8D9D-79253A89B578}.Release|x86.Build.0 = Release|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|x64.ActiveCfg = Debug|x64
|
||||
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|x64.ActiveCfg = Release|x64
|
||||
{3292B2B4-6E8A-43AA-84C0-AB4A391E8A2A}.Release|x86.ActiveCfg = Release|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|x64.ActiveCfg = Debug|x64
|
||||
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Debug|x64.Build.0 = Debug|x64
|
||||
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|x64.ActiveCfg = Release|x64
|
||||
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|x64.Build.0 = Release|x64
|
||||
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6D8115E5-84D6-424B-8F8D-0C2D40347A8C}.Release|x86.Build.0 = Release|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|x64.ActiveCfg = Debug|x64
|
||||
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Debug|x64.Build.0 = Debug|x64
|
||||
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|x64.ActiveCfg = Release|x64
|
||||
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|x64.Build.0 = Release|x64
|
||||
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{07EED0F8-08E6-46F3-ACBE-17BC1391BD4C}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Debug|x64.Build.0 = Debug|x64
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Release|x64.ActiveCfg = Release|x64
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Release|x64.Build.0 = Release|x64
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D96F4B52-359C-43C9-8110-BAD1437F9280}.Release|x86.Build.0 = Release|Any CPU
|
||||
{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|x64.ActiveCfg = Debug|x64
|
||||
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Debug|x64.Build.0 = Debug|x64
|
||||
{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|x64.ActiveCfg = Release|x64
|
||||
{F5820DF0-DE23-4F4A-8D49-7E22F67B784D}.Release|x64.Build.0 = Release|x64
|
||||
{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|x64.ActiveCfg = Debug|x64
|
||||
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Debug|x64.Build.0 = Debug|x64
|
||||
{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|x64.ActiveCfg = Release|x64
|
||||
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Release|x64.Build.0 = Release|x64
|
||||
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{60B9AC72-5744-4517-93A5-A1ECD573A529}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Debug|x64.Build.0 = Debug|x64
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Release|x64.ActiveCfg = Release|x64
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Release|x64.Build.0 = Release|x64
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1D8AC441-D578-4B38-BCEE-686BD5D59E5A}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Debug|x64.Build.0 = Debug|x64
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Release|x64.ActiveCfg = Release|x64
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Release|x64.Build.0 = Release|x64
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1CC3F0F8-8701-4F49-837B-DBFDAC2C19ED}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{3EF210EE-D5D1-4C93-A8FA-E0DB1852BD39} = {481329D6-B8A0-491F-A398-1DF66A0FBB62}
|
||||
{C3DD48CF-B8B3-40F6-9BDB-B7C7F0851674} = {481329D6-B8A0-491F-A398-1DF66A0FBB62}
|
||||
{F621ADD6-94E8-4A4B-998E-25B8EF15D39C} = {481329D6-B8A0-491F-A398-1DF66A0FBB62}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {BCC2EB19-3914-489B-B1D7-B7303E0218A3}
|
||||
EndGlobalSection
|
||||
|
|
|
@ -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
|
||||
}
|
||||
]
|
||||
}
|
|
@ -31,19 +31,19 @@ namespace IRaCIS.Core.API.Controllers.Special
|
|||
}
|
||||
|
||||
|
||||
//[TrialAudit(AuditType.TrialAudit, AuditOptType.AddOrUpdateTrial)]
|
||||
////[TrialAudit(AuditType.TrialAudit, AuditOptType.AddOrUpdateTrial)]
|
||||
|
||||
/// <summary> 添加实验项目-返回新增Id[AUTH]</summary>
|
||||
/// <returns>新记录Id</returns>
|
||||
[HttpPost, Route("Inspection/trial/addOrUpdateTrial")]
|
||||
[UnitOfWork]
|
||||
///// <summary> 添加实验项目-返回新增Id[AUTH]</summary>
|
||||
///// <returns>新记录Id</returns>
|
||||
//[HttpPost, Route("Inspection/trial/addOrUpdateTrial")]
|
||||
//[UnitOfWork]
|
||||
|
||||
public async Task<IResponseOutput> AddOrUpdateTrialInspection(DataInspectionDto<TrialCommand> opt)
|
||||
{
|
||||
var fun =await AddOrUpdateTrial(opt.Data);
|
||||
//public async Task<IResponseOutput> AddOrUpdateTrialInspection(DataInspectionDto<TrialCommand> opt)
|
||||
//{
|
||||
// var fun =await AddOrUpdateTrial(opt.Data);
|
||||
|
||||
return fun;
|
||||
}
|
||||
// return fun;
|
||||
//}
|
||||
|
||||
|
||||
/// <summary> 添加实验项目-返回新增Id[AUTH]</summary>
|
||||
|
@ -53,10 +53,10 @@ namespace IRaCIS.Core.API.Controllers.Special
|
|||
[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AddOrUpdateTrial", "BeforeOngoingCantOpt", "AfterStopCannNotOpt" })]
|
||||
public async Task<IResponseOutput<Trial>> AddOrUpdateTrial(TrialCommand param)
|
||||
public async Task<IResponseOutput<Trial>> AddOrUpdateTrial(TrialCommand param, [FromServices] ITrialConfigService _ITrialConfigService)
|
||||
{
|
||||
var userId = Guid.Parse(User.FindFirst("id").Value);
|
||||
var result = await _trialService.AddOrUpdateTrial(param);
|
||||
var result = await _trialService.AddOrUpdateTrial(param, _ITrialConfigService);
|
||||
|
||||
if (_trialService.TrialExpeditedChange)
|
||||
{
|
||||
|
|
|
@ -329,7 +329,7 @@ namespace IRaCIS.Core.API.Controllers
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// CRC RequestToQC 批量提交
|
||||
/// IC RequestToQC 批量提交
|
||||
/// </summary>
|
||||
/// <param name="opt"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -392,7 +392,7 @@ namespace IRaCIS.Core.API.Controllers
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// CRC 设置已经重传完成
|
||||
/// IC 设置已经重传完成
|
||||
/// </summary>
|
||||
[HttpPost, Route("Inspection/QCOperation/SetReuploadFinished")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
|
|
|
@ -385,7 +385,7 @@ namespace IRaCIS.Core.API.Controllers
|
|||
if (archivedStudyIds.Count > 0) // 上传成功,处理逻辑
|
||||
{
|
||||
|
||||
// 同一个访视 多个线程上传处理 批量保存 可能造成死锁 https://www.cnblogs.com/johnblogs/p/9945767.html
|
||||
// 同一个检查批次 多个线程上传处理 批量保存 可能造成死锁 https://www.cnblogs.com/johnblogs/p/9945767.html
|
||||
|
||||
await _dicomArchiveService.DicomDBDataSaveChange();
|
||||
|
||||
|
@ -434,7 +434,6 @@ namespace IRaCIS.Core.API.Controllers
|
|||
/// <returns></returns>
|
||||
[HttpPost("ClinicalData/UploadVisitClinicalData/{trialId:guid}/{subjectVisitId:guid}")]
|
||||
[DisableRequestSizeLimit]
|
||||
[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
|
||||
public async Task<IResponseOutput> UploadVisitClinicalData(Guid subjectVisitId)
|
||||
|
@ -672,7 +671,6 @@ namespace IRaCIS.Core.API.Controllers
|
|||
[RequestSizeLimit(1_073_741_824)]
|
||||
[HttpPost("NoneDicomStudy/UploadNoneDicomFile/{trialId:guid}/{subjectVisitId:guid}/{noneDicomStudyId:guid}/{studyMonitorId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||
public async Task<IResponseOutput> UploadNoneDicomFile(IFormCollection formCollection, Guid subjectVisitId, Guid noneDicomStudyId, Guid studyMonitorId,
|
||||
[FromServices] IRepository<NoneDicomStudy> _noneDicomStudyRepository, [FromServices] IRepository<StudyMonitor> _studyMonitorRepository)
|
||||
{
|
||||
|
|
|
@ -6,10 +6,14 @@
|
|||
<UserSecretsId>354572d4-9e15-4099-807c-63a2d29ff9f2</UserSecretsId>
|
||||
<LangVersion>default</LangVersion>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
<Version>1.0.1.001</Version>
|
||||
<Product>IRC影像系统 (EICS)</Product>
|
||||
<Copyright>上海展影医疗科技有限公司版权所有</Copyright>
|
||||
<Company>上海展影医疗科技有限公司</Company>
|
||||
<Copyright>武汉行藏科技有限公司版权所有</Copyright>
|
||||
<AssemblyVersion></AssemblyVersion>
|
||||
<FileVersion>1.0.0.001</FileVersion>
|
||||
<Product>医学影像处理软件</Product>
|
||||
<Version>1.0.0.001</Version>
|
||||
<ApplicationIcon>favicon.ico</ApplicationIcon>
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
<AssemblyName>EI_Image_Viewer</AssemblyName>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@ -18,12 +22,36 @@
|
|||
<OutputPath>..\bin\</OutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<DocumentationFile>.\IRaCIS.Core.API.xml</DocumentationFile>
|
||||
<NoWarn>1701;1702;1591;</NoWarn>
|
||||
<OutputPath>..\bin\</OutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
|
||||
<DocumentationFile>.\IRaCIS.Core.API.xml</DocumentationFile>
|
||||
<NoWarn>1701;1702;1591;</NoWarn>
|
||||
<OutputPath>..\bin\</OutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<DocumentationFile>bin\Release\IRaCIS.Core.API.xml</DocumentationFile>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<NoWarn>1701;1702;1591</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<DocumentationFile>bin\Release\IRaCIS.Core.API.xml</DocumentationFile>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<NoWarn>1701;1702;1591</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
|
||||
<DocumentationFile>bin\Release\IRaCIS.Core.API.xml</DocumentationFile>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<NoWarn>1701;1702;1591</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="wwwroot\**" />
|
||||
<EmbeddedResource Remove="UploadFile\**" />
|
||||
|
@ -48,6 +76,10 @@
|
|||
<ItemGroup>
|
||||
<ApplicationDefinition Include="GrpcToken.proto" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="favicon.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="wwwroot\swagger\ui\abp.js">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
|
@ -86,6 +118,8 @@
|
|||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.17.0" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.10" />
|
||||
<PackageReference Include="Quartz.Extensions.DependencyInjection" Version="3.6.2" />
|
||||
<PackageReference Include="Quartz.Extensions.Hosting" Version="3.6.2" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="6.0.1" />
|
||||
<PackageReference Include="Serilog.Enrichers.ClientInfo" Version="1.2.0" />
|
||||
<PackageReference Include="Serilog.Sinks.Email" Version="2.4.0" />
|
||||
|
@ -103,9 +137,6 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Update="NLog.config">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Update="wwwroot\EmailTemplate\AdminResetUser.html">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
|
@ -142,7 +173,7 @@
|
|||
<Folder Include="Properties\PublishProfiles\" />
|
||||
</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>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>IRaCIS.Core.API</name>
|
||||
<name>EI_Image_Viewer</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="M:EasyCaching.Demo.Interceptors.Controllers.ErrorController.Error(System.Int32)">
|
||||
|
@ -32,11 +32,7 @@
|
|||
<member name="M:IRaCIS.Api.Controllers.ExtraController.Login(IRaCIS.Application.Contracts.UserLoginDTO,EasyCaching.Core.IEasyCachingProvider,IRaCIS.Application.Services.IUserService,IRaCIS.Core.Application.Auth.ITokenService,Microsoft.Extensions.Configuration.IConfiguration)">
|
||||
<summary> 系统用户登录接口[New] </summary>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateTrialInspection(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Application.Contracts.TrialCommand})">
|
||||
<summary> 添加实验项目-返回新增Id[AUTH]</summary>
|
||||
<returns>新记录Id</returns>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateTrial(IRaCIS.Application.Contracts.TrialCommand)">
|
||||
<member name="M:IRaCIS.Core.API.Controllers.Special.FinancialChangeController.AddOrUpdateTrial(IRaCIS.Application.Contracts.TrialCommand,IRaCIS.Application.Interfaces.ITrialConfigService)">
|
||||
<summary> 添加实验项目-返回新增Id[AUTH]</summary>
|
||||
<param name="param"></param>
|
||||
<returns>新记录Id</returns>
|
||||
|
@ -175,7 +171,7 @@
|
|||
</member>
|
||||
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.CRCRequestToQC(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Contracts.CRCRequestToQCCommand})">
|
||||
<summary>
|
||||
CRC RequestToQC 批量提交
|
||||
IC RequestToQC 批量提交
|
||||
</summary>
|
||||
<param name="opt"></param>
|
||||
<returns></returns>
|
||||
|
@ -199,7 +195,7 @@
|
|||
</member>
|
||||
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.SetReuploadFinished(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Contracts.CRCReuploadFinishedCommand})">
|
||||
<summary>
|
||||
CRC 设置已经重传完成
|
||||
IC 设置已经重传完成
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:IRaCIS.Core.API.Controllers.InspectionController.UpdateTrialState(IRaCIS.Core.Application.Service.Inspection.DTO.DataInspectionDto{IRaCIS.Core.Application.Service.Inspection.DTO.UpdateTrialStateDto})">
|
||||
|
|
|
@ -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>
|
|
@ -9,6 +9,16 @@ using IRaCIS.Core.Application.MediatR.Handlers;
|
|||
using System.Threading.Tasks;
|
||||
using MassTransit;
|
||||
using MassTransit.NewIdProviders;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Linq;
|
||||
using System.Text.Json.Nodes;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using IRaCIS.Core.Infra.EFCore;
|
||||
using Microsoft.Data.SqlClient;
|
||||
|
||||
namespace IRaCIS.Core.API
|
||||
{
|
||||
|
@ -17,6 +27,9 @@ namespace IRaCIS.Core.API
|
|||
public readonly string environment;
|
||||
public static async Task Main(string[] args)
|
||||
{
|
||||
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
//以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数)
|
||||
|
@ -59,6 +72,59 @@ namespace IRaCIS.Core.API
|
|||
//// Serilog
|
||||
SerilogExtension.AddSerilogSetup(enviromentName, host.Services);
|
||||
|
||||
|
||||
|
||||
#region 认证程序
|
||||
|
||||
if (!File.Exists($@"C:\ProgramData\.xingcang\config.json"))
|
||||
{
|
||||
Console.WriteLine("当前未注册");
|
||||
Log.Logger.Error("当前未注册");
|
||||
Console.ReadLine();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
var json = File.ReadAllText($@"C:\ProgramData\.xingcang\config.json");
|
||||
|
||||
JObject jsonObject = JObject.Parse(json);
|
||||
|
||||
var key = jsonObject["key"].ToString();
|
||||
|
||||
var value = jsonObject["value"].ToString();
|
||||
|
||||
|
||||
var physicalAddressList = NetworkInterface.GetAllNetworkInterfaces().Select(t => t.GetPhysicalAddress().ToString());
|
||||
|
||||
// 判断文件里面的机器码是否是本机的
|
||||
if (!physicalAddressList.Contains(key))
|
||||
{
|
||||
Console.WriteLine("机器码和本机不对应");
|
||||
Log.Logger.Error("机器码和本机不对应");
|
||||
Console.ReadLine();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
var secrete = MD5Helper.Md5($"{key}_XINGCANG");
|
||||
|
||||
if (value != secrete)
|
||||
{
|
||||
Console.WriteLine("机器码和注册码不匹配");
|
||||
Log.Logger.Error("机器码和注册码不匹配");
|
||||
Console.ReadLine();
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
//缓存项目的状态 匿名化数据
|
||||
await InitCache(host);
|
||||
|
||||
|
@ -77,43 +143,6 @@ namespace IRaCIS.Core.API
|
|||
|
||||
|
||||
|
||||
#region Nlog ·ÏÆú
|
||||
//var logger = NLog.Web.NLogBuilder.ConfigureNLog("NLog.config").GetCurrentClassLogger();
|
||||
//try
|
||||
//{
|
||||
// var ihostBuilder = CreateHostBuilder(args);
|
||||
|
||||
// ihostBuilder.UseEnvironment(environment);
|
||||
|
||||
// ihostBuilder.ConfigureAppConfiguration((hostContext, config) =>
|
||||
// {
|
||||
|
||||
// //Console.WriteLine(hostContext.HostingEnvironment.EnvironmentName);
|
||||
// config.AddJsonFile("appsettings.json", false, true)
|
||||
// .AddJsonFile($"appsettings.{environment}.json", false, true);
|
||||
// });
|
||||
|
||||
// var host = ihostBuilder.Build();
|
||||
|
||||
// CacheTrialStatus(host);
|
||||
|
||||
// host.Run();
|
||||
|
||||
//}
|
||||
//catch (Exception exception)
|
||||
//{
|
||||
// //NLog: catch setup errors
|
||||
// logger.Error(exception, "Stopped program because of exception");
|
||||
//}
|
||||
//finally
|
||||
//{
|
||||
// // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
|
||||
// NLog.LogManager.Shutdown();
|
||||
//}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -115,7 +115,8 @@ namespace IRaCIS.Core.API
|
|||
//services.AddDistributedMemoryCache();
|
||||
|
||||
// hangfire 定时任务框架 有界面,更友好~
|
||||
services.AddhangfireSetup(_configuration);
|
||||
//services.AddhangfireSetup(_configuration);
|
||||
|
||||
// QuartZ 定时任务框架 使用了hangfire 暂时不用,后续需要可以打开,已经配好
|
||||
services.AddQuartZSetup(_configuration);
|
||||
|
||||
|
@ -172,7 +173,6 @@ namespace IRaCIS.Core.API
|
|||
//响应压缩
|
||||
app.UseResponseCompression();
|
||||
|
||||
//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
|
||||
|
||||
//不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication.
|
||||
app.UseStaticFiles();
|
||||
|
@ -181,14 +181,9 @@ namespace IRaCIS.Core.API
|
|||
//LogDashboard
|
||||
app.UseLogDashboard("/LogDashboard");
|
||||
|
||||
//hangfire
|
||||
app.UseHangfireConfig(env);
|
||||
////hangfire
|
||||
//app.UseHangfireConfig(env);
|
||||
|
||||
////暂时废弃
|
||||
//app.UseHttpReports();
|
||||
|
||||
////限流 中间件
|
||||
//app.UseIpRateLimiting();
|
||||
|
||||
|
||||
|
||||
|
@ -202,7 +197,6 @@ namespace IRaCIS.Core.API
|
|||
}
|
||||
Console.WriteLine("当前环境: " + env.EnvironmentName);
|
||||
|
||||
//app.UseMiddleware<AuthMiddleware>();
|
||||
|
||||
// 特殊异常处理 比如 404
|
||||
app.UseStatusCodePagesWithReExecute("/Error/{0}");
|
||||
|
@ -220,17 +214,9 @@ namespace IRaCIS.Core.API
|
|||
|
||||
app.UseIRacisHostStaticFileStore(env);
|
||||
|
||||
|
||||
|
||||
app.UseAuthentication();
|
||||
//app.UseJwtBearerQueryString();
|
||||
app.UseAuthorization();
|
||||
|
||||
////文件伺服 必须带Token 访问
|
||||
////app.UseIRacisHostStaticFileStore(env);
|
||||
|
||||
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
|
||||
|
|
|
@ -12,13 +12,13 @@ namespace IRaCIS.Core.API
|
|||
{
|
||||
services.AddAuthorization(options =>
|
||||
{
|
||||
//影像质控策略 只允许 CRC IQC进行操作
|
||||
//影像质控策略 只允许 IC IQC进行操作
|
||||
options.AddPolicy(IRaCISPolicy.CRC_IQC, policyBuilder =>
|
||||
{
|
||||
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ClinicalResearchCoordinator).ToString(), ((int)UserTypeEnum.IQC).ToString());
|
||||
});
|
||||
|
||||
//一致性核查策略 只允许 CRC PM APM 进行操作
|
||||
//一致性核查策略 只允许 IC PM APM 进行操作
|
||||
options.AddPolicy(IRaCISPolicy.PM_APM_CRC, policyBuilder =>
|
||||
{
|
||||
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ProjectManager).ToString(), ((int)UserTypeEnum.ClinicalResearchCoordinator).ToString(), ((int)UserTypeEnum.APM).ToString());
|
||||
|
@ -47,10 +47,6 @@ namespace IRaCIS.Core.API
|
|||
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.IQC).ToString());
|
||||
});
|
||||
|
||||
options.AddPolicy(IRaCISPolicy.CRC, policyBuilder =>
|
||||
{
|
||||
policyBuilder.RequireClaim("userTypeEnumInt", ((int)UserTypeEnum.ClinicalResearchCoordinator).ToString());
|
||||
});
|
||||
|
||||
options.AddPolicy(IRaCISPolicy.PM_APM_CRC_QC, policyBuilder =>
|
||||
{
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
|
||||
using IRaCIS.Application.Services.BackGroundJob;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Quartz;
|
||||
|
||||
namespace IRaCIS.Core.API
|
||||
{
|
||||
|
@ -8,37 +10,35 @@ namespace IRaCIS.Core.API
|
|||
{
|
||||
public static void AddQuartZSetup(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
//services.AddTransient<CacheTrialStatusQuartZJob>();
|
||||
services.AddTransient<CacheTrialStatusQuartZJob>();
|
||||
|
||||
//services.AddQuartz(q =>
|
||||
//{
|
||||
// // base quartz scheduler, job and trigger configuration
|
||||
services.AddQuartz(q =>
|
||||
{
|
||||
// base quartz scheduler, job and trigger configuration
|
||||
|
||||
// // as of 3.3.2 this also injects scoped services (like EF DbContext) without problems
|
||||
// q.UseMicrosoftDependencyInjectionJobFactory();
|
||||
// as of 3.3.2 this also injects scoped services (like EF DbContext) without problems
|
||||
q.UseMicrosoftDependencyInjectionJobFactory();
|
||||
|
||||
// // 基本Quartz调度器、作业和触发器配置
|
||||
// var jobKey = new JobKey("RegularTrialWork", "regularWorkGroup");
|
||||
// q.AddJob<CacheTrialStatusQuartZJob>(jobKey, j => j
|
||||
// .WithDescription("Trial regular work")
|
||||
// );
|
||||
// q.AddTrigger(t => t
|
||||
// .WithIdentity("TrialStatusTrigger")
|
||||
// .ForJob(jobKey)
|
||||
// //.StartNow()
|
||||
// //.WithSimpleSchedule(x => x.WithInterval(TimeSpan.FromSeconds(15))//开始秒数 15s
|
||||
// // .RepeatForever())//持续工作
|
||||
// .WithCronSchedule("0 0 0/2 * * ?")//每小时执行一次
|
||||
// .WithDescription("My regular trial work trigger")
|
||||
// );
|
||||
//});
|
||||
// 基本Quartz调度器、作业和触发器配置
|
||||
var jobKey = new JobKey("RegularTrialWork", "regularWorkGroup");
|
||||
q.AddJob<CacheTrialStatusQuartZJob>(jobKey, j => j
|
||||
.WithDescription("Trial regular work")
|
||||
);
|
||||
q.AddTrigger(t => t
|
||||
.WithIdentity("TrialStatusTrigger")
|
||||
.ForJob(jobKey)
|
||||
|
||||
//// ASP.NET Core hosting
|
||||
//services.AddQuartzServer(options =>
|
||||
//{
|
||||
// // when shutting down we want jobs to complete gracefully
|
||||
// options.WaitForJobsToComplete = true;
|
||||
//});
|
||||
.WithCronSchedule("0 0 * * * ?")//每小时执行一次
|
||||
.WithDescription("My regular trial work trigger")
|
||||
);
|
||||
});
|
||||
|
||||
// ASP.NET Core hosting
|
||||
services.AddQuartzHostedService(options =>
|
||||
{
|
||||
// when shutting down we want jobs to complete gracefully
|
||||
options.WaitForJobsToComplete = true;
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -114,9 +114,11 @@ namespace IRaCIS.Core.API
|
|||
//注意localhost:8001/swagger是访问不到的,去launchSettings.json把launchUrl去掉,如果你想换一个路径,直接写名字即可,比如直接写c.Route = "doc";
|
||||
//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;
|
||||
|
||||
|
|
|
@ -7,21 +7,14 @@
|
|||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"RemoteNew": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_Certificate;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true",
|
||||
"Hangfire": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Hangfire_IRaCIS;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true"
|
||||
|
||||
"RemoteNew": "Server=localhost;Database=IRaCIS;User ID=sa;Password=123456;TrustServerCertificate=true"
|
||||
},
|
||||
"BasicSystemConfig": {
|
||||
|
||||
"OpenUserComplexPassword": false,
|
||||
|
||||
"OpenSignDocumentBeforeWork": false,
|
||||
|
||||
"OpenUserComplexPassword": true,
|
||||
"OpenSignDocumentBeforeWork": true,
|
||||
"OpenTrialRelationDelete": true,
|
||||
|
||||
"OpenLoginLimit": false
|
||||
"OpenLoginLimit": true
|
||||
},
|
||||
|
||||
"SystemEmailSendConfig": {
|
||||
"Port": 465,
|
||||
"Host": "smtp.qiye.aliyun.com",
|
||||
|
@ -29,5 +22,4 @@
|
|||
"FromName": "Test_IRC",
|
||||
"AuthorizationCode": "SHzyyl2021"
|
||||
}
|
||||
|
||||
}
|
|
@ -7,9 +7,7 @@
|
|||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"RemoteNew": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_New_Tet;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true",
|
||||
"Hangfire": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Hangfire_IRaCIS;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true"
|
||||
|
||||
"RemoteNew": "Server=.;Database=IRaCIS;Trusted_Connection=True;TrustServerCertificate=true"
|
||||
},
|
||||
"BasicSystemConfig": {
|
||||
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
},
|
||||
//"RootUrl": "http://123.56.181.144:8060/",
|
||||
"ConnectionStrings": {
|
||||
"RemoteNew": "Server=101.132.193.237,1433;Database=IRaCIS.Production;User ID=sa;Password=zhanying2021;TrustServerCertificate=true",
|
||||
"Hangfire": "Server=101.132.193.237,1433;Database=Hangfire.IRaCIS.Production;User ID=sa;Password=zhanying2021;TrustServerCertificate=true"
|
||||
},
|
||||
"BasicSystemConfig": {
|
||||
|
||||
"OpenUserComplexPassword": true,
|
||||
|
||||
"OpenSignDocumentBeforeWork": true,
|
||||
|
||||
"OpenLoginLimit": true
|
||||
},
|
||||
//"SystemEmailSendConfig": {
|
||||
// "Port": 465,
|
||||
// "Host": "smtp.163.com",
|
||||
// "FromEmail": "zhou941003@qq.com",
|
||||
// "FromName": "hangZhou",
|
||||
// "AuthorizationCode": "sqfhlpfdvnexbcab"
|
||||
//}
|
||||
|
||||
"SystemEmailSendConfig": {
|
||||
"Port": 465,
|
||||
"Host": "smtp.qiye.aliyun.com",
|
||||
"FromEmail": "IRC@extimaging.com",
|
||||
"FromName": "IRC",
|
||||
"AuthorizationCode": "ExtImg@2022"
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"RemoteNew": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=IRaCIS_Verify;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true",
|
||||
"Hangfire": "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Hangfire_IRaCIS;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true"
|
||||
},
|
||||
"BasicSystemConfig": {
|
||||
|
||||
"OpenUserComplexPassword": true,
|
||||
|
||||
"OpenSignDocumentBeforeWork": true,
|
||||
|
||||
"OpenLoginLimit": true
|
||||
|
||||
},
|
||||
"SystemEmailSendConfig": {
|
||||
"Port": 465,
|
||||
"Host": "smtp.qiye.aliyun.com",
|
||||
"FromEmail": "uat@extimaging.com",
|
||||
"FromName": "UAT_IRC",
|
||||
"AuthorizationCode": "SHzyyl2021"
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft": "Warning",
|
||||
"Microsoft.Hosting.Lifetime": "Information"
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"RemoteNew": "Server=47.90.161.85,1433\\MSSQLSERVER;Database=IRaCIS_Demo_US;User ID=sa;Password=zhanying2021;TrustServerCertificate=true",
|
||||
"Hangfire": "Server=47.90.161.85,1433\\MSSQLSERVER;Database=Hangfire.IRaCIS_Demo_US;User ID=sa;Password=zhanying2021;TrustServerCertificate=true"
|
||||
|
||||
},
|
||||
"BasicSystemConfig": {
|
||||
|
||||
"OpenUserComplexPassword": false,
|
||||
|
||||
"OpenSignDocumentBeforeWork": false,
|
||||
|
||||
"OpenTrialRelationDelete": true,
|
||||
|
||||
"OpenLoginLimit": false
|
||||
},
|
||||
|
||||
"SystemEmailSendConfig": {
|
||||
"Port": 465,
|
||||
"Host": "smtp.qiye.aliyun.com",
|
||||
"FromEmail": "test@extimaging.com",
|
||||
"FromName": "Test_IRC",
|
||||
"AuthorizationCode": "SHzyyl2021"
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +1,4 @@
|
|||
{
|
||||
"ConnectionStrings": {
|
||||
"hang": "Server=ZHOU;Database=IRaCIS;User ID=sa;Password=sa123456;"
|
||||
},
|
||||
"JwtSetting": {
|
||||
"SecurityKey": "3e6dbfa227234a03977a2f421bdb7f4f", // 密钥
|
||||
"Issuer": "IRaCIS", // 颁发者
|
||||
|
@ -74,11 +71,12 @@
|
|||
|
||||
"NoneDicomStudyCodePrefix": "NST",
|
||||
|
||||
|
||||
"DicomStudyCodePrefix": "ST",
|
||||
|
||||
"SystemSiteCodePrefix": "S",
|
||||
|
||||
"DefaultPassword": "123456",
|
||||
"DefaultPassword": "EIImage@2023",
|
||||
|
||||
"DefaultInternalOrganizationName": "ExtImaging",
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 7.7 KiB |
|
@ -11,7 +11,7 @@
|
|||
尊敬的 {0} ,您好:
|
||||
</div>
|
||||
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
||||
展影医疗为您添加了账户,账户信息如下:
|
||||
行藏医学影像处理软件系统为您添加了账户,账户信息如下:
|
||||
</div>
|
||||
<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;'>
|
||||
|
@ -32,7 +32,7 @@
|
|||
|
||||
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
|
||||
<div>祝您顺利!/Best Regards</div>
|
||||
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
|
||||
<div style="font-size: 14px;">武汉行藏科技有限公司</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
尊敬的 {0} ,您好:
|
||||
</div>
|
||||
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
||||
展影医疗将您的账户密码已重置,账户信息如下:
|
||||
行藏医学影像处理软件系统将您的账户密码已重置,账户信息如下:
|
||||
</div>
|
||||
<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;'>
|
||||
|
@ -29,7 +29,7 @@
|
|||
|
||||
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
|
||||
<div>祝您顺利!/Best Regards</div>
|
||||
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
|
||||
<div style="font-size: 14px;">武汉行藏科技有限公司</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
您好:
|
||||
</div>
|
||||
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
||||
感谢您使用展影云平台。
|
||||
感谢您使用行藏医学影像处理软件。
|
||||
</div>
|
||||
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
||||
{0}。
|
||||
|
@ -19,7 +19,7 @@
|
|||
|
||||
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
|
||||
<div>祝您顺利!/Best Regards</div>
|
||||
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
|
||||
<div style="font-size: 14px;">武汉行藏科技有限公司</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
{0}您好:
|
||||
</div>
|
||||
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
||||
感谢您使用展影云平台。
|
||||
感谢您使用行藏医学影像处理软件。
|
||||
</div>
|
||||
<div style='line-height: 40px;padding-left: 40px;margin-bottom: 10px;'>
|
||||
{1},验证码是: {2},请在3分钟内输入该验证码,进行后续操作。如非本人操作,请忽略该邮件。
|
||||
|
@ -19,7 +19,7 @@
|
|||
|
||||
<div style='line-height: 24px;font-size: 14px;color:#333;margin-top: 20px;padding-bottom: 40px;'>
|
||||
<div>祝您顺利!/Best Regards</div>
|
||||
<div style="font-size: 14px;">上海展影医疗科技有限公司</div>
|
||||
<div style="font-size: 14px;">武汉行藏科技有限公司</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -55,17 +55,17 @@
|
|||
// NoticeTypeEnum = NoticeType.NotNeedNotice,
|
||||
// NeedDeal = false,
|
||||
// StudyStatusStr = "Uploaded",
|
||||
// Message = $"CRC : {_userInfo.RealName} has uploaded {study.StudyCode} ",
|
||||
// Message = $"IC : {_userInfo.RealName} has uploaded {study.StudyCode} ",
|
||||
// SendTime = DateTime.Now,
|
||||
// });
|
||||
// }
|
||||
|
||||
// #region 处理QA通知模块
|
||||
|
||||
// //查询项目的参与者 和 负责site下CRC用户
|
||||
// //查询项目的参与者 和 负责site下IC用户
|
||||
// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList();
|
||||
|
||||
// // 找到该study 关联Site 下的CRC
|
||||
// // 找到该study 关联Site 下的IC
|
||||
|
||||
// var crcList = _userTrialSiteRepository.Where(t =>
|
||||
// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList();
|
||||
|
@ -78,11 +78,11 @@
|
|||
|
||||
|
||||
|
||||
// // CRC =>QA
|
||||
// // IC =>QA
|
||||
// if (studyStatus.Status == (int)StudyStatus.QARequested)
|
||||
// {
|
||||
// //找出当前操作的CRC
|
||||
// //PM 或者admin可以代替CRC角色 不能从CRC列表中查询用户
|
||||
// //找出当前操作的IC
|
||||
// //PM 或者admin可以代替IC角色 不能从IC列表中查询用户
|
||||
// //var currentCRC = trialUserList.First(t => t.UserId == _userInfo.Id);
|
||||
|
||||
// var notice = new QANotice()
|
||||
|
@ -100,7 +100,7 @@
|
|||
// NeedDeal = true,
|
||||
// StudyStatusStr = "QA Requested",
|
||||
// Message =
|
||||
// $"CRC -> QA : {_userInfo.RealName} request QA {study.StudyCode} , Inquiry can be performed! ",
|
||||
// $"IC -> QA : {_userInfo.RealName} request QA {study.StudyCode} , Inquiry can be performed! ",
|
||||
// SendTime = DateTime.Now,
|
||||
// };
|
||||
|
||||
|
@ -128,18 +128,18 @@
|
|||
// });
|
||||
// }
|
||||
|
||||
// // QA =>CRC 向CRC推送消息影像有问题 同时作为 requestToQA 的边界
|
||||
// // QA =>IC 向IC推送消息影像有问题 同时作为 requestToQA 的边界
|
||||
// else if (studyStatus.Status == (int)StudyStatus.QAing)
|
||||
// {
|
||||
// //找出当前操作的QA 如果是pm 或者admin 代替操作 此时会有问题 所以 谁代替,就以谁的名义执行
|
||||
// //var currentQA = qaList.First(t => t.UserId == _userInfo.Id);
|
||||
// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id);
|
||||
|
||||
// //在项目CRC列表中筛选出 负责该study关联 site的CRC
|
||||
// //在项目IC列表中筛选出 负责该study关联 site的IC
|
||||
// var siteCRCList = _userTrialSiteRepository.Where(t =>
|
||||
// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList();
|
||||
|
||||
// //查询项目的参与者 和 负责site下CRC用户
|
||||
// //查询项目的参与者 和 负责site下IC用户
|
||||
|
||||
|
||||
|
||||
|
@ -156,7 +156,7 @@
|
|||
// NoticeTypeEnum = NoticeType.QA_InQA_NoticeCRC,
|
||||
// NeedDeal = true,
|
||||
// StudyStatusStr = "In QA",
|
||||
// Message = $"QA -> CRC : {_userInfo.RealName} inquiry {study.StudyCode} ",
|
||||
// Message = $"QA -> IC : {_userInfo.RealName} inquiry {study.StudyCode} ",
|
||||
// SendTime = DateTime.Now,
|
||||
// };
|
||||
|
||||
|
@ -169,7 +169,7 @@
|
|||
// ToUserType = t.UserTypeRole.UserTypeShortName
|
||||
// }));
|
||||
|
||||
// //添加 发送给CRC的消息 消息和CRC是 一对多
|
||||
// //添加 发送给IC的消息 消息和IC是 一对多
|
||||
// _qaNoticeRepository.Add(notice);
|
||||
|
||||
|
||||
|
@ -228,7 +228,7 @@
|
|||
|
||||
// _qaNoticeRepository.Add(notice);
|
||||
|
||||
// //处理 消息 标记已处理 存在意外情况 qa发给CRC的 但是qa里面设置了 通过或者不通过 此时qa发送的消息也设置为已处理
|
||||
// //处理 消息 标记已处理 存在意外情况 qa发给IC的 但是qa里面设置了 通过或者不通过 此时qa发送的消息也设置为已处理
|
||||
// var needDealNoticeList = _qaNoticeRepository.AsQueryable()
|
||||
// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal &&
|
||||
// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA ||
|
||||
|
@ -248,7 +248,7 @@
|
|||
|
||||
|
||||
// }
|
||||
// // QA =>CRC 暂时不用发送消息给CRC 因为CRC 暂时没有入口回复 同时作为 requestToQA 的边界
|
||||
// // QA =>IC 暂时不用发送消息给IC 因为IC 暂时没有入口回复 同时作为 requestToQA 的边界
|
||||
// else if (studyStatus.Status == (int)StudyStatus.QAFInishNotPass)
|
||||
// {
|
||||
|
||||
|
@ -298,24 +298,24 @@
|
|||
// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId);
|
||||
// var status = study.Status;
|
||||
|
||||
// //处理CRC 重传时 QA消息
|
||||
// //处理IC 重传时 QA消息
|
||||
|
||||
// if (status == (int)StudyStatus.QAing)
|
||||
// {
|
||||
// //查询项目的参与者 和 负责site下CRC用户
|
||||
// //查询项目的参与者 和 负责site下IC用户
|
||||
// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList();
|
||||
|
||||
// // 找到该study 关联Site 下的CRC
|
||||
// // 找到该study 关联Site 下的IC
|
||||
|
||||
// var crcList = _userTrialSiteRepository.Where(t =>
|
||||
// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList();
|
||||
|
||||
// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList();
|
||||
|
||||
// //CRC =>QA CRC的职能被PM 或者admin代替
|
||||
// //IC =>QA IC的职能被PM 或者admin代替
|
||||
// //if (_userInfo.UserTypeEnumInt == (int)UserType.ClinicalResearchCoordinator)
|
||||
// {
|
||||
// //PM 或者admin可以代替CRC角色 不能从CRC列表中查询用户
|
||||
// //PM 或者admin可以代替IC角色 不能从IC列表中查询用户
|
||||
// //var currentCRC = trialUserList.First(t => t.UserId == _userInfo.Id);
|
||||
|
||||
// var notice = new QANotice()
|
||||
|
@ -330,7 +330,7 @@
|
|||
// FromUserType = _userInfo.UserTypeShortName,
|
||||
// NoticeTypeEnum = NoticeType.CRC_ReUpload_NoticeQA,
|
||||
// NeedDeal = true,
|
||||
// Message = $"CRC -> QA :{_userInfo.RealName} has reuploaded {study.StudyCode} , Need to be inquiry again",
|
||||
// Message = $"IC -> QA :{_userInfo.RealName} has reuploaded {study.StudyCode} , Need to be inquiry again",
|
||||
// SendTime = DateTime.Now
|
||||
// };
|
||||
|
||||
|
@ -345,7 +345,7 @@
|
|||
|
||||
// _qaNoticeRepository.Add(notice);
|
||||
|
||||
// //这里作为 QA 设置 Inqa 状态的回复 或者QA和CRC对话的
|
||||
// //这里作为 QA 设置 Inqa 状态的回复 或者QA和IC对话的
|
||||
// var needDealNoticeList = _qaNoticeRepository.Where(t => t.SubjectVisitId == study.Id && t.NeedDeal
|
||||
// && (t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC || t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC))
|
||||
// .ToList();
|
||||
|
@ -377,10 +377,10 @@
|
|||
|
||||
// #region 处理QA通知 匿名化完毕 通知PM
|
||||
|
||||
// //查询项目的参与者 和 负责site下CRC用户
|
||||
// //查询项目的参与者 和 负责site下IC用户
|
||||
// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList();
|
||||
|
||||
// // 找到该study 关联Site 下的CRC
|
||||
// // 找到该study 关联Site 下的IC
|
||||
|
||||
// var crcList = _userTrialSiteRepository.Where(t =>
|
||||
// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList();
|
||||
|
|
|
@ -10,10 +10,7 @@ namespace IRaCIS.Core.Application.Auth
|
|||
|
||||
public static class IRaCISPolicy
|
||||
{
|
||||
|
||||
|
||||
|
||||
public const string CRC = "CRC";
|
||||
public const string IC = "IC";
|
||||
|
||||
public const string PM = "PM";
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ using IRaCIS.Core.Infra.EFCore;
|
|||
using IRaCIS.Core.Domain.Models;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Quartz;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
|
||||
namespace IRaCIS.Application.Services.BackGroundJob
|
||||
{
|
||||
|
@ -17,24 +18,25 @@ namespace IRaCIS.Application.Services.BackGroundJob
|
|||
private readonly IRepository<Trial> _trialRepository;
|
||||
private readonly IEasyCachingProvider _provider;
|
||||
private readonly ILogger<CacheTrialStatusQuartZJob> _logger;
|
||||
private readonly IRepository<SystemAnonymization> _systemAnonymizationRepository;
|
||||
|
||||
public CacheTrialStatusQuartZJob(IRepository<Trial> trialRepository, IEasyCachingProvider provider,ILogger<CacheTrialStatusQuartZJob> logger)
|
||||
public CacheTrialStatusQuartZJob(IRepository<Trial> trialRepository, IEasyCachingProvider provider,ILogger<CacheTrialStatusQuartZJob> logger, IRepository<SystemAnonymization> systemAnonymizationRepository)
|
||||
{
|
||||
_trialRepository = trialRepository;
|
||||
_provider = provider;
|
||||
_logger = logger;
|
||||
_systemAnonymizationRepository = systemAnonymizationRepository;
|
||||
}
|
||||
|
||||
public Task Execute(IJobExecutionContext context)
|
||||
public async Task Execute(IJobExecutionContext context)
|
||||
|
||||
{
|
||||
_logger.LogInformation($"开始执行QuartZ定时任务作业");
|
||||
try
|
||||
{
|
||||
var list = _trialRepository.Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr })
|
||||
.ToList();
|
||||
await MemoryCacheTrialStatus();
|
||||
|
||||
list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(1)));
|
||||
await MemoryCacheAnonymizeData();
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
|
@ -42,10 +44,28 @@ namespace IRaCIS.Application.Services.BackGroundJob
|
|||
_logger.LogError($" 查询和缓存过程出现异常"+e.Message);
|
||||
}
|
||||
_logger.LogInformation("QuartZ定时任务作业结束");
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
|
||||
public async Task MemoryCacheTrialStatus()
|
||||
{
|
||||
var list = await _trialRepository.Select(t => new { TrialId = t.Id, TrialStatusStr = t.TrialStatusStr })
|
||||
.ToListAsync();
|
||||
|
||||
list.ForEach(t => _provider.Set(t.TrialId.ToString(), t.TrialStatusStr, TimeSpan.FromDays(7)));
|
||||
|
||||
}
|
||||
|
||||
public async Task MemoryCacheAnonymizeData()
|
||||
{
|
||||
var systemAnonymizationList = await _systemAnonymizationRepository.Where(t => t.IsEnable).ToListAsync();
|
||||
|
||||
_provider.Set(StaticData.Anonymize.Anonymize_AddFixedFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed).ToList(), TimeSpan.FromDays(7));
|
||||
_provider.Set(StaticData.Anonymize.Anonymize_AddIRCInfoFiled, systemAnonymizationList.Where(t => t.IsAdd && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
|
||||
_provider.Set(StaticData.Anonymize.Anonymize_FixedField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed).ToList(), TimeSpan.FromDays(7));
|
||||
_provider.Set(StaticData.Anonymize.Anonymize_IRCInfoField, systemAnonymizationList.Where(t => t.IsAdd == false && t.IsFixed == false).ToList(), TimeSpan.FromDays(7));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace IRaCIS.Core.Application.BackGroundJob
|
|||
|
||||
var success = await _subjectVisitRepository.SaveChangesAsync();
|
||||
|
||||
_logger.LogWarning($"任务建立时间:{startTime} 取消时间:{DateTime.Now} 取消 受试者访视:{ subjectVisitId }success:{success}");
|
||||
_logger.LogWarning($"任务建立时间:{startTime} 取消时间:{DateTime.Now} 取消 患者检查批次:{ subjectVisitId }success:{success}");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
@ -45,11 +45,11 @@ public enum AuditOptType
|
|||
AddTrialSite = 5,
|
||||
DeleteTrialSite = 6,
|
||||
|
||||
//Site CRC
|
||||
//Site IC
|
||||
AddTrialSiteCRC = 7,
|
||||
DeleteTrialSiteCRC = 8,
|
||||
|
||||
//访视计划
|
||||
//检查批次计划
|
||||
AddOrUpdateTrialVisitPlanItem = 9,
|
||||
DeleteTrialVisitPlanItem = 10,
|
||||
ConfirmTrialVisitPlan = 11,
|
||||
|
@ -58,7 +58,7 @@ public enum AuditOptType
|
|||
AddOrUpdateTrialTemplate = 12,
|
||||
DeleteTrialTemplate = 13,
|
||||
|
||||
//subject 访视计划
|
||||
//subject 检查批次计划
|
||||
AddOrUpdateSubjectOutPlanVisit = 14,
|
||||
DeleteSubjectOutPlanVisit = 15,
|
||||
SetSVExecuted = 16,
|
||||
|
@ -355,7 +355,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // }
|
||||
|
||||
// // break;
|
||||
// // //删除项目Site CRC
|
||||
// // //删除项目Site IC
|
||||
// // case AuditOptType.DeleteTrialSiteCRC:
|
||||
|
||||
// // if (result.IsSuccess)
|
||||
|
@ -378,7 +378,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // }
|
||||
// // break;
|
||||
|
||||
// // //添加访视计划Item
|
||||
// // //添加检查批次计划Item
|
||||
// // case AuditOptType.AddOrUpdateTrialVisitPlanItem:
|
||||
// // //接口参数
|
||||
// // var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0];
|
||||
|
@ -390,7 +390,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // TrialId = visitPlanItem.TrialId,
|
||||
// // SubjectId = Guid.Empty,
|
||||
// // 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,
|
||||
// // OptUserId = Guid.Parse(_userIdStr),
|
||||
// // OptUser = _userRealName,
|
||||
|
@ -399,7 +399,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // }
|
||||
|
||||
// // break;
|
||||
// // //删除访视计划Item
|
||||
// // //删除检查批次计划Item
|
||||
// // case AuditOptType.DeleteTrialVisitPlanItem:
|
||||
|
||||
// // if (result.IsSuccess)
|
||||
|
@ -409,7 +409,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // TrialId = _visitPlan.TrialId,
|
||||
// // SubjectId = Guid.Empty,
|
||||
// // AuditType = (int)AuditType.TrialAudit,
|
||||
// // Note = $"{ _userRealName} 移除了访视计划项 {_visitPlan.VisitName} ",
|
||||
// // Note = $"{ _userRealName} 移除了检查批次计划项 {_visitPlan.VisitName} ",
|
||||
// // Detail = string.Empty,
|
||||
// // OptUserId = Guid.Parse(_userIdStr),
|
||||
// // OptUser = _userRealName,
|
||||
|
@ -418,7 +418,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // }
|
||||
// // break;
|
||||
|
||||
// // //确认了访视计划
|
||||
// // //确认了检查批次计划
|
||||
// // case AuditOptType.ConfirmTrialVisitPlan:
|
||||
// // var trialId = (Guid)_actionArguments.Values.ToList()[0];
|
||||
|
||||
|
@ -429,7 +429,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // TrialId = trialId,
|
||||
// // SubjectId = Guid.Empty,
|
||||
// // AuditType = (int)AuditType.TrialAudit,
|
||||
// // Note = $"{ _userRealName} 确认了访视计划,不允许修改 ",
|
||||
// // Note = $"{ _userRealName} 确认了检查批次计划,不允许修改 ",
|
||||
// // Detail = string.Empty,
|
||||
// // OptUserId = Guid.Parse(_userIdStr),
|
||||
// // OptUser = _userRealName,
|
||||
|
@ -484,13 +484,13 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // }
|
||||
|
||||
// // break;
|
||||
// // //受试者审计
|
||||
// // //患者审计
|
||||
// // case AuditType.SubjectAudit:
|
||||
|
||||
|
||||
// // switch (_attr._auditOptType)
|
||||
// // {
|
||||
// // // 添加或者更新受试者
|
||||
// // // 添加或者更新患者
|
||||
// // case AuditOptType.AddOrUpdateSubject:
|
||||
|
||||
// // //接口参数
|
||||
|
@ -503,7 +503,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // TrialId = subject.TrialId,
|
||||
// // SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value,
|
||||
// // 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,
|
||||
// // OptUserId = Guid.Parse(_userIdStr),
|
||||
// // OptUser = _userRealName,
|
||||
|
@ -512,7 +512,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // }
|
||||
|
||||
// // break;
|
||||
// // // 删除受试者
|
||||
// // // 删除患者
|
||||
// // case AuditOptType.DeleteSubject:
|
||||
// // if (result.IsSuccess)
|
||||
// // {
|
||||
|
@ -521,7 +521,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // TrialId = _subject.TrialId,
|
||||
// // SubjectId = _subject.Id,
|
||||
// // AuditType = (int)AuditType.SubjectAudit,
|
||||
// // Note = $"{ _userRealName} 移除了受试者 {_subject.LastName + _subject.FirstName} ",
|
||||
// // Note = $"{ _userRealName} 移除了患者 {_subject.LastName + _subject.FirstName} ",
|
||||
// // Detail = string.Empty,
|
||||
// // OptUserId = Guid.Parse(_userIdStr),
|
||||
// // OptUser = _userRealName,
|
||||
|
@ -530,7 +530,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // }
|
||||
|
||||
// // break;
|
||||
// // // 受试者计划外访视
|
||||
// // // 患者计划外检查批次
|
||||
// // case AuditOptType.AddOrUpdateSubjectOutPlanVisit:
|
||||
|
||||
// // //接口参数
|
||||
|
@ -549,7 +549,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // TrialId = _subject.TrialId,
|
||||
// // SubjectId = _subject.Id,
|
||||
// // 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,
|
||||
// // OptUserId = Guid.Parse(_userIdStr),
|
||||
// // OptUser = _userRealName,
|
||||
|
@ -558,7 +558,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // }
|
||||
|
||||
// // break;
|
||||
// // // 删除计划外访视
|
||||
// // // 删除计划外检查批次
|
||||
// // case AuditOptType.DeleteSubjectOutPlanVisit:
|
||||
|
||||
// // if (result.IsSuccess)
|
||||
|
@ -568,7 +568,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // TrialId = _subjectVisit.TrialId,
|
||||
// // SubjectId = _subject.Id,
|
||||
// // AuditType = (int)AuditType.SubjectAudit,
|
||||
// // Note = $"{ _userRealName} 移除了受试者{_subject.LastName + _subject.FirstName} 计划外访视 {_subjectVisit.VisitName} ",
|
||||
// // Note = $"{ _userRealName} 移除了患者{_subject.LastName + _subject.FirstName} 计划外检查批次 {_subjectVisit.VisitName} ",
|
||||
// // Detail = string.Empty,
|
||||
// // OptUserId = Guid.Parse(_userIdStr),
|
||||
// // OptUser = _userRealName,
|
||||
|
@ -587,7 +587,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // TrialId = _subjectVisit.TrialId,
|
||||
// // SubjectId = _subject.Id,
|
||||
// // AuditType = (int)AuditType.SubjectAudit,
|
||||
// // Note = $"{ _userRealName} 将受试者 {_subject.LastName + _subject.FirstName} 访视 {_subjectVisit.VisitName} 设置为已执行 ",
|
||||
// // Note = $"{ _userRealName} 将患者 {_subject.LastName + _subject.FirstName} 检查批次 {_subjectVisit.VisitName} 设置为已执行 ",
|
||||
// // Detail = string.Empty,
|
||||
// // OptUserId = Guid.Parse(_userIdStr),
|
||||
// // OptUser = _userRealName,
|
||||
|
@ -700,7 +700,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// // //删除项目运维人员
|
||||
// // case AuditOptType.DeleteTrailStaff:
|
||||
|
||||
// // // 删除项目Site CRC
|
||||
// // // 删除项目Site IC
|
||||
// // case AuditOptType.DeleteTrialSiteCRC:
|
||||
|
||||
// // //接口参数
|
||||
|
@ -756,7 +756,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
|
||||
// // break;
|
||||
|
||||
// // //受试者审计
|
||||
// // //患者审计
|
||||
// // case AuditType.SubjectAudit:
|
||||
|
||||
// // switch (_auditOptType)
|
||||
|
@ -920,7 +920,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// _userTrial = _userTrialRepository.AsQueryable().Include(t => t.User).FirstOrDefault(t => t.Id == userTrial);
|
||||
// break;
|
||||
|
||||
// // 删除项目Site CRC
|
||||
// // 删除项目Site IC
|
||||
// case AuditOptType.DeleteTrialSiteCRC:
|
||||
|
||||
// //接口参数
|
||||
|
@ -969,7 +969,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
|
||||
// break;
|
||||
|
||||
// //受试者审计
|
||||
// //患者审计
|
||||
// case AuditType.SubjectAudit:
|
||||
|
||||
// switch (_auditOptType)
|
||||
|
@ -1258,7 +1258,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// }
|
||||
|
||||
// break;
|
||||
// //删除项目Site CRC
|
||||
// //删除项目Site IC
|
||||
// case AuditOptType.DeleteTrialSiteCRC:
|
||||
|
||||
// if (result.IsSuccess)
|
||||
|
@ -1281,7 +1281,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// }
|
||||
// break;
|
||||
|
||||
// //添加访视计划Item
|
||||
// //添加检查批次计划Item
|
||||
// case AuditOptType.AddOrUpdateTrialVisitPlanItem:
|
||||
// //接口参数
|
||||
// var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0];
|
||||
|
@ -1293,7 +1293,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// TrialId = visitPlanItem.TrialId,
|
||||
// SubjectId = Guid.Empty,
|
||||
// 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,
|
||||
// OptUserId = Guid.Parse(_userIdStr),
|
||||
// OptUser = _userRealName,
|
||||
|
@ -1302,7 +1302,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// }
|
||||
|
||||
// break;
|
||||
// //删除访视计划Item
|
||||
// //删除检查批次计划Item
|
||||
// case AuditOptType.DeleteTrialVisitPlanItem:
|
||||
|
||||
// if (result.IsSuccess)
|
||||
|
@ -1312,7 +1312,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// TrialId = _visitPlan.TrialId,
|
||||
// SubjectId = Guid.Empty,
|
||||
// AuditType = (int)AuditType.TrialAudit,
|
||||
// Note = $"{ _userRealName} 移除了访视计划项 {_visitPlan.VisitName} ",
|
||||
// Note = $"{ _userRealName} 移除了检查批次计划项 {_visitPlan.VisitName} ",
|
||||
// Detail = string.Empty,
|
||||
// OptUserId = Guid.Parse(_userIdStr),
|
||||
// OptUser = _userRealName,
|
||||
|
@ -1321,7 +1321,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// }
|
||||
// break;
|
||||
|
||||
// //确认了访视计划
|
||||
// //确认了检查批次计划
|
||||
// case AuditOptType.ConfirmTrialVisitPlan:
|
||||
// var trialId = (Guid)_actionArguments.Values.ToList()[0];
|
||||
|
||||
|
@ -1332,7 +1332,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// TrialId = trialId,
|
||||
// SubjectId = Guid.Empty,
|
||||
// AuditType = (int)AuditType.TrialAudit,
|
||||
// Note = $"{ _userRealName} 确认了访视计划,不允许修改 ",
|
||||
// Note = $"{ _userRealName} 确认了检查批次计划,不允许修改 ",
|
||||
// Detail = string.Empty,
|
||||
// OptUserId = Guid.Parse(_userIdStr),
|
||||
// OptUser = _userRealName,
|
||||
|
@ -1364,13 +1364,13 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// }
|
||||
|
||||
// break;
|
||||
// //受试者审计
|
||||
// //患者审计
|
||||
// case AuditType.SubjectAudit:
|
||||
|
||||
|
||||
// switch (_attr._auditOptType)
|
||||
// {
|
||||
// // 添加或者更新受试者
|
||||
// // 添加或者更新患者
|
||||
// case AuditOptType.AddOrUpdateSubject:
|
||||
|
||||
// //接口参数
|
||||
|
@ -1383,7 +1383,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// TrialId = subject.TrialId,
|
||||
// SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value,
|
||||
// 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,
|
||||
// OptUserId = Guid.Parse(_userIdStr),
|
||||
// OptUser = _userRealName,
|
||||
|
@ -1392,7 +1392,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// }
|
||||
|
||||
// break;
|
||||
// // 删除受试者
|
||||
// // 删除患者
|
||||
// case AuditOptType.DeleteSubject:
|
||||
// if (result.IsSuccess)
|
||||
// {
|
||||
|
@ -1401,7 +1401,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// TrialId = _subject.TrialId,
|
||||
// SubjectId = _subject.Id,
|
||||
// AuditType = (int)AuditType.SubjectAudit,
|
||||
// Note = $"{ _userRealName} 移除了受试者 {_subject.LastName + _subject.FirstName} ",
|
||||
// Note = $"{ _userRealName} 移除了患者 {_subject.LastName + _subject.FirstName} ",
|
||||
// Detail = string.Empty,
|
||||
// OptUserId = Guid.Parse(_userIdStr),
|
||||
// OptUser = _userRealName,
|
||||
|
@ -1410,7 +1410,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// }
|
||||
|
||||
// break;
|
||||
// // 受试者计划外访视
|
||||
// // 患者计划外检查批次
|
||||
// case AuditOptType.AddOrUpdateSubjectOutPlanVisit:
|
||||
|
||||
// //接口参数
|
||||
|
@ -1429,7 +1429,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// TrialId = _subject.TrialId,
|
||||
// SubjectId = _subject.Id,
|
||||
// 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,
|
||||
// OptUserId = Guid.Parse(_userIdStr),
|
||||
// OptUser = _userRealName,
|
||||
|
@ -1438,7 +1438,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// }
|
||||
|
||||
// break;
|
||||
// // 删除计划外访视
|
||||
// // 删除计划外检查批次
|
||||
// case AuditOptType.DeleteSubjectOutPlanVisit:
|
||||
|
||||
// if (result.IsSuccess)
|
||||
|
@ -1448,7 +1448,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// TrialId = _subjectVisit.TrialId,
|
||||
// SubjectId = _subject.Id,
|
||||
// AuditType = (int)AuditType.SubjectAudit,
|
||||
// Note = $"{ _userRealName} 移除了受试者{_subject.LastName + _subject.FirstName} 计划外访视 {_subjectVisit.VisitName} ",
|
||||
// Note = $"{ _userRealName} 移除了患者{_subject.LastName + _subject.FirstName} 计划外检查批次 {_subjectVisit.VisitName} ",
|
||||
// Detail = string.Empty,
|
||||
// OptUserId = Guid.Parse(_userIdStr),
|
||||
// OptUser = _userRealName,
|
||||
|
@ -1467,7 +1467,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt
|
|||
// TrialId = _subjectVisit.TrialId,
|
||||
// SubjectId = _subject.Id,
|
||||
// AuditType = (int)AuditType.SubjectAudit,
|
||||
// Note = $"{ _userRealName} 将受试者 {_subject.LastName + _subject.FirstName} 访视 {_subjectVisit.VisitName} 设置为已执行 ",
|
||||
// Note = $"{ _userRealName} 将患者 {_subject.LastName + _subject.FirstName} 检查批次 {_subjectVisit.VisitName} 设置为已执行 ",
|
||||
// Detail = string.Empty,
|
||||
// OptUserId = Guid.Parse(_userIdStr),
|
||||
// OptUser = _userRealName,
|
||||
|
|
|
@ -491,7 +491,7 @@ public static class FileStoreHelper
|
|||
{
|
||||
var rootPath = FileStoreHelper.GetIRaCISRootDataFolder(_hostEnvironment);
|
||||
|
||||
//加入访视层级 和Data
|
||||
//加入检查批次层级 和Data
|
||||
var path = Path.Combine(rootPath, StaticData.Folder.TrialDataFolder, trialId.ToString(),
|
||||
siteId.ToString(), subjectId.ToString(), subjectVisitId.ToString(), StaticData.Folder.DicomFolder, studyId.ToString());
|
||||
|
||||
|
|
|
@ -1,171 +0,0 @@
|
|||
|
||||
using IRaCIS.Core.Application.Helper;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using NPOI.OpenXmlFormats.Wordprocessing;
|
||||
using NPOI.XWPF.UserModel;
|
||||
using System.Collections;
|
||||
using System.Reflection;
|
||||
|
||||
namespace IRaCIS.Core.Application.Service;
|
||||
|
||||
public static class NpoiWordHelper
|
||||
{
|
||||
public static async Task<IActionResult> TemplateExportWordAsync(string code, object data, IRepository<CommonDocument>? _commonDocumentRepository, IWebHostEnvironment _hostEnvironment)
|
||||
{
|
||||
//var (physicalPath, fileNmae) = await FileStoreHelper.GetCommonDocPhysicalFilePathAsync(_hostEnvironment, _commonDocumentRepository, code);
|
||||
|
||||
var physicalPath = code;
|
||||
|
||||
|
||||
using (FileStream stream = File.OpenRead(physicalPath))
|
||||
{
|
||||
XWPFDocument doc = new XWPFDocument(stream);
|
||||
//遍历段落
|
||||
foreach (var para in doc.Paragraphs)
|
||||
{
|
||||
ReplaceKey(para, data);
|
||||
}
|
||||
//遍历表格
|
||||
var tables = doc.Tables;
|
||||
foreach (var table in tables)
|
||||
{
|
||||
//ReplaceTableKey(table, data, "Data");
|
||||
}
|
||||
|
||||
foreach (var table in tables)
|
||||
{
|
||||
foreach (var row in table.Rows)
|
||||
{
|
||||
foreach (var cell in row.GetTableCells())
|
||||
{
|
||||
foreach (var para in cell.Paragraphs)
|
||||
{
|
||||
ReplaceKey(para, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FileStream out1 = new FileStream("table.docx", FileMode.Create);
|
||||
doc.Write(out1);
|
||||
out1.Close();
|
||||
return new FileStreamResult(stream, "application/msword")
|
||||
{
|
||||
FileDownloadName = $"replaced_{DateTime.Now.ToString("yyyyMMddHHmmss")}.docx"
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static void ReplaceKey(XWPFParagraph para, object model)
|
||||
{
|
||||
string text = para.ParagraphText;
|
||||
|
||||
Type t = model.GetType();
|
||||
PropertyInfo[] pi = t.GetProperties();
|
||||
foreach (PropertyInfo p in pi)
|
||||
{
|
||||
//$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
|
||||
if (text.Contains("$" + p.Name + "$"))
|
||||
{
|
||||
text = text.Replace("$" + p.Name + "$", p.GetValue(model)?.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
//var runs = para.Runs;
|
||||
//string styleid = para.Style;
|
||||
//for (int i = 0; i < runs.Count; i++)
|
||||
//{
|
||||
// var run = runs[i];
|
||||
// text = run.ToString();
|
||||
// Type t = model.GetType();
|
||||
// PropertyInfo[] pi = t.GetProperties();
|
||||
// foreach (PropertyInfo p in pi)
|
||||
// {
|
||||
// //$$与模板中$$对应,也可以改成其它符号,比如{$name},务必做到唯一
|
||||
// if (text.Contains("$" + p.Name + "$"))
|
||||
// {
|
||||
// text = text.Replace("$" + p.Name + "$", p.GetValue(model)?.ToString());
|
||||
// }
|
||||
// }
|
||||
// runs[i].SetText(text, 0);
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 替换表格Key
|
||||
/// </summary>
|
||||
/// <param name="table"></param>
|
||||
/// <param name="list"></param>
|
||||
/// <param name="field"></param>
|
||||
|
||||
private static void ReplaceTableKey(XWPFTable table, IList list, String field)
|
||||
{
|
||||
List<XWPFParagraph> paras = new List<XWPFParagraph>();
|
||||
// 获取最后一行数据,最后一行设置值
|
||||
Int32 iLastRowIndex = 0;
|
||||
for (int iIndex = 0; iIndex < table.Rows.Count; iIndex++)
|
||||
{
|
||||
if (iIndex == table.Rows.Count - 1)
|
||||
{
|
||||
iLastRowIndex = iIndex;
|
||||
foreach (var cell in table.Rows[iIndex].GetTableCells())
|
||||
{
|
||||
foreach (var para in cell.Paragraphs)
|
||||
{
|
||||
paras.Add(para);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 删除最后一行
|
||||
table.RemoveRow(iLastRowIndex);
|
||||
|
||||
for (int iIndex = 0; iIndex < list.Count; iIndex++)
|
||||
{
|
||||
object data = list[iIndex];
|
||||
Type t = data.GetType();
|
||||
PropertyInfo[] pi = t.GetProperties();
|
||||
// 表增加行
|
||||
XWPFTableRow m_row = table.CreateRow();
|
||||
CT_Row m_NewRow = new CT_Row();
|
||||
String text = String.Empty;
|
||||
Int32 jIndex = 0;
|
||||
paras.ForEach(para =>
|
||||
{
|
||||
text = para.ParagraphText;
|
||||
foreach (PropertyInfo p in pi)
|
||||
{
|
||||
if (text.Contains("$" + field + "." + p.Name + "$"))
|
||||
{
|
||||
m_row.GetCell(jIndex).SetText(p.GetValue(data, null).ToString());
|
||||
}
|
||||
}
|
||||
jIndex++;
|
||||
});
|
||||
m_row = new XWPFTableRow(m_NewRow, table);
|
||||
table.AddRow(m_row);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<Platforms>AnyCPU;x64</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
@ -14,10 +15,30 @@
|
|||
<NoWarn>1701;1702;1591</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<OutputPath>..\bin\</OutputPath>
|
||||
<DocumentationFile>.\IRaCIS.Core.Application.xml</DocumentationFile>
|
||||
<NoWarn>1701;1702;1591</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
|
||||
<OutputPath>..\bin\</OutputPath>
|
||||
<DocumentationFile>.\IRaCIS.Core.Application.xml</DocumentationFile>
|
||||
<NoWarn>1701;1702;1591</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<NoWarn>1701;1702;1591;1587</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<NoWarn>1701;1702;1591;1587</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
|
||||
<NoWarn>1701;1702;1591;1587</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -104,7 +125,6 @@
|
|||
<PackageReference Include="Quartz" Version="3.5.0" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="2.1.3" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="7.0.5" />
|
||||
<PackageReference Include="WinSCP" Version="5.21.5" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -60,7 +60,7 @@
|
|||
|
||||
// TrialSiteService
|
||||
"CodeRepeated": "Code is not allowed to be repeated",
|
||||
"CRCCanNotDeleted": "The site has been associated with CRC, and couldn't be deleted",
|
||||
"CRCCanNotDeleted": "The site has been associated with IC, and couldn't be deleted",
|
||||
"SiteCanNotDeleted": "The subjects has been added to this site, and couldn't be deleted",
|
||||
"StudyCanNotDeleted": "The site has been uploaded study, and couldn't be deleted.",
|
||||
|
||||
|
@ -76,8 +76,8 @@
|
|||
// SubjectVisitService
|
||||
"ContainsVisitnum": "This subject's visit plan already contains a visit with the same visitnum",
|
||||
"LastEvaluationNotAllowed": "After setting the last evaluation, you are not allowed to add scheduled outbound visits",
|
||||
"CRCSubmit": "PD confirmation status cannot be modified after CRC submission",
|
||||
"BacktrackingVisits": "After the CRC is submitted, the PD confirmation status cannot be changed",
|
||||
"CRCSubmit": "PD confirmation status cannot be modified after IC submission",
|
||||
"BacktrackingVisits": "After the IC is submitted, the PD confirmation status cannot be changed",
|
||||
"ImageUpload": "The subject uploaded the image after this visit, and this visit is not allowed to be set as the last visit",
|
||||
"AssociatedUploaded": "This visit is associated with the uploaded study images and couldn't be deleted",
|
||||
"InPlanCanNotDeleted": "This visit is InPlan and couldn't be deleted",
|
||||
|
@ -87,7 +87,7 @@
|
|||
"AccordWithVisitNum": "For the visit plan, the VisitDay with a larger VisitNum should be larger than the VisitDay with a smaller VisitNum",
|
||||
"same/VisitName": "A visit with the same VisitName/VisitNum already existed in the current visit plan",
|
||||
"AlreadyBaseline": "A visit already is baseline in the current visit plan",
|
||||
"IsUploadVideo": "A CRC has uploaded image data for the baseline and is not allowed to modify the baseline",
|
||||
"IsUploadVideo": "A IC has uploaded image data for the baseline and is not allowed to modify the baseline",
|
||||
"VisitHasBeenExecuted": "The visit plan has been assigned to the subjects and executed",
|
||||
"OnlyProgressCanEdit": "Modification validation is allowed only during project initialization or in progress",
|
||||
"NoBaselineNoConfirmation": "No baseline, no confirmation allowed",
|
||||
|
@ -121,10 +121,10 @@
|
|||
|
||||
// QCOperationService
|
||||
"AuditQuestionMust": "The audit question must be filled out and saved, otherwise no challenge is allowed to be added",
|
||||
"VisitNoClose": "The current viewer has unclosed query for CRC upload permission. No further query is allowed",
|
||||
"NotFinish": "CRC retransmission request /QC agrees to retransmission challenge and is not allowed to close the challenge until CRC setup retransmission is complete",
|
||||
"VisitNoClose": "The current viewer has unclosed query for IC upload permission. No further query is allowed",
|
||||
"NotFinish": "IC retransmission request /QC agrees to retransmission challenge and is not allowed to close the challenge until IC setup retransmission is complete",
|
||||
"QCHasBeenReplied": "This QC inquiry has been answered",
|
||||
"OperationUserMustBeCRC/PM": "Only CRC and PM are allowed",
|
||||
"OperationUserMustBeCRC/PM": "Only IC and PM are allowed",
|
||||
"CanNotCloseQuery": "Visits that perform conformance checks are not allowed to close queries",
|
||||
"OnlyPMCanSet": "Only PM manual Settings are allowed to pass the consistency check",
|
||||
"CanNotSettingConsistency": "Currently, the PM approves the rollback and does not allow the consistency check to pass",
|
||||
|
@ -155,7 +155,7 @@
|
|||
"CanNotSetQCFailed": "QC Failed cannot be set in the unchecked state",
|
||||
"NotInPrimaryQCQCFailed": "The project is configured as a single audit. The current audit status is not InPrimaryQC and cannot be changed to QCFailed",
|
||||
"TrialIsDoubleCheckCanNotQCFailed{0}": "The project is configured with double audit. The current audit status is {0} and cannot be changed to QCFailed",
|
||||
"CRCHasBeenSubmitted": "CRC has submitted an unmodified group confirmation status",
|
||||
"CRCHasBeenSubmitted": "IC has submitted an unmodified group confirmation status",
|
||||
"CannotBeChangedPD": "PD confirmation status cannot be modified for rollback visits",
|
||||
"OtherQCProcessAudit": "Other QC is conducting audit, current operation is not allowed",
|
||||
"ForwardFailed": "Forward failure",
|
||||
|
@ -183,9 +183,9 @@
|
|||
|
||||
//StudyListService
|
||||
|
||||
"TimeTooLow": "当前访视检查时间不能小于该访视之前检查的时间,请核对检查数据是否有误",
|
||||
"TimeTooLow": "当前检查批次检查时间不能小于该检查批次之前检查的时间,请核对检查数据是否有误",
|
||||
"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.",
|
||||
|
||||
//StudyService
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
"ProjSetDisable": "项目不在Initializing/Ongoing,不允许确认配置", //不允许确认配置
|
||||
"QCRepate": "QC问题显示序号不允许重复", // QC问题显示序号不允许重复
|
||||
"ParentNumToLow": "父问题的序号要比子问题序号小,请确认", // 父问题的序号要比子问题序号小,请确认
|
||||
"ExistUnconfirmedItems": "项目、基础配置、流程配置、加急配置、访视计划,有未确认项", // 存在未确认项
|
||||
"ExistUnconfirmedItems": "项目、基础配置、流程配置、加急配置、检查批次计划,有未确认项", // 存在未确认项
|
||||
"NotAllCanOperate": "只有“初始化中”和“正在进行中”才能进行操作", //只有“初始化中”和“正在进行中”才能进行操作
|
||||
|
||||
// TrialExternalUserService
|
||||
|
@ -51,7 +51,7 @@
|
|||
"OnlyPMAPM": "仅PM/APM可以操作!",
|
||||
"TrialIDExist": "相同的试用ID已经存在。",
|
||||
"ProjNot": "项目初始化或者进行中时,才允许操作",
|
||||
"TrialConfirm": "Trial访视计划已经确认,无法删除",
|
||||
"TrialConfirm": "Trial检查批次计划已经确认,无法删除",
|
||||
"TrialIntoTheGroup": "该Trial有医生入组或在入组流程中,无法删除",
|
||||
"TrialHaveSite": "该Trial下面有Site,无法删除",
|
||||
"TrialHaveParticipants": "该Trial下面有参与者,无法删除",
|
||||
|
@ -59,7 +59,7 @@
|
|||
|
||||
// TrialSiteService
|
||||
"CodeRepeated": "编码不允许重复",
|
||||
"CRCCanNotDeleted": "该站点已与CRC关联,无法删除",
|
||||
"CRCCanNotDeleted": "该站点已与IC关联,无法删除",
|
||||
"SiteCanNotDeleted": "主题已添加到本网站,无法删除",
|
||||
"StudyCanNotDeleted": "该网站已上传研究,无法删除",
|
||||
|
||||
|
@ -67,18 +67,18 @@
|
|||
|
||||
// SubjectService
|
||||
"VisitNotConfirmed": "试访计划尚未确定。添加主题前请联系项目经理确认访问计划",
|
||||
"ExistedTrial": "在本试验中已经存在一个具有相同受试者ID的受试者.",
|
||||
"TheLastVisit": "该受试者已经有访视设置为末次访视,不允许将该访视设置为末次访视",
|
||||
"ImagesUploaded": "该受试者此访视后有影像上传,该访视不允许设置为末次访视",
|
||||
"ExistedTrial": "在本试验中已经存在一个具有相同患者ID的患者.",
|
||||
"TheLastVisit": "该患者已经有检查批次设置为末次检查批次,不允许将该检查批次设置为末次检查批次",
|
||||
"ImagesUploaded": "该患者此检查批次后有影像上传,该检查批次不允许设置为末次检查批次",
|
||||
"StudyImagesCanBotDeleted": "本课题已上传研究图像进行访问,无法删除",
|
||||
|
||||
// SubjectVisitService
|
||||
"ContainsVisitnum": "这个主题的访问计划已经包含了一个访问次数相同的访问",
|
||||
//该受试者已经有访视设置为末次访视,不允许将该访视设置为末次访视 这个在上面有 TheLastVisit
|
||||
"LastEvaluationNotAllowed": "设置末次评估后,不允许添加计划外访视",
|
||||
"CRCSubmit": "CRC提交后,不允许修改PD确认状态",
|
||||
"BacktrackingVisits": "回退的访视,不允许修改PD确认状态",
|
||||
"ImageUpload": "该受试者此访视后有影像上传,该访视不允许设置为末次访视",
|
||||
//该患者已经有检查批次设置为末次检查批次,不允许将该检查批次设置为末次检查批次 这个在上面有 TheLastVisit
|
||||
"LastEvaluationNotAllowed": "设置末次评估后,不允许添加计划外检查批次",
|
||||
"CRCSubmit": "IC提交后,不允许修改PD确认状态",
|
||||
"BacktrackingVisits": "回退的检查批次,不允许修改PD确认状态",
|
||||
"ImageUpload": "该患者此检查批次后有影像上传,该检查批次不允许设置为末次检查批次",
|
||||
"AssociatedUploaded": "本次访问与上传的研究图片有关,无法删除",
|
||||
"InPlanCanNotDeleted": "此访问为InPlan,不能删除",
|
||||
|
||||
|
@ -86,12 +86,12 @@
|
|||
"OnlyInitializing": "只有“初始化中”和“正在进行中”才能进行操作",
|
||||
"AccordWithVisitNum": "对于访问计划,具有较大VisitNum的VisitDay应该大于具有较小VisitNum的VisitDay",
|
||||
"same/VisitName": "当前访问计划中已经存在具有相同VisitName/VisitNum的访问",
|
||||
"AlreadyBaseline": "已访视是当前访视计划的基线",
|
||||
"IsUploadVideo": "有CRC已经为基线上传了影像数据,不允许修改基线",
|
||||
"VisitHasBeenExecuted": "访问计划已分配给受试者并执行",
|
||||
"AlreadyBaseline": "已检查批次是当前检查批次计划的基线",
|
||||
"IsUploadVideo": "有IC已经为基线上传了影像数据,不允许修改基线",
|
||||
"VisitHasBeenExecuted": "访问计划已分配给患者并执行",
|
||||
"OnlyProgressCanEdit": "仅仅在项目初始化或者进行中时,才允许修改确认",
|
||||
"NoBaselineNoConfirmation": "没有基线,不允许确认",
|
||||
"NotConfirmedCanNotVisit": "项目配置未确认,不允许确认访视计划",
|
||||
"NotConfirmedCanNotVisit": "项目配置未确认,不允许确认检查批次计划",
|
||||
"VisitDayNotMinimum": "基线VisitDay 不是最小的, 不允许确认",
|
||||
|
||||
|
||||
|
@ -122,11 +122,11 @@
|
|||
|
||||
// QCOperationService
|
||||
"AuditQuestionMust": "必须填写审核问题,并保存,否则不允许添加质疑",
|
||||
"VisitNoClose": "当前访视有未关闭的 同意CRC上传的质疑,不允许再次添加质疑",
|
||||
"NotFinish": "CRC申请重传的/QC同意重传的质疑,在CRC设置重传完成前不允许关闭质疑",
|
||||
"VisitNoClose": "当前检查批次有未关闭的 同意IC上传的质疑,不允许再次添加质疑",
|
||||
"NotFinish": "IC申请重传的/QC同意重传的质疑,在IC设置重传完成前不允许关闭质疑",
|
||||
"QCHasBeenReplied": "此QC质询已回复",
|
||||
"OperationUserMustBeCRC/PM": "一致性核查对话操作用户 只允许 CRC/PM",
|
||||
"CanNotCloseQuery": "执行一致性核查的访视 不允许关闭质疑",
|
||||
"OperationUserMustBeCRC/PM": "一致性核查对话操作用户 只允许 IC/PM",
|
||||
"CanNotCloseQuery": "执行一致性核查的检查批次 不允许关闭质疑",
|
||||
"OnlyPMCanSet": "只允许PM 手动设置一致性核查通过",
|
||||
"CanNotSettingConsistency": "当前是PM同意回退,不允许设置一致性核查通过",
|
||||
"ConsistencyNotClose": "致性核查质疑未关闭/审核状态不是通过,不允许设置一致性核查通过",
|
||||
|
@ -137,15 +137,15 @@
|
|||
"OnlyExcelCSV": "只允许Excel、 CSV!",
|
||||
"ExcelVerificationFailed": "请上传规定格式的Excel文件,保证有有效数据",
|
||||
"QCUnconfirmed": "QC问题未确认,不允许领取任务",
|
||||
"MustBeFinish": "您已经领取了其他受试者,完成后才允许领取新的受试者",
|
||||
"MustBeFinish": "您已经领取了其他患者,完成后才允许领取新的患者",
|
||||
"BeReceive": "当前已被领取,不允许领取",
|
||||
"CancelQCTask": "项目配置为不审,没有领取或者取消QC Task",
|
||||
"FirstTriaPassed": "初审已通过,不能继续领取",
|
||||
"CanNotReceive": "项目配置为单审,不满足SubmmitState:已提交 或者 AuditState:待审核/审核中, 不允许领取,请刷新界面",
|
||||
"MustBeDifferent": "复审不能和初审是同一个人",
|
||||
"IsNotSatisfied": "项目配置为复审,不满足提交状态:已提交 或者 审核状态:待审核/QC中, 不允许领取,请刷新界面",
|
||||
"VisitNotUploaded": "有访视未上传任何Dicom/非Dicom数据 不允许提交",
|
||||
"MandatoryFailed": "项目配置了需要填写首次给药日期 但是受试者没有填写首次给药日期,不允许提交",
|
||||
"VisitNotUploaded": "有检查批次未上传任何Dicom/非Dicom数据 不允许提交",
|
||||
"MandatoryFailed": "项目配置了需要填写首次给药日期 但是患者没有填写首次给药日期,不允许提交",
|
||||
"YouBeenRemoved": "您已经被移出项目,不允许该操作",
|
||||
"QuestionsNotClosed": "有质疑未关闭,不允许该操作",
|
||||
"CanNotSetQCPassed": "不审状态下,不允许设置为QC Passed",
|
||||
|
@ -156,8 +156,8 @@
|
|||
"CanNotSetQCFailed": "不审状态下,不允许设置为QC Failed",
|
||||
"NotInPrimaryQCQCFailed": "项目配置为单审 当前审核状态不为 InPrimaryQC,不能变更到 QCFailed",
|
||||
"TrialIsDoubleCheckCanNotQCFailed{0}": "项目配置为双审 当前审核状态为 {0},不能变更到 QCFailed",
|
||||
"CRCHasBeenSubmitted": "CRC已提交了 不能修改入组确认状态",
|
||||
"CannotBeChangedPD": "回退的访视,不允许修改PD确认状态",
|
||||
"CRCHasBeenSubmitted": "IC已提交了 不能修改入组确认状态",
|
||||
"CannotBeChangedPD": "回退的检查批次,不允许修改PD确认状态",
|
||||
"OtherQCProcessAudit": "其他QC正在进行审核,当前操作不允许",
|
||||
"ForwardFailed": "转发失败",
|
||||
|
||||
|
@ -185,9 +185,9 @@
|
|||
|
||||
//StudyListService
|
||||
|
||||
"TimeTooLow": "当前访视检查时间不能小于该访视之前检查的时间,请核对检查数据是否有误",
|
||||
"TimeTooLow": "当前检查批次检查时间不能小于该检查批次之前检查的时间,请核对检查数据是否有误",
|
||||
"SomeoneLoading": "当前有人正在上传归档该检查!",
|
||||
"VisitEnd": "受试者访视结束,不允许上传!",
|
||||
"VisitEnd": "患者检查批次结束,不允许上传!",
|
||||
"DICOMUploaded{0}{1}{2}{3}": "{0}:此DICOM图片已上传并分配给课题{2}(研究ID:{3})的{1},课题{2}无法继续上传并分配给他人。",
|
||||
|
||||
//StudyService
|
||||
|
@ -195,15 +195,15 @@
|
|||
//SystemAnonymizationService
|
||||
|
||||
//ReadingImageTaskService
|
||||
"ReadingImage_NotVisit": "系统调用错误,当前任务不是访视任务。",
|
||||
"ReadingImage_NotVisit": "系统调用错误,当前任务不是检查批次任务。",
|
||||
"ReadingImage_CantSplit": "当前任务是基线任务,不能执行分裂病灶的操作。",
|
||||
"ReadingImage_BeSigned": "当前任务已经签名,请勿重复提交。",
|
||||
"ReadingImage_Beinvalid": "当前任务已失效,不能执行阅片。",
|
||||
"ReadingImage_NotaTask": "合并的病灶并非同一个访视任务",
|
||||
"ReadingImage_NotaTask": "合并的病灶并非同一个检查批次任务",
|
||||
"ReadingImage_DeleteError": "当前病灶分裂出其他病灶或者其他病灶合并到了当前病灶,删除失败。",
|
||||
"ReadingImage_Idnotcorrespond": "病灶标记添加失败,影像的Instance ID和Series ID不对应。",
|
||||
"ReadingImage_IsLymphNotbigger": "当前访视该淋巴结病灶的短径小于上一访视的值,不能设置为显著增大。",
|
||||
"ReadingImage_NotLymphNotbigger": "当前访视该非淋巴结病灶的长径小于上一访视的值,不能设置为显著增大。",
|
||||
"ReadingImage_IsLymphNotbigger": "当前检查批次该淋巴结病灶的短径小于上一检查批次的值,不能设置为显著增大。",
|
||||
"ReadingImage_NotLymphNotbigger": "当前检查批次该非淋巴结病灶的长径小于上一检查批次的值,不能设置为显著增大。",
|
||||
"ReadingImage_Twice": "系统调用错误,提交的问题及答案重复。",
|
||||
"ReadingImage_MaxQuestion": "按照《独立影像评估章程》的相关规则,当前病灶类型的病灶数量不超过{0}个。",
|
||||
"ReadingImage_Maxlesion": "按照《独立影像评估章程》的相关规则,同一器官的靶病灶数量不超过{0}个,请确认",
|
||||
|
@ -212,7 +212,7 @@
|
|||
"ReadingImage_RequiredQuestion": "提交前,请完成\"{0}\"",
|
||||
"ReadingImage_ClinicalRead": "临床数据未阅读,请确认!",
|
||||
"ReadingImage_IDMust": "系统调用失败,当没有任务ID的时候,标准ID必传。",
|
||||
"ReadingImage_TaskFinish": "当前受试者所有阅片任务已完成,请知悉。",
|
||||
"ReadingImage_TaskFinish": "当前患者所有阅片任务已完成,请知悉。",
|
||||
"ReadingImage_NeedRest": "您已连续阅片{0}个小时,请休息{1}分钟后,再继续阅片。",
|
||||
//ReadingJudgeTaskService
|
||||
"ReadingJudge_SouceIdNull": "系统调用失败,当前裁判的全局任务的SouceId为null。",
|
||||
|
|
|
@ -209,10 +209,10 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
{
|
||||
public Guid TrialId { get; set; }
|
||||
|
||||
//针对访视产生任务的 有用
|
||||
//针对检查批次产生任务的 有用
|
||||
public bool IsAssignSubjectToDoctor { get; set; }
|
||||
|
||||
//访视任务产生的时候传递
|
||||
//检查批次任务产生的时候传递
|
||||
|
||||
public List<VisitGenerataTaskDTO> VisitGenerataTaskList { get; set; } = new List<VisitGenerataTaskDTO>();
|
||||
|
||||
|
|
|
@ -82,13 +82,13 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
public ReadingTool? ReadingTool { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务展示访视 读片任务显示是否顺序
|
||||
/// 任务展示检查批次 读片任务显示是否顺序
|
||||
/// </summary>
|
||||
public bool IsReadingTaskViewInOrder { get; set; } = true;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 阅片是否显示受试者信息
|
||||
/// 阅片是否显示患者信息
|
||||
/// </summary>
|
||||
public bool IsReadingShowSubjectInfo { get; set; } = false;
|
||||
|
||||
|
@ -178,7 +178,7 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
public ReReadingApplyState ReReadingApplyState { get; set; }
|
||||
public DateTime? SuggesteFinishedTime { get; set; }
|
||||
|
||||
//任务来源访视Id 方便回更访视读片状态
|
||||
//任务来源检查批次Id 方便回更检查批次读片状态
|
||||
public Guid? SourceSubjectVisitId { get; set; }
|
||||
public Guid? SouceReadModuleId { get; set; }
|
||||
|
||||
|
@ -378,6 +378,13 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
|
||||
public RequestReReadingResult? RequestReReadingResultEnum { get; set; }
|
||||
|
||||
|
||||
public DateTime? BeginSignTime { get; set; }
|
||||
|
||||
public DateTime? EndSignTime { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -135,11 +135,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
public async Task<List<TrialDoctorUserSelectView>> GetDoctorUserSelectList(Guid trialId, [FromServices] IRepository<Enroll> _enrollRepository)
|
||||
{
|
||||
var query = from enroll in _enrollRepository.Where(t => t.TrialId == trialId && t.EnrollStatus >= EnrollStatus.ConfirmIntoGroup)
|
||||
join user in _userRepository.AsQueryable() on enroll.DoctorId equals user.DoctorId
|
||||
join user in _userRepository.AsQueryable() on enroll.DoctorUserId equals user.Id
|
||||
select new TrialDoctorUserSelectView()
|
||||
{
|
||||
TrialId = enroll.TrialId,
|
||||
//ReadingType = enroll.Trial.ReadingType,
|
||||
DoctorUserId = user.Id,
|
||||
FullName = user.FullName,
|
||||
UserCode = user.UserCode,
|
||||
|
@ -149,7 +148,9 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
};
|
||||
|
||||
return await query.ToListAsync();
|
||||
var list= await query.ToListAsync();
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
|
@ -187,7 +188,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
#region 废弃
|
||||
/// <summary>
|
||||
/// 获取访视任务 应用Subject后 医生比率情况
|
||||
/// 获取检查批次任务 应用Subject后 医生比率情况
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
|
|
|
@ -182,7 +182,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
});
|
||||
|
||||
|
||||
//最后一个访视添加全局
|
||||
//最后一个检查批次添加全局
|
||||
if (filterObj.IsGenerateGlobalTask)
|
||||
{
|
||||
var lastTask = (subject.VisitTaskList.Take(filterObj.PlanVisitCount).Last()).Clone();
|
||||
|
@ -373,7 +373,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
}
|
||||
|
||||
//最后一个访视添加全局
|
||||
//最后一个检查批次添加全局
|
||||
|
||||
if (filterObj.IsGenerateGlobalTask)
|
||||
{
|
||||
|
@ -468,7 +468,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
Expression<Func<VisitTask, bool>> visitTaskFilter = comonTaskFilter.And(t => t.ReadingCategory == ReadingCategory.Visit);
|
||||
|
||||
////所选访视数量 的访视 其中必有一个访视后有全局任务
|
||||
////所选检查批次数量 的检查批次 其中必有一个检查批次后有全局任务
|
||||
//if (filterObj.IsHaveReadingPeriod == true)
|
||||
//{
|
||||
// //这里的过滤条件 不能用 where(comonTaskFilter) 会报错,奇怪的问题 只能重新写一遍
|
||||
|
@ -581,7 +581,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
Expression<Func<VisitTask, bool>> visitTaskFilter = comonTaskFilter.And(t => t.ReadingCategory == ReadingCategory.Visit);
|
||||
|
||||
|
||||
////所选访视数量 的访视 其中必有一个访视后有全局任务
|
||||
////所选检查批次数量 的检查批次 其中必有一个检查批次后有全局任务
|
||||
//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));
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 访视读片任务
|
||||
/// 检查批次读片任务
|
||||
/// </summary>
|
||||
[ApiExplorerSettings(GroupName = "Trial")]
|
||||
public class VisitTaskHelpeService : IVisitTaskHelpeService
|
||||
|
@ -93,7 +93,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//基于标准签名 产生任务
|
||||
public async Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId)
|
||||
{
|
||||
//找到一致性核查通过且没有产生任务的访视
|
||||
//找到一致性核查通过且没有产生任务的检查批次
|
||||
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();
|
||||
|
||||
|
@ -123,28 +123,30 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
foreach (var subjectVisit in subjectGroup.SubjectVisitList)
|
||||
{
|
||||
var blindTaskName = string.Empty;
|
||||
//var blindTaskName = string.Empty;
|
||||
|
||||
var blindTaskName = subjectVisit.VisitName;
|
||||
|
||||
var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.TrialReadingCriterionId, clinicalDataConfirmList);
|
||||
var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.TrialReadingCriterionId, clinicalDataConfirmList, subjectVisit.Id, trialId);
|
||||
|
||||
if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0)
|
||||
{
|
||||
blindTaskName = visitBlindConfig.BlindBaseLineName;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
|
||||
{
|
||||
blindTaskName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(subjectVisit.VisitNum);
|
||||
}
|
||||
else
|
||||
{
|
||||
blindTaskName = visitBlindConfig.BlindFollowUpPrefix;
|
||||
}
|
||||
}
|
||||
//if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0)
|
||||
//{
|
||||
// blindTaskName = visitBlindConfig.BlindBaseLineName;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
|
||||
// {
|
||||
// blindTaskName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(subjectVisit.VisitNum);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// blindTaskName = visitBlindConfig.BlindFollowUpPrefix;
|
||||
// }
|
||||
//}
|
||||
|
||||
//每个访视 根据项目配置生成任务 双审生成两个
|
||||
//每个检查批次 根据项目配置生成任务 双审生成两个
|
||||
|
||||
TaskUrgentType? taskUrgentType = null;
|
||||
|
||||
|
@ -321,7 +323,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
private bool IsNeedClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, Guid trialReadingCriterionId, List<ClinicalDataTrialSet> trialClinicalDataSetList)
|
||||
{
|
||||
//访视
|
||||
//检查批次
|
||||
if (readingCategory == ReadingCategory.Visit)
|
||||
{
|
||||
if (isbaseLine)
|
||||
|
@ -373,16 +375,16 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
var needSignCount = 0;
|
||||
|
||||
//CRC 的自动签名 不用管 只用处理PM的就好
|
||||
//IC 的自动签名 不用管 只用处理PM的就好
|
||||
var haveSignedCount = _readingClinicalDataRepository
|
||||
.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 (isbaseLine)
|
||||
{
|
||||
//CRC 的自动签名 不用管 只用处理PM 的就好
|
||||
//IC 的自动签名 不用管 只用处理PM 的就好
|
||||
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && t.UploadRole == UploadRole.PM).Count();
|
||||
}
|
||||
else
|
||||
|
@ -412,7 +414,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCriterionId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead && t.UploadRole == UploadRole.PM).Count();
|
||||
}
|
||||
|
||||
//可能仅仅CRC 基线 没有PM
|
||||
//可能仅仅IC 基线 没有PM
|
||||
if (needSignCount == haveSignedCount /*&& needSignCount != 0*/)
|
||||
{
|
||||
isClinicalDataSign = true;
|
||||
|
@ -499,7 +501,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
{
|
||||
case GenerateTaskCategory.Visit:
|
||||
|
||||
//每个Subject 的每个访视 都要根据每个标准进行任务的生成 和分配(考虑回退后 的分配)
|
||||
//每个Subject 的每个检查批次 都要根据每个标准进行任务的生成 和分配(考虑回退后 的分配)
|
||||
|
||||
|
||||
foreach (var subjectGroup in generateTaskCommand.VisitGenerataTaskList.GroupBy(t => t.SubjectId).Select(g => new { SubjectId = g.Key, SubjectVisitList = g.ToList() }))
|
||||
|
@ -542,30 +544,30 @@ namespace IRaCIS.Core.Application.Service
|
|||
var assignConfigList = await _subjectUserRepository.Where(t => t.TrialId == trialId && t.TrialReadingCriterionId == trialReadingCriterionConfig.TrialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.OrignalSubjectUserId == null && t.IsConfirmed).Select(u => new { u.DoctorUserId, u.ArmEnum }).ToListAsync();
|
||||
|
||||
|
||||
var blindTaskName = string.Empty;
|
||||
var blindTaskName = subjectVisit.VisitName;
|
||||
|
||||
var isNeedClinicalDataSign = IsNeedClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.TrialReadingCriterionId, clinicalDataConfirmList);
|
||||
var isClinicalDataSign = IsClinicalDataSign(ReadingCategory.Visit, subjectVisit.IsBaseLine, trialReadingCriterionConfig.TrialReadingCriterionId, clinicalDataConfirmList, subjectVisit.Id, trialId);
|
||||
|
||||
|
||||
if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0)
|
||||
{
|
||||
blindTaskName = visitBlindConfig.BlindBaseLineName;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
|
||||
{
|
||||
blindTaskName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(subjectVisit.VisitNum);
|
||||
}
|
||||
else
|
||||
{
|
||||
blindTaskName = visitBlindConfig.BlindFollowUpPrefix;
|
||||
}
|
||||
}
|
||||
//if (visitNumList.IndexOf(subjectVisit.VisitNum) == 0)
|
||||
//{
|
||||
// blindTaskName = visitBlindConfig.BlindBaseLineName;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// if (trialReadingCriterionConfig.IsReadingTaskViewInOrder)
|
||||
// {
|
||||
// blindTaskName = visitBlindConfig.BlindFollowUpPrefix + " " + visitNumList.IndexOf(subjectVisit.VisitNum);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// blindTaskName = visitBlindConfig.BlindFollowUpPrefix;
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
//每个访视 根据项目配置生成任务 双审生成两个
|
||||
//每个检查批次 根据项目配置生成任务 双审生成两个
|
||||
|
||||
//双重 可能有一个人的任务没分配,然后影像回退不会影响未分配的任务,所以生成的时候 要进行判断 不能每次都生成两个
|
||||
if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Double)
|
||||
|
@ -661,25 +663,25 @@ namespace IRaCIS.Core.Application.Service
|
|||
if (assignConfigList.Count > 0 && trialReadingCriterionConfig.IsFollowVisitAutoAssign)
|
||||
{
|
||||
|
||||
#region 后续访视 未分配的进行再次分配,重置的或者失效的 需要重新生成新的任务 (PM 有序退回 或者PM 有序 申请重阅)
|
||||
#region 后续检查批次 未分配的进行再次分配,重置的或者失效的 需要重新生成新的任务 (PM 有序退回 或者PM 有序 申请重阅)
|
||||
|
||||
|
||||
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();
|
||||
|
||||
//之前有回退的,那么当前访视任务生成但是不分配
|
||||
//之前有回退的,那么当前检查批次任务生成但是不分配
|
||||
if (beforeBackVisitTask != null)
|
||||
{
|
||||
//不用进行额外处理
|
||||
|
||||
//访视2 PM 回退 基线回退 访视2先一致性核查通过,生成访视2任务,但是不分配
|
||||
//检查批次2 PM 回退 基线回退 检查批次2先一致性核查通过,生成检查批次2任务,但是不分配
|
||||
}
|
||||
else
|
||||
{
|
||||
#region 当前访视根据配置规则分配出去
|
||||
#region 当前检查批次根据配置规则分配出去
|
||||
|
||||
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
|
||||
|
||||
|
@ -704,12 +706,12 @@ namespace IRaCIS.Core.Application.Service
|
|||
#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();
|
||||
|
||||
//大于当前访视 同时小于最近的未一致性核查通过的访视任务分配 或者生成
|
||||
//大于当前检查批次 同时小于最近的未一致性核查通过的检查批次任务分配 或者生成
|
||||
|
||||
//存在退回访视1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是访视1还未通过时 生成任务
|
||||
//存在退回检查批次1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是检查批次1还未通过时 生成任务
|
||||
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)
|
||||
.WhereIf(followBackVisitTask != null, t => t.VisitTaskNum < followBackVisitTask.VisitTaskNum)
|
||||
|
@ -717,7 +719,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum);
|
||||
|
||||
//每个访视去判断 是分配还是生成(因为影响哪里有些是取消分配,有些是重阅重置需要重新生成)
|
||||
//每个检查批次去判断 是分配还是生成(因为影响哪里有些是取消分配,有些是重阅重置需要重新生成)
|
||||
foreach (var visitGroup in followVisitGroup)
|
||||
{
|
||||
|
||||
|
@ -746,7 +748,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
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))
|
||||
{
|
||||
//不做处理
|
||||
|
@ -815,7 +817,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
}
|
||||
|
||||
//如果后续访视已分配有效 就不用处理
|
||||
//如果后续检查批次已分配有效 就不用处理
|
||||
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.DoubleReadingArm2))
|
||||
{
|
||||
//不做处理
|
||||
|
@ -916,7 +918,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
}
|
||||
else
|
||||
//后续访视不自动分配,或者配置的医生数量不足,就不进行分配
|
||||
//后续检查批次不自动分配,或者配置的医生数量不足,就不进行分配
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -991,17 +993,17 @@ namespace IRaCIS.Core.Application.Service
|
|||
if (assignConfigList.Count > 0)
|
||||
{
|
||||
|
||||
#region 重阅/退回的时候,需要将取消分配的访视类型的 任务重新分配
|
||||
#region 重阅/退回的时候,需要将取消分配的检查批次类型的 任务重新分配
|
||||
|
||||
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();
|
||||
|
||||
|
||||
if (beforeBackVisitTask == null)
|
||||
{
|
||||
#region 访视2 PM 回退 基线回退 访视2先一致性核查通过,生成访视2任务,但是不分配
|
||||
#region 检查批次2 PM 回退 基线回退 检查批次2先一致性核查通过,生成检查批次2任务,但是不分配
|
||||
|
||||
var defaultState = trialReadingCriterionConfig.FollowVisitAutoAssignDefaultState == TaskAllocateDefaultState.InitAllocated ? TaskAllocationState.InitAllocated : TaskAllocationState.Allocated;
|
||||
|
||||
|
@ -1023,7 +1025,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();
|
||||
|
||||
//存在退回访视1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是访视1还未通过时 生成任务
|
||||
//存在退回检查批次1 又退回基线 这种情况 生成任务 考虑基线先一致性核查通过,但是检查批次1还未通过时 生成任务
|
||||
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)
|
||||
.WhereIf(followBackVisitTask != null, t => t.VisitTaskNum < followBackVisitTask.VisitTaskNum)
|
||||
|
@ -1031,12 +1033,12 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
var followVisitGroup = followVisitTaskList.GroupBy(t => t.VisitTaskNum);
|
||||
|
||||
//每个访视去判断 是分配还是生成
|
||||
//每个检查批次去判断 是分配还是生成
|
||||
|
||||
|
||||
foreach (var visitGroup in followVisitGroup)
|
||||
{
|
||||
//如果后续访视已分配有效 就不用处理
|
||||
//如果后续检查批次已分配有效 就不用处理
|
||||
if (visitGroup.Any(t => t.TaskState == TaskState.Effect && t.TaskAllocationState == TaskAllocationState.Allocated && t.ArmEnum == Arm.SingleReadingArm))
|
||||
{
|
||||
//不做处理
|
||||
|
@ -1096,7 +1098,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
|
||||
}
|
||||
//之前有回退的 后续访视不生成或者分配 当前访视生成但是不分配出去
|
||||
//之前有回退的 后续检查批次不生成或者分配 当前检查批次生成但是不分配出去
|
||||
else
|
||||
{
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ using IRaCIS.Core.Domain.Share.Reading;
|
|||
namespace IRaCIS.Core.Application.Service.Allocation
|
||||
{
|
||||
/// <summary>
|
||||
/// 访视读片任务
|
||||
/// 检查批次读片任务
|
||||
/// </summary>
|
||||
[ApiExplorerSettings(GroupName = "Trial")]
|
||||
public class VisitTaskService : BaseService, IVisitTaskService
|
||||
|
@ -166,7 +166,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
//if (inOrder)
|
||||
//{
|
||||
// //针对有序阅片 只分配< 最小的 不是一致性核查通过状态 和不是失访 的访视 的任务
|
||||
// //针对有序阅片 只分配< 最小的 不是一致性核查通过状态 和不是失访 的检查批次 的任务
|
||||
// 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();
|
||||
|
@ -312,10 +312,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
throw new BusinessValidationFailedException("出现脏数据 任务来源字段没有值");
|
||||
}
|
||||
|
||||
//PM 回退了 但是还没生成任务 当前任务编号前有访视进行了回退就不允许分配
|
||||
//PM 回退了 但是还没生成任务 当前任务编号前有检查批次进行了回退就不允许分配
|
||||
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 其他检查批次 绑定的医生 也同时变更?
|
||||
|
||||
|
||||
}
|
||||
|
@ -618,7 +618,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 访视任务
|
||||
/// 检查批次任务
|
||||
/// </summary>
|
||||
/// <param name="queryVisitTask"></param>
|
||||
/// <param name="_visitTaskCommonService"></param>
|
||||
|
@ -626,7 +626,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
[HttpPost]
|
||||
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();
|
||||
|
||||
//之前没有生成任务的逻辑 但是现在加了,任务要自动生成
|
||||
|
@ -735,8 +735,11 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
|
||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
|
||||
.WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate))
|
||||
.WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
|
||||
.WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
|
||||
.WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime >= queryVisitTask.BeginAllocateDate)
|
||||
.WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime <= queryVisitTask.EndAllocateDate)
|
||||
.WhereIf(queryVisitTask.TaskCode != null, t => t.TaskCode.Contains(queryVisitTask.TaskCode) )
|
||||
.WhereIf(queryVisitTask.BeginSignTime != null, t => t.SignTime >= queryVisitTask.BeginSignTime)
|
||||
.WhereIf(queryVisitTask.EndSignTime != null, t => t.SignTime <= queryVisitTask.EndSignTime)
|
||||
.ProjectTo<ReadingTaskView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var defalutSortArray = new string[] { nameof(VisitTask.IsUrgent) + " desc", nameof(VisitTask.SubjectId), nameof(VisitTask.VisitTaskNum) };
|
||||
|
@ -1007,7 +1010,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.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 该标准的有效的任务 这个字段需要在签名的时候维护 采取这种方式 统计数字灵活
|
||||
//.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));
|
||||
|
@ -1215,18 +1218,18 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
if (task.ReadingCategory != ReadingCategory.Visit)
|
||||
{
|
||||
throw new BusinessValidationFailedException("PM 仅仅允许对访视类型的任务申请重阅");
|
||||
throw new BusinessValidationFailedException("PM 仅仅允许对检查批次类型的任务申请重阅");
|
||||
}
|
||||
|
||||
|
||||
// 有序 一个受试者访视重阅未处理完,不能申请其他的
|
||||
// 有序 一个患者检查批次重阅未处理完,不能申请其他的
|
||||
if (criterionConfig.IsReadingTaskViewInOrder)
|
||||
{
|
||||
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.ReadingTaskState == ReadingTaskState.HaveSigned && t.RequestReReadingType == RequestReReadingType.TrialGroupApply && t.RequestReReadingResultEnum == RequestReReadingResult.Default))
|
||||
{
|
||||
return ResponseOutput.NotOk("当前为有序阅片,该受试者已有访视已申请重阅还未处理(项目组申请),暂不能继续申请重阅");
|
||||
return ResponseOutput.NotOk("当前为有序阅片,该患者已有检查批次已申请重阅还未处理(项目组申请),暂不能继续申请重阅");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1247,7 +1250,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
&& t.OriginalReReadingTask.TrialReadingCriterionId == task.TrialReadingCriterionId
|
||||
&& t.OriginalReReadingTask.ReadingTaskState == ReadingTaskState.HaveSigned && t.RequestReReadingType == RequestReReadingType.DocotorApply && t.RequestReReadingResultEnum == RequestReReadingResult.Default))
|
||||
{
|
||||
return ResponseOutput.NotOk("当前为有序阅片,该受试者已有访视已申请重阅还未处理,暂不能继续申请重阅");
|
||||
return ResponseOutput.NotOk("当前为有序阅片,该患者已有检查批次已申请重阅还未处理,暂不能继续申请重阅");
|
||||
}
|
||||
|
||||
|
||||
|
@ -1277,17 +1280,17 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
if (task.ReadingCategory == ReadingCategory.Global && 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)))
|
||||
{
|
||||
throw new BusinessValidationFailedException("有序阅片,只允许申请该受试者阅片人最后一次肿瘤学任务重阅");
|
||||
throw new BusinessValidationFailedException("有序阅片,只允许申请该患者阅片人最后一次完成肿瘤学任务重阅");
|
||||
}
|
||||
|
||||
if (task.ReadingCategory == ReadingCategory.Judge && await _visitTaskRepository.AnyAsync(filterExpression.And(t => t.ReadingCategory == ReadingCategory.Judge)))
|
||||
{
|
||||
throw new BusinessValidationFailedException("有序阅片,只允许申请该受试者阅片人最后一次裁判的任务重阅");
|
||||
throw new BusinessValidationFailedException("有序阅片,只允许申请该患者阅片人最后一次完成裁判的任务重阅");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1295,7 +1298,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
{
|
||||
if (task.ReadingCategory != ReadingCategory.Visit && task.ReadingCategory != ReadingCategory.Global)
|
||||
{
|
||||
throw new BusinessValidationFailedException("无序阅片,仅仅允许IR 申请 全局和访视类型类别的任务进行重阅");
|
||||
throw new BusinessValidationFailedException("无序阅片,仅仅允许IR 申请 全局和检查批次类型类别的任务进行重阅");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1442,10 +1445,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
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))
|
||||
{
|
||||
#region PM 申请两个IR 同一访视,其他人的申请记录也设置为同意 不会出现,因为在未处理前 一个Subject只能申请一次
|
||||
#region PM 申请两个IR 同一检查批次,其他人的申请记录也设置为同意 不会出现,因为在未处理前 一个Subject只能申请一次
|
||||
|
||||
|
||||
// await _visitTaskReReadingRepository.BatchUpdateNoTrackingAsync(t => t.OriginalReReadingTask.SubjectId == origenalTask.SubjectId &&
|
||||
|
@ -1458,7 +1461,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
// RequestReReadingResultEnum = RequestReReadingResult.Agree,
|
||||
//});
|
||||
|
||||
// //只更新 PM 申请 同一访视的数据
|
||||
// //只更新 PM 申请 同一检查批次的数据
|
||||
// await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == origenalTask.SubjectId &&
|
||||
// t.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed &&
|
||||
// t.TrialReadingCriterionId == origenalTask.TrialReadingCriterionId &&
|
||||
|
@ -1472,7 +1475,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
#endregion
|
||||
|
||||
// 不管有序 无序 都会 回退访视
|
||||
// 不管有序 无序 都会 回退检查批次
|
||||
if (origenalTask.ReadingCategory == ReadingCategory.Visit)
|
||||
{
|
||||
//执行类似一致性核查回退流程
|
||||
|
@ -1480,7 +1483,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
}
|
||||
else
|
||||
{
|
||||
throw new BusinessValidationFailedException("仅允许同意访视类型的任务重阅");
|
||||
throw new BusinessValidationFailedException("仅允许同意检查批次类型的任务重阅");
|
||||
}
|
||||
|
||||
//有序阅片
|
||||
|
@ -1488,7 +1491,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
{
|
||||
|
||||
|
||||
//访视影响当前以及当前之后的 两个阅片人的
|
||||
//检查批次影响当前以及当前之后的 两个阅片人的
|
||||
filterExpression = filterExpression.And(t => t.VisitTaskNum >= origenalTask.VisitTaskNum);
|
||||
|
||||
|
||||
|
@ -1520,7 +1523,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
}
|
||||
|
||||
//申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配
|
||||
//申请的检查批次 要不是重阅重置,要不就是失效 不会存在取消分配
|
||||
if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != origenalTask.VisitTaskNum)
|
||||
{
|
||||
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||
|
@ -1544,7 +1547,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
trakingOrigenalTask?.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.CancelAssign });
|
||||
}
|
||||
}
|
||||
//当前访视
|
||||
//当前检查批次
|
||||
else
|
||||
{
|
||||
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||
|
@ -1623,10 +1626,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))
|
||||
{
|
||||
#region 两个IR 申请同一访视,其他人的申请记录也设置为同意
|
||||
#region 两个IR 申请同一检查批次,其他人的申请记录也设置为同意
|
||||
|
||||
|
||||
await _visitTaskReReadingRepository.BatchUpdateNoTrackingAsync(t => t.OriginalReReadingTask.SubjectId == origenalTask.SubjectId &&
|
||||
|
@ -1655,14 +1658,14 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
if (criterionConfig.IsReadingTaskViewInOrder)
|
||||
{
|
||||
|
||||
#region 有序 IR 申请 重阅 影响的其他访视查询
|
||||
#region 有序 IR 申请 重阅 影响的其他检查批次查询
|
||||
|
||||
|
||||
|
||||
switch (origenalTask.ReadingCategory)
|
||||
{
|
||||
case ReadingCategory.Visit:
|
||||
//影响后续访视已经读完的,正在读的,未读的不做处理 以及其他类型任务
|
||||
//影响后续检查批次已经读完的,正在读的,未读的不做处理 以及其他类型任务
|
||||
filterExpression = filterExpression.And(t => t.VisitTaskNum >= origenalTask.VisitTaskNum &&
|
||||
((t.DoctorUserId == origenalTask.DoctorUserId && ((t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState != ReadingTaskState.WaitReading) || t.ReadingCategory == ReadingCategory.Global))
|
||||
||
|
||||
|
@ -1671,7 +1674,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
break;
|
||||
|
||||
|
||||
//不影响后续访视: (t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState != ReadingTaskState.WaitReading) ||
|
||||
//不影响后续检查批次: (t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState != ReadingTaskState.WaitReading) ||
|
||||
case ReadingCategory.Global:
|
||||
|
||||
filterExpression = filterExpression.And(t => t.VisitTaskNum > origenalTask.VisitTaskNum &&
|
||||
|
@ -1681,7 +1684,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
case ReadingCategory.Oncology:
|
||||
|
||||
//仅仅影响自己 后续任务如果是访视任务、全局任务或裁判任务,均不处理
|
||||
//仅仅影响自己 后续任务如果是检查批次任务、全局任务或裁判任务,均不处理
|
||||
filterExpression = filterExpression.And(t => t.Id == origenalTask.Id);
|
||||
break;
|
||||
|
||||
|
@ -1806,7 +1809,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
|
||||
}
|
||||
//无序阅片 只会申请访视类型和裁判类型的任务 注意这里有一致性分析的申请同意
|
||||
//无序阅片 只会申请检查批次类型和裁判类型的任务 注意这里有一致性分析的申请同意
|
||||
else
|
||||
{
|
||||
//1.当前任务及裁判任务
|
||||
|
@ -1970,13 +1973,13 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
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))
|
||||
{
|
||||
return ResponseOutput.NotOk("当前访视已回退到影像上传,不允许继续回退!");
|
||||
return ResponseOutput.NotOk("当前检查批次已回退到影像上传,不允许继续回退!");
|
||||
}
|
||||
|
||||
|
||||
|
@ -1992,7 +1995,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
#region 有序 无序公用流程
|
||||
|
||||
|
||||
//执行类似一致性核查回退流程 回退访视到影像上传流程
|
||||
//执行类似一致性核查回退流程 回退检查批次到影像上传流程
|
||||
await VisitBackAsync(task.SourceSubjectVisitId);
|
||||
|
||||
#endregion
|
||||
|
@ -2018,7 +2021,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
#region 方式一
|
||||
//foreach (var influenceTask in influenceTaskList)
|
||||
//{
|
||||
// //申请任务的阅片人 后续任务肯定没做, 只有访视任务,没有其他任务 取消分配
|
||||
// //申请任务的阅片人 后续任务肯定没做, 只有检查批次任务,没有其他任务 取消分配
|
||||
// if (influenceTask.DoctorUserId == task.DoctorUserId)
|
||||
// {
|
||||
|
||||
|
@ -2122,7 +2125,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
foreach (var influenceTask in influenceTaskList)
|
||||
{
|
||||
|
||||
//同意的访视 因为要记录具体的操作,所以废弃
|
||||
//同意的检查批次 因为要记录具体的操作,所以废弃
|
||||
if (influenceTask.Id == task.Id)
|
||||
{
|
||||
//influenceTaskList.ForEach(t =>
|
||||
|
@ -2140,10 +2143,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
influenceTask.IsPMSetBack = true;
|
||||
}
|
||||
|
||||
//申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配
|
||||
//申请的检查批次 要不是重阅重置,要不就是失效 不会存在取消分配
|
||||
if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != task.VisitTaskNum)
|
||||
{
|
||||
//后续访视处理访视
|
||||
//后续检查批次处理检查批次
|
||||
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||
{
|
||||
influenceTask.TaskState = TaskState.HaveReturned;
|
||||
|
@ -2167,7 +2170,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
}
|
||||
else
|
||||
{
|
||||
//申请的访视 全局肿瘤学
|
||||
//申请的检查批次 全局肿瘤学
|
||||
|
||||
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||
{
|
||||
|
@ -2197,7 +2200,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
//// 当前任务标为失效
|
||||
//task.TaskState = TaskState.Adbandon;
|
||||
|
||||
////考虑该访视 另外一个阅片人的任务
|
||||
////考虑该检查批次 另外一个阅片人的任务
|
||||
//var otherReviewerTask = await _visitTaskRepository.FirstOrDefaultAsync(t => t.SourceSubjectVisitId == task.SourceSubjectVisitId && t.Id != task.Id && t.TaskState == TaskState.Effect);
|
||||
|
||||
|
||||
|
@ -2212,7 +2215,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();
|
||||
|
||||
|
@ -2236,7 +2239,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
origenalTask.TaskInfluenceList.Add(new TaskInfluence() { InfluenceTaskId = influenceTask.Id, OptType = ReReadingOrBackOptType.Abandon });
|
||||
}
|
||||
|
||||
////同意的访视
|
||||
////同意的检查批次
|
||||
//if (influenceTask.Id == task.Id)
|
||||
//{
|
||||
// currentVisitList.ForEach(t =>
|
||||
|
@ -2327,7 +2330,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 影响提示列表 重阅仅仅针对已完成的任务申请 退回针对的是未完成的(退回仅仅针对是访视类型的)
|
||||
/// 影响提示列表 重阅仅仅针对已完成的任务申请 退回针对的是未完成的(退回仅仅针对是检查批次类型的)
|
||||
/// </summary>
|
||||
/// <param name="taskId"></param>
|
||||
/// <param name="isReReading"> 重阅还是直接回退</param>
|
||||
|
@ -2347,7 +2350,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;
|
||||
|
||||
//是否是一致性分析任务 (一致性分析的任务 不会产生裁判 肿瘤学 仅仅有生成的访视和全局)
|
||||
//是否是一致性分析任务 (一致性分析的任务 不会产生裁判 肿瘤学 仅仅有生成的检查批次和全局)
|
||||
|
||||
filterExpression = filterExpression.And(t => t.IsAnalysisCreate == filterObj.IsAnalysisCreate);
|
||||
|
||||
|
@ -2364,7 +2367,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
{
|
||||
filterExpression = filterExpression.And(t => t.TrialReadingCriterionId == filterObj.TrialReadingCriterionId);
|
||||
|
||||
//当前任务及其之后的所有访视任务、全局任务、裁判任务、肿瘤学阅片任务
|
||||
//当前任务及其之后的所有检查批次任务、全局任务、裁判任务、肿瘤学阅片任务
|
||||
|
||||
//有序
|
||||
if (criterionConfig.IsReadingTaskViewInOrder)
|
||||
|
@ -2373,9 +2376,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
switch (filterObj.ReadingCategory)
|
||||
{
|
||||
case ReadingCategory.Visit:
|
||||
//影响当前医生 以及当前医生之后的 1、访视任务 已经读完的
|
||||
//影响当前医生 以及当前医生之后的 1、检查批次任务 已经读完的
|
||||
//2、后续任务如果是全局、肿瘤学阅片任务,状态为阅片完成标记为重阅重置;若在阅片中,则标记为失效;若为待阅片,则标记为失效;
|
||||
//3、当前任务、后续访视任务或者全局任务触发了裁判任务,若裁判任务状态为阅片完成,则标记为重阅重置;若在阅片中或待阅片,则标记为失效
|
||||
//3、当前任务、后续检查批次任务或者全局任务触发了裁判任务,若裁判任务状态为阅片完成,则标记为重阅重置;若在阅片中或待阅片,则标记为失效
|
||||
// filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum &&
|
||||
//((t.DoctorUserId == filterObj.DoctorUserId && ((t.ReadingCategory == ReadingCategory.Visit && t.ReadingTaskState == ReadingTaskState.HaveSigned) || t.ReadingCategory == ReadingCategory.Global))
|
||||
// ||
|
||||
|
@ -2398,7 +2401,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
case ReadingCategory.Global:
|
||||
|
||||
// 1、后续任务如果是访视任务,均不处理;
|
||||
// 1、后续任务如果是检查批次任务,均不处理;
|
||||
//2、后续任务如果是全局、状态为阅片完成则标记为重阅重置,若阅片中或待阅片则不处理;
|
||||
//3、当前任务或者全局任务触发了裁判任务,若裁判任务状态为阅片完成,则标记为重阅重置;若在阅片中或待阅片,则标记为失效
|
||||
//4、后续任务为肿瘤学阅片任务,状态为阅片完成标记为重阅重置;若在阅片中,则标记为失效;若为待阅片,则标记为失效;
|
||||
|
@ -2416,7 +2419,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
break;
|
||||
|
||||
//1、后续任务如果是访视任务、全局任务或裁判任务,均不处理;
|
||||
//1、后续任务如果是检查批次任务、全局任务或裁判任务,均不处理;
|
||||
case ReadingCategory.Oncology:
|
||||
|
||||
//仅仅影响自己
|
||||
|
@ -2426,7 +2429,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
//(只允许申请该阅片人最后一次完成裁判的任务重阅)申请的时候做了限制
|
||||
case ReadingCategory.Judge:
|
||||
|
||||
// 1、后续任务如果是访视任务、全局任务,均不处理;
|
||||
// 1、后续任务如果是检查批次任务、全局任务,均不处理;
|
||||
//2、后续若有肿瘤学阅片,若肿瘤学阅片任务状态为阅片完成,则标记为重阅重置;若为阅片中则标记为失效,如为待阅片,则取消分配
|
||||
|
||||
//裁判的影响自己 和后续肿瘤学阅片(不是自己做的)
|
||||
|
@ -2450,7 +2453,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
|
||||
//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)
|
||||
|| (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && applyId == null))
|
||||
|
@ -2462,7 +2465,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
{
|
||||
case ReadingCategory.Visit:
|
||||
|
||||
//访视影响当前以及当前之后的 两个阅片人的
|
||||
//检查批次影响当前以及当前之后的 两个阅片人的
|
||||
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum);
|
||||
|
||||
break;
|
||||
|
@ -2488,7 +2491,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
filterExpression = filterExpression.And(t => t.VisitTaskNum == filterObj.VisitTaskNum || t.VisitTaskNum == judegTaskNum);
|
||||
}
|
||||
|
||||
//throw new BusinessValidationFailedException("仅允许SPM CPM 同意 PM 申请的非 一致性分析的访视任务");
|
||||
//throw new BusinessValidationFailedException("仅允许SPM CPM 同意 PM 申请的非 一致性分析的检查批次任务");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -2500,7 +2503,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
}
|
||||
|
||||
|
||||
//退回影响 仅仅针对是访视类型的 影响多个标准的任务
|
||||
//退回影响 仅仅针对是检查批次类型的 影响多个标准的任务
|
||||
else
|
||||
{
|
||||
|
||||
|
@ -2514,10 +2517,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
//有序
|
||||
if (criterionConfig.IsReadingTaskViewInOrder)
|
||||
{
|
||||
// 当前任务及其之后的所有访视任务 两个阅片人的
|
||||
// 当前任务及其之后的所有检查批次任务 两个阅片人的
|
||||
|
||||
// 1.后续访视不处理
|
||||
//2.当前任务未完成,不会产生全局任务。后续任务均为访视任务,且均为待阅片,取消分配;
|
||||
// 1.后续检查批次不处理
|
||||
//2.当前任务未完成,不会产生全局任务。后续任务均为检查批次任务,且均为待阅片,取消分配;
|
||||
filterExpression = filterExpression.And(t => t.VisitTaskNum >= filterObj.VisitTaskNum);
|
||||
|
||||
|
||||
|
@ -2536,7 +2539,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
}
|
||||
else
|
||||
{
|
||||
throw new BusinessValidationFailedException("仅仅访视类型的任务支持PM退回");
|
||||
throw new BusinessValidationFailedException("仅仅检查批次类型的任务支持PM退回");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2593,7 +2596,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
//有序
|
||||
if (criterionConfig.IsReadingTaskViewInOrder)
|
||||
{
|
||||
//申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配
|
||||
//申请的检查批次 要不是重阅重置,要不就是失效 不会存在取消分配
|
||||
if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != filterObj.VisitTaskNum)
|
||||
{
|
||||
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||
|
@ -2641,10 +2644,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
//有序
|
||||
if (criterionConfig.IsReadingTaskViewInOrder)
|
||||
{
|
||||
//申请的访视 要不是重阅重置,要不就是失效 不会存在取消分配
|
||||
//申请的检查批次 要不是重阅重置,要不就是失效 不会存在取消分配
|
||||
if (influenceTask.ReadingCategory == ReadingCategory.Visit && influenceTask.VisitTaskNum != filterObj.VisitTaskNum)
|
||||
{
|
||||
//后续访视处理访视
|
||||
//后续检查批次处理检查批次
|
||||
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||
{
|
||||
influenceTask.OptType = ReReadingOrBackOptType.Return;
|
||||
|
@ -2660,7 +2663,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
|||
}
|
||||
else
|
||||
{
|
||||
//申请的访视 全局肿瘤学
|
||||
//申请的检查批次 全局肿瘤学
|
||||
|
||||
if (influenceTask.ReadingTaskState == ReadingTaskState.HaveSigned)
|
||||
{
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 影像上传列表 只导出已上传状态的访视记录
|
||||
/// 影像上传列表 只导出已上传状态的检查批次记录
|
||||
/// </summary>
|
||||
/// <param name="visitSearchDTO"></param>
|
||||
/// <param name="_commonDocumentRepository"></param>
|
||||
|
@ -128,7 +128,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 受试者信息导出表
|
||||
/// 患者信息导出表
|
||||
/// </summary>
|
||||
/// <param name="param"></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(param.Status != null, t => t.Status == param.Status)
|
||||
.WhereIf(param.SiteId != null, t => t.SiteId == param.SiteId)
|
||||
// CRC 只负责他管理site的受试者
|
||||
// IC 只负责他管理site的患者
|
||||
.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();
|
||||
|
||||
|
@ -166,7 +166,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
|
||||
///// <summary>
|
||||
///// 受试者 阅片期 进度表 导出
|
||||
///// 患者 阅片期 进度表 导出
|
||||
///// </summary>
|
||||
///// <param name="param"></param>
|
||||
///// <param name="_commonDocumentRepository"></param>
|
||||
|
@ -554,7 +554,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
.WhereIf(checkQuery.SiteId != null, t => t.SiteId == checkQuery.SiteId)
|
||||
.WhereIf(!string.IsNullOrEmpty(checkQuery.SubjectInfo), t => t.Subject.Code.Contains(checkQuery.SubjectInfo))
|
||||
.WhereIf(checkQuery.VisitPlanArray != null && checkQuery.VisitPlanArray?.Length > 0, svExpression)
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//IC 过滤负责的site
|
||||
.ProjectTo<PMKCheckEXportDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||
|
||||
list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitNum).ToList();
|
||||
|
@ -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 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.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
||||
|
@ -763,7 +763,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
//To do 根据任务Id 找对评估结果,这里需要考虑标准 以及对应的翻译
|
||||
|
||||
//基线和访视的评估结果翻译枚举 分别对应着
|
||||
//基线和检查批次的评估结果翻译枚举 分别对应着
|
||||
|
||||
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();
|
||||
|
||||
|
||||
//因为基线的评估结果是 是否存在疾病 而 其他访视的结果是 整体肿瘤评估结果 是用不同的枚举翻译的 所以这里手动翻译 不把翻译逻辑耦合到通用的翻译代码里面 在此特殊处理
|
||||
//因为基线的评估结果是 是否存在疾病 而 其他检查批次的结果是 整体肿瘤评估结果 是用不同的枚举翻译的 所以这里手动翻译 不把翻译逻辑耦合到通用的翻译代码里面 在此特殊处理
|
||||
|
||||
item.AgainEvaluateResult = selfAnalysisTask?.EvaluateResult ?? String.Empty;
|
||||
|
||||
//将自身一致性分析的字段 赋值到访视任务这个字段
|
||||
//将自身一致性分析的字段 赋值到检查批次任务这个字段
|
||||
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 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.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
|
||||
|
@ -846,7 +846,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
var newList = new List<GroupAnalysisExport>();
|
||||
|
||||
// 每个subject访视进行分组
|
||||
// 每个subject检查批次进行分组
|
||||
|
||||
foreach (var group in list.GroupBy(t => new { t.SubjectCode, t.VisitTaskNum, t.TaskName, t.ArmEnum })
|
||||
.OrderBy(g => g.Key.SubjectCode)
|
||||
|
@ -857,7 +857,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
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();
|
||||
|
||||
|
@ -929,8 +929,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
if (criterion.CriterionType == CriterionType.RECIST1Pointt1)
|
||||
{
|
||||
list.Add(new ExportDocumentDes() { Code = StaticData.Export.OverallTumorEvaluation_Export, ExportCatogory = ExportCatogory.OverallTumorEvaluation });
|
||||
list.Add(new ExportDocumentDes() { Code = StaticData.Export.RECIST1Point1EvaluationOfTumorEfficacy_Export, ExportCatogory = ExportCatogory.EvaluationOfTumorEfficacy });
|
||||
//list.Add(new ExportDocumentDes() { Code = StaticData.Export.OverallTumorEvaluation_Export, ExportCatogory = ExportCatogory.OverallTumorEvaluation });
|
||||
//list.Add(new ExportDocumentDes() { Code = StaticData.Export.RECIST1Point1EvaluationOfTumorEfficacy_Export, ExportCatogory = ExportCatogory.EvaluationOfTumorEfficacy });
|
||||
list.Add(new ExportDocumentDes() { Code = StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, ExportCatogory = ExportCatogory.DetailedOfEvaluatedLesion });
|
||||
}
|
||||
|
||||
|
@ -1009,7 +1009,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
exportInfo.List = list;
|
||||
|
||||
|
||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.OverallTumorEvaluation_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(OverallTumorEvaluationExport), criterion.CriterionType);
|
||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.OverallTumorEvaluation_Export, exportInfo, $"{exportInfo.TrialCode}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(OverallTumorEvaluationExport), criterion.CriterionType);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -1146,7 +1146,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
exportInfo.List = exportList;
|
||||
|
||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.RECIST1Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(RECIST1Point1DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
||||
|
||||
|
||||
}
|
||||
|
@ -1176,7 +1176,7 @@ namespace IRaCIS.Core.Application.Service.Common
|
|||
|
||||
exportInfo.List = exportList;
|
||||
|
||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.PCWG3Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PCWG3DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.PCWG3Point1DetailedOfEvaluatedLesion_Export, exportInfo, $"{exportInfo.TrialCode}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(PCWG3DetailedOfEvaluatedLesionExport), criterion.CriterionType);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -192,7 +192,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
EventHandler<MessageSentEventArgs> sucessHandle = (sender, args) =>
|
||||
{
|
||||
var code = verificationCode.ToString();
|
||||
var code = verificationCode.ToString().Trim();
|
||||
_ = _verificationCodeRepository.AddAsync(new VerificationCode()
|
||||
{
|
||||
CodeType = Core.Domain.Share.VerifyType.Email,
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
//--------------------------------------------------------------------
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using IRaCIS.Core.Infrastructure.Extention;
|
||||
using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
@ -25,7 +26,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public class UnionDocumentView : SystemDocumentAddOrEdit
|
||||
{
|
||||
public string FullFilePath { get; set; } = string.Empty;
|
||||
public string FullFilePath { get; set; }
|
||||
public DateTime CreateTime { get; set; }
|
||||
public DateTime UpdateTime { get; set; }
|
||||
|
||||
|
|
|
@ -151,7 +151,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
FileType = sysDoc.FileType.MappedValue,
|
||||
UpdateTime = sysDoc.UpdateTime,
|
||||
|
||||
FullFilePath = sysDoc.Path,
|
||||
FullFilePath = sysDoc.Path ,
|
||||
|
||||
ConfirmUserId = confirm.ConfirmUserId,
|
||||
ConfirmTime = confirm.ConfirmTime,
|
||||
|
|
|
@ -353,7 +353,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
var sendEmailConfig = new SMTPEmailConfig();
|
||||
|
||||
//收件人 如果是CRC CRA 要按照中心发送
|
||||
//收件人 如果是IC CRA 要按照中心发送
|
||||
var toUserTypeEnumList = emailConfig.TrialEmailNoticeUserList.Where(t => t.EmailUserType == EmailUserType.To).Select(c => c.UserType).ToList();
|
||||
|
||||
|
||||
|
@ -436,7 +436,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
if (businessScenarioEnum == CommonDocumentBusinessScenario.EnrollConfirmed)
|
||||
{
|
||||
sendEmailConfig.TopicDescription = $"【入组确认报告】关于{taskInfo.ResearchProgramNo}项目{taskInfo.SubjectCode}受试者";
|
||||
sendEmailConfig.TopicDescription = $"【入组确认报告】关于{taskInfo.ResearchProgramNo}项目{taskInfo.SubjectCode}患者";
|
||||
|
||||
using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile))
|
||||
{
|
||||
|
@ -450,7 +450,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
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))
|
||||
{
|
||||
|
@ -540,10 +540,10 @@ namespace IRaCIS.Core.Application.Service
|
|||
{
|
||||
|
||||
|
||||
//仲裁在访视上 就没有全局阅片 没有阅片期
|
||||
//仲裁在检查批次上 就没有全局阅片 没有阅片期
|
||||
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 &&
|
||||
(t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync();
|
||||
|
||||
|
@ -581,11 +581,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
//仲裁在阅片期
|
||||
else if (taskInfo.ArbitrationRule == ArbitrationRule.Reading)
|
||||
{
|
||||
//是访视任务 不可能是裁判任务(访视上不会生成裁判),也不会是全局任务(全局任务 SourceSubjectVisitId=null )
|
||||
//是检查批次任务 不可能是裁判任务(检查批次上不会生成裁判),也不会是全局任务(全局任务 SourceSubjectVisitId=null )
|
||||
if (taskInfo.SourceSubjectVisitId != null)
|
||||
{
|
||||
|
||||
//访视类型的任务 根本就不需要发送邮件
|
||||
//检查批次类型的任务 根本就不需要发送邮件
|
||||
|
||||
isNeedSend = false;
|
||||
|
||||
|
@ -648,7 +648,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
////单重
|
||||
//else if (taskInfo.ReadingType == ReadingMethod.Single)
|
||||
//{
|
||||
// //仲裁在访视上 或者在阅片期
|
||||
// //仲裁在检查批次上 或者在阅片期
|
||||
// if (taskInfo.ArbitrationRule != ArbitrationRule.None)
|
||||
// {
|
||||
|
||||
|
@ -656,21 +656,21 @@ namespace IRaCIS.Core.Application.Service
|
|||
// }
|
||||
|
||||
|
||||
// //要求PD 确认的访视 是截止访视 还是非截止访视(根据该访视有没有配置阅片期来判断)
|
||||
// //要求PD 确认的检查批次 是截止检查批次 还是非截止检查批次(根据该检查批次有没有配置阅片期来判断)
|
||||
|
||||
// if (taskInfo.ReadingCategory == ReadingCategory.Visit)
|
||||
// {
|
||||
// //存在阅片期 那么就是截止访视
|
||||
// //存在阅片期 那么就是截止检查批次
|
||||
// if (await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.SubjectVisitId == taskInfo.SourceSubjectVisitId && t.ReadingSetType == ReadingSetType.ImageReading).AnyAsync())
|
||||
// {
|
||||
// isNeedSend = false;
|
||||
// }
|
||||
// else//非截止访视 在访视读完后,发送
|
||||
// else//非截止检查批次 在检查批次读完后,发送
|
||||
// {
|
||||
// answer = await TranslatePdStateAsync(visitTaskId, ReadingCategory.Visit, taskInfo.CriterionType);
|
||||
// }
|
||||
// }
|
||||
// //截止访视 在访视读完,并完成全局阅片后发送全局的结果
|
||||
// //截止检查批次 在检查批次读完,并完成全局阅片后发送全局的结果
|
||||
// else if (taskInfo.ReadingCategory == ReadingCategory.Global)
|
||||
// {
|
||||
// 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);
|
||||
// }
|
||||
// //双重 截止访视只在阅片期的时候存在 要求PD确认的访视 肯定是非截止访视
|
||||
// //双重 截止检查批次只在阅片期的时候存在 要求PD确认的检查批次 肯定是非截止检查批次
|
||||
// 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
|
||||
// && (t.ReadingCategory == ReadingCategory.Visit || t.ReadingCategory == ReadingCategory.Judge)).ToListAsync();
|
||||
|
@ -748,7 +748,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
// }
|
||||
// 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();
|
||||
|
||||
//找到入组确认 或者Pd 进展 已生成任务的 访视
|
||||
//找到入组确认 或者Pd 进展 已生成任务的 检查批次
|
||||
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)
|
||||
|
@ -898,7 +898,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
var exisitBaseline = subjectVisitList.FirstOrDefault(t => t.IsEnrollmentConfirm);
|
||||
if (exisitBaseline == null)
|
||||
{
|
||||
return ResponseOutput.NotOk("不存在配置了入组确认的并且生成任务的基线访视");
|
||||
return ResponseOutput.NotOk("不存在配置了入组确认的并且生成任务的基线检查批次");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -949,13 +949,13 @@ namespace IRaCIS.Core.Application.Service
|
|||
return ResponseOutput.NotOk("项目未配置PD进展!");
|
||||
}
|
||||
|
||||
//是否是截止访视 截止访视在全局发 否则就在当前访视发
|
||||
//是否是截止检查批次 截止检查批次在全局发 否则就在当前检查批次发
|
||||
|
||||
var pdSubjectVisitIdList = subjectVisitList.Where(t => t.PDState == PDStateEnum.PDProgress).OrderBy(t => t.VisitNum).Select(t => (Guid?)t.Id).ToList();
|
||||
|
||||
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.ArbitrationRule == ArbitrationRule.Visit)
|
||||
{
|
||||
//在两位阅片人读完访视后,如果有裁判者等裁判读完,如果无裁判则等第二个人的读完
|
||||
//在两位阅片人读完检查批次后,如果有裁判者等裁判读完,如果无裁判则等第二个人的读完
|
||||
|
||||
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();
|
||||
|
@ -999,7 +999,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
else
|
||||
{
|
||||
return ResponseOutput.NotOk("当前受试者最新PD访视阅片任务完成状态不符合发送条件");
|
||||
return ResponseOutput.NotOk("当前患者最新PD检查批次阅片任务完成状态不符合发送条件");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1011,7 +1011,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
if (existReadModule == null)
|
||||
{
|
||||
return ResponseOutput.NotOk("项目配置了阅片期仲裁,但是当前受试者最新PD访视没有影像学阅片期");
|
||||
return ResponseOutput.NotOk("项目配置了阅片期仲裁,但是当前患者最新PD检查批次没有影像学阅片期");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1045,7 +1045,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
else
|
||||
{
|
||||
return ResponseOutput.NotOk("当前受试者最新PD访视阅片期任务完成状态不符合发送条件");
|
||||
return ResponseOutput.NotOk("当前患者最新PD检查批次阅片期任务完成状态不符合发送条件");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1058,7 +1058,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
}
|
||||
|
||||
#region 发送邮件屏蔽单重阅片情况
|
||||
//// 项目单重 判断最新的Pd 访视是否完成 是否有阅片期即可
|
||||
//// 项目单重 判断最新的Pd 检查批次是否完成 是否有阅片期即可
|
||||
//else if (trialReadingCriterionConfig.ReadingType == ReadingMethod.Single)
|
||||
//{
|
||||
|
||||
|
@ -1070,11 +1070,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
// if (task == null)
|
||||
// {
|
||||
// return ResponseOutput.NotOk("当前受试者最新PD访视任务未阅片完成");
|
||||
// return ResponseOutput.NotOk("当前患者最新PD检查批次任务未阅片完成");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //存在阅片期 那么就是截止访视
|
||||
// //存在阅片期 那么就是截止检查批次
|
||||
|
||||
// var existReadModule = await _repository.Where<ReadModule>(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectVisitId == currentLatestPdVisitId && t.ReadingSetType == ReadingSetType.ImageReading)
|
||||
// .FirstOrDefaultAsync();
|
||||
|
@ -1093,11 +1093,11 @@ namespace IRaCIS.Core.Application.Service
|
|||
// }
|
||||
// else
|
||||
// {
|
||||
// return ResponseOutput.NotOk("当前受试者阅片期任务未阅片完成");
|
||||
// return ResponseOutput.NotOk("当前患者阅片期任务未阅片完成");
|
||||
// }
|
||||
|
||||
// }
|
||||
// else//非截止访视 在访视读完后,发送
|
||||
// else//非截止检查批次 在检查批次读完后,发送
|
||||
// {
|
||||
// var filePath = await BaseBusinessScenarioSendEmailAsync(task.Id, true, EmailStoreSendMode.OnlyStoreLocalNotSentEmail, string.Empty);
|
||||
|
||||
|
@ -1199,7 +1199,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//}
|
||||
else
|
||||
{
|
||||
throw new BusinessValidationFailedException("不应有 除访视、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑");
|
||||
throw new BusinessValidationFailedException("不应有 除检查批次、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑");
|
||||
}
|
||||
|
||||
if (answer == OverallAssessment.PD.GetEnumInt())
|
||||
|
@ -1238,7 +1238,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
//}
|
||||
else
|
||||
{
|
||||
throw new BusinessValidationFailedException("不应有 除访视、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑");
|
||||
throw new BusinessValidationFailedException("不应有 除检查批次、裁判、全局其他类型的任务进行发送邮件,请核查业务逻辑");
|
||||
}
|
||||
|
||||
if (answer == VisitTumorEvaluation.PD.GetEnumInt())
|
||||
|
|
|
@ -392,9 +392,9 @@ namespace IRaCIS.Core.Application.Services
|
|||
ProtocolName = dataset.GetSingleValueOrDefault(DicomTag.ProtocolName, string.Empty),
|
||||
ImagerPixelSpacing = dataset.GetSingleValueOrDefault(DicomTag.ImagerPixelSpacing, string.Empty),
|
||||
|
||||
AcquisitionTime = dataset.GetSingleValueOrDefault(DicomTag.ImagerPixelSpacing, string.Empty),
|
||||
AcquisitionNumber = dataset.GetSingleValueOrDefault(DicomTag.ImagerPixelSpacing, string.Empty),
|
||||
TriggerTime = dataset.GetSingleValueOrDefault(DicomTag.ImagerPixelSpacing, string.Empty),
|
||||
AcquisitionTime = dataset.GetSingleValueOrDefault(DicomTag.AcquisitionTime, string.Empty),
|
||||
AcquisitionNumber = dataset.GetSingleValueOrDefault(DicomTag.AcquisitionNumber, string.Empty),
|
||||
TriggerTime = dataset.GetSingleValueOrDefault(DicomTag.TriggerTime, string.Empty),
|
||||
|
||||
SiteId = dicomStudy.SiteId,
|
||||
TrialId = dicomStudy.TrialId,
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace IRaCIS.Core.Application.Services
|
|||
if (imageShareCommand.StudyId == null)
|
||||
{
|
||||
|
||||
#region 上传不按照访视上传,基线没传,数据可能出错
|
||||
#region 上传不按照检查批次上传,基线没传,数据可能出错
|
||||
|
||||
//var subjectVisit1 = _subjectVisitRepository.FirstOrDefault(t =>
|
||||
// t.TrialId == imageShareCommand.TrialId && t.SubjectId == imageShareCommand.SubjectId &&
|
||||
|
|
|
@ -345,8 +345,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 获取某个检查的关联检查列表(该受试者在这个想项目下的所有检查)
|
||||
/// 点击检查检查列表中的一个检查获取对应的序列列表(调用之前的接口:/series/list/,根据StudyId,获取访视的序列列表)
|
||||
/// 获取某个检查的关联检查列表(该患者在这个想项目下的所有检查)
|
||||
/// 点击检查检查列表中的一个检查获取对应的序列列表(调用之前的接口:/series/list/,根据StudyId,获取检查批次的序列列表)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{subjectVisitId:guid}")]
|
||||
|
@ -418,21 +418,21 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
if (trialInfo.IsVerifyVisitImageDate)
|
||||
{
|
||||
|
||||
//小于当前访视 最近的最晚拍片
|
||||
//小于当前检查批次 最近的最晚拍片
|
||||
var before = visitList.Where(u => u.VisitNum < verifyInfo.VisitNum).Max(k => k.LatestScanDate);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
//大于当前访视 最近的最早拍片日期
|
||||
//大于当前检查批次 最近的最早拍片日期
|
||||
var after = visitList.Where(u => u.VisitNum > verifyInfo.VisitNum).Min(k => k.EarliestScanDate);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -468,7 +468,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
result.AllowReUpload = false;
|
||||
result.StudyInstanceUid = studyInstanceUid;
|
||||
result.ErrorMesseage = "受试者访视结束,不允许上传!";
|
||||
result.ErrorMesseage = "患者检查批次结束,不允许上传!";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -489,12 +489,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
//数据库该项目有该检查 看是否支持重传
|
||||
else
|
||||
{
|
||||
//是同一个受试者 支持重传
|
||||
//是同一个患者 支持重传
|
||||
if (verifyStudyInfo.SubjectId == SubjectId && verifyStudyInfo.SubjectVisitId == currentSubjectVisitId)
|
||||
{
|
||||
result.AllowReUpload = true;
|
||||
}
|
||||
//不是同一个受试者
|
||||
//不是同一个患者
|
||||
else
|
||||
{
|
||||
//有默认值,其实不用写,这里为了好理解
|
||||
|
@ -502,7 +502,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
|||
|
||||
result.AllowReUpload = false;
|
||||
|
||||
result.ErrorMesseage = $"此处不可以上传。当前影像检查已经上传给受试者{verifyStudyInfo.SubjectCode}的{verifyStudyInfo.VisitName}";
|
||||
result.ErrorMesseage = $"此处不可以上传。当前影像检查已经上传给患者{verifyStudyInfo.SubjectCode}的{verifyStudyInfo.VisitName}";
|
||||
}
|
||||
}
|
||||
result.StudyInstanceUid = studyInstanceUid;
|
||||
|
|
|
@ -66,12 +66,12 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
|
|||
public string SiteName { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 受试者Code
|
||||
/// 患者Code
|
||||
/// </summary>
|
||||
public string SubjectCode { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 访视名称
|
||||
/// 检查批次名称
|
||||
/// </summary>
|
||||
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;
|
||||
|
||||
/// <summary>
|
||||
/// 访视计划ID
|
||||
/// 检查批次计划ID
|
||||
/// </summary>
|
||||
public Guid? VisitStageId { get; set; }
|
||||
|
||||
|
@ -302,7 +302,7 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region 受试者
|
||||
#region 患者
|
||||
public class InsSubjectCommand : InspectionBase, IInspectionDTO, ISignDTO
|
||||
{
|
||||
public SubjectCommand OptCommand { get; set; }
|
||||
|
@ -435,7 +435,7 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO
|
|||
public Guid? SiteId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者
|
||||
/// 患者
|
||||
/// </summary>
|
||||
public string SubjectInfo { get; set; } = string.Empty;
|
||||
|
||||
|
|
|
@ -127,8 +127,6 @@ namespace IRaCIS.Application.Contracts
|
|||
|
||||
public string UserCode { get; set; } = string.Empty;
|
||||
|
||||
public bool IsZhiZhun { get; set; }
|
||||
|
||||
public string UserType { get; set; } = string.Empty;
|
||||
|
||||
public string UserTypeShortName { get; set; } = string.Empty;
|
||||
|
|
|
@ -253,11 +253,11 @@ namespace IRaCIS.Application.Services
|
|||
public async Task<IResponseOutput> ResetPassword(Guid userId)
|
||||
{
|
||||
|
||||
var pwd = "123456";
|
||||
var pwd = AppSettings.DefaultPassword;
|
||||
|
||||
if (_hostEnvironment.EnvironmentName != "Development")
|
||||
{
|
||||
pwd = "Extimaging." + new Random().Next(100, 1000);
|
||||
pwd = "EIImage." + new Random().Next(100, 1000);
|
||||
|
||||
}
|
||||
|
||||
|
@ -498,13 +498,9 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
saveItem.UserCode = AppSettings.GetCodeStr(saveItem.Code, nameof(User));
|
||||
|
||||
if (saveItem.IsZhiZhun)
|
||||
{
|
||||
saveItem.OrganizationName = AppSettings.DefaultInternalOrganizationName;
|
||||
}
|
||||
|
||||
|
||||
saveItem.Password = MD5Helper.Md5("123456");
|
||||
saveItem.Password = MD5Helper.Md5(AppSettings.DefaultPassword);
|
||||
|
||||
await _userRepository.AddAsync(saveItem);
|
||||
|
||||
|
@ -541,10 +537,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
_mapper.Map(model, user);
|
||||
|
||||
if (user.IsZhiZhun)
|
||||
{
|
||||
user.OrganizationName = AppSettings.DefaultInternalOrganizationName;
|
||||
}
|
||||
|
||||
var success = await _userRepository.SaveChangesAsync();
|
||||
|
||||
return ResponseOutput.Ok(success);
|
||||
|
|
|
@ -108,7 +108,9 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
if (userTypeSelectEnum == UserTypeSelectEnum.InnerUser)
|
||||
{
|
||||
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.QA ,UserTypeEnum.MW};
|
||||
//userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.IQC, UserTypeEnum.APM, UserTypeEnum.MIM, UserTypeEnum.QA ,UserTypeEnum.MW};
|
||||
|
||||
userTypeEnums = new List<UserTypeEnum>() { UserTypeEnum.IndependentReviewer, UserTypeEnum.ClinicalResearchCoordinator };
|
||||
|
||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin)
|
||||
{
|
||||
|
|
|
@ -9,7 +9,7 @@ using IRaCIS.Core.Application.Service;
|
|||
namespace IRaCIS.Core.Application.Contracts
|
||||
{
|
||||
/// <summary>
|
||||
///受试者临床信息
|
||||
///患者临床信息
|
||||
/// </summary>
|
||||
[ApiExplorerSettings(GroupName = "Image")]
|
||||
public class ClinicalDataService : BaseService, IClinicalDataService
|
||||
|
@ -39,7 +39,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 获取访视+受试者级别的数据
|
||||
/// 获取检查批次+患者级别的数据
|
||||
/// </summary>
|
||||
/// <param ></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -67,7 +67,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 是否是访视
|
||||
/// 是否是检查批次
|
||||
/// </summary>
|
||||
public bool? IsVisist { get; set; }
|
||||
|
||||
|
@ -92,7 +92,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public Guid? TrialId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者ID
|
||||
/// 患者ID
|
||||
/// </summary>
|
||||
public Guid? SubjectId { get; set; }
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public string FileName { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 是否是访视
|
||||
/// 是否是检查批次
|
||||
/// </summary>
|
||||
public bool? IsVisist { get; set; }
|
||||
|
||||
|
@ -133,7 +133,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public Guid? TrialId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者ID
|
||||
/// 患者ID
|
||||
/// </summary>
|
||||
public Guid? SubjectId { get; set; }
|
||||
}
|
||||
|
|
|
@ -29,6 +29,10 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public string[]? VisitPlanArray { get; set; }
|
||||
|
||||
public DateTime? BeginSubmitTime { get; set; }
|
||||
|
||||
public DateTime? EndSubmitTime { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class GetNextQCInfoInDto
|
||||
|
@ -333,7 +337,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
|
||||
///// <summary>
|
||||
///// 任务展示访视 读片任务显示是否顺序
|
||||
///// 任务展示检查批次 读片任务显示是否顺序
|
||||
///// </summary>
|
||||
//public bool IsReadingTaskViewInOrder { get; set; } = true;
|
||||
}
|
||||
|
@ -352,7 +356,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
//审核状态
|
||||
public AuditStateEnum AuditState { get; set; }
|
||||
|
||||
//阅片期或者访视名
|
||||
//阅片期或者检查批次名
|
||||
public string ReadingPeriodName { get; set; }
|
||||
|
||||
|
||||
|
@ -406,7 +410,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[Column(TypeName = "decimal(18,2)")]
|
||||
public decimal VisitTaskNum { get; set; }
|
||||
|
||||
//访视会有
|
||||
//检查批次会有
|
||||
public bool? Inplan { get; set; }
|
||||
|
||||
public bool? IsLostVisit { get; set; }
|
||||
|
@ -837,12 +841,12 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public string UserName { get; set; }
|
||||
|
||||
|
||||
[DictionaryTranslateAttribute("ExistDisease", CriterionType.RECIST1Pointt1, nameof(OverallTumorEvaluationExport.IsBaseline), "true")]
|
||||
[DictionaryTranslateAttribute("OverallAssessment", CriterionType.RECIST1Pointt1, nameof(OverallTumorEvaluationExport.IsBaseline), "false")]
|
||||
//[DictionaryTranslateAttribute("ExistDisease", CriterionType.RECIST1Pointt1, nameof(OverallTumorEvaluationExport.IsBaseline), "true")]
|
||||
//[DictionaryTranslateAttribute("OverallAssessment", CriterionType.RECIST1Pointt1, nameof(OverallTumorEvaluationExport.IsBaseline), "false")]
|
||||
|
||||
[DictionaryTranslateAttribute("VisitTumorEvaluation", CriterionType.PCWG3)]
|
||||
//整体肿瘤评估结果 需要翻译
|
||||
public string OverallTumorEvaluationResult { get; set; }
|
||||
//[DictionaryTranslateAttribute("VisitTumorEvaluation", CriterionType.PCWG3)]
|
||||
////整体肿瘤评估结果 需要翻译
|
||||
//public string OverallTumorEvaluationResult { get; set; }
|
||||
|
||||
public Guid? JudgeResultTaskId { get; set; }
|
||||
|
||||
|
@ -857,19 +861,19 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
public class RECIST1Point1EvaluationOfTumorEfficacyExport : OverallTumorEvaluationExport
|
||||
{
|
||||
[DictionaryTranslateAttribute("TargetAssessment", CriterionType.RECIST1Pointt1)]
|
||||
// 靶病灶评估
|
||||
public string TargetlesionEvaluationResult { get; set; }
|
||||
//[DictionaryTranslateAttribute("TargetAssessment", CriterionType.RECIST1Pointt1)]
|
||||
//// 靶病灶评估
|
||||
//public string TargetlesionEvaluationResult { get; set; }
|
||||
|
||||
[DictionaryTranslateAttribute("NoTargetAssessment", CriterionType.RECIST1Pointt1)]
|
||||
// 非靶病灶评估
|
||||
public string NoneTargetlesionEvaluationResult { get; set; }
|
||||
|
||||
// 是否存在新病灶
|
||||
[DictionaryTranslateAttribute("NewLesionAssessment", CriterionType.RECIST1Pointt1)]
|
||||
public string IsExistNewlesionEvaluationResult { get; set; }
|
||||
//[DictionaryTranslateAttribute("NoTargetAssessment", CriterionType.RECIST1Pointt1)]
|
||||
//// 非靶病灶评估
|
||||
//public string NoneTargetlesionEvaluationResult { get; set; }
|
||||
|
||||
//// 是否存在新病灶
|
||||
//[DictionaryTranslateAttribute("NewLesionAssessment", CriterionType.RECIST1Pointt1)]
|
||||
//public string IsExistNewlesionEvaluationResult { get; set; }
|
||||
|
||||
public string EvaluationSummary { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
@ -940,6 +944,9 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
[JsonIgnore]
|
||||
public List<RECIST1Point1LessionInfo> LesionList = new List<RECIST1Point1LessionInfo>();
|
||||
|
||||
|
||||
|
||||
|
||||
//病灶编号
|
||||
public string LessionCode { get; set; }
|
||||
|
||||
|
@ -1014,6 +1021,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
//病灶状态
|
||||
public string LessionState { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -40,6 +40,5 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId);
|
||||
|
||||
|
||||
Task<IResponseOutput> ForwardSVDicomImage(Guid[] subjectVisitIdList);
|
||||
}
|
||||
}
|
|
@ -7,7 +7,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
public static class QCCommon
|
||||
{
|
||||
/// <summary>
|
||||
/// 验证CRC 是否已提交 已提交 就不允许进行任何操作,如果是IQC 那么还验证是否是当前任务领取人
|
||||
/// 验证IC 是否已提交 已提交 就不允许进行任何操作,如果是IQC 那么还验证是否是当前任务领取人
|
||||
/// </summary>
|
||||
/// <param name="_repository"></param>
|
||||
/// <param name="_userInfo"></param>
|
||||
|
@ -24,7 +24,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
if (await _repository.AnyAsync<SubjectVisit>(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.Submitted &&
|
||||
(!t.QCChallengeList.Any(u => u.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload))))
|
||||
{
|
||||
throw new BusinessValidationFailedException("CRC 已提交影像,不能进行操作。");
|
||||
throw new BusinessValidationFailedException("IC 已提交影像,不能进行操作。");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -63,21 +63,21 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
|
||||
|
||||
//小于当前访视 最近的最晚拍片
|
||||
//小于当前检查批次 最近的最晚拍片
|
||||
var before = visitList.Where(u => u.VisitNum < currentVisitNum).Max(k => k.LatestScanDate);
|
||||
|
||||
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);
|
||||
|
||||
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")},请核对检查数据是否有误");
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,9 +42,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
|
||||
#region CRC上传、质疑页面
|
||||
#region IC上传、质疑页面
|
||||
/// <summary>
|
||||
/// CRC 访视上传列表
|
||||
/// IC 检查批次上传列表
|
||||
/// </summary>
|
||||
/// <param name="visitSearchDTO"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -63,6 +63,8 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
//.WhereIf(!string.IsNullOrEmpty(visitSearchDTO.VisitPlanInfo), visitSearchDTO.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(visitSearchDTO.VisitPlanInfo))
|
||||
.WhereIf(visitSearchDTO.AuditStateArray != null && visitSearchDTO.AuditStateArray?.Length > 0, t => visitSearchDTO.AuditStateArray!.Contains(t.AuditState))
|
||||
.WhereIf(visitSearchDTO.SubmitState != null, t => t.SubmitState == visitSearchDTO.SubmitState)
|
||||
.WhereIf(visitSearchDTO.BeginSubmitTime != null, t => t.SubmitTime >= visitSearchDTO.BeginSubmitTime)
|
||||
.WhereIf(visitSearchDTO.EndSubmitTime != null, t => t.SubmitTime <= visitSearchDTO.EndSubmitTime)
|
||||
.WhereIf(visitSearchDTO.ChallengeState != null, t => t.ChallengeState == visitSearchDTO.ChallengeState)
|
||||
.WhereIf(visitSearchDTO.IsUrgent != null, t => t.IsUrgent == visitSearchDTO.IsUrgent)
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))
|
||||
|
@ -82,7 +84,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// CRC 质疑列表
|
||||
/// IC 质疑列表
|
||||
/// </summary>
|
||||
/// <param name="challengeQuery"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -90,7 +92,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
public async Task<(PageOutput<QCCRCChallengeViewModel>, TrialSubjectAndSVConfig)> GetCRCChallengeList(ChallengeQuery challengeQuery)
|
||||
{
|
||||
|
||||
#region CRC 质疑列表 join连表方式
|
||||
#region IC 质疑列表 join连表方式
|
||||
//var query = from qcChanllenge in _qcChallengeRepository.Find(qcChallengeLambda)
|
||||
// join subjectVisit in _subjectVisitRepository.Find() on qcChanllenge.SubjectVisitId equals subjectVisit.Id
|
||||
// join trialSite in _trialSiteRepository.Find(t => t.TrialId == challengeQuery.TrialId) on subjectVisit.SiteId equals trialSite.SiteId
|
||||
|
@ -259,7 +261,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// QC 访视列表
|
||||
/// QC 检查批次列表
|
||||
/// </summary>
|
||||
/// <param name="visitSearchDTO"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -297,7 +299,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
//{
|
||||
// var visitInfo = visitSearchDTO.VisitPlanInfo.Trim();
|
||||
|
||||
// if (visitInfo.Contains('.')) // 包含小数点的是计划外访视
|
||||
// if (visitInfo.Contains('.')) // 包含小数点的是计划外检查批次
|
||||
// {
|
||||
// subjectVisitLambda = subjectVisitLambda.And(t => t.VisitNum.ToString().Contains("."));
|
||||
// }
|
||||
|
@ -464,7 +466,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
#region 一致性核查 转发页面
|
||||
/// <summary>
|
||||
/// 获取一致性核查列表 CRC/PM 公用
|
||||
/// 获取一致性核查列表 IC/PM 公用
|
||||
/// </summary>
|
||||
/// <param name="checkQuery"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -528,7 +530,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
.WhereIf(!string.IsNullOrEmpty(checkQuery.SubjectInfo), t => t.Subject.Code.Contains(checkQuery.SubjectInfo))
|
||||
.WhereIf(checkQuery.VisitPlanArray != null && checkQuery.VisitPlanArray?.Length > 0, svExpression)
|
||||
//.WhereIf(!string.IsNullOrEmpty(checkQuery.VisitPlanInfo), checkQuery.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(checkQuery.VisitPlanInfo))
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site
|
||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//IC 过滤负责的site
|
||||
.ProjectTo<QCCheckWithModalityView>(_mapper.ConfigurationProvider);
|
||||
|
||||
var pageList = await query.ToPagedListAsync(checkQuery.PageIndex, checkQuery.PageSize, checkQuery.SortField, checkQuery.Asc);
|
||||
|
@ -574,7 +576,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
.WhereIf(!string.IsNullOrEmpty(forwardQuery.SubjectInfo), t => t.Subject.Code.Contains(forwardQuery.SubjectInfo))
|
||||
.WhereIf(forwardQuery.VisitPlanArray != null && forwardQuery.VisitPlanArray?.Length > 0, svExpression)
|
||||
//.WhereIf(!string.IsNullOrEmpty(forwardQuery.VisitPlanInfo), forwardQuery.VisitPlanInfo.Contains('.') ? t => t.InPlan == false : t => t.VisitNum == decimal.Parse(forwardQuery.VisitPlanInfo))
|
||||
//.WhereIf(_userInfo.UserTypeEnumInt == (int)UserType.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//CRC 过滤负责的site
|
||||
//.WhereIf(_userInfo.UserTypeEnumInt == (int)UserType.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id))//IC 过滤负责的site
|
||||
.ProjectTo<ForWardViewModel>(_mapper.ConfigurationProvider);
|
||||
|
||||
return await query.ToPagedListAsync(forwardQuery.PageIndex, forwardQuery.PageSize, forwardQuery.SortField, forwardQuery.Asc);
|
||||
|
@ -587,10 +589,10 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
#region QC 具体质控页面 各种列表
|
||||
/// <summary>
|
||||
/// 获取某次访视 QA界面所有信息 单独每一项都有接口(往下看),这里是一个大接口,方便第一次获取完整的所有的数据
|
||||
/// 获取某次检查批次 QA界面所有信息 单独每一项都有接口(往下看),这里是一个大接口,方便第一次获取完整的所有的数据
|
||||
/// </summary>
|
||||
/// <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>
|
||||
|
||||
[HttpGet("{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
||||
|
@ -664,11 +666,11 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取某次访视 QC 问题核对答案 列表 初始化进去的时候是模板项,QC填写了就是对应的内容
|
||||
/// 获取某次检查批次 QC 问题核对答案 列表 初始化进去的时候是模板项,QC填写了就是对应的内容
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitId"></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>
|
||||
|
||||
[HttpGet("{trialId:guid}/{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
||||
|
@ -697,7 +699,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// 获次QC 历史质疑列表 不分页
|
||||
/// </summary>
|
||||
/// <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>
|
||||
|
||||
[HttpGet("{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
||||
|
@ -713,7 +715,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 获取访视下的受试者访视、受试者、site信息
|
||||
/// 获取检查批次下的患者检查批次、患者、site信息
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -728,7 +730,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 访视下的Study 和Series列表
|
||||
/// 检查批次下的Study 和Series列表
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -746,7 +748,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 访视下的检查列表
|
||||
/// 检查批次下的检查列表
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -784,7 +786,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// CRC/PM 看到某次访视下的所有质疑和聊天内容 包括初审和复审的 。
|
||||
/// IC/PM 看到某次检查批次下的所有质疑和聊天内容 包括初审和复审的 。
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
/// <param name="trialQCProcess"></param>
|
||||
|
@ -854,7 +856,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 添加计划外访视 下拉框 选择上一次访视
|
||||
/// 添加计划外检查批次 下拉框 选择上一次检查批次
|
||||
/// </summary>
|
||||
/// <param name="subjectId"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -867,7 +869,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 上传界面 受试者 访视、site 基本信息
|
||||
/// 上传界面 患者 检查批次、site 基本信息
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -6,7 +6,6 @@ using MediatR;
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Data;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using WinSCP;
|
||||
using Newtonsoft.Json;
|
||||
using IRaCIS.Core.Infrastructure;
|
||||
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))
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前访视未关闭的质疑已设置了同意CRC重传影像。请在CRC完成影像重传后,先关闭原质疑,再添加新的质疑。");
|
||||
throw new BusinessValidationFailedException("当前检查批次未关闭的质疑已设置了同意IC重传影像。请在IC完成影像重传后,先关闭原质疑,再添加新的质疑。");
|
||||
|
||||
}
|
||||
|
||||
|
@ -164,7 +163,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
if (dbQCChallenge.ReuploadEnum == QCChanllengeReuploadEnum.CRCRequestReupload || dbQCChallenge.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload)
|
||||
{
|
||||
throw new BusinessValidationFailedException("CRC已申请重传或者QC同意重传,不允许关闭该质疑。请在QC拒绝重传申请或者CRC设置重传影像后,再关闭质疑。");
|
||||
throw new BusinessValidationFailedException("IC已申请重传或者QC同意重传,不允许关闭该质疑。请在QC拒绝重传申请或者IC设置重传影像后,再关闭质疑。");
|
||||
}
|
||||
|
||||
|
||||
|
@ -264,7 +263,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <returns></returns>
|
||||
[HttpPost("{trialId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.PM_APM_CRC)]
|
||||
public async Task<IResponseOutput> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand)
|
||||
{
|
||||
|
||||
|
@ -303,7 +301,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <returns></returns>
|
||||
[HttpPut("{trialId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
public async Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input)
|
||||
{
|
||||
|
||||
|
@ -311,7 +308,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
if (sv.RequestBackState == RequestBackStateEnum.CRC_RequestBack)
|
||||
{
|
||||
ResponseOutput.NotOk("当前访视处于申请回退状态, 不允许关闭质疑。");
|
||||
ResponseOutput.NotOk("当前检查批次处于申请回退状态, 不允许关闭质疑。");
|
||||
}
|
||||
|
||||
|
||||
|
@ -337,7 +334,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <returns></returns>
|
||||
[HttpPut("{trialId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
[UnitOfWork]
|
||||
public async Task<IResponseOutput> SetCheckPass(SetCheckPassDt data)
|
||||
{
|
||||
|
@ -351,7 +347,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
if (sv.RequestBackState == RequestBackStateEnum.PM_AgressBack)
|
||||
{
|
||||
ResponseOutput.NotOk("当前访视处于回退状态,不允许设置一致性核查通过");
|
||||
ResponseOutput.NotOk("当前检查批次处于回退状态,不允许设置一致性核查通过");
|
||||
}
|
||||
|
||||
if (sv.CheckChallengeState != CheckChanllengeTypeEnum.Closed && sv.AuditState == AuditStateEnum.QCPassed)
|
||||
|
@ -376,13 +372,12 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// CRC 请求回退
|
||||
/// IC 请求回退
|
||||
/// </summary>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||
public async Task<IResponseOutput> CRCRequstCheckBack(Guid subjectVisitId)
|
||||
{
|
||||
var sv = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
|
||||
|
@ -390,7 +385,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
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();
|
||||
|
@ -399,7 +394,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
SubjectVisitId = subjectVisitId,
|
||||
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||
TalkContent = "CRC申请回退"
|
||||
TalkContent = "IC申请回退"
|
||||
});
|
||||
|
||||
|
||||
|
@ -411,7 +406,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
}
|
||||
else
|
||||
{
|
||||
return ResponseOutput.NotOk("其他CRC已申请处理,请刷新页面");
|
||||
return ResponseOutput.NotOk("其他IC已申请处理,请刷新页面");
|
||||
}
|
||||
|
||||
|
||||
|
@ -423,7 +418,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
||||
[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
public async Task<IResponseOutput> RejectCheckBack(Guid subjectVisitId)
|
||||
{
|
||||
|
@ -456,7 +450,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <returns></returns>
|
||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
[UnitOfWork]
|
||||
public async Task<IResponseOutput> CheckBack(Guid subjectVisitId)
|
||||
{
|
||||
|
@ -470,7 +463,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
if (sv.CheckState == CheckStateEnum.CVPassed || sv.CheckState == CheckStateEnum.ToCheck)
|
||||
{
|
||||
return ResponseOutput.NotOk("当前访视还未进行核查或者核查已通过,不允许设置回退。");
|
||||
return ResponseOutput.NotOk("当前检查批次还未进行核查或者核查已通过,不允许设置回退。");
|
||||
}
|
||||
|
||||
//sv.CheckChallengeState = (int)CheckChanllengeTypeEnum.None;
|
||||
|
@ -533,7 +526,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// </summary>
|
||||
[HttpPost("{trialId:guid}/{subjectVisitId:guid}/{trialQCProcess:int}/{currentQCType:int}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||
public async Task<IResponseOutput> AddOrUpdateQCQuestionAnswerList(QCQuestionAnswerCommand[] qcQuestionAnswerCommands, Guid trialId, Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType)
|
||||
{
|
||||
//验证是否能操作
|
||||
|
@ -605,7 +597,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <returns></returns>
|
||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{studyId:guid}/{seriesId:guid}/{state:int}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||
public async Task<IResponseOutput> SetSeriesState(Guid subjectVisitId, Guid studyId, Guid seriesId, int state)
|
||||
{
|
||||
|
||||
|
@ -672,7 +663,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <returns></returns>
|
||||
[HttpPost("{trialId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.CRC_IQC)]
|
||||
public async Task<IResponseOutput> UpdateModality(UpdateModalityCommand updateModalityCommand)
|
||||
{
|
||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC)
|
||||
|
@ -732,7 +722,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
|
||||
{
|
||||
return ResponseOutput.NotOk("当前访视有质疑未关闭,不允许该操作");
|
||||
return ResponseOutput.NotOk("当前检查批次有质疑未关闭,不允许该操作");
|
||||
}
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
@ -750,7 +740,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
[HttpPost, Route("{trialId:guid}/{subjectVisitId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[UnitOfWork]
|
||||
[Authorize(Policy = IRaCISPolicy.CRC_IQC)]
|
||||
public async Task<IResponseOutput> DeleteStudyList(Guid[] ids, Guid subjectVisitId, Guid trialId)
|
||||
{
|
||||
|
||||
|
@ -759,7 +748,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
if (await _subjectVisitRepository.AnyAsync(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.Submitted &&
|
||||
(!t.QCChallengeList.Any(u => u.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload))))
|
||||
{
|
||||
return ResponseOutput.NotOk("CRC已经提交,不允许删除。");
|
||||
return ResponseOutput.NotOk("IC已经提交,不允许删除。");
|
||||
}
|
||||
var waitDeleteStudyList = await _dicomStudyRepository.Where(x => ids.Contains(x.Id)).ToListAsync();
|
||||
|
||||
|
@ -862,7 +851,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
/// <summary>替换当前领取人 </summary>
|
||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}")]
|
||||
[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
public async Task<IResponseOutput> ReplaceQCTaskActionUser(Guid trialId, Guid subjectVisitId)
|
||||
{
|
||||
|
@ -871,7 +859,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
if (dbSubjectVisit.CurrentActionUserId == null && dbSubjectVisit.IsTake == false)
|
||||
{
|
||||
|
||||
return ResponseOutput.NotOk("当前访视的影像质控任务已被原领取人释放。您可以通过“领取”获得", ApiResponseCodeEnum.NeedTips);
|
||||
return ResponseOutput.NotOk("当前检查批次的影像质控任务已被原领取人释放。您可以通过“领取”获得", ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
|
||||
|
||||
|
@ -896,7 +884,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <returns></returns>
|
||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{obtaionOrCancel:bool}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||
public async Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel)
|
||||
{
|
||||
|
||||
|
@ -914,9 +901,9 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
if (dbSubjectVisit.CurrentActionUserId != null && dbSubjectVisit.IsTake)
|
||||
{
|
||||
//throw new BusinessValidationFailedException("当前访视已被领取,不允许领取");
|
||||
//throw new BusinessValidationFailedException("当前检查批次已被领取,不允许领取");
|
||||
|
||||
return ResponseOutput.NotOk("当前访视的影像质控任务已被其他QC领取,不允许领取", ApiResponseCodeEnum.NeedTips);
|
||||
return ResponseOutput.NotOk("当前检查批次的影像质控任务已被其他QC领取,不允许领取", ApiResponseCodeEnum.NeedTips);
|
||||
|
||||
}
|
||||
|
||||
|
@ -933,7 +920,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
// ))
|
||||
//{
|
||||
|
||||
// return ResponseOutput.NotOk("您已经领取了其他受试者,完成后才允许领取新的受试者");
|
||||
// return ResponseOutput.NotOk("您已经领取了其他患者,完成后才允许领取新的患者");
|
||||
//}
|
||||
|
||||
#region 处理验证
|
||||
|
@ -1023,7 +1010,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
else
|
||||
{
|
||||
return ResponseOutput.NotOk("当前访视影像质控任务没有当前领取人,不能释放。");
|
||||
return ResponseOutput.NotOk("当前检查批次影像质控任务没有当前领取人,不能释放。");
|
||||
}
|
||||
}
|
||||
else if (trialConfig.QCProcessEnum == TrialQCProcess.DoubleAudit)
|
||||
|
@ -1042,7 +1029,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
else
|
||||
{
|
||||
return ResponseOutput.NotOk("当前访视影像质控任务没有当前领取人, 不能释放");
|
||||
return ResponseOutput.NotOk("当前检查批次影像质控任务没有当前领取人, 不能释放");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1076,7 +1063,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
if (nameList.Count() > 0)
|
||||
{
|
||||
return ResponseOutput.NotOk($"当前访视要求进行疾病进展确认。请在提交当前访视前,先处理未提交的前序访视:{string.Join('、', nameList)}。", 1, ApiResponseCodeEnum.NeedTips);
|
||||
return ResponseOutput.NotOk($"当前检查批次要求进行疾病进展确认。请在提交当前检查批次前,先处理未提交的前序检查批次:{string.Join('、', nameList)}。", 1, ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -1084,13 +1071,15 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
if (nameList.Count() > 0)
|
||||
{
|
||||
|
||||
return ResponseOutput.NotOk($"在提交当前访视后,请尽快处理尚未提交的前序访视:{string.Join('、', nameList)}。", 0, ApiResponseCodeEnum.NeedTips);
|
||||
return ResponseOutput.NotOk($"在提交当前检查批次后,请尽快处理尚未提交的前序检查批次:{string.Join('、', nameList)}。", 0, ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//同时要根据项目有没有配置Subject 级别临床数据
|
||||
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData))
|
||||
|
||||
|
||||
if (dbSubjectVisitList.Any(t => t.IsBaseLine && !t.IsHaveClinicalData) && await _repository.AnyAsync<ClinicalDataTrialSet>(t=>t.TrialId== cRCRequestToQCCommand.TrialId && t.ClinicalDataLevel==ClinicalLevel.Subject))
|
||||
{
|
||||
return ResponseOutput.NotOk($"基线没有临床数据,确认提交?", 0, ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
|
@ -1101,12 +1090,11 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// CRC RequestToQC 批量提交 [需要签名 不需要对]
|
||||
/// IC RequestToQC 批量提交 [需要签名 不需要对]
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||
public async Task<IResponseOutput> CRCRequestToQC(CRCRequestToQCCommand cRCRequestToQCCommand)
|
||||
{
|
||||
|
||||
|
@ -1131,17 +1119,17 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
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)
|
||||
{
|
||||
return ResponseOutput.NotOk("当前访视的影像数据,已经由其他CRC提交。", 3, ApiResponseCodeEnum.NeedTips);
|
||||
return ResponseOutput.NotOk("当前检查批次的影像数据,已经由其他IC提交。", 3, ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
else if (dbSubjectVisitList.Any(t => t.SubmitState == SubmitStateEnum.Submitted))
|
||||
{
|
||||
return ResponseOutput.NotOk("当前批量提交访视的影像数据,其中部分已由其他CRC提交。", 3, ApiResponseCodeEnum.NeedTips);
|
||||
return ResponseOutput.NotOk("当前批量提交检查批次的影像数据,其中部分已由其他IC提交。", 3, ApiResponseCodeEnum.NeedTips);
|
||||
}
|
||||
|
||||
//获取确认的临床数据配置
|
||||
|
@ -1154,7 +1142,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
//基线不验证
|
||||
if (trialConfig.IsHaveFirstGiveMedicineDate && !dbSubjectVisit.IsBaseLine && dbSubjectVisit.Subject.FirstGiveMedicineTime == null)
|
||||
{
|
||||
return ResponseOutput.NotOk("项目配置了需要填写访视基准日期。但是受试者没有填写访视基准日期,不允许提交");
|
||||
return ResponseOutput.NotOk("项目配置了需要填写检查批次基准日期。但是患者没有填写检查批次基准日期,不允许提交");
|
||||
}
|
||||
|
||||
//基线 且配置了临床数据
|
||||
|
@ -1162,13 +1150,13 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
{
|
||||
|
||||
|
||||
////找到需要确认的PDF 临床数据 如果没有CRC 没有上传 那么就添加一条没有文件的记录
|
||||
////找到需要确认的PDF 临床数据 如果没有IC 没有上传 那么就添加一条没有文件的记录
|
||||
|
||||
//var crcNeedConfirmClinicalDataSetList = clinicalDataConfirmList.Where(t => t.UploadRole == UploadRole.CRC && t.ClinicalUploadType == ClinicalUploadType.PDF).ToList();
|
||||
//var crcNeedConfirmClinicalDataSetList = clinicalDataConfirmList.Where(t => t.UploadRole == UploadRole.IC && t.ClinicalUploadType == ClinicalUploadType.PDF).ToList();
|
||||
|
||||
//// 找到CRC 已经自己添加的临床PDF数据文件
|
||||
//// 找到IC 已经自己添加的临床PDF数据文件
|
||||
|
||||
//var crcAddClinicalDataIdList = _readingClinicalDataRepository.Where(t => t.ReadingId == dbSubjectVisit.Id && t.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && t.ClinicalDataTrialSet.ClinicalUploadType == ClinicalUploadType.PDF)
|
||||
//var crcAddClinicalDataIdList = _readingClinicalDataRepository.Where(t => t.ReadingId == dbSubjectVisit.Id && t.ClinicalDataTrialSet.UploadRole == UploadRole.IC && t.ClinicalDataTrialSet.ClinicalUploadType == ClinicalUploadType.PDF)
|
||||
// .Select(t => new { t.ClinicalDataTrialSetId }).ToList();
|
||||
|
||||
//foreach (var crcNeedConfirmClinicalDataSet in crcNeedConfirmClinicalDataSetList)
|
||||
|
@ -1193,7 +1181,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
dbSubjectVisit.IsConfirmedClinicalData = true;
|
||||
|
||||
|
||||
// CRC 上传的基线数据签名
|
||||
// IC 上传的基线数据签名
|
||||
|
||||
await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC && x.ReadingId == dbSubjectVisit.Id && x.IsSign==false, x => new ReadingClinicalData()
|
||||
{
|
||||
|
@ -1226,7 +1214,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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();
|
||||
|
||||
//修改受试者最新访视
|
||||
//修改患者最新检查批次
|
||||
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;
|
||||
|
@ -1234,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));
|
||||
|
||||
//项目或者Subject IsUrgent 提交时 访视也设置为紧急
|
||||
//项目或者Subject IsUrgent 提交时 检查批次也设置为紧急
|
||||
if (trialConfig.IsUrgent || dbSubjectVisit.Subject.IsUrgent || (dbSubjectVisit.PDState == PDStateEnum.PDProgress && !dbSubjectVisit.IsBaseLine) || (dbSubjectVisit.IsEnrollmentConfirm && dbSubjectVisit.IsBaseLine))
|
||||
{
|
||||
if (dbSubjectVisit.PDState == PDStateEnum.PDProgress)
|
||||
|
@ -1248,7 +1236,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
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()
|
||||
{
|
||||
|
||||
|
@ -1258,13 +1246,13 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
});
|
||||
|
||||
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()
|
||||
{
|
||||
|
||||
IsUrgent = true,
|
||||
TaskUrgentType = TaskUrgentType.Other,
|
||||
TaskUrgentRemake= "后续访视设为pd",
|
||||
TaskUrgentRemake= "后续检查批次设为pd",
|
||||
IsCanEditUrgentState = false,
|
||||
});
|
||||
}
|
||||
|
@ -1276,7 +1264,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
});
|
||||
|
||||
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()
|
||||
{
|
||||
|
||||
|
@ -1288,7 +1276,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
else
|
||||
{
|
||||
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()
|
||||
{
|
||||
|
||||
|
@ -1300,7 +1288,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
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();
|
||||
|
||||
|
@ -1357,7 +1345,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
dbSubjectVisit.AuditState = AuditStateEnum.ToAudit;
|
||||
}
|
||||
|
||||
//非基线设置为PD的话 或者设置为末次访视 根据配置自动生成阅片期
|
||||
//非基线设置为PD的话 或者设置为末次检查批次 根据配置自动生成阅片期
|
||||
if (!dbSubjectVisit.IsBaseLine && (dbSubjectVisit.PDState == PDStateEnum.PDProgress || dbSubjectVisit.IsFinalVisit) )
|
||||
{
|
||||
|
||||
|
@ -1409,7 +1397,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <returns></returns>
|
||||
[HttpPost("{trialId:guid}/{subjectVisitId:guid}/{auditState:int}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||
[UnitOfWork]
|
||||
public async Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState)
|
||||
{
|
||||
|
@ -1425,7 +1412,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
//判断质疑是否都关闭了
|
||||
if (await _repository.AnyAsync<QCChallenge>(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
|
||||
{
|
||||
return ResponseOutput.NotOk("当前访视有影像质控质疑未关闭,不能进行此操作。");
|
||||
return ResponseOutput.NotOk("当前检查批次有影像质控质疑未关闭,不能进行此操作。");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1499,7 +1486,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
}
|
||||
else
|
||||
{
|
||||
return ResponseOutput.NotOk("项目配置影像质控为单审,当前访视影像质控任务不能从当前审核状态变更到 审核通过。");
|
||||
return ResponseOutput.NotOk("项目配置影像质控为单审,当前检查批次影像质控任务不能从当前审核状态变更到 审核通过。");
|
||||
}
|
||||
|
||||
|
||||
|
@ -1629,7 +1616,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 设置、取消 访视紧急
|
||||
/// 设置、取消 检查批次紧急
|
||||
/// </summary>
|
||||
/// <param name="trialId"></param>
|
||||
/// <param name="subjectVisitId"></param>
|
||||
|
@ -1674,7 +1661,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
/// <returns></returns>
|
||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.IQC)]
|
||||
public async Task<IResponseOutput> SetNeedReupload(Guid trialId, Guid qcChallengeId)
|
||||
{
|
||||
|
||||
|
@ -1696,13 +1682,13 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
if (qcChallenge.ReuploadEnum != QCChanllengeReuploadEnum.CRCRequestReupload)
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前重传状态不为CRC申请重传,不允许设置同意重传");
|
||||
throw new BusinessValidationFailedException("当前重传状态不为IC申请重传,不允许设置同意重传");
|
||||
}
|
||||
|
||||
|
||||
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设置了同意重传,IC还未完成上传,当前不允许再次设置");
|
||||
}
|
||||
|
||||
|
||||
|
@ -1765,13 +1751,12 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// CRC 设置已经重传完成 [需要签名 不需要对]
|
||||
/// IC 设置已经重传完成 [需要签名 不需要对]
|
||||
/// </summary>
|
||||
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||
public async Task<IResponseOutput> SetReuploadFinished(CRCReuploadFinishedCommand cRCReuploadFinishedCommand)
|
||||
{
|
||||
|
||||
|
@ -1822,7 +1807,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
QCChallengeId = qcChallenge.Id,
|
||||
|
||||
TalkContent = "CRC已重传完成"
|
||||
TalkContent = "IC已重传完成"
|
||||
});
|
||||
|
||||
|
||||
|
@ -1846,7 +1831,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
[HttpPut("{trialId:guid}/{subjectVisitId:guid}/{qcChallengeId:guid}")]
|
||||
[TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })]
|
||||
[Authorize(Policy = IRaCISPolicy.CRC)]
|
||||
public async Task<IResponseOutput> CRCRequestReUpload(Guid qcChallengeId)
|
||||
{
|
||||
var qcChallenge = (await _qcChallengeRepository.FirstOrDefaultAsync(t => t.Id == qcChallengeId)).IfNullThrowException();
|
||||
|
@ -1854,7 +1838,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
if (qcChallenge.ReuploadEnum != QCChanllengeReuploadEnum.None && qcChallenge.ReuploadEnum != QCChanllengeReuploadEnum.CRCReuploaded)
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前质疑重传状态不为初始状态|CRC重传完成状态,不允许申请重传");
|
||||
throw new BusinessValidationFailedException("当前质疑重传状态不为初始状态|IC重传完成状态,不允许申请重传");
|
||||
}
|
||||
|
||||
|
||||
|
@ -1872,7 +1856,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
SubjectVisitId = qcChallenge.SubjectVisitId,
|
||||
UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
|
||||
QCChallengeId = qcChallenge.Id,
|
||||
TalkContent = "CRC申请重传/上传影像"
|
||||
TalkContent = "IC申请重传/上传影像"
|
||||
});
|
||||
|
||||
var isSuccess = await _qcChallengeRepository.SaveChangesAsync();
|
||||
|
@ -1884,7 +1868,7 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 上传界面 更新受试者访视基准日期 是否入组确认,以及访视 是否PD进展
|
||||
/// 上传界面 更新患者检查批次基准日期 是否入组确认,以及检查批次 是否PD进展
|
||||
/// </summary>
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -1902,13 +1886,13 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
if (await _subjectVisitRepository.Where(t => t.Id == command.SubjectVisitId)
|
||||
.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)
|
||||
.AnyAsync(t => t.IsEnrollmentConfirm != command.IsEnrollmentConfirm && t.RequestBackState == RequestBackStateEnum.PM_AgressBack))
|
||||
{
|
||||
return ResponseOutput.NotOk("该访视为回退访视,不允许修改PD确认状态");
|
||||
return ResponseOutput.NotOk("该检查批次为回退检查批次,不允许修改PD确认状态");
|
||||
}
|
||||
|
||||
dbSubjectVisit.IsEnrollmentConfirm = command.IsEnrollmentConfirm.Value;
|
||||
|
@ -1926,109 +1910,6 @@ namespace IRaCIS.Core.Application.Image.QA
|
|||
|
||||
|
||||
|
||||
[HttpPost("{trialId:guid}")]
|
||||
[Authorize(Policy = IRaCISPolicy.PM_APM)]
|
||||
[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("转发影像失败。");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -172,20 +172,21 @@ namespace IRaCIS.Core.Application.Service
|
|||
// .ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName))
|
||||
.ForMember(o => o.IsBaseline, t => t.MapFrom(u => u.SourceSubjectVisit.IsBaseLine))
|
||||
|
||||
.ForMember(o => o.OverallTumorEvaluationResult, t => t.MapFrom(u =>
|
||||
criterionType == CriterionType.RECIST1Pointt1 ?( u.SourceSubjectVisit.IsBaseLine==true ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.ExistDisease).FirstOrDefault().Answer:
|
||||
u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstOrDefault().Answer)
|
||||
: criterionType == CriterionType.PCWG3 ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstOrDefault().Answer : String.Empty
|
||||
))
|
||||
// .ForMember(o => o.OverallTumorEvaluationResult, t => t.MapFrom(u =>
|
||||
//criterionType == CriterionType.RECIST1Pointt1 ?( u.SourceSubjectVisit.IsBaseLine==true ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.ExistDisease).FirstOrDefault().Answer:
|
||||
//u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.Tumor).FirstOrDefault().Answer)
|
||||
// : criterionType == CriterionType.PCWG3 ? u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.SiteVisitForTumorEvaluation).FirstOrDefault().Answer : String.Empty
|
||||
// ))
|
||||
|
||||
.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.Subject.TrialSite.TrialSiteCode))
|
||||
.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
|
||||
.ForMember(o => o.UserName, t => t.MapFrom(u => u.DoctorUser.UserName));
|
||||
|
||||
CreateMap<VisitTask, RECIST1Point1EvaluationOfTumorEfficacyExport>().IncludeBase<VisitTask, OverallTumorEvaluationExport>()
|
||||
.ForMember(o => o.TargetlesionEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion).FirstOrDefault().Answer))
|
||||
.ForMember(o => o.NoneTargetlesionEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.NoTargetLesion).FirstOrDefault().Answer))
|
||||
.ForMember(o => o.IsExistNewlesionEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.NewLesions).FirstOrDefault().Answer))
|
||||
//.ForMember(o => o.TargetlesionEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.TargetLesion).FirstOrDefault().Answer))
|
||||
//.ForMember(o => o.NoneTargetlesionEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.NoTargetLesion).FirstOrDefault().Answer))
|
||||
//.ForMember(o => o.IsExistNewlesionEvaluationResult, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.NewLesions).FirstOrDefault().Answer))
|
||||
.ForMember(o => o.EvaluationSummary, t => t.MapFrom(u => u.ReadingTaskQuestionAnswerList.Where(c => c.ReadingQuestionTrial.QuestionType == QuestionType.AdjustReason).FirstOrDefault().Answer))
|
||||
|
||||
//.ForMember(o => o.TrialSiteCode, t => t.MapFrom(u => u.Subject.TrialSite.TrialSiteCode))
|
||||
//.ForMember(o => o.SubjectCode, t => t.MapFrom(u => u.Subject.Code))
|
||||
|
@ -220,7 +221,8 @@ namespace IRaCIS.Core.Application.Service
|
|||
//.ForMember(o => o.MeasurementResult, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.Location).FirstOrDefault().Answer))
|
||||
.ForMember(o => o.LongDiameter, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.MajorAxis).FirstOrDefault().Answer))
|
||||
.ForMember(o => o.ShortDiameter, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.ShortAxis).FirstOrDefault().Answer))
|
||||
.ForMember(o => o.LessionState, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State).FirstOrDefault().Answer));
|
||||
.ForMember(o => o.LessionState, t => t.MapFrom(u => u.LesionAnswerList.Where(c => c.ReadingTableQuestionTrial.QuestionMark == QuestionMark.State).FirstOrDefault().Answer)
|
||||
);
|
||||
|
||||
|
||||
CreateMap<VisitTask, PCWG3DetailedOfEvaluatedLesionExport>().IncludeBase<VisitTask, OverallTumorEvaluationExport>()
|
||||
|
@ -324,14 +326,14 @@ namespace IRaCIS.Core.Application.Service
|
|||
CreateMap<CheckChallengeDialogCommand, CheckChallengeDialog>();
|
||||
|
||||
CreateMap<PreviousPDFAddOrEdit, PreviousPDF>().ReverseMap();
|
||||
//受试者临床数据 添加编辑
|
||||
//患者临床数据 添加编辑
|
||||
CreateMap<PreviousHistoryAddOrEdit, PreviousHistory>().ReverseMap();
|
||||
|
||||
CreateMap<PreviousOtherAddOrEdit, PreviousOther>().ReverseMap();
|
||||
|
||||
CreateMap<PreviousSurgeryAddOrEdit, PreviousSurgery>().ReverseMap();
|
||||
|
||||
// 受试者临床数据 视图映射
|
||||
// 患者临床数据 视图映射
|
||||
Guid subjectVisitId = Guid.Empty;
|
||||
CreateMap<SubjectVisit, SubjectClinicalDataDto>()
|
||||
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code))
|
||||
|
@ -370,7 +372,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.DicomStudyCount, u => u.MapFrom(t => t.StudyList.Count()))
|
||||
.ForMember(d => d.NoneDicomStudyCount, u => u.MapFrom(t => t.NoneDicomStudyList.Count(t => t.NoneDicomFileList.Any())));
|
||||
|
||||
//CRC 上传列表
|
||||
//IC 上传列表
|
||||
CreateMap<SubjectVisit, QCCRCVisitViewModel>()/*.IncludeMembers(t=>t.Subject)*/
|
||||
//.ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.Subject.Status))
|
||||
//.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code))
|
||||
|
@ -421,7 +423,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code))
|
||||
.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)
|
||||
.ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.Id))
|
||||
.ForMember(d => d.SubjectName, u => u.MapFrom(s => s.Subject.ShortName))
|
||||
|
@ -493,7 +495,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
.ForMember(d => d.CreateUserName, u => u.MapFrom(t => t.User.FirstName + "/" + t.User.LastName));
|
||||
|
||||
|
||||
//CRC 质疑列表
|
||||
//IC 质疑列表
|
||||
CreateMap<QCChallenge, QCCRCChallengeViewModel>()
|
||||
.ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.SubjectVisit.PreliminaryAuditUser.UserName))
|
||||
.ForMember(d => d.PreliminaryAuditUserId, u => u.MapFrom(s => s.SubjectVisit.PreliminaryAuditUserId))
|
||||
|
|
|
@ -87,7 +87,7 @@ namespace IRaCIS.Application.Services
|
|||
}
|
||||
var clinicalDataTrialSet = (await _clinicalDataTrialSetRepository.Where(x => x.Id == indto.ClinicalDataTrialSetId).FirstOrDefaultAsync()).IfNullThrowException();
|
||||
|
||||
//subject 或者访视级别的 都是在访视传
|
||||
//subject 或者检查批次级别的 都是在检查批次传
|
||||
indto.IsVisit = clinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || clinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit;
|
||||
|
||||
if (indto.Id == null)
|
||||
|
@ -168,10 +168,10 @@ namespace IRaCIS.Application.Services
|
|||
#endregion
|
||||
|
||||
|
||||
#region 临床数据CRC 相关
|
||||
#region 临床数据IC 相关
|
||||
|
||||
/// <summary>
|
||||
/// 获取CRC上传的文件
|
||||
/// 获取IC上传的文件
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -235,7 +235,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 添加CRC数据类型
|
||||
/// 添加IC数据类型
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task AddCRCClinicalData(GetCRCClinicalDataInDto inDto)
|
||||
|
@ -325,7 +325,7 @@ namespace IRaCIS.Application.Services
|
|||
//判断是否基线
|
||||
if (isBaseLine)
|
||||
{
|
||||
//CRC 的自动签名 不用管 只用处理PM 的就好
|
||||
//IC 的自动签名 不用管 只用处理PM 的就好
|
||||
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && (t.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataLevel == ClinicalLevel.SubjectVisit) && t.UploadRole == UploadRole.PM).Count();
|
||||
}
|
||||
else
|
||||
|
@ -333,11 +333,11 @@ namespace IRaCIS.Application.Services
|
|||
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.SubjectVisit && t.UploadRole == UploadRole.PM).Count();
|
||||
}
|
||||
|
||||
//可能仅仅CRC 基线 没有PM
|
||||
//可能仅仅IC 基线 没有PM
|
||||
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()
|
||||
{
|
||||
IsClinicalDataSign = true
|
||||
|
@ -363,7 +363,7 @@ namespace IRaCIS.Application.Services
|
|||
needSignCount = trialClinicalDataSetList.Where(t => t.TrialClinicalDataSetCriteriaList.Any(c => c.TrialReadingCriterionId == trialReadingCritrialId) && t.ClinicalDataLevel == ClinicalLevel.OncologyRead).Count();
|
||||
}
|
||||
|
||||
//可能仅仅CRC 基线 没有PM
|
||||
//可能仅仅IC 基线 没有PM
|
||||
if (needSignCount == haveSignedCount /*&& needSignCount != 0*/)
|
||||
{
|
||||
//将该标准 该subject 该阅片期|肿瘤学 任务临床数据状态变更
|
||||
|
@ -495,7 +495,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 获取访视 阅片或任务临床数据
|
||||
/// 获取检查批次 阅片或任务临床数据
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -686,7 +686,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
var resultQuery = _readingClinicalDataRepository.Where(x => x.SubjectId == inDto.SubjectId)
|
||||
.Where(x => x.ReadingId == inDto.ReadingId || (x.SubjectId == inDto.SubjectId && x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject))
|
||||
//.WhereIf(inDto.UploadRole == UploadRole.CRC, x => x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC)
|
||||
//.WhereIf(inDto.UploadRole == UploadRole.IC, x => x.ClinicalDataTrialSet.UploadRole == UploadRole.IC)
|
||||
|
||||
.Where(x => x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(t=>t.TrialReadingCriterionId==inDto.TrialReadingCriterionId))
|
||||
.Select(x => new GetReadingClinicalDataListOutDto()
|
||||
|
@ -717,7 +717,7 @@ namespace IRaCIS.Application.Services
|
|||
});
|
||||
|
||||
var result = await resultQuery.ToListAsync();
|
||||
//result = result.Where(x => !(x.UploadRole == UploadRole.CRC && x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
|
||||
//result = result.Where(x => !(x.UploadRole == UploadRole.IC && x.ClinicalUploadType == ClinicalUploadType.PDF && x.FileList.Count() == 0)).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -195,12 +195,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public Guid TrialId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者ID
|
||||
/// 患者ID
|
||||
/// </summary>
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视或者阅片ID
|
||||
/// 检查批次或者阅片ID
|
||||
/// </summary>
|
||||
public Guid VisitOrReadId { get; set; }
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public string? TrialSiteCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者Code
|
||||
/// 患者Code
|
||||
/// </summary>
|
||||
public string? SubjectCode { get; set; }
|
||||
|
||||
|
@ -63,7 +63,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public ReadingSetType ReadingSetType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者ID
|
||||
/// 患者ID
|
||||
/// </summary>
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
|
@ -81,17 +81,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public DateTime? ExpirationDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 截止访视
|
||||
/// 截止检查批次
|
||||
/// </summary>
|
||||
public decimal? ExpirationVisitNum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视计划ID
|
||||
/// 检查批次计划ID
|
||||
/// </summary>
|
||||
public Guid? VisitStageId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者ID
|
||||
/// 患者ID
|
||||
/// </summary>
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
|
@ -124,12 +124,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public Guid TrialId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者Id
|
||||
/// 患者Id
|
||||
/// </summary>
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视Id
|
||||
/// 检查批次Id
|
||||
/// </summary>
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
|
@ -162,13 +162,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public ModuleTypeEnum ModuleType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视ID
|
||||
/// 检查批次ID
|
||||
/// </summary>
|
||||
public Guid? SubjectVisitId { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 访视名称
|
||||
/// 检查批次名称
|
||||
/// </summary>
|
||||
public string SubjectVisitName { get; set; }
|
||||
|
||||
|
@ -297,7 +297,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public class SubjectVisitPlanView
|
||||
{
|
||||
/// <summary>
|
||||
/// Id(阅片期Id 或者 访视ID)
|
||||
/// Id(阅片期Id 或者 检查批次ID)
|
||||
/// </summary>
|
||||
public Guid Id { get; set; }
|
||||
|
||||
|
|
|
@ -16,12 +16,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public Guid TrialId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者ID
|
||||
/// 患者ID
|
||||
/// </summary>
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视或者阅片ID
|
||||
/// 检查批次或者阅片ID
|
||||
/// </summary>
|
||||
public Guid VisitOrReadId { get; set; }
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public decimal PresentSod { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否存在靶病灶 (当前访视 至少一个靶病灶的状态为存在)
|
||||
/// 是否存在靶病灶 (当前检查批次 至少一个靶病灶的状态为存在)
|
||||
/// </summary>
|
||||
public bool ExistsTargetLesion { get; set; }
|
||||
|
||||
|
@ -60,22 +60,22 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public bool SODPercentLess30 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// SOD 百分比 整体访视期间SOD最低点SOD相比增加<20%
|
||||
/// SOD 百分比 整体检查批次期间SOD最低点SOD相比增加<20%
|
||||
/// </summary>
|
||||
public bool LowSODPercentLess20 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// SOD 百分比 比整体访视期间最低点SOD增加≥20%
|
||||
/// SOD 百分比 比整体检查批次期间最低点SOD增加≥20%
|
||||
/// </summary>
|
||||
public bool LowSODPercentBigger20 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// SOD 变化值 比整体访视期间最低点SOD绝对增加值<5 mm
|
||||
/// SOD 变化值 比整体检查批次期间最低点SOD绝对增加值<5 mm
|
||||
/// </summary>
|
||||
public bool LowSODChangeLess5 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 比整体访视期间最低点SOD绝对增加值≥5 mm
|
||||
/// 比整体检查批次期间最低点SOD绝对增加值≥5 mm
|
||||
/// </summary>
|
||||
public bool LowSODChangeBigger5 { get; set; }
|
||||
|
||||
|
@ -85,12 +85,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public bool ExixtsNETargetLesion { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 上次访视点整体肿瘤评估
|
||||
/// 上次检查批次点整体肿瘤评估
|
||||
/// </summary>
|
||||
public string LastTargetLesionEvaluate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0
|
||||
/// 当前检查批次点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0
|
||||
/// </summary>
|
||||
public bool CurrentMajoreBigger0 { get; set; }
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public Guid TrialId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者ID
|
||||
/// 患者ID
|
||||
/// </summary>
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
|
@ -36,7 +36,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public Guid ClinicalDataTrialSetId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否是访视
|
||||
/// 是否是检查批次
|
||||
/// </summary>
|
||||
public bool IsVisit { get; set; }
|
||||
|
||||
|
@ -188,7 +188,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取访视列表
|
||||
/// 获取检查批次列表
|
||||
/// </summary>
|
||||
public class GetReadingClinicalDataListIndto
|
||||
{
|
||||
|
@ -205,7 +205,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public Guid TrialId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否是访视
|
||||
/// 是否是检查批次
|
||||
/// </summary>
|
||||
public bool IsVisit { get; set; }
|
||||
|
||||
|
@ -241,7 +241,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public string FileName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否为访视
|
||||
/// 是否为检查批次
|
||||
/// </summary>
|
||||
public bool IsVisit { get; set; }
|
||||
|
||||
|
@ -271,7 +271,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public string FileName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否为访视
|
||||
/// 是否为检查批次
|
||||
/// </summary>
|
||||
public bool IsVisit { get; set; }
|
||||
}
|
||||
|
@ -301,7 +301,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 访视Id 或者模块Id
|
||||
/// 检查批次Id 或者模块Id
|
||||
/// </summary>
|
||||
public Guid ReadingId { get; set; }
|
||||
|
||||
|
@ -349,7 +349,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public string ClinicalUploadTypeName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否为CRC上传
|
||||
/// 是否为IC上传
|
||||
/// </summary>
|
||||
public bool IsCRCUpload { get; set; }
|
||||
|
||||
|
@ -443,7 +443,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public Guid? SubjectId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否是访视
|
||||
/// 是否是检查批次
|
||||
/// </summary>
|
||||
public bool IsVisit { get; set; }
|
||||
|
||||
|
|
|
@ -574,7 +574,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public decimal TaskNum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务盲态名称 和访视盲态一样
|
||||
/// 任务盲态名称 和检查批次盲态一样
|
||||
/// </summary>
|
||||
public string BlindName { get; set; }
|
||||
|
||||
|
@ -1275,7 +1275,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public bool IsReadingShowPreviousResults { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 任务展示访视 读片任务显示是否顺序
|
||||
/// 任务展示检查批次 读片任务显示是否顺序
|
||||
/// </summary>
|
||||
public bool IsReadingTaskViewInOrder { get; set; } = true;
|
||||
|
||||
|
|
|
@ -157,13 +157,13 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public ReadingTool? ReadingTool { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务展示访视 读片任务显示是否顺序
|
||||
/// 任务展示检查批次 读片任务显示是否顺序
|
||||
/// </summary>
|
||||
public bool IsReadingTaskViewInOrder { get; set; } = true;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 阅片是否显示受试者信息
|
||||
/// 阅片是否显示患者信息
|
||||
/// </summary>
|
||||
public bool IsReadingShowSubjectInfo { get; set; } = false;
|
||||
|
||||
|
|
|
@ -38,12 +38,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public DateTime? ExpirationDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 截止访视
|
||||
/// 截止检查批次
|
||||
/// </summary>
|
||||
public decimal? ExpirationVisitNum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视计划ID
|
||||
/// 检查批次计划ID
|
||||
/// </summary>
|
||||
public Guid? VisitStageId { get; set; }
|
||||
|
||||
|
@ -70,7 +70,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public Guid ReadingPeriodSetId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视ID
|
||||
/// 检查批次ID
|
||||
/// </summary>
|
||||
public List<Guid> SubjectVisitIds { get; set; }
|
||||
}
|
||||
|
@ -107,12 +107,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public DateTime? ExpirationDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 截止访视
|
||||
/// 截止检查批次
|
||||
/// </summary>
|
||||
public decimal? ExpirationVisitNum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视计划ID
|
||||
/// 检查批次计划ID
|
||||
/// </summary>
|
||||
public Guid? VisitStageId { get; set; }
|
||||
|
||||
|
@ -145,17 +145,17 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public string TrialSiteCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视Id
|
||||
/// 检查批次Id
|
||||
/// </summary>
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者Id
|
||||
/// 患者Id
|
||||
/// </summary>
|
||||
public Guid SubjectId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者名称
|
||||
/// 患者名称
|
||||
/// </summary>
|
||||
public string SubjectCode { get; set; }
|
||||
|
||||
|
@ -221,12 +221,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public DateTime? ExpirationDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 截止访视
|
||||
/// 截止检查批次
|
||||
/// </summary>
|
||||
public decimal? ExpirationVisitNum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 访视计划ID
|
||||
/// 检查批次计划ID
|
||||
/// </summary>
|
||||
public Guid? VisitStageId { get; set; }
|
||||
|
||||
|
@ -322,7 +322,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
{
|
||||
|
||||
/// <summary>
|
||||
/// 截止访视
|
||||
/// 截止检查批次
|
||||
/// </summary>
|
||||
public decimal? ExpirationVisitNum { get; set; }
|
||||
|
||||
|
|
|
@ -274,7 +274,7 @@ namespace IRaCIS.Core.Application.Service
|
|||
|
||||
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
|
||||
{
|
||||
Answer = x.Answer,
|
||||
|
|
|
@ -258,7 +258,7 @@ namespace IRaCIS.Application.Services
|
|||
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();
|
||||
|
||||
// Before的Answer取自于 上一次全局阅片的结果, 如果没有上一次全局阅片的结果 取访视的答案
|
||||
// Before的Answer取自于 上一次全局阅片的结果, 如果没有上一次全局阅片的结果 取检查批次的答案
|
||||
|
||||
var lastGlobalTask = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Global &&
|
||||
x.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId &&
|
||||
|
|
|
@ -438,7 +438,7 @@ namespace IRaCIS.Application.Services
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取阅片的受试者信息
|
||||
/// 获取阅片的患者信息
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -473,7 +473,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 验证是否为基线访视任务
|
||||
/// 验证是否为基线检查批次任务
|
||||
/// </summary>
|
||||
/// <param name="visitTaskId"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -519,7 +519,7 @@ namespace IRaCIS.Application.Services
|
|||
#endregion
|
||||
|
||||
|
||||
#region 访视任务 - Dicom 阅片 表格问题相关查询
|
||||
#region 检查批次任务 - Dicom 阅片 表格问题相关查询
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
@ -1038,7 +1038,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
|
||||
|
||||
#region 访视任务 - Dicom 阅片 表格问题 病灶的拆分与合并
|
||||
#region 检查批次任务 - Dicom 阅片 表格问题 病灶的拆分与合并
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
@ -1152,7 +1152,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
|
||||
|
||||
#region 访视任务 - Dicom 阅片 提交、修改
|
||||
#region 检查批次任务 - Dicom 阅片 提交、修改
|
||||
|
||||
/// <summary>
|
||||
/// 保存影像质量
|
||||
|
@ -1375,12 +1375,12 @@ namespace IRaCIS.Application.Services
|
|||
switch (taskinfo.TrialReadingCriterion.CriterionType)
|
||||
{
|
||||
// 对于非靶病灶,如果状态选择为显著增大,请验证:
|
||||
// 1) 对于非淋巴结病灶,验证当前访视该病灶的长径 > 上一访视该病灶的长径。
|
||||
// 约束条件:两次访视该病灶的长径有测量值。
|
||||
// 提示语:当前访视该非淋巴结病灶的长径小于上一访视的值,不能设置为显著增大。
|
||||
// 2) 对于淋巴结病灶,验证当前访视该病灶的短径 > 上一访视该病灶的短径。
|
||||
// 约束条件:两次访视该病灶的短径有测量值。
|
||||
// 提示语:当前访视该淋巴结病灶的短径小于上一访视的值,不能设置为显著增大。
|
||||
// 1) 对于非淋巴结病灶,验证当前检查批次该病灶的长径 > 上一检查批次该病灶的长径。
|
||||
// 约束条件:两次检查批次该病灶的长径有测量值。
|
||||
// 提示语:当前检查批次该非淋巴结病灶的长径小于上一检查批次的值,不能设置为显著增大。
|
||||
// 2) 对于淋巴结病灶,验证当前检查批次该病灶的短径 > 上一检查批次该病灶的短径。
|
||||
// 约束条件:两次检查批次该病灶的短径有测量值。
|
||||
// 提示语:当前检查批次该淋巴结病灶的短径小于上一检查批次的值,不能设置为显著增大。
|
||||
case CriterionType.RECIST1Pointt1:
|
||||
var lastTaskinfo = await _visitTaskRepository
|
||||
.Where(x => x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
|
||||
|
@ -1875,7 +1875,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 验证访视提交
|
||||
/// 验证检查批次提交
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -2315,7 +2315,7 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
// ****** 先生成阅片期 阅片期任务阅片完成之后生成肿瘤学的 如果没有阅片期 直接生成肿瘤学 *********////
|
||||
#region 建立关系
|
||||
// 访视阅完产生 全局
|
||||
// 检查批次阅完产生 全局
|
||||
Dictionary<ModuleTypeEnum, ReadingCategory> typeChangeDic = new Dictionary<ModuleTypeEnum, ReadingCategory>();
|
||||
typeChangeDic.Add(ModuleTypeEnum.InPlanSubjectVisit, ReadingCategory.Visit);
|
||||
typeChangeDic.Add(ModuleTypeEnum.OutPlanSubjectVisit, ReadingCategory.Visit);
|
||||
|
|
|
@ -124,7 +124,7 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
case ReadingCategory.Visit:
|
||||
|
||||
// 判断是否是全局访视任务
|
||||
// 判断是否是全局检查批次任务
|
||||
if (await VerifyIsGlobalVisitTask(taskList[0].Id))
|
||||
{
|
||||
|
||||
|
@ -308,7 +308,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
if (criterionType != CriterionType.PCWG3)
|
||||
{
|
||||
// 加全局是否更新 和访视点注释 PCWG3不要
|
||||
// 加全局是否更新 和检查批次点注释 PCWG3不要
|
||||
judgeReadingQuestion.JudgeQuestionList.Add(new JudgeQuestion()
|
||||
{
|
||||
Answer = item.AfterQuestionList.Any(x => x.IsHaveChange),
|
||||
|
@ -349,7 +349,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
if (criterionType != CriterionType.PCWG3)
|
||||
{
|
||||
// 加全局是否更新 和访视点注释
|
||||
// 加全局是否更新 和检查批次点注释
|
||||
rTwoJudge.JudgeQuestionList.Add(new JudgeQuestion()
|
||||
{
|
||||
Answer = twoItem.AfterQuestionList.Any(x => x.IsHaveChange),
|
||||
|
@ -458,7 +458,7 @@ namespace IRaCIS.Application.Services
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断任务是否是全局访视任务
|
||||
/// 判断任务是否是全局检查批次任务
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task<bool> VerifyIsGlobalVisitTask(Guid visitTaskId)
|
||||
|
@ -572,11 +572,11 @@ namespace IRaCIS.Application.Services
|
|||
{
|
||||
switch (visitTask.ReadingCategory)
|
||||
{
|
||||
// 访视
|
||||
// 检查批次
|
||||
case ReadingCategory.Visit:
|
||||
|
||||
// 判断是单访视裁判还是全局访视裁判
|
||||
// 查找两个 访视的阅片答案
|
||||
// 判断是单检查批次裁判还是全局检查批次裁判
|
||||
// 查找两个 检查批次的阅片答案
|
||||
if (await VerifyIsGlobalVisitTask(visitTask.Id))
|
||||
{
|
||||
// 找到所有的的任务
|
||||
|
@ -798,7 +798,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
(visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Visit)
|
||||
|| (visitTask.SouceReadModuleId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading)
|
||||
// 全局访视任务仲裁
|
||||
// 全局检查批次任务仲裁
|
||||
|| (visitTask.SourceSubjectVisitId != null && criterionInfo.ArbitrationRule == ArbitrationRule.Reading && criterionInfo.IsReadingPeriod && !criterionInfo.IsGlobalReading)
|
||||
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace IRaCIS.Application.Services
|
|||
public partial class ReadingImageTaskService : BaseService, IReadingImageTaskService
|
||||
{
|
||||
/// <summary>
|
||||
/// 提交访视阅片问题
|
||||
/// 提交检查批次阅片问题
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -92,7 +92,7 @@ namespace IRaCIS.Application.Services
|
|||
});
|
||||
|
||||
|
||||
// 找到对应的访视
|
||||
// 找到对应的检查批次
|
||||
List<OncologyVisitTaskInfo> oncologyVisits = await _visitTaskRepository.Where(x =>
|
||||
x.TrialId == taskInfo.TrialId &&
|
||||
x.SubjectId == taskInfo.SubjectId &&
|
||||
|
|
|
@ -215,7 +215,7 @@ namespace IRaCIS.Application.Services
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加阅片的时候 获取访视 //标准参数必传
|
||||
/// 添加阅片的时候 获取检查批次 //标准参数必传
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <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))
|
||||
{
|
||||
throw new BusinessValidationFailedException($"当前访视已经添加过阅片期");
|
||||
throw new BusinessValidationFailedException($"当前检查批次已经添加过阅片期");
|
||||
}
|
||||
var readModuleData = new ReadModule()
|
||||
{
|
||||
|
@ -391,7 +391,7 @@ namespace IRaCIS.Application.Services
|
|||
}
|
||||
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)))
|
||||
{
|
||||
throw new BusinessValidationFailedException("当前访视存在肿瘤学阅片,请先删除肿瘤学阅片");
|
||||
throw new BusinessValidationFailedException("当前检查批次存在肿瘤学阅片,请先删除肿瘤学阅片");
|
||||
}
|
||||
|
||||
if (await _visitTaskRepository.AnyAsync(x => readModuleId==x.SouceReadModuleId))
|
||||
|
|
|
@ -422,7 +422,7 @@ namespace IRaCIS.Application.Services
|
|||
|
||||
pageList.CurrentPageData.ForEach(x =>
|
||||
{
|
||||
x.SubjectVisitName = x.IsGlobal ? "末次访视" : x.SubjectVisitName;
|
||||
x.SubjectVisitName = x.IsGlobal ? "末次检查批次" : x.SubjectVisitName;
|
||||
});
|
||||
return pageList;
|
||||
}
|
||||
|
@ -441,7 +441,7 @@ namespace IRaCIS.Application.Services
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取阅片期配置的截至访视的下拉框 (增加标准搜索,已修改)
|
||||
/// 获取阅片期配置的截至检查批次的下拉框 (增加标准搜索,已修改)
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -492,7 +492,7 @@ namespace IRaCIS.Application.Services
|
|||
.WhereIf(inDto.ReadingScope == ReadingScopeEnum.Site, x => inDto.SiteIds.Contains(x.SiteId))
|
||||
.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);
|
||||
|
||||
visitQuery = visitQuery.Where(x => !existsBubjectVisitsQuery.Contains(x.Id))
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public Guid TUId { get; set; }
|
||||
public int LesionType { get; set; } //病灶类型
|
||||
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; } // 病灶序号
|
||||
|
||||
// 病灶分组,主要是用于将分裂或者结合在一起的已经被标识的肿瘤分类
|
||||
|
@ -49,7 +49,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public string TUEVALID { get; set; } = string.Empty;//这个特定的评估者变量是与 TUEVAL一起使用来提供更详 细的信息
|
||||
public string TUACPTFL { get; set; } = string.Empty;
|
||||
|
||||
// 访视信息
|
||||
// 检查批次信息
|
||||
public decimal VISITNUM { get; set; } = 0;
|
||||
public string VISIT { get; set; } = string.Empty;
|
||||
public int VISITDY { get; set; }
|
||||
|
@ -102,7 +102,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
}
|
||||
public class VisitLesionInfo
|
||||
{
|
||||
//基线病灶信息及本次访视测量信息
|
||||
//基线病灶信息及本次检查批次测量信息
|
||||
public IList<VisitLesion> BLLesionList { get; set; } = new List<VisitLesion>();
|
||||
// public IList<LesionInformation> BLVisitLesionList { get; set; } = new List<LesionInformation>();
|
||||
//public IList<LesionInformation> CurrentVisitLesionList { get; set; } = new List<LesionInformation>();
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
//IList<LesionInformation> GetBLLesion(string trialCode, string subjectCode);
|
||||
|
||||
/// <summary>
|
||||
/// 获取访视病灶信息
|
||||
/// 获取检查批次病灶信息
|
||||
/// </summary>
|
||||
VisitLesionInfo GetVisitLineLesion(string trialCode, string subjectCode, decimal visitNum,string tpCode);
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@
|
|||
// return result;
|
||||
// }
|
||||
|
||||
// /// 获取其他访视病灶信息
|
||||
// /// 获取其他检查批次病灶信息
|
||||
// [AllowAnonymous]
|
||||
// [HttpGet, Route("getVisitLineLesion/{trialCode}/{subjectCode}/{visitNum:decimal}/{tpCode}")]
|
||||
// public VisitLesionInfo GetVisitLineLesion(string trialCode, string subjectCode, decimal visitNum, string tpCode)
|
||||
|
@ -230,7 +230,7 @@
|
|||
// tempLesion.TUSEQ = tempLesion.CurrentLesion.TUSEQ;
|
||||
// visitLesionInfo.BLLesionList.Add(tempLesion);
|
||||
// }
|
||||
// // 以往新病灶,病灶类型为5,且访视编号小于当前访视,且不是基线
|
||||
// // 以往新病灶,病灶类型为5,且检查批次编号小于当前检查批次,且不是基线
|
||||
// var previousLesion = list.Where(u => u.VISITNUM < visitNum && u.VISITNUM != 1 && u.LesionType == 5).ToList();
|
||||
// foreach (var item in previousLesion)
|
||||
// {
|
||||
|
@ -308,7 +308,7 @@
|
|||
// [HttpPost("{tpId:guid}")]
|
||||
// public bool SubmiteReport(Guid tpId)
|
||||
// {
|
||||
// // 提交报告 同时查询VisitStage(项目访视计划,看是否需要添加全局)
|
||||
// // 提交报告 同时查询VisitStage(项目检查批次计划,看是否需要添加全局)
|
||||
|
||||
// var query = from workloadTp in _workloadTPRepository.Where(u => u.Id == tpId)
|
||||
// join subjectVisit in _subjectVisitRepository.AsQueryable()
|
||||
|
@ -371,7 +371,7 @@
|
|||
// Status = (int)WorkloadStatus.Reading
|
||||
// });
|
||||
|
||||
// //序号按照每个项目、每个受试者、每个评估者,一条记录
|
||||
// //序号按照每个项目、每个患者、每个评估者,一条记录
|
||||
// TU lastTu = _tURepository.Where(u => u.STUDYID == addedLesion.STUDYID && u.USUBJID == addedLesion.USUBJID
|
||||
// && u.TUEVAL == addedLesion.TUEVAL).OrderByDescending("TUSEQ").FirstOrDefault();
|
||||
// int tuSeq = 101;
|
||||
|
@ -529,7 +529,7 @@
|
|||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 添加访视报告信息
|
||||
// /// 添加检查批次报告信息
|
||||
// /// LesionInformation 为新病灶及测量信息(包括分裂及合并产生的)
|
||||
// /// TRList 已经存在的病灶的测量信息
|
||||
// /// RSList 疗效信息
|
||||
|
|
|
@ -14,7 +14,7 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
public class VisitStudyTime
|
||||
{
|
||||
/// <summary>
|
||||
/// 访视Id
|
||||
/// 检查批次Id
|
||||
/// </summary>
|
||||
public Guid SubjectVisitId { get; set; }
|
||||
|
||||
|
@ -24,7 +24,7 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
public class SiteVisitForTumor
|
||||
{
|
||||
/// <summary>
|
||||
/// 访视Id
|
||||
/// 检查批次Id
|
||||
/// </summary>
|
||||
public Guid VisitTaskId { get; set; }
|
||||
|
||||
|
|
|
@ -19,14 +19,14 @@ namespace IRaCIS.Core.Application.Service
|
|||
Task CalculateTask(CalculateTaskInDto inDto);
|
||||
|
||||
/// <summary>
|
||||
/// 验证访视提交
|
||||
/// 验证检查批次提交
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto);
|
||||
|
||||
/// <summary>
|
||||
/// 将上一次的访视病灶添加到这一次
|
||||
/// 将上一次的检查批次病灶添加到这一次
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -18,14 +18,14 @@ namespace IRaCIS.Core.Application.Service
|
|||
Task CalculateTask(CalculateTaskInDto inDto);
|
||||
|
||||
/// <summary>
|
||||
/// 验证访视提交
|
||||
/// 验证检查批次提交
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
Task VerifyVisitTaskQuestions(VerifyVisitTaskQuestionsInDto inDto);
|
||||
|
||||
/// <summary>
|
||||
/// 将上一次的访视病灶添加到这一次
|
||||
/// 将上一次的检查批次病灶添加到这一次
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -555,13 +555,13 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
// 既往新病灶
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.AlwaysNewLesionsCount,GetIntFun=GetAlwaysNewLesionsCount},
|
||||
|
||||
// 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
// 自治疗后第二个检查批次点以来持续的新骨病变数量
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.NewBoneLesionsCount,GetIntFun=GetNewBoneLesionCount},
|
||||
|
||||
// 间隔天数
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.DaysBetween,GetIntFun=GetNumberOfDaysBetween},
|
||||
|
||||
// 访视点肿瘤评估
|
||||
// 检查批次点肿瘤评估
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.SiteVisitForTumorEvaluation,GetStringFun=GetSiteVisitForTumorEvaluation},
|
||||
|
||||
|
||||
|
@ -758,9 +758,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
#endregion
|
||||
|
||||
|
||||
#region 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
#region 自治疗后第二个检查批次点以来持续的新骨病变数量
|
||||
/// <summary>
|
||||
/// 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
/// 自治疗后第二个检查批次点以来持续的新骨病变数量
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -837,9 +837,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
|
||||
|
||||
#region 访视点肿瘤评估
|
||||
#region 检查批次点肿瘤评估
|
||||
/// <summary>
|
||||
/// 访视点肿瘤评估
|
||||
/// 检查批次点肿瘤评估
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -876,7 +876,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改上一次访视结果
|
||||
/// 修改上一次检查批次结果
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -894,24 +894,24 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
if (lastTask != null)
|
||||
{
|
||||
|
||||
#region 1、基线后第一个访视:新病灶计数≥ 2个;2、基线后第二个访视(应满足访视间隔6周以上,否则顺延)新病灶≥ 2个;
|
||||
//1、基线后第一个访视:新病灶计数≥ 2个;2、基线后第二个访视(应满足访视间隔6周以上,否则顺延)新病灶≥ 2个;
|
||||
#region 1、基线后第一个检查批次:新病灶计数≥ 2个;2、基线后第二个检查批次(应满足检查批次间隔6周以上,否则顺延)新病灶≥ 2个;
|
||||
//1、基线后第一个检查批次:新病灶计数≥ 2个;2、基线后第二个检查批次(应满足检查批次间隔6周以上,否则顺延)新病灶≥ 2个;
|
||||
|
||||
|
||||
var firstVisit = taskList.FirstOrDefault();
|
||||
if (baseLineTask.StudyTime != null)
|
||||
{
|
||||
//基线后第二个访视(应满足访视间隔6周以上,否则顺延)
|
||||
//基线后第二个检查批次(应满足检查批次间隔6周以上,否则顺延)
|
||||
var secondVisit = taskList.Where(x => x.VisitTaskNum >= 2 && x.StudyTime >= baseLineTask.StudyTime.Value.AddDays(42)).FirstOrDefault();
|
||||
if (secondVisit != null)
|
||||
{
|
||||
|
||||
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();
|
||||
|
||||
// 判断是否是当前访视 当前访视还未入库
|
||||
// 判断是否是当前检查批次 当前检查批次还未入库
|
||||
if (secondVisit.VisitTaskId == inDto.VisitTaskId)
|
||||
{
|
||||
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
|
||||
|
||||
/// <summary>
|
||||
/// 获取访视日期信息
|
||||
/// 获取检查批次日期信息
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -131,10 +131,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
{
|
||||
QuestionId = x.Id,
|
||||
GroupName = x.GroupName,
|
||||
GroupEnName=x.GroupEnName,
|
||||
GroupEnName = x.GroupEnName,
|
||||
IsShowInDicom = x.IsShowInDicom,
|
||||
Type = x.Type,
|
||||
GroupId=x.GroupId,
|
||||
GroupId = x.GroupId,
|
||||
QuestionType = x.QuestionType,
|
||||
LesionType = x.LesionType,
|
||||
QuestionGenre = x.QuestionGenre,
|
||||
|
@ -145,19 +145,19 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
ShowOrder = x.ShowOrder,
|
||||
ValueType = x.ValueType,
|
||||
Unit = x.Unit,
|
||||
CustomUnit=x.CustomUnit,
|
||||
ReportLayType= ReportLayType.Group,
|
||||
CustomUnit = x.CustomUnit,
|
||||
ReportLayType = ReportLayType.Group,
|
||||
}).ToList();
|
||||
|
||||
// 分组
|
||||
foreach (var item in questions)
|
||||
{
|
||||
item.Childrens = questionList.Where(x => x.GroupId==item.QuestionId).OrderBy(x => x.ShowOrder).Select(x => new ReadingReportDto()
|
||||
item.Childrens = questionList.Where(x => x.GroupId == item.QuestionId).OrderBy(x => x.ShowOrder).Select(x => new ReadingReportDto()
|
||||
{
|
||||
GroupName = x.GroupName,
|
||||
QuestionId = x.Id,
|
||||
IsShowInDicom = x.IsShowInDicom,
|
||||
GroupEnName=x.GroupEnName,
|
||||
GroupEnName = x.GroupEnName,
|
||||
QuestionName = x.QuestionName.LanguageName(x.QuestionEnName, _userInfo.IsEn_Us),
|
||||
LesionType = x.LesionType,
|
||||
QuestionGenre = x.QuestionGenre,
|
||||
|
@ -170,7 +170,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
OrderMark = x.OrderMark,
|
||||
ValueType = x.ValueType,
|
||||
Unit = x.Unit,
|
||||
CustomUnit=x.CustomUnit,
|
||||
CustomUnit = x.CustomUnit,
|
||||
ReportLayType = ReportLayType.Question,
|
||||
}).ToList();
|
||||
|
||||
|
@ -184,7 +184,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
var answer = answers.Where(x => x.VisitTaskId == task.VisitTaskId && x.ReadingQuestionTrialId == question.QuestionId).FirstOrDefault();
|
||||
question.Answer.Add(new TaskQuestionAnswer()
|
||||
{
|
||||
Answer = answer==null?string.Empty:answer.Answer,
|
||||
Answer = answer == null ? string.Empty : answer.Answer,
|
||||
IsGlobalChange = answer == null ? false : answer.IsGlobalChange,
|
||||
GlobalChangeAnswer = answer == null ? string.Empty : answer.GlobalChangeAnswer,
|
||||
TaskName = task.TaskName,
|
||||
|
@ -224,7 +224,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
Type = x.Type,
|
||||
LesionType = question.LesionType,
|
||||
TableQuestionType = x.TableQuestionType,
|
||||
RowId=row.RowId,
|
||||
RowId = row.RowId,
|
||||
IsShowInDicom = question.IsShowInDicom,
|
||||
DataSource = x.DataSource,
|
||||
DictionaryCode = x.DictionaryCode,
|
||||
|
@ -261,7 +261,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
switch (tableQuestion.QuestionMark)
|
||||
{
|
||||
case QuestionMark.Organ:
|
||||
taskQuestionAnswer.Answer= organInfo.TULOCEN;
|
||||
taskQuestionAnswer.Answer = organInfo.TULOCEN;
|
||||
|
||||
break;
|
||||
case QuestionMark.Location:
|
||||
|
@ -344,7 +344,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
public async Task TestCalculate(Guid visitTaskId, QuestionType type)
|
||||
{
|
||||
ReadingCalculateDto readingData = await _generalCalculateService.GetReadingCalculateDto(visitTaskId);
|
||||
await ReadingCalculate(readingData,new List<QuestionType>() { type});
|
||||
await ReadingCalculate(readingData, new List<QuestionType>() { type });
|
||||
}
|
||||
|
||||
|
||||
|
@ -384,7 +384,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
/// <param name="inDto"></param>
|
||||
/// <param name="calculateType"></param>
|
||||
/// <returns></returns>
|
||||
public async Task ReadingCalculate(ReadingCalculateDto inDto,List<QuestionType> calculateType=null)
|
||||
public async Task ReadingCalculate(ReadingCalculateDto inDto, List<QuestionType> calculateType = null)
|
||||
{
|
||||
|
||||
#region 计算 这里顺序非常重要 后面计算的值要依赖前面计算的结果
|
||||
|
@ -402,41 +402,45 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
//与基线SOD相比变化量(mm)
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.SODChange,GetDecimalNullFun=GetSODChange},
|
||||
|
||||
//与基线访视相比SOD变化百分比
|
||||
//与基线检查批次相比SOD变化百分比
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.SODPercent,GetDecimalNullFun=GetSODPercent},
|
||||
|
||||
//与整个访视期间SOD最低点相比增加的值(mm) //其他任务需要改
|
||||
//与整个检查批次期间SOD最低点相比增加的值(mm) //其他任务需要改
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.LowestIncrease,GetDecimalNullFun=GetLowestIncrease,/*ChangeAllTaskFun=ChangeAllLowestIncrease*/},
|
||||
|
||||
//与整个访视期间SOD最低点相比增加的百分比 //其他任务需要改
|
||||
//与整个检查批次期间SOD最低点相比增加的百分比 //其他任务需要改
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.LowPercent,GetDecimalNullFun=GetLowPercent,/*ChangeAllTaskFun=ChangeAllLowPercent*/},
|
||||
|
||||
//整个访视期间SOD最低点访视名称 //其他任务需要改
|
||||
//整个检查批次期间SOD最低点检查批次名称 //其他任务需要改
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.LowVisit,GetStringFun=GetLowVisit,/*ChangeAllTaskFun=ChangeAllLowVisitName*/},
|
||||
|
||||
//是否存在非淋巴结靶病灶
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.IsLymphTarget,GetStringFun=GetIsLymphTarget},
|
||||
|
||||
//是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上
|
||||
//是否存在淋巴结靶病灶且该病灶比上一检查批次短径增加5MM以上
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.IsAddFive,GetStringFun=GetIsAddFive},
|
||||
|
||||
//被评估为NE的单个靶病灶
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.NETarget,GetStringFun=GetNETarget},
|
||||
|
||||
//靶病灶评估
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate},
|
||||
|
||||
//非靶病灶评估
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate},
|
||||
#region 疗效不自动计算
|
||||
// //靶病灶评估
|
||||
// new ReadingCalculateData (){QuestionType=QuestionType.TargetLesion,GetStringFun=GetTargetLesionEvaluate},
|
||||
|
||||
//是否存在新病灶
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.NewLesions,GetStringFun=GetNewLesionEvaluate},
|
||||
////非靶病灶评估
|
||||
// new ReadingCalculateData (){QuestionType=QuestionType.NoTargetLesion,GetStringFun=GetNoTargetLesionEvaluate},
|
||||
|
||||
//整体肿瘤评估
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetTumor},
|
||||
////是否存在新病灶
|
||||
// new ReadingCalculateData (){QuestionType=QuestionType.NewLesions,GetStringFun=GetNewLesionEvaluate},
|
||||
|
||||
// //整体肿瘤评估
|
||||
// new ReadingCalculateData (){QuestionType=QuestionType.Tumor,GetStringFun=GetTumor},
|
||||
|
||||
// //是否存在疾病
|
||||
// new ReadingCalculateData (){QuestionType=QuestionType.ExistDisease,GetStringFun=GetIsExistDisease},
|
||||
#endregion
|
||||
|
||||
//是否存在疾病
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.ExistDisease,GetStringFun=GetIsExistDisease},
|
||||
|
||||
};
|
||||
|
||||
|
@ -457,7 +461,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
var isNeedDeleteTypes = calculateList.Where(x => !questionTypes.Contains(x.QuestionType)).Select(x => x.QuestionType).ToList();
|
||||
|
||||
|
||||
var isNeedDeleteIds = inDto.QuestionInfo.Where(x =>x.QuestionType!=null&& isNeedDeleteTypes.Contains(x.QuestionType.Value)).Select(x => x.QuestionId).ToList();
|
||||
var isNeedDeleteIds = inDto.QuestionInfo.Where(x => x.QuestionType != null && isNeedDeleteTypes.Contains(x.QuestionType.Value)).Select(x => x.QuestionId).ToList();
|
||||
|
||||
await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == inDto.VisitTaskId && isNeedDeleteIds.Contains(x.ReadingQuestionTrialId), x => new ReadingTaskQuestionAnswer
|
||||
{
|
||||
|
@ -622,7 +626,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 验证访视提交
|
||||
/// 验证检查批次提交
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -697,10 +701,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
|
||||
|
||||
#region 将上一次的访视病灶添加到这一次
|
||||
#region 将上一次的检查批次病灶添加到这一次
|
||||
|
||||
/// <summary>
|
||||
/// 将上一次的访视病灶添加到这一次
|
||||
/// 将上一次的检查批次病灶添加到这一次
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -721,9 +725,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
|
||||
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
|
||||
x.IsAnalysisCreate== taskinfo.IsAnalysisCreate&&
|
||||
x.IsAnalysisCreate == taskinfo.IsAnalysisCreate &&
|
||||
x.DoctorUserId == taskinfo.DoctorUserId &&
|
||||
x.IsSelfAnalysis== taskinfo.IsSelfAnalysis &&
|
||||
x.IsSelfAnalysis == taskinfo.IsSelfAnalysis &&
|
||||
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTaskNum < taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect && x.ArmEnum == taskinfo.ArmEnum
|
||||
).OrderByDescending(x => x.VisitTaskNum).Select(x => x.Id).FirstOrDefaultAsync();
|
||||
|
||||
|
@ -751,7 +755,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
x.SeriesId = null;
|
||||
x.InstanceId = null;
|
||||
x.MeasureData = string.Empty;
|
||||
x.PicturePath= string.Empty;
|
||||
x.PicturePath = string.Empty;
|
||||
});
|
||||
|
||||
tableRowAnswers.ForEach(x =>
|
||||
|
@ -783,7 +787,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
|
||||
|
||||
var addList= _mapper.Map<List<ReadingTableAnswerRowInfo>>(tableRowAnswers);
|
||||
var addList = _mapper.Map<List<ReadingTableAnswerRowInfo>>(tableRowAnswers);
|
||||
|
||||
await _readingTableAnswerRowInfoRepository.AddRangeAsync(addList);
|
||||
await _readingTableQuestionAnswerRepository.AddRangeAsync(tableAnswers);
|
||||
|
@ -901,9 +905,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region 与基线访视相比SOD变化百分比
|
||||
#region 与基线检查批次相比SOD变化百分比
|
||||
/// <summary>
|
||||
/// 与基线访视相比SOD变化百分比
|
||||
/// 与基线检查批次相比SOD变化百分比
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -929,9 +933,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region 与整个访视期间SOD最低点相比增加的值(mm)
|
||||
#region 与整个检查批次期间SOD最低点相比增加的值(mm)
|
||||
/// <summary>
|
||||
/// 与整个访视期间SOD最低点相比增加的值(mm)
|
||||
/// 与整个检查批次期间SOD最低点相比增加的值(mm)
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <remarks>
|
||||
|
@ -951,9 +955,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region 与整个访视期间SOD最低点相比增加的百分比
|
||||
#region 与整个检查批次期间SOD最低点相比增加的百分比
|
||||
/// <summary>
|
||||
/// 与整个访视期间SOD最低点相比增加的百分比
|
||||
/// 与整个检查批次期间SOD最低点相比增加的百分比
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <remarks>
|
||||
|
@ -983,9 +987,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region 整个访视期间SOD最低点访视名称
|
||||
#region 整个检查批次期间SOD最低点检查批次名称
|
||||
/// <summary>
|
||||
/// 整个访视期间SOD最低点访视名称
|
||||
/// 整个检查批次期间SOD最低点检查批次名称
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <remarks>
|
||||
|
@ -1034,9 +1038,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
#endregion
|
||||
|
||||
#region 是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上
|
||||
#region 是否存在淋巴结靶病灶且该病灶比上一检查批次短径增加5MM以上
|
||||
/// <summary>
|
||||
/// 是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上
|
||||
/// 是否存在淋巴结靶病灶且该病灶比上一检查批次短径增加5MM以上
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -1054,7 +1058,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上的病灶
|
||||
/// 获取存在淋巴结靶病灶且该病灶比上一检查批次短径增加5MM以上的病灶
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -1151,10 +1155,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
#region 修改其他标准
|
||||
|
||||
#region 修改与整个访视期间SOD最低点相比增加的值(mm)
|
||||
#region 修改与整个检查批次期间SOD最低点相比增加的值(mm)
|
||||
|
||||
/// <summary>
|
||||
/// 修改与整个访视期间SOD最低点相比增加的值(mm)
|
||||
/// 修改与整个检查批次期间SOD最低点相比增加的值(mm)
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -1176,10 +1180,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
#endregion
|
||||
|
||||
|
||||
#region 修改整个访视期间SOD最低点相比增加的百分比
|
||||
#region 修改整个检查批次期间SOD最低点相比增加的百分比
|
||||
|
||||
/// <summary>
|
||||
/// 修改整个访视期间SOD最低点相比增加的百分比
|
||||
/// 修改整个检查批次期间SOD最低点相比增加的百分比
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -1218,7 +1222,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
/// <returns></returns>
|
||||
public async Task ChangeAllLowVisitName(ChangeAllTaskDto inDto)
|
||||
{
|
||||
// 找到所有访视任务的Id
|
||||
// 找到所有检查批次任务的Id
|
||||
|
||||
var visitTaskIds = await _visitTaskRepository.Where(x => x.IsAnalysisCreate == inDto.IsAnalysisCreate &&
|
||||
x.ReadingCategory == ReadingCategory.Visit &&
|
||||
|
@ -1237,9 +1241,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
#region 通用方法
|
||||
|
||||
#region 修改所有访视任务的答案
|
||||
#region 修改所有检查批次任务的答案
|
||||
/// <summary>
|
||||
/// 修改所有访视任务的答案
|
||||
/// 修改所有检查批次任务的答案
|
||||
/// </summary>
|
||||
/// <param name="visitTaskGuids"></param>
|
||||
/// <param name="questionId"></param>
|
||||
|
@ -1263,7 +1267,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
/// <returns></returns>
|
||||
private async Task<decimal> GetBaseLineSOD(ReadingCalculateDto inDto)
|
||||
{
|
||||
if (await _visitTaskRepository.AnyAsync(x => x.Id == inDto.VisitTaskId && x.SourceSubjectVisit.IsBaseLine && x.IsAnalysisCreate==inDto.IsAnalysisCreate && x.ArmEnum == inDto.ArmEnum))
|
||||
if (await _visitTaskRepository.AnyAsync(x => x.Id == inDto.VisitTaskId && x.SourceSubjectVisit.IsBaseLine && x.IsAnalysisCreate == inDto.IsAnalysisCreate && x.ArmEnum == inDto.ArmEnum))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -1274,7 +1278,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
x.SourceSubjectVisit.IsBaseLine && x.TaskState == TaskState.Effect &&
|
||||
x.IsAnalysisCreate == inDto.IsAnalysisCreate
|
||||
&&x.DoctorUserId==inDto.DoctorUserId
|
||||
&& x.DoctorUserId == inDto.DoctorUserId
|
||||
&& x.IsSelfAnalysis == inDto.IsSelfAnalysis && x.ArmEnum == inDto.ArmEnum)
|
||||
.Select(x => x.Id).FirstOrDefaultAsync();
|
||||
|
||||
|
@ -1310,9 +1314,9 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
return taskAnswerList.OrderBy(x => x.SOD).ToList();
|
||||
}
|
||||
|
||||
#region 获取访视任务信息
|
||||
#region 获取检查批次任务信息
|
||||
/// <summary>
|
||||
/// 获取访视任务信息
|
||||
/// 获取检查批次任务信息
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -1324,7 +1328,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
visitTaskAnswerList = await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId != inDto.VisitTaskId && x.VisitTask.ReadingCategory == ReadingCategory.Visit
|
||||
&& x.VisitTask.IsAnalysisCreate == inDto.IsAnalysisCreate
|
||||
&& x.VisitTask.IsSelfAnalysis == inDto.IsSelfAnalysis
|
||||
&&x.VisitTask.VisitTaskNum<inDto.VisitTaskNum
|
||||
&& x.VisitTask.VisitTaskNum < inDto.VisitTaskNum
|
||||
&& x.SubjectId == inDto.SubjectId && x.VisitTask.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTask.ArmEnum == inDto.ArmEnum && x.VisitTask.TaskState == TaskState.Effect && x.ReadingQuestionTrial.QuestionType == QuestionType.SOD)
|
||||
.Select(x => new VisitTaskAnswerInfo
|
||||
{
|
||||
|
@ -1342,7 +1346,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
visitTaskAnswerList.Add(new VisitTaskAnswerInfo()
|
||||
{
|
||||
VisitTaskId = inDto.VisitTaskId,
|
||||
BlindName=inDto.TaskBlindName,
|
||||
BlindName = inDto.TaskBlindName,
|
||||
QuestionId = visitTaskAnswerList[0].QuestionId,
|
||||
VisitName = inDto.VisitName,
|
||||
SOD = (await GetSODData(inDto)).ToString().IsNullOrEmptyReturn0(),
|
||||
|
@ -1357,24 +1361,24 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 获取上一个访视任务Id
|
||||
/// 获取上一个检查批次任务Id
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task<Guid> GetLastVisitTaskId(ReadingCalculateDto inDto)
|
||||
{
|
||||
// 拿到这一个访视
|
||||
// 拿到这一个检查批次
|
||||
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();
|
||||
|
||||
// 找到访视任务Id
|
||||
// 找到检查批次任务Id
|
||||
|
||||
var LastVisitTaskId = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
|
||||
x.TrialReadingCriterionId == inDto.TrialReadingCriterionId &&
|
||||
x.TaskState == TaskState.Effect &&
|
||||
x.IsAnalysisCreate == inDto.IsAnalysisCreate
|
||||
&& x.SourceSubjectVisitId == lastVisitId && x.ArmEnum==inDto.ArmEnum).Select(x => x.Id).FirstOrDefaultAsync();
|
||||
&& x.SourceSubjectVisitId == lastVisitId && x.ArmEnum == inDto.ArmEnum).Select(x => x.Id).FirstOrDefaultAsync();
|
||||
|
||||
return LastVisitTaskId;
|
||||
}
|
||||
|
@ -1416,7 +1420,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
///
|
||||
///if (最低点SOD > 0)
|
||||
///{
|
||||
/// if(比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
/// if(比整体检查批次期间最低点SOD增加≥20 % 且与整个检查批次期间最低点相比增加的值≥5 mm)
|
||||
/// {
|
||||
/// 靶病灶疗效为 PD
|
||||
///
|
||||
|
@ -1425,21 +1429,21 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
///else
|
||||
///{
|
||||
/// //进入该分支最低点SOD=0
|
||||
/// if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
/// if (当前检查批次SOD > 0 且与整个检查批次期间最低点相比增加的值≥5 mm)
|
||||
/// {
|
||||
/// 靶病灶疗效为PD
|
||||
///
|
||||
/// }
|
||||
///}
|
||||
///
|
||||
///if(上次访视点评估是CR)
|
||||
///if(上次检查批次点评估是CR)
|
||||
/// {
|
||||
/// if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
|
||||
/// if (当前检查批次点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
|
||||
/// {
|
||||
/// 靶病灶疗效为 PD
|
||||
///
|
||||
/// }
|
||||
/// if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||
/// if (当前检查批次点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||
/// {
|
||||
/// 靶病灶疗效为 PD
|
||||
///
|
||||
|
@ -1486,28 +1490,28 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
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,
|
||||
|
||||
// SOD 百分比 比整体访视期间SOD最低点SOD增加≥20%
|
||||
// SOD 百分比 比整体检查批次期间SOD最低点SOD增加≥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,
|
||||
|
||||
// 比整体访视期间SOD最低点SOD绝对增加值≥5 mm
|
||||
// 比整体检查批次期间SOD最低点SOD绝对增加值≥5 mm
|
||||
LowSODChangeBigger5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
|
||||
|
||||
// 被评估为NE的单个靶病灶 是否存在状态为不可评估的靶病灶
|
||||
ExixtsNETargetLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.UnableEvaluate)),
|
||||
|
||||
//// 上次访视点整体肿瘤评估
|
||||
//// 上次检查批次点整体肿瘤评估
|
||||
LastTargetLesionEvaluate = string.Empty,
|
||||
|
||||
// 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm
|
||||
// 当前检查批次点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm
|
||||
CurrentMajoreBigger0 = false,
|
||||
|
||||
// 当前访视点淋巴结病灶, 至少一个淋巴结靶病灶短径≥10 mm
|
||||
// 当前检查批次点淋巴结病灶, 至少一个淋巴结靶病灶短径≥10 mm
|
||||
CurrenShortBigger10 = false,
|
||||
|
||||
// 靶病灶短径增加值有5mm的Index
|
||||
|
@ -1530,7 +1534,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
|
||||
{
|
||||
// 淋巴结非靶病灶状态全部为消失
|
||||
resultData.NonTargetStateIsLoss = resultData.NonTargetStateIsLoss&& item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault()== NoTargetState.Loss.GetEnumInt();
|
||||
resultData.NonTargetStateIsLoss = resultData.NonTargetStateIsLoss && item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault() == NoTargetState.Loss.GetEnumInt();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1540,10 +1544,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
|
||||
{
|
||||
// 淋巴结的短径
|
||||
resultData.DiameterLessThan10 = resultData.DiameterLessThan10&&(item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() < 10;
|
||||
resultData.DiameterLessThan10 = resultData.DiameterLessThan10 && (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() < 10;
|
||||
|
||||
var shortIsBigger10 = (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() >= 10;
|
||||
resultData.CurrenShortBigger10= resultData.CurrenShortBigger10|| shortIsBigger10;
|
||||
resultData.CurrenShortBigger10 = resultData.CurrenShortBigger10 || shortIsBigger10;
|
||||
|
||||
if (shortIsBigger10)
|
||||
{
|
||||
|
@ -1555,8 +1559,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1599,7 +1603,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
//if (最低点SOD > 0)
|
||||
if (resultData.LowSod > 0)
|
||||
{
|
||||
// if(比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
// if(比整体检查批次期间最低点SOD增加≥20 % 且与整个检查批次期间最低点相比增加的值≥5 mm)
|
||||
if (resultData.LowSODPercentBigger20 && resultData.LowSODChangeBigger5)
|
||||
{
|
||||
// 靶病灶疗效为 PD
|
||||
|
@ -1609,24 +1613,24 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
else
|
||||
{
|
||||
//进入该分支最低点SOD=0
|
||||
// if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
// if (当前检查批次SOD > 0 且与整个检查批次期间最低点相比增加的值≥5 mm)
|
||||
if (resultData.PresentSod > 0 && resultData.LowSODChangeBigger5)
|
||||
{
|
||||
// 靶病灶疗效为PD
|
||||
result = TargetAssessment.PD;
|
||||
}
|
||||
}
|
||||
//if(上次访视点评估是CR)
|
||||
//if(上次检查批次点评估是CR)
|
||||
if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
|
||||
{
|
||||
//if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
|
||||
//if (当前检查批次点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
|
||||
// 换句话说 就是 短径≥10 的病灶 和 短径增加值≥5的病灶 的交集数量大于0
|
||||
if (resultData.ShortBigger10Indexs.Intersect(resultData.AddFiveIndexs).ToList().Count()>0)
|
||||
if (resultData.ShortBigger10Indexs.Intersect(resultData.AddFiveIndexs).ToList().Count() > 0)
|
||||
{
|
||||
//靶病灶疗效为 PD
|
||||
result = TargetAssessment.PD;
|
||||
}
|
||||
//if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||
//if (当前检查批次点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||
if (resultData.CurrentMajoreBigger0)
|
||||
{
|
||||
//靶病灶疗效为 PD
|
||||
|
@ -1735,7 +1739,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
result = NoTargetAssessment.NN;
|
||||
}
|
||||
//所有单个病灶/病灶组状态评估状态为“消失”
|
||||
else if (tableQuestions.Count(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Loss))== tableQuestions.Count(x=> x.QuestionMark == QuestionMark.State) && tableQuestions.Count(x => x.QuestionMark == QuestionMark.State)>0)
|
||||
else if (tableQuestions.Count(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Loss)) == tableQuestions.Count(x => x.QuestionMark == QuestionMark.State) && tableQuestions.Count(x => x.QuestionMark == QuestionMark.State) > 0)
|
||||
{
|
||||
result = NoTargetAssessment.CR;
|
||||
}
|
||||
|
@ -1777,7 +1781,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
|
||||
|
||||
// 当前访视存在至少一个明确新病灶
|
||||
// 当前检查批次存在至少一个明确新病灶
|
||||
if (tableQuestions.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionState.Exist)))
|
||||
{
|
||||
result = NewLesionAssessment.Yes;
|
||||
|
@ -1787,7 +1791,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
{
|
||||
result = NewLesionAssessment.NE;
|
||||
}
|
||||
//当前访视不存在明确新病灶且存在至少一个疑似新病灶
|
||||
//当前检查批次不存在明确新病灶且存在至少一个疑似新病灶
|
||||
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))
|
||||
)
|
||||
|
|
|
@ -101,7 +101,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 验证访视提交
|
||||
/// 验证检查批次提交
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
@ -116,7 +116,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将上一次的访视病灶添加到这一次
|
||||
/// 将上一次的检查批次病灶添加到这一次
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -362,7 +362,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 将上一次的访视病灶添加到这一次
|
||||
/// 将上一次的检查批次病灶添加到这一次
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public Guid TrialId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 受试者编号具体规则
|
||||
/// 患者编号具体规则
|
||||
/// </summary>
|
||||
public string SubjectCodeRule { get; set; } = string.Empty;
|
||||
|
||||
|
@ -27,7 +27,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public bool IsVerifyVisitImageDate { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// 是否 提醒受试者编号规则
|
||||
/// 是否 提醒患者编号规则
|
||||
/// </summary>
|
||||
public bool IsNoticeSubjectCodeRule { get; set; } = true;
|
||||
|
||||
|
@ -37,7 +37,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public bool IsHaveFirstGiveMedicineDate { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 是否有 受试者年龄
|
||||
/// 是否有 患者年龄
|
||||
/// </summary>
|
||||
public bool IsHaveSubjectAge { get; set; } = false;
|
||||
|
||||
|
@ -45,7 +45,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 出组后计划外访视名称
|
||||
/// 出组后计划外检查批次名称
|
||||
/// </summary>
|
||||
public string OutEnrollmentVisitName { get; set; } = "EOT";
|
||||
|
||||
|
@ -142,7 +142,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
|
||||
|
||||
/// <summary>
|
||||
/// 阅片是否显示受试者信息
|
||||
/// 阅片是否显示患者信息
|
||||
/// </summary>
|
||||
public bool IsReadingShowSubjectInfo { get; set; } = false;
|
||||
|
||||
|
@ -227,7 +227,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
//public ReadingMethod ReadingType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 阅片是否显示受试者信息
|
||||
/// 阅片是否显示患者信息
|
||||
/// </summary>
|
||||
public bool IsReadingShowSubjectInfo { get; set; }
|
||||
|
||||
|
@ -261,7 +261,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public bool IsReadingTaskViewInOrder { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 阅片是否显示受试者信息
|
||||
/// 阅片是否显示患者信息
|
||||
/// </summary>
|
||||
public bool IsReadingShowSubjectInfo { get; set; }
|
||||
|
||||
|
@ -384,7 +384,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public bool IsImageIabeled { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// IR阅片是否显示受试者信息
|
||||
/// IR阅片是否显示患者信息
|
||||
/// </summary>
|
||||
public bool IsReadingShowSubjectInfo { get; set; } = false;
|
||||
|
||||
|
@ -854,7 +854,7 @@ namespace IRaCIS.Core.Application.Contracts
|
|||
public bool IsReadingTaskViewInOrder { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// IR阅片是否显示受试者信息
|
||||
/// IR阅片是否显示患者信息
|
||||
/// </summary>
|
||||
public bool IsReadingShowSubjectInfo { get; set; } = false;
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue