From 4309ba71e9859b46889256e4cf2c901d0ee12bf7 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Tue, 18 Apr 2023 17:03:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EI_Image_Viewer_Activation.csproj | 16 + EI_Image_Viewer_Activation/Main.Designer.cs | 120 ++++++ EI_Image_Viewer_Activation/Main.cs | 45 +++ EI_Image_Viewer_Activation/Main.resx | 348 ++++++++++++++++++ EI_Image_Viewer_Activation/Program.cs | 17 + .../icons8-access-control-64.ico | Bin 0 -> 16958 bytes IRaCIS.Core.API.sln | 10 + .../Controllers/InspectionController.cs | 4 +- .../Controllers/UploadDownLoadController.cs | 2 - IRaCIS.Core.API/IRaCIS.Core.API.xml | 4 +- .../Authorization/AuthorizationPolicySetup.cs | 8 +- IRaCIS.Core.Application/AOP/QANoticeAOP.cs | 46 +-- IRaCIS.Core.Application/Auth/IRaCISPolicy.cs | 5 +- .../BusinessFilter/TrialAuditFilter.cs | 10 +- IRaCIS.Core.Application/Resources/en-US.json | 16 +- IRaCIS.Core.Application/Resources/zh-CN.json | 14 +- .../Allocation/VisitTaskHelpeService.cs | 6 +- .../Service/Common/ExcelExportService.cs | 4 +- .../Document/TrialEmailNoticeConfigService.cs | 2 +- .../Service/QC/QCCommon.cs | 4 +- .../Service/QC/QCListService.cs | 20 +- .../Service/QC/QCOperationService.cs | 42 +-- .../Service/QC/_MapConfig.cs | 10 +- .../ReadingClinicalDataService.cs | 26 +- .../Reading/Dto/ReadingClinicalDataDto.cs | 2 +- .../TrialSiteUser/TrialMaintenanceService.cs | 4 +- .../Service/TrialSiteUser/TrialSiteService.cs | 16 +- .../Service/Visit/SubjectService.cs | 2 +- .../Service/Visit/SubjectVisitService.cs | 2 +- .../SubjectVisitCheckPassedTrigger.cs | 2 +- .../ConsistencyVerificationHandler.cs | 2 +- .../QC/CheckChanllengeTypeEnum.cs | 4 +- .../QC/RequestBackStateEnum.cs | 4 +- IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs | 4 +- IRaCIS.Core.Domain.Share/User/UserType.cs | 2 +- IRaCIS.Core.Domain/SQLFile/Test.sql | 8 +- IRaCIS.Core.Domain/Visit/SubjectVisit.cs | 2 +- 37 files changed, 690 insertions(+), 143 deletions(-) create mode 100644 EI_Image_Viewer_Activation/EI_Image_Viewer_Activation.csproj create mode 100644 EI_Image_Viewer_Activation/Main.Designer.cs create mode 100644 EI_Image_Viewer_Activation/Main.cs create mode 100644 EI_Image_Viewer_Activation/Main.resx create mode 100644 EI_Image_Viewer_Activation/Program.cs create mode 100644 EI_Image_Viewer_Activation/icons8-access-control-64.ico diff --git a/EI_Image_Viewer_Activation/EI_Image_Viewer_Activation.csproj b/EI_Image_Viewer_Activation/EI_Image_Viewer_Activation.csproj new file mode 100644 index 00000000..18e1e00e --- /dev/null +++ b/EI_Image_Viewer_Activation/EI_Image_Viewer_Activation.csproj @@ -0,0 +1,16 @@ + + + + WinExe + net6.0-windows + enable + true + enable + icons8-access-control-64.ico + + + + + + + \ No newline at end of file diff --git a/EI_Image_Viewer_Activation/Main.Designer.cs b/EI_Image_Viewer_Activation/Main.Designer.cs new file mode 100644 index 00000000..b2c8e50d --- /dev/null +++ b/EI_Image_Viewer_Activation/Main.Designer.cs @@ -0,0 +1,120 @@ +namespace EI_Image_Viewer_Activation +{ + partial class Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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; + } +} \ No newline at end of file diff --git a/EI_Image_Viewer_Activation/Main.cs b/EI_Image_Viewer_Activation/Main.cs new file mode 100644 index 00000000..1bedfac8 --- /dev/null +++ b/EI_Image_Viewer_Activation/Main.cs @@ -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(); + } + } + } +} diff --git a/EI_Image_Viewer_Activation/Main.resx b/EI_Image_Viewer_Activation/Main.resx new file mode 100644 index 00000000..6a9f3436 --- /dev/null +++ b/EI_Image_Viewer_Activation/Main.resx @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + iQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + 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= + + + \ No newline at end of file diff --git a/EI_Image_Viewer_Activation/Program.cs b/EI_Image_Viewer_Activation/Program.cs new file mode 100644 index 00000000..3735e4ae --- /dev/null +++ b/EI_Image_Viewer_Activation/Program.cs @@ -0,0 +1,17 @@ +namespace EI_Image_Viewer_Activation +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [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()); + } + } +} \ No newline at end of file diff --git a/EI_Image_Viewer_Activation/icons8-access-control-64.ico b/EI_Image_Viewer_Activation/icons8-access-control-64.ico new file mode 100644 index 0000000000000000000000000000000000000000..2231ed0de9853819cf4aa0e3b2c802bff0f4834f GIT binary patch literal 16958 zcmeHOZERCj7`{_r0@FD(21G#(>eNJ03`UJWKx2TQzxEeD5|=<&+pX(1zjl#!V?-o@ zC`mUE-OtGnb;hr5E^|Z@KxTj#rszhYz3aX0)^>ah7`s02y*=IOUF!zh+O6wdPT%u& z&v~Ecob%pu?|CN(S@>JEO2F>}LjGz&xJM9#d<0|(TM;N1(qghwKz7g`ZklJP!z>m z`0}X|x0<#sqw%CM#~QD(apM_08_WxPmE9q)d=24xSd#1eB#E}|+NIAIM>+2Aqxn)+ zWPgE`O?GLqI2M$e?ap}XSyj~;LCIGHyn&D;{~7f7UZp^B%A+!>!!Yvp0z5R7l-TcQ zWs^-77CL9zOxw)RGlX#5YPPT7b?lRr)giBP0yulal2WdoQfIMp!i@P)7?KnP<)<+x z*0C~@R`W;Cfz!j7OBcwFh;N9u@#U$GN7n2a=;$X7_~&`h=UW0?4e{o=QSYETI4`m; z22kGx+weH6Lw11d2m0uSU2yBRgq5a7mTalY$C!MNF}X@MyS%(6muVtN(p=!)iqH=% zEf;*gr&!rYQnQPa@&oR>N__P6^hDbgH;Xyiv&3xg2N%DTnyQ{0slD+ouh_IbkMQDI zbq!n|iVxB!rHi7LW ztX453W7Mwj^~M^vTI{RA^$FnbHTHAS?O%v7s;4y$+zmaR zo<(Er&v^euMY$JkJE;%MiN;<@dVtko;{x3j=y)1)BgTHRdN(U+ZwAaN+TTn2Ro0H` zcF!hT4t@H7|7h6bdy$oqJmyqqy7mVj8cU!y_%?%H2;maAsPXxHIjmgYOFQ;z zxptQXWe)nXdSo>jLXA z2d)5Lxy#v8f$_hJecoDzo5^&=PxxGQfkNzkPJxG$Ki3A{VVHTD&iHwpiQ*aj>An9+ zH0~@vEymv&=y25r8g3@QCU#8m_usX!Z%!@L`mf^|_gys2@{N+}P~B+$@aF=XA52cx z_kX4zN$nX|=YNIIix+P~9jY6zEKyzt|K$As!;cqiS*Y2myvFCni@R!-*D?Qt@yZhA zC4Kxy`TdjE7yI2~*zbJE=f#Tyy9ln1#49uArRw`9=>g6o-@j!~qVM0lzQBaNZs6Qc z^%6XA<6kYG`f_0JJ`ZqmPhkMjH@*o`>h)H@|)2o^8bUtiGxtJs#&@&HI!`!9gcI*YV!7$+fTdX)Pd5xPkv)SFQXA z!^+DGvb+GeQ*!>r^kC;~V>$n%cYfG`8d?j$te*`z{cf!L?eV^W@aLbve>~p#C!I@9 z^!X>_fMjv8IFCR7wiZ=I{S;_zj`sYU);k5hZ9X2cF>%koD~hX^;G8e1=ij_;6rV8v z2al4EbJe*14_52Pb5rgAVB}!}{9ni~Y|{I`@H~v@|J1Fl!CB?#{GTK_#;>BR*s&bz zd(!$p@jNj9w}@X#j6W-E1M~BeF~2)-cD=q&<3&D+v+N%7CE)$Sii;f!;pe3J%hFme zH`R>0Uj?uGc*e>95jOG=!f^k`AwRDX{U6~wd2}lIKgM!6PZR(5SQZ39^QW1H|Np@A zFrEMZh36p?&oGc-Aj3e0fz&X7caj^u23G2K^e@(BSGF$gt(qL1Wf3VdFn|6^lEF7; z<&tb|wcAPBv%9F`V9w(HrJ}0h2T@h+>QdEgwA6}96sqqK1j}2hx)ZNF6?v*!Qz;0Q zkUIv&L2)-PD=YPMBKg4zy}V*ktbF(L*fgtWY@ekCL9ZW?YI~nbdKhGl*xok?J$EiX ze6Am|I=8JY2pp~Uu57~9)fLPooc&8HD+xE_f$j(sKU$%Sjf - /// CRC RequestToQC 批量提交 + /// IC RequestToQC 批量提交 /// /// /// @@ -392,7 +392,7 @@ namespace IRaCIS.Core.API.Controllers /// - /// CRC 设置已经重传完成 + /// IC 设置已经重传完成 /// [HttpPost, Route("Inspection/QCOperation/SetReuploadFinished")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 08d0cde1..8eec838d 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -434,7 +434,6 @@ namespace IRaCIS.Core.API.Controllers /// [HttpPost("ClinicalData/UploadVisitClinicalData/{trialId:guid}/{subjectVisitId:guid}")] [DisableRequestSizeLimit] - [Authorize(Policy = IRaCISPolicy.CRC)] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] public async Task 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 UploadNoneDicomFile(IFormCollection formCollection, Guid subjectVisitId, Guid noneDicomStudyId, Guid studyMonitorId, [FromServices] IRepository _noneDicomStudyRepository, [FromServices] IRepository _studyMonitorRepository) { diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 8b186f7c..999ba0b5 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -171,7 +171,7 @@ - CRC RequestToQC 批量提交 + IC RequestToQC 批量提交 @@ -195,7 +195,7 @@ - CRC 设置已经重传完成 + IC 设置已经重传完成 diff --git a/IRaCIS.Core.API/_ServiceExtensions/Authorization/AuthorizationPolicySetup.cs b/IRaCIS.Core.API/_ServiceExtensions/Authorization/AuthorizationPolicySetup.cs index a6ea6138..8e3ec147 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/Authorization/AuthorizationPolicySetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/Authorization/AuthorizationPolicySetup.cs @@ -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 => { diff --git a/IRaCIS.Core.Application/AOP/QANoticeAOP.cs b/IRaCIS.Core.Application/AOP/QANoticeAOP.cs index 0e80ae3a..79ea5771 100644 --- a/IRaCIS.Core.Application/AOP/QANoticeAOP.cs +++ b/IRaCIS.Core.Application/AOP/QANoticeAOP.cs @@ -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(); diff --git a/IRaCIS.Core.Application/Auth/IRaCISPolicy.cs b/IRaCIS.Core.Application/Auth/IRaCISPolicy.cs index 994cbbc9..e469ec2e 100644 --- a/IRaCIS.Core.Application/Auth/IRaCISPolicy.cs +++ b/IRaCIS.Core.Application/Auth/IRaCISPolicy.cs @@ -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"; diff --git a/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs b/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs index a038ee94..578431f4 100644 --- a/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs +++ b/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs @@ -45,7 +45,7 @@ public enum AuditOptType AddTrialSite = 5, DeleteTrialSite = 6, - //Site CRC + //Site IC AddTrialSiteCRC = 7, DeleteTrialSiteCRC = 8, @@ -355,7 +355,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt // // } // // break; -// // //删除项目Site CRC +// // //删除项目Site IC // // case AuditOptType.DeleteTrialSiteCRC: // // if (result.IsSuccess) @@ -700,7 +700,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt // // //删除项目运维人员 // // case AuditOptType.DeleteTrailStaff: -// // // 删除项目Site CRC +// // // 删除项目Site IC // // case AuditOptType.DeleteTrialSiteCRC: // // //接口参数 @@ -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: // //接口参数 @@ -1258,7 +1258,7 @@ public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilt // } // break; -// //删除项目Site CRC +// //删除项目Site IC // case AuditOptType.DeleteTrialSiteCRC: // if (result.IsSuccess) diff --git a/IRaCIS.Core.Application/Resources/en-US.json b/IRaCIS.Core.Application/Resources/en-US.json index 31a6a2c9..0c0783ed 100644 --- a/IRaCIS.Core.Application/Resources/en-US.json +++ b/IRaCIS.Core.Application/Resources/en-US.json @@ -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", diff --git a/IRaCIS.Core.Application/Resources/zh-CN.json b/IRaCIS.Core.Application/Resources/zh-CN.json index b9fe6df5..64081372 100644 --- a/IRaCIS.Core.Application/Resources/zh-CN.json +++ b/IRaCIS.Core.Application/Resources/zh-CN.json @@ -59,7 +59,7 @@ // TrialSiteService "CodeRepeated": "编码不允许重复", - "CRCCanNotDeleted": "该站点已与CRC关联,无法删除", + "CRCCanNotDeleted": "该站点已与IC关联,无法删除", "SiteCanNotDeleted": "主题已添加到本网站,无法删除", "StudyCanNotDeleted": "该网站已上传研究,无法删除", @@ -76,7 +76,7 @@ "ContainsVisitnum": "这个主题的访问计划已经包含了一个访问次数相同的访问", //该患者已经有检查批次设置为末次检查批次,不允许将该检查批次设置为末次检查批次 这个在上面有 TheLastVisit "LastEvaluationNotAllowed": "设置末次评估后,不允许添加计划外检查批次", - "CRCSubmit": "CRC提交后,不允许修改PD确认状态", + "CRCSubmit": "IC提交后,不允许修改PD确认状态", "BacktrackingVisits": "回退的检查批次,不允许修改PD确认状态", "ImageUpload": "该患者此检查批次后有影像上传,该检查批次不允许设置为末次检查批次", "AssociatedUploaded": "本次访问与上传的研究图片有关,无法删除", @@ -87,7 +87,7 @@ "AccordWithVisitNum": "对于访问计划,具有较大VisitNum的VisitDay应该大于具有较小VisitNum的VisitDay", "same/VisitName": "当前访问计划中已经存在具有相同VisitName/VisitNum的访问", "AlreadyBaseline": "已检查批次是当前检查批次计划的基线", - "IsUploadVideo": "有CRC已经为基线上传了影像数据,不允许修改基线", + "IsUploadVideo": "有IC已经为基线上传了影像数据,不允许修改基线", "VisitHasBeenExecuted": "访问计划已分配给患者并执行", "OnlyProgressCanEdit": "仅仅在项目初始化或者进行中时,才允许修改确认", "NoBaselineNoConfirmation": "没有基线,不允许确认", @@ -122,10 +122,10 @@ // QCOperationService "AuditQuestionMust": "必须填写审核问题,并保存,否则不允许添加质疑", - "VisitNoClose": "当前检查批次有未关闭的 同意CRC上传的质疑,不允许再次添加质疑", - "NotFinish": "CRC申请重传的/QC同意重传的质疑,在CRC设置重传完成前不允许关闭质疑", + "VisitNoClose": "当前检查批次有未关闭的 同意IC上传的质疑,不允许再次添加质疑", + "NotFinish": "IC申请重传的/QC同意重传的质疑,在IC设置重传完成前不允许关闭质疑", "QCHasBeenReplied": "此QC质询已回复", - "OperationUserMustBeCRC/PM": "一致性核查对话操作用户 只允许 CRC/PM", + "OperationUserMustBeCRC/PM": "一致性核查对话操作用户 只允许 IC/PM", "CanNotCloseQuery": "执行一致性核查的检查批次 不允许关闭质疑", "OnlyPMCanSet": "只允许PM 手动设置一致性核查通过", "CanNotSettingConsistency": "当前是PM同意回退,不允许设置一致性核查通过", @@ -156,7 +156,7 @@ "CanNotSetQCFailed": "不审状态下,不允许设置为QC Failed", "NotInPrimaryQCQCFailed": "项目配置为单审 当前审核状态不为 InPrimaryQC,不能变更到 QCFailed", "TrialIsDoubleCheckCanNotQCFailed{0}": "项目配置为双审 当前审核状态为 {0},不能变更到 QCFailed", - "CRCHasBeenSubmitted": "CRC已提交了 不能修改入组确认状态", + "CRCHasBeenSubmitted": "IC已提交了 不能修改入组确认状态", "CannotBeChangedPD": "回退的检查批次,不允许修改PD确认状态", "OtherQCProcessAudit": "其他QC正在进行审核,当前操作不允许", "ForwardFailed": "转发失败", diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index 7f8979cc..a291da82 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -375,7 +375,7 @@ 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(); @@ -384,7 +384,7 @@ namespace IRaCIS.Core.Application.Service { 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 @@ -414,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; diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index 68a26e88..1a80fdac 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -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(_mapper.ConfigurationProvider).ToListAsync(); @@ -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(_mapper.ConfigurationProvider).ToListAsync(); list = list.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitNum).ToList(); diff --git a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs index 2e76c7ab..6870fea0 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialEmailNoticeConfigService.cs @@ -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(); diff --git a/IRaCIS.Core.Application/Service/QC/QCCommon.cs b/IRaCIS.Core.Application/Service/QC/QCCommon.cs index 3161a1bd..33be040c 100644 --- a/IRaCIS.Core.Application/Service/QC/QCCommon.cs +++ b/IRaCIS.Core.Application/Service/QC/QCCommon.cs @@ -7,7 +7,7 @@ namespace IRaCIS.Core.Application.Service public static class QCCommon { /// - /// 验证CRC 是否已提交 已提交 就不允许进行任何操作,如果是IQC 那么还验证是否是当前任务领取人 + /// 验证IC 是否已提交 已提交 就不允许进行任何操作,如果是IQC 那么还验证是否是当前任务领取人 /// /// /// @@ -24,7 +24,7 @@ namespace IRaCIS.Core.Application.Service if (await _repository.AnyAsync(t => t.Id == subjectVisitId && t.SubmitState == SubmitStateEnum.Submitted && (!t.QCChallengeList.Any(u => u.ReuploadEnum == QCChanllengeReuploadEnum.QCAgreeUpload)))) { - throw new BusinessValidationFailedException("CRC 已提交影像,不能进行操作。"); + throw new BusinessValidationFailedException("IC 已提交影像,不能进行操作。"); } } } diff --git a/IRaCIS.Core.Application/Service/QC/QCListService.cs b/IRaCIS.Core.Application/Service/QC/QCListService.cs index bf3b4261..3319002b 100644 --- a/IRaCIS.Core.Application/Service/QC/QCListService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCListService.cs @@ -42,9 +42,9 @@ namespace IRaCIS.Core.Application.Image.QA - #region CRC上传、质疑页面 + #region IC上传、质疑页面 /// - /// CRC 检查批次上传列表 + /// IC 检查批次上传列表 /// /// /// @@ -75,8 +75,8 @@ namespace IRaCIS.Core.Application.Image.QA var pageList = await query.ToPagedListAsync(visitSearchDTO.PageIndex, visitSearchDTO.PageSize, visitSearchDTO.SortField, visitSearchDTO.Asc, string.IsNullOrWhiteSpace(visitSearchDTO.SortField), defalutSortArray); var config = await _repository.Where(t => t.Id == visitSearchDTO.TrialId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync().IfNullThrowException(); - config.IsHaveSubjectClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == visitSearchDTO.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.Subject && x.UploadRole == UploadRole.CRC); - config.IsHaveVisitClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == visitSearchDTO.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.UploadRole == UploadRole.CRC); + config.IsHaveSubjectClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == visitSearchDTO.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.Subject && x.UploadRole == UploadRole.IC); + config.IsHaveVisitClinicalData = await _clinicalDataTrialSet.AnyAsync(x => x.TrialId == visitSearchDTO.TrialId && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit && x.UploadRole == UploadRole.IC); return (pageList, config); } @@ -84,7 +84,7 @@ namespace IRaCIS.Core.Application.Image.QA /// - /// CRC 质疑列表 + /// IC 质疑列表 /// /// /// @@ -92,7 +92,7 @@ namespace IRaCIS.Core.Application.Image.QA public async Task<(PageOutput, 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 @@ -466,7 +466,7 @@ namespace IRaCIS.Core.Application.Image.QA #region 一致性核查 转发页面 /// - /// 获取一致性核查列表 CRC/PM 公用 + /// 获取一致性核查列表 IC/PM 公用 /// /// /// @@ -530,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(_mapper.ConfigurationProvider); var pageList = await query.ToPagedListAsync(checkQuery.PageIndex, checkQuery.PageSize, checkQuery.SortField, checkQuery.Asc); @@ -576,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(_mapper.ConfigurationProvider); return await query.ToPagedListAsync(forwardQuery.PageIndex, forwardQuery.PageSize, forwardQuery.SortField, forwardQuery.Asc); @@ -786,7 +786,7 @@ namespace IRaCIS.Core.Application.Image.QA /// - /// CRC/PM 看到某次检查批次下的所有质疑和聊天内容 包括初审和复审的 。 + /// IC/PM 看到某次检查批次下的所有质疑和聊天内容 包括初审和复审的 。 /// /// /// diff --git a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs index d16924b5..1e63ad67 100644 --- a/IRaCIS.Core.Application/Service/QC/QCOperationService.cs +++ b/IRaCIS.Core.Application/Service/QC/QCOperationService.cs @@ -99,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完成影像重传后,先关闭原质疑,再添加新的质疑。"); } @@ -163,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设置重传影像后,再关闭质疑。"); } @@ -372,7 +372,7 @@ namespace IRaCIS.Core.Application.Image.QA } /// - /// CRC 请求回退 + /// IC 请求回退 /// /// /// @@ -394,7 +394,7 @@ namespace IRaCIS.Core.Application.Image.QA { SubjectVisitId = subjectVisitId, UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, - TalkContent = "CRC申请回退" + TalkContent = "IC申请回退" }); @@ -406,7 +406,7 @@ namespace IRaCIS.Core.Application.Image.QA } else { - return ResponseOutput.NotOk("其他CRC已申请处理,请刷新页面"); + return ResponseOutput.NotOk("其他IC已申请处理,请刷新页面"); } @@ -748,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(); @@ -1090,7 +1090,7 @@ namespace IRaCIS.Core.Application.Image.QA } /// - /// CRC RequestToQC 批量提交 [需要签名 不需要对] + /// IC RequestToQC 批量提交 [需要签名 不需要对] /// /// [HttpPost] @@ -1125,11 +1125,11 @@ namespace IRaCIS.Core.Application.Image.QA //单个提交提示信息 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); } //获取确认的临床数据配置 @@ -1150,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) @@ -1181,9 +1181,9 @@ 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() + await _readingClinicalDataRepository.UpdatePartialFromQueryAsync(x => x.ClinicalDataTrialSet.UploadRole == UploadRole.IC && x.ReadingId == dbSubjectVisit.Id && x.IsSign==false, x => new ReadingClinicalData() { IsSign = true, ReadingClinicalDataState = ReadingClinicalDataStatus.HaveSigned @@ -1682,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还未完成上传,当前不允许再次设置"); } @@ -1751,7 +1751,7 @@ namespace IRaCIS.Core.Application.Image.QA } /// - /// CRC 设置已经重传完成 [需要签名 不需要对] + /// IC 设置已经重传完成 [需要签名 不需要对] /// /// @@ -1807,7 +1807,7 @@ namespace IRaCIS.Core.Application.Image.QA QCChallengeId = qcChallenge.Id, - TalkContent = "CRC已重传完成" + TalkContent = "IC已重传完成" }); @@ -1838,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重传完成状态,不允许申请重传"); } @@ -1856,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(); diff --git a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs index 68409a9b..73edb9a2 100644 --- a/IRaCIS.Core.Application/Service/QC/_MapConfig.cs +++ b/IRaCIS.Core.Application/Service/QC/_MapConfig.cs @@ -26,7 +26,7 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.SubmitUserName, u => u.MapFrom(s => s.SubmitUser.FullName)) .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() - || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0) + || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.IC && x.ReadingClinicalDataPDFList.Count() > 0) || t.PreviousSurgeryList.Any() : false)); @@ -367,12 +367,12 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.PreliminaryAuditUser.UserName)) .ForMember(d => d.ReviewAuditUserName, u => u.MapFrom(s => s.ReviewAuditUser.UserName)) .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() - || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0) + || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.IC && x.ReadingClinicalDataPDFList.Count() > 0) || t.PreviousSurgeryList.Any() : false)) .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()/*.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)) @@ -385,7 +385,7 @@ namespace IRaCIS.Core.Application.Service .ForMember(d => d.Sex, u => u.MapFrom(s => s.Subject.Sex)) .ForMember(d => d.Age, u => u.MapFrom(t => t.Subject.Age)) .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() - || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0) + || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.IC && x.ReadingClinicalDataPDFList.Count() > 0) || t.PreviousSurgeryList.Any() : false)) //.ForMember(d => d.VisitName, u => u.MapFrom(t =>t.InPlan? t.VisitStage.VisitName : t.VisitName)) @@ -495,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() .ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.SubjectVisit.PreliminaryAuditUser.UserName)) .ForMember(d => d.PreliminaryAuditUserId, u => u.MapFrom(s => s.SubjectVisit.PreliminaryAuditUserId)) diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 3b632d39..b3d9e8fa 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -168,10 +168,10 @@ namespace IRaCIS.Application.Services #endregion - #region 临床数据CRC 相关 + #region 临床数据IC 相关 /// - /// 获取CRC上传的文件 + /// 获取IC上传的文件 /// /// /// @@ -187,7 +187,7 @@ namespace IRaCIS.Application.Services List cRCClinicalDataList = await _readingClinicalDataRepository.Where(x => x.ReadingId == inDto.SubjectVisitId) .WhereIf(inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit) .WhereIf(!inDto.IsBaseline, x => x.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit) - .Where(x => x.ClinicalDataTrialSet.TrialId == inDto.TrialId && x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC) + .Where(x => x.ClinicalDataTrialSet.TrialId == inDto.TrialId && x.ClinicalDataTrialSet.UploadRole == UploadRole.IC) .Select(x => new GetCRCClinicalDataOutDto() { Id = x.Id, @@ -235,12 +235,12 @@ namespace IRaCIS.Application.Services /// - /// 添加CRC数据类型 + /// 添加IC数据类型 /// /// private async Task AddCRCClinicalData(GetCRCClinicalDataInDto inDto) { - var cRCClinicalDataIds = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm) + var cRCClinicalDataIds = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == inDto.TrialId && x.UploadRole == UploadRole.IC && x.IsConfirm) .WhereIf(inDto.IsBaseline, x => x.ClinicalDataLevel == ClinicalLevel.Subject || x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) .WhereIf(!inDto.IsBaseline, x => x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) .Select(x => x.Id).ToListAsync(); @@ -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,7 +333,7 @@ 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*/) { @@ -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 该阅片期|肿瘤学 任务临床数据状态变更 @@ -577,7 +577,7 @@ namespace IRaCIS.Application.Services if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC) { - inDto.UploadRole = UploadRole.CRC; + inDto.UploadRole = UploadRole.IC; } var isBaseLine = await _subjectVisitRepository.AnyAsync(x => x.Id == inDto.ReadingId && x.IsBaseLine); @@ -633,7 +633,7 @@ namespace IRaCIS.Application.Services TrialClinicalDataSetCriteriaList=x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList, Id = x.Id, UploadRole = x.ClinicalDataTrialSet.UploadRole, - IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC, + IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.IC, FileList = x.ReadingClinicalDataPDFList.Select(y => new GetFileDto() { Id = y.Id, @@ -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() @@ -700,7 +700,7 @@ namespace IRaCIS.Application.Services ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType, Id = x.Id, UploadRole = x.ClinicalDataTrialSet.UploadRole, - IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC, + IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.IC, IsBlind = x.IsBlind, IsComplete = x.IsComplete, FileCount = x.FileCount, @@ -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; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs index a962ce59..e6eb05d7 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingClinicalDataDto.cs @@ -349,7 +349,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto public string ClinicalUploadTypeName { get; set; } /// - /// 是否为CRC上传 + /// 是否为IC上传 /// public bool IsCRCUpload { get; set; } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs index a263efca..8a8f6fa2 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialMaintenanceService.cs @@ -84,7 +84,7 @@ namespace IRaCIS.Application.Services - /// Setting页面 为 site 勾选CRC用户列表 + /// Setting页面 为 site 勾选IC用户列表 [HttpPost] public async Task> GetSiteCRCScreeningList(SiteCRCQuery param) { @@ -187,7 +187,7 @@ namespace IRaCIS.Application.Services #endregion - #region 自动添加CRC 到Site 里 + #region 自动添加IC 到Site 里 if (await _repository.AnyAsync(t => t.Id == item.UserId && t.UserTypeRole.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)) { await _repository.AddAsync(new TrialSiteUser() { TrialId = trialId, SiteId = Guid.Parse("db83e2f5-1f2e-408f-a45b-08d8e1dcace0"), UserId =item.UserId }); diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs index 07548116..ceb4cb2f 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs @@ -177,7 +177,7 @@ namespace IRaCIS.Core.Application.Services } - /// 获取某一Site下面的负责的CRC列表 + /// 获取某一Site下面的负责的IC列表 [HttpGet, Route("{trialId:guid}/{siteId:guid}")] public async Task> GetTrialSiteCRCList(Guid trialId, Guid siteId) { @@ -250,7 +250,7 @@ namespace IRaCIS.Core.Application.Services //if (await _repository.AnyAsync(t => t.TrialId == trialId && t.SiteId == siteId)) //{ - // return ResponseOutput.NotOk("The site has been associated with CRC, and couldn't be deleted."); + // return ResponseOutput.NotOk("The site has been associated with IC, and couldn't be deleted."); //} if (await _repository.AnyAsync(t => t.SiteId == siteId && t.TrialId == trialId)) @@ -284,7 +284,7 @@ namespace IRaCIS.Core.Application.Services - /// 批量添加Site下 CRC的负责人 + /// 批量添加Site下 IC的负责人 [HttpPost] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [Authorize(Policy = IRaCISPolicy.PM_APM)] @@ -298,7 +298,7 @@ namespace IRaCIS.Core.Application.Services return ResponseOutput.Result(true); } - /// 删除CRC人员 + /// 删除IC人员 [HttpDelete, Route("{id:guid}/{trialId:guid}/{isDelete:bool}")] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [Authorize(Policy = IRaCISPolicy.PM_APM)] @@ -312,14 +312,14 @@ namespace IRaCIS.Core.Application.Services } /// - /// 获取项目下的 site 下拉框数据 CRC只看到他负责的 + /// 获取项目下的 site 下拉框数据 IC只看到他负责的 /// /// /// [HttpGet("{trialId:guid}")] public async Task> GetTrialSiteSelect(Guid trialId) { - //CRC只看到他负责的 + //IC只看到他负责的 var list = await _trialSiteRepository.Where(t => t.TrialId == trialId) .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.CRCUserList.Any(t => t.UserId == _userInfo.Id)) @@ -332,7 +332,7 @@ namespace IRaCIS.Core.Application.Services public async Task> GetTrialSiteCodeSelect(Guid trialId, bool isIncludeVirtualSite = true) { - //CRC只看到他负责的 + //IC只看到他负责的 var list = await _trialSiteRepository.Where(t => t.TrialId == trialId) .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CRA, t => t.CRCUserList.Any(t => t.UserId == _userInfo.Id)) @@ -360,7 +360,7 @@ namespace IRaCIS.Core.Application.Services if (await _repository.AnyAsync(t => t.TrialId == trialId && t.SiteId == siteId)) { - return ResponseOutput.NotOk("The site has been associated with CRC, and couldn't be deleted."); + return ResponseOutput.NotOk("The site has been associated with IC, and couldn't be deleted."); } if (await _repository.AnyAsync(t => t.SiteId == siteId && t.TrialId == trialId)) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs index 9c790307..a4c83fd7 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs @@ -117,7 +117,7 @@ namespace IRaCIS.Application.Services .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(_mapper.ConfigurationProvider); diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs index 258fc6c0..c0114583 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectVisitService.cs @@ -113,7 +113,7 @@ namespace IRaCIS.Core.Application.Services dbBeforeEntity = await _subjectVisitRepository.InsertFromDTOAsync(svCommand, false, verifyExp1, verifyExp2, verifyExp3); - //var cRCClinicalDataIds = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == svCommand.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) + //var cRCClinicalDataIds = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == svCommand.TrialId && x.UploadRole == UploadRole.IC && x.IsConfirm && x.ClinicalDataLevel == ClinicalLevel.SubjectVisit) //.Select(x => x.Id).ToListAsync(); diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs index 1cea4851..a61b2687 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectVisitCheckPassedTrigger.cs @@ -61,7 +61,7 @@ namespace IRaCIS.Core.Application.Triggers // 触发临床数据 if (context.ChangeType == ChangeType.Added) { - var cRCClinicalDatas = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == context.Entity.TrialId && x.UploadRole == UploadRole.CRC && x.IsConfirm) + var cRCClinicalDatas = await _clinicalDataTrialSetRepository.Where(x => x.TrialId == context.Entity.TrialId && x.UploadRole == UploadRole.IC && x.IsConfirm) .Select(x => new { diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index 110cfc1d..a65dc033 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -228,7 +228,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers dbSV.CheckState = CheckStateEnum.CVIng; dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply; - //讲核查结果发送消息给CRC + //讲核查结果发送消息给IC dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = subjectVisitId, diff --git a/IRaCIS.Core.Domain.Share/QC/CheckChanllengeTypeEnum.cs b/IRaCIS.Core.Domain.Share/QC/CheckChanllengeTypeEnum.cs index d242c1f2..2e4725ee 100644 --- a/IRaCIS.Core.Domain.Share/QC/CheckChanllengeTypeEnum.cs +++ b/IRaCIS.Core.Domain.Share/QC/CheckChanllengeTypeEnum.cs @@ -9,10 +9,10 @@ namespace IRaCIS.Core.Domain.Share //不可用 None = 0, - //CRC 已回复 PM 待回复 + //IC 已回复 PM 待回复 CRCWaitPMReply = 1, - //PM 已回复 CRC 待回复 + //PM 已回复 IC 待回复 PMWaitCRCReply = 2, Closed = 3 diff --git a/IRaCIS.Core.Domain.Share/QC/RequestBackStateEnum.cs b/IRaCIS.Core.Domain.Share/QC/RequestBackStateEnum.cs index 9ed468f7..17fab1bc 100644 --- a/IRaCIS.Core.Domain.Share/QC/RequestBackStateEnum.cs +++ b/IRaCIS.Core.Domain.Share/QC/RequestBackStateEnum.cs @@ -10,10 +10,10 @@ namespace IRaCIS.Core.Domain.Share NotRequest = 0, - //CRC 申请,PM待同意 + //IC 申请,PM待同意 CRC_RequestBack = 1, - //PM 已同意 CRC + //PM 已同意 IC PM_AgressBack = 2, PM_NotAgree=3, diff --git a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs index 4b1db2f4..5fdd29ea 100644 --- a/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs +++ b/IRaCIS.Core.Domain.Share/Reading/ReadEnum.cs @@ -803,9 +803,9 @@ namespace IRaCIS.Core.Domain.Share public enum UploadRole { /// - /// CRC + /// IC /// - CRC = 0, + IC = 0, /// /// PM diff --git a/IRaCIS.Core.Domain.Share/User/UserType.cs b/IRaCIS.Core.Domain.Share/User/UserType.cs index 10c1e767..a32ac6fe 100644 --- a/IRaCIS.Core.Domain.Share/User/UserType.cs +++ b/IRaCIS.Core.Domain.Share/User/UserType.cs @@ -8,7 +8,7 @@ //PM ProjectManager=1, - //CRC + //IC ClinicalResearchCoordinator=2, //IQC diff --git a/IRaCIS.Core.Domain/SQLFile/Test.sql b/IRaCIS.Core.Domain/SQLFile/Test.sql index ae25ec14..3c755841 100644 --- a/IRaCIS.Core.Domain/SQLFile/Test.sql +++ b/IRaCIS.Core.Domain/SQLFile/Test.sql @@ -282,7 +282,7 @@ inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id ) =(select count(*) from ReadingClinicalData inner join ClinicalDataTrialSet on ReadingClinicalData.ClinicalDataTrialSetId =ClinicalDataTrialSet.Id where ReadingClinicalData.TrialId=VisitTask.TrialId and IsSign=1 and ReadingClinicalDataState=3 and ReadingId=VisitTask.SourceSubjectVisitId and ClinicalDataTrialSet.UploadRole=1 - -- 有可能仅仅CRC Subject级别 需要签名 CRC自动签名了 没有PM需要签名的文档 此时应该设置为已签署 + -- 有可能仅仅IC Subject级别 需要签名 IC自动签名了 没有PM需要签名的文档 此时应该设置为已签署 ) --处理基线脏数据 @@ -297,7 +297,7 @@ inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id ) !=(select count(*) from ReadingClinicalData inner join ClinicalDataTrialSet on ReadingClinicalData.ClinicalDataTrialSetId =ClinicalDataTrialSet.Id where ReadingClinicalData.TrialId=VisitTask.TrialId and IsSign=1 and ReadingClinicalDataState=3 and ReadingId=VisitTask.SourceSubjectVisitId and ClinicalDataTrialSet.UploadRole=1 - -- 有可能仅仅CRC Subject级别 需要签名 CRC自动签名了 没有PM需要签名的文档 此时应该设置为已签署 + -- 有可能仅仅IC Subject级别 需要签名 IC自动签名了 没有PM需要签名的文档 此时应该设置为已签署 ) @@ -308,7 +308,7 @@ inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=V inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id where VisitTask.ReadingCategory=1 and SubjectVisit.IsBaseLine=0 and VisitTask.IsClinicalDataSign =0 and VisitTask.IsNeedClinicalDataSign=1 - -- 非基线 可能只有CRC 检查批次级别 PM 没有 + -- 非基线 可能只有IC 检查批次级别 PM 没有 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%|'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'|%' and ClinicalDataLevel=1 and IsConfirm=1) and (select count(*) from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%|'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'|%' and ClinicalDataLevel=1 and IsConfirm=1 and UploadRole=1 ) =(select count(*) from ReadingClinicalData inner join ClinicalDataTrialSet on ReadingClinicalData.ClinicalDataTrialSetId =ClinicalDataTrialSet.Id @@ -320,7 +320,7 @@ inner join ReadingQuestionCriterionTrial on ReadingQuestionCriterionTrial.Id=V inner join SubjectVisit on VisitTask.SourceSubjectVisitId=SubjectVisit.Id where VisitTask.ReadingCategory=1 and SubjectVisit.IsBaseLine=0 and VisitTask.IsClinicalDataSign =1 and VisitTask.IsNeedClinicalDataSign=1 - -- 非基线 可能只有CRC 检查批次级别 PM 没有 + -- 非基线 可能只有IC 检查批次级别 PM 没有 and EXISTS (select * from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%|'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'|%' and ClinicalDataLevel=1 and IsConfirm=1) and (select count(*) from ClinicalDataTrialSet where TrialId=VisitTask.TrialId and CriterionEnumListStr LIKE '%|'+ CAST(ReadingQuestionCriterionTrial.CriterionType AS varchar(20))+'|%' and ClinicalDataLevel=1 and IsConfirm=1 and UploadRole=1 ) !=(select count(*) from ReadingClinicalData inner join ClinicalDataTrialSet on ReadingClinicalData.ClinicalDataTrialSetId =ClinicalDataTrialSet.Id diff --git a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs index c4127411..cf320e06 100644 --- a/IRaCIS.Core.Domain/Visit/SubjectVisit.cs +++ b/IRaCIS.Core.Domain/Visit/SubjectVisit.cs @@ -202,7 +202,7 @@ namespace IRaCIS.Core.Domain.Models //// 一个检查批次可以被多个参与者 查看 //public List TrialUsers { get; set; } - ////一个检查批次 对应该Site下的多个CRC管理 必须加这个 不然生成的sql 会报 TrialSiteUserId 不存在该列名 + ////一个检查批次 对应该Site下的多个IC管理 必须加这个 不然生成的sql 会报 TrialSiteUserId 不存在该列名 //public List TrialSiteUserList { get; set; } [JsonIgnore]