qyHH96-;=dzKir6pBfLd0svWQ#LEOwqLyu-6b#56G5*CS-ZoZj$dj%u6PI;7)$
zL?CceEGL$H`uu6m3R3SRqGIB^*=0X{PQ1RFYyK14HQO>YXXGN@Ak89&0ZY%<^l4$p
zO_;9pysxw@J;$`o;#%}Lx#m6%J}Gx8Qtt&WG~5sP0m_%I?yL1n=zkIX`#x)9i;{`a
zJ;7z~3I30%@K1vOnF=*V?C`l!TA};-GZH(>Q$*;%lenXe;d13x}9_JpjHXuq>8em3R
zr~Lx9^JoBdUOGwI56T(hz_7K+m%1X#m2Vm?I)sE__#8{|qoAqeoqtZ#^~tx0RCHQi
z5RJDeh=T-yeAq~gn;u{aV!e^*IsGYOSI)Iq@&%|!s!Wum?GuQ}ehwMD@HE9HHE2et+7zeGAyj1Z%Y1SXN{++?
z@M2_nc?sf+`NPl}-4aWvmWwIHE!QV~g#OjIszaXu&$DVsJ?fUaR=QfsMcTI7?4fAZi=dLQh-
zS{dk`aq38XW_^}ZZAW}nH>FY=hdS)U?dxu#Y_d?oz2fU8hT@mp)#BUgfL`({ya2~-
zVFi9$H=@vgZxwknEQtuXaFb0)#!4*mndb~L&5tkK7#~z#xlpu~M}lQaqoO;84(1eZxy?i;z7V(k`mSG1o^Cd9)i|IDsKa@7
z*fDs~$ksSlj(Wj{o}o|_e{^cu$bhBUxo?MYMyl@3(~*K}$6Z-Q=UgSblJY$BZk
z!dIrG?Vv!dGzd3&6R8)dMk2UI6y9%yJ7|lQ|}!2zN3iSQSaOFj)#KhIwZ)NdS&nJ?Sg+BK?XpY@0ck
z_F2Z1J&xVoKKHD1@2uk|2bO9~sh;SHL<+5LS1{cU{>UpWT{!F?a!}y;Vn00h5s96#
z$VR5}V}Xd{NiYozh~9Y}lVO7Ng?O7KM)Y-WhC?cIV{NI~XrKfaqG|fJ@;E9cc(7+(7gvL$GXm5k76cBJ^;;#WzQZjd7>ALRsu{h#B-HSO
zi*b!dNT$o$EV;vbuQMVfUGlo3WY3Qc-r1sYr#c2pMD_#{#pyrkWii3A9PJT{ANn#e
zGbq%*WpiVyv2v@%yg%1QXay}K{n0wFQH>c`lBfr)dMlUQzb{wb?ACO+MS-Dnge)Qc
zEa3$BqKR5yV>Jh5gYEWAnukG#VUkf`03%i+)1-q%G!!Xkm&-=XEdjC(#Ws;D^8>k|G$O-c9swBQ
zpc4$#)b1&TY$n>mYcwZGQUWW2lNgk?RyDME_^8hGMYtfF4JrHl{t%J*`$*HWI99E>
zTTYwTbyc-_c1*5lP)*W%GYBm{_^5R%N0(k2QksOVJ;wY}uMCb#_zh0DiZSnEF9Rf9
z7CEC$5i)ad60{l&P_?5f*sF4s%A2#V`N)f`H`fyw)Td9!KChNk9cnCiRcvYYFQaNR
zEs?(TX}Yx&WM|rN;~djHCb|15&yD$wKWV$C&)PkG=>IeN{77`=>c4LblOG``YxJiT
zx^t-kUQ48r#fHCquJu0M?H$nXNRESD8azZe;=XzTR8ui@83z?}T`}k^KV8{(C1x(~nMwT^{>yWAq^k
zMfDq8zVlx)Pi!?ETK$bdXS6>&?yO&F3#gr9)$@vEO&z
zL`P&p!&9UV>;Ty|dcvE*n9(^7IqLWd&7iPP#ATu(T#UGFirPAzGV0>Qu!w*@2G%d27tW}Iu}OC$Wz69Hk;`;)GamFH+ZR4z)H
z1P$YQQ0wi{7O3SeDXRN3e!oqXh0$rNmMdkGqA!|L75H$hvEjL=Z;`39DJ?KuQ77>G
zrFE_nC{u&VJG+|J&e5j0Q-B^QlXXZgPfH|2wmxDXy{
z4yly28V7a_Wx`iqHFsC*>^FiQ$w`xgrv`8Vz&-3FH5&aX08gs7lUPza82V?iK#y^d
z0pOQVVM%1_GVfrhfIM$%xwD0Y(IAY2jQUaq)A%8$4ysDMv*O@IS5e$@oC45Qb8w_2
zs$v5%J}DQ5q|2==d?aZ0JQ*!eHXw{o#b}XBg)dG}dZo@B0Rm$Y_u{y?iZ5n%;G>!j
zKZ$>5%EunZmVPV5Ir(16Qt<|NsuA<*&`++NI}*)dm9@&1Pv1tF35#RQq}8j+)on?+
zHttjkN|OI1tK+KM;R{*9GK
zyE(O;Yr-A)<216)U!Q?`zup_W=fPk1hJKS3zxPA@&qc*5+4*fiKNx8WGB
z+<51oK```OO3KHw>;EAt;`)+77T%~y`L4g+?U_bD4js@!$Bhfxrv)nLoZO3wmQAmT
zGBY9ld4@WbUnlQ~S0}@<>@k3jYl~Q7%+bQ>)#A)A$2ZcAWBeQ@
zIFyw0SP(#*Vf~ag{#%UX$&jzxV4+%hAL20hg)b#bTNhA!{Wq>vKQRS;kxLb9ruhn*
z9>+DuS&+wJMUW#dKk8-41$dK4=Z0A+aWn{CkfQO5B7e9zL058sZIs;@dLpF4?+t%q
zHKbne)WFfUHkSIF@|9R=rc!vCm5o9v9j@4sy$oxGt}#2Wu1G}R+w?xx_XW=NrRlGF
zlT_G(Q1iRd=w>H$z-CHha(oe|ffa96;;>v3Chba}+!4bzmWk@?#Lppb-ph&XL1?%w
zSi7b~7WBk(oA+{JuY*Ji*48=EcBy;j>+Oi=%(G=)%_~A!{up!bj11pcT%ydD&F~rF
zS0mR;M*tS{o+A_IlAgVX>=OQ<9SjwKBAOh6Y@IuO^|Y=XGerLYN9P3Hu-~ICPptV_
zK&dP8$!vqFH7g;P_{4CeFKb2p%mUGVCt!mLFwkbnDyi#oim;sog8H;3qOPFH6L}gb
z&cyJWK3Lu~wR>BjvhB-&a7-G;WLCOh=T+t0Z`Ol@%#qyA+-@H1{rH^IQhDWQi<#tP
zU3Gz6+gIQCw(URLHC0EDovz|K^AH5@zdJhtG%_cC+A9|4ZHv;?8Bw43`mz~OyEmJ}
zU;0y?Xw7&8US0%0JN^r9dWYS7FYmd;bIpQ_^qSgSyZrHWQW*^o)+ykU8#UviUrE;c
ztBISRa?3+G@o$!9k2v)svGn{`O#H8y`2UHR=wcVAA*|0Zmvo4Mf5<(5Dh?3o1qI;n<4`V9_)AOwFpiShvl&D$J{kxR7aW5tE{46CNU9)^EKQH`4
zN-TRQC1#1yrJ^52{*V%RutiSti;3$Z%PI4|G5jng(%egl>whC9)=t-amlD7JAth=L
zIXsXO<%BVPx==CdQ-@;s(*pLB7p^h^mnfLm5+|IxUSjxtMJ*$hEKfp@rT;1=emS{d
zEO)M5JP6oG4j4tfD*i4dR-DW>9=!~jLDFs!FSY$mN}PKoDS4x`WF?BXw$dcXvyl7L
z+WBU}vLd&RE2_txz4S8~<6UtbUJ_-Br7mIPNi+Z-1)O1F)w<;lgF)K`6Gh7`72t8=
z9^@KxVvddw2^4x>)J4=fd2Wz(hV{h6Pf{CaXlU_X)du?BR?EQOcMXKk05@
z*&&VqSc8CynevAT&PWFi(j9q~H&>MmBpY5Qnts%&FpVGY9OX!h6IAJS!C$)*aZ#Fg
z&=D{TD1jb}*_K-=HmUJDE7zLr46P%ixwPO-bNR#N+F*UtHPJ2$BwIaxSIlcl)#1Lr<)EU$L)QPo
zMye_>uQ_{L90>_m1TUVSba3FCvaCH|d6~!i8H|{l0>-3odN*1}IDJ8ei0qQ{IjeJY
zHSnXqjkn(Q##v`-lZTnjZLTX0LX*_I!V?TQ-utCI%p%Z`V&zbL*DA_(UOmr8T=td7
z+Sy7coyhr%H>z$fXvygS?$)Z}i)>YMXkc|;0^nO@;?BYlrin=+6L7-HLd9%3Gviyz
z*fm(?6X`PhjPrjjDt{Ic{~-bXN$fup;D05=|4NAel@R|=NQmEQ$~BQPj(M+vXhML1
zko-jh`MyL|eBmr+Z)@J?9rWmi5!me$(%&7f+A2w6vc5cp6Ei2NLd%L0q2)RgPC7RKfLI8I3LkE!Q7n=WCD^}~
zV{X#HO+kXX{dIGs+q+AwkNQO+iIake6k&|ieTZ=B$S*UYkh-C>73uU?c(Mgy^$s1$>
zC_uAf5S~W(Llm=NTsX#BF=SH-1aYLKmXC&Xm=23*fM&;O)f16Ldk)_vGKiL};g^t*
zQ)o8htTjSg~k0jKprO$
zS^i78WPoJ+1pyG|XYe|Y=vjVvDv>Tmi@K;egZV3NYm*s{#!Q@R
zX_vY+-4#J6mctD6#vCL2XxwRU)jRi`y;m5Sav=&Jl@V1m^e4`AiEwy_=Qfb?a60kP
zc41j;7UuxQ+Jk+h!>`E`((FFyvnch*?iwGhl<_f2T_F1wYtAsGEgs%j2w2$Z5>Du7d{3K-##PRy4HWdPe()FDgrC6G+NVe+&@0;Q
zRK(19(b92bS2K==x!JRx9v|a4}qHVsNJxj#e3L!AJT)Y+TuNGb%OI4i`(9>it(`u1)}3
z@B$e6X@PB0@^=)0bfO=ixB_gkvEr4858eA{x6p!P9kfy2=#Ld@;d$w1Qz-F%&S={0
zED$zlupvv7jIcOjHPHi!5ux)p+tsR8Wm*T1Bp|+_qz_QGeU?r{ms9hSj{u3@^;XWf
z$FOJa6N&-T)(I}2KfPQ^wA|EM$&9N?#ipr;Z3u-lu6;_RCXRMEBm_?3WKwzpi|Ptj
zGs3of!)HLBhs(LA9qJx;m(SKUn360g7%|A-9qasl_Tl>r<@b-D4tc`;Hc5eifP&zF
zjGNtJ$|Ns<&RlAGnBIR@RfJA-^DW%(k$nIDzdH*0CJ>U;EJj9e${~Z&~U%C3T!tYkcJN3IN{lej$D}xW8{O;$ru-{YGuMGaH^!L!
h^bk?*xAoSKYb9C8`y~bl2
-
-
-
- Title
-
-
-
-
-
- 您好:
-
-
- 感谢您使用展影云平台。
-
-
- {0}。
-
-
-
-
祝您顺利!/Best Regards
-
上海展影医疗科技有限公司
-
-
-
-
-
diff --git a/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest_US.html b/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest_US.html
deleted file mode 100644
index 183b8a835..000000000
--- a/IRaCIS.Core.API/wwwroot/EmailTemplate/EmailConfigTest_US.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
- Title
-
-
-
-
-
- Dear:
-
-
- Thank you for using Extensive Imaging Cloud System.
-
-
- {0}。
-
-
-
-
Best Regards
-
Shanghai Extensive Imaging Medical Technology Co., LTD
-
-
-
-
-
diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index ab840c866..ecee6e76d 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -9904,18 +9904,126 @@
- Site 调研 每个项目 需要处理的审批统计
+ 中心调研 每个项目 需要处理的审批统计
- 需要签署文件数量 系统级别的在第一行
+ 待签署的项目文件 需要签署文件数量 系统级别的在第一行
+
+
+ 一致性核查待处理
+
+
+
+
+
+
+
+ 重阅申请待审核
+
+
+
+
+
+
+ 阅片人筛选
+
+
+ vvv
+
+
+
+ 重阅审批
+
+
+
+
+
+
+ 临床数据
+
+
+
+
+
+
+
+ CRC影像质疑待处理
+
+
+
+
+
+
+
+ 核查质疑待处理
+
+
+
+
+
+
+
+ 影像重传
+
+
+
+
+
+
+
+ 加急影像提交
+
+
+
+
+
+
+
+ 影像质控 待领取 跟项目配置有关系 --未完成
+
+
+
+
+
+
+
+ QC 质疑
+
+
+
+
+
+
+
+ IR 影像阅片 待阅量 复杂 --未完成
+
+
+
+
+
+
+
+
+ IR医学反馈
+
+
+
+
+
+
+ MIM医学反馈
+
+
+
+
阅片信息签名验证接口
diff --git a/IRaCIS.Core.Application/Service/Common/MailService.cs b/IRaCIS.Core.Application/Service/Common/MailService.cs
index f6cf2a275..f784e4c89 100644
--- a/IRaCIS.Core.Application/Service/Common/MailService.cs
+++ b/IRaCIS.Core.Application/Service/Common/MailService.cs
@@ -398,7 +398,7 @@ namespace IRaCIS.Application.Services
await _userRepository.BatchUpdateNoTrackingAsync(t => t.Id == sysUserInfo.Id, u => new User() { EmailToken = token });
- routeUrl = routeUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token;
+ routeUrl = routeUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us?"en":"zh") + "&access_token=" + token;
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
@@ -512,7 +512,7 @@ namespace IRaCIS.Application.Services
{
var templateInfo = SourceReader.ReadToEnd();
- var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token;
+ var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
@@ -576,7 +576,7 @@ namespace IRaCIS.Application.Services
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
- var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&access_token=" + token;
+ var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + sysUserInfo.UserTypeRole.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
var redirectUrl = $"{domain}/api/User/UserRedirect?url={System.Web.HttpUtility.UrlEncode(routeUrl)}";
@@ -694,7 +694,7 @@ namespace IRaCIS.Application.Services
{
var templateInfo = SourceReader.ReadToEnd();
- var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + userType.UserTypeShortName + "&access_token=" + token;
+ var routeUrl = rootUrl + "?UserId=" + sysUserInfo.Id + "&Email=" + sysUserInfo.EMail + "&UserName=" + sysUserInfo.UserName + "&UserType=" + userType.UserTypeShortName + "&lang=" + (_userInfo.IsEn_Us ? "en" : "zh") + "&access_token=" + token;
var domain = baseUrl.Substring(0, baseUrl.IndexOf("/login"));
diff --git a/IRaCIS.Core.Application/Service/Management/UserTypeService.cs b/IRaCIS.Core.Application/Service/Management/UserTypeService.cs
index 8cf99be11..009323dfc 100644
--- a/IRaCIS.Core.Application/Service/Management/UserTypeService.cs
+++ b/IRaCIS.Core.Application/Service/Management/UserTypeService.cs
@@ -157,7 +157,7 @@ namespace IRaCIS.Core.Application.Contracts
public async Task> GetTrialUserTypeList()
{
var query = userTypeServiceRepository.Where(x => x.UserTypeEnum != UserTypeEnum.SuperAdmin)
- //.Where(t => t.Type == UserTypeGroup.TrialUser)
+ .Where(t => !t.UserTypeGroupList.Any(t=> t.Group.Code=="3"))
.OrderBy(t => t.Order).ProjectTo(_mapper.ConfigurationProvider);
return await query.ToListAsync();
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
index ad6e0cb8b..863b85a5b 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs
@@ -42,7 +42,7 @@ namespace IRaCIS.Core.Application.Contracts
public int? TotalNeedSignDocCount => TotalNeedSignTrialDocCount + TotalNeedSignSystemDocCount;
- public int? TotalApprovalRequiredCount { get; set; }
+ public int? TotalApprovalRequiredCount { get; set; }
public int? TotalSystemNoticeCount { get; set; }
@@ -56,9 +56,9 @@ namespace IRaCIS.Core.Application.Contracts
}
- public class TrialSiteSurveyStat:TrialSelectDTO
+ public class TrialSiteSurveyStat : TrialSelectDTO
{
- public int? ApprovalRequiredCount { get; set; }
+ public int? ApprovalRequiredCount { get; set; }
@@ -75,4 +75,181 @@ namespace IRaCIS.Core.Application.Contracts
}
+ public class CheckToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class CheckToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeCheckedCount { get; set; }
+
+ public int? ToBeRepliedCount { get; set; }
+ }
+
+
+ public class ReReadingApplyToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ReReadingApplyToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+
+
+ public int? ToBeApprovalCount { get; set; }
+ }
+
+
+ public class ReviewerSelectToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ReviewerSelectToBeDoneDto : TrialBaseInfoDto
+ {
+ public bool IsUrgent { get; set; }
+
+ public int? ToBeApprovalCount { get; set; }
+ }
+
+
+ public class ReReadingApprovalToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ReReadingApprovalToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeApprovalCount { get; set; }
+ }
+
+ public class ImageQuestionToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageQuestionToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class IRImageReadingToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class IRImageReadingToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? UnReadCount { get; set; }
+
+ public int? HaveSignedCount { get; set; }
+ }
+
+
+
+
+
+ public class MedicalCommentsToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class MedicalCommentsToBeDoneDto : TrialBaseInfoDto
+ {
+
+ public string CriterionName { get; set; }
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class ImageCheckQuestionToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageCheckQuestionToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class ImageSubmittedToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageSubmittedToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class ImageQualityToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageQualityToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeReviewedCount { get; set; }
+
+ public int? ToBeClaimedCount { get; set; }
+ }
+
+
+
+
+ public class ImageReUploadToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageReUploadToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+ public class ImageClinicalDataToBeDoneQuery : PageInput
+ {
+
+ }
+
+ public class ImageClinicalDataToBeDoneDto : TrialBaseInfoDto
+ {
+ public int? UrgentCount { get; set; }
+
+ public int? ToBeDealedCount { get; set; }
+ }
+
+
+
+
+
+ public class TrialBaseInfoDto
+ {
+ public Guid TrialId { get; set; }
+ public string ExperimentName { get; set; } = string.Empty;
+
+ public string TrialCode { get; set; } = string.Empty;
+
+ public string ResearchProgramNo { get; set; } = string.Empty;
+ }
}
\ No newline at end of file
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
index d841dd3c8..7a77d8697 100644
--- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs
@@ -13,8 +13,8 @@ namespace IRaCIS.Core.Application
private readonly IRepository _systemDocumentRepository;
private readonly IRepository _systemNoticeRepository;
- public PersonalWorkstation(IRepository trialRepository, IRepository trialUserRepository, IRepository trialDocumentRepository,
- IRepository systemDocumentRepository,IRepository systemNoticeRepository)
+ public PersonalWorkstation(IRepository trialRepository, IRepository trialUserRepository, IRepository trialDocumentRepository,
+ IRepository systemDocumentRepository, IRepository systemNoticeRepository)
{
_trialRepository = trialRepository;
_trialUserRepository = trialUserRepository;
@@ -44,7 +44,7 @@ namespace IRaCIS.Core.Application
TotalNeedSignTrialDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
- ? 0
+ ? 0
: await _trialDocumentRepository.AsQueryable(true).Where(t => t.Trial.TrialStatusStr != StaticData.TrialState.TrialStopped)
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.IsDeleted == false || (t.IsDeleted == true && t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null)))
@@ -56,15 +56,15 @@ namespace IRaCIS.Core.Application
? 0
//废除了 已经签署了也要算进去
: await _trialDocumentRepository.AsQueryable(true).Where(t => t.Trial.TrialStatusStr != StaticData.TrialState.TrialStopped)
- .Where( t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
+ .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
.SelectMany(t => t.TrialDocConfirmedUserList)
- .CountAsync(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime !=null),
+ .CountAsync(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null),
TotalNeedSignSystemDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
? 0
: await _systemDocumentRepository
- .Where(t => t.IsDeleted == false || (t.IsDeleted == true && t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime !=null)))
+ .Where(t => t.IsDeleted == false || (t.IsDeleted == true && t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null)))
.SelectMany(t => t.NeedConfirmedUserTypeList)
.CountAsync(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId),
@@ -76,22 +76,22 @@ namespace IRaCIS.Core.Application
.SelectMany(t => t.SystemDocConfirmedUserList)
.CountAsync(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null),
- TotalApprovalRequiredCount=
+ TotalApprovalRequiredCount =
_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM ?
- _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t=>t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.SPMApproved).Count()
- : _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM|| _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM
- ? _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t => t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.CRCSubmitted).Count()
- :0,
+ _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t => t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.SPMApproved).Count()
+ : _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM
+ ? _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t => t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.CRCSubmitted).Count()
+ : 0,
- TotalSystemNoticeCount= _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
- ? 0:await _systemNoticeRepository.Where(t => t.NoticeUserTypeList.Any(t => t.UserTypeId == _userInfo.UserTypeId) && t.NoticeStateEnum== Domain.Share.Management.SystemNotice_NoticeStateEnum.HavePublished)
-
+ TotalSystemNoticeCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
+ ? 0 : await _systemNoticeRepository.Where(t => t.NoticeUserTypeList.Any(t => t.UserTypeId == _userInfo.UserTypeId) && t.NoticeStateEnum == Domain.Share.Management.SystemNotice_NoticeStateEnum.HavePublished)
+
.CountAsync(),
- NeedReadSystemNoticeCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
+ NeedReadSystemNoticeCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
? 0 : await _systemNoticeRepository.Where(t => t.NoticeUserTypeList.Any(t => t.UserTypeId == _userInfo.UserTypeId) && t.NoticeStateEnum == Domain.Share.Management.SystemNotice_NoticeStateEnum.HavePublished
- && !t.NoticeUserReadList.Any(t=>t.CreateUserId==_userInfo.Id))
+ && !t.NoticeUserReadList.Any(t => t.CreateUserId == _userInfo.Id))
.Where(t => t.EndDate == null || t.EndDate != null && t.EndDate > DateTime.Now)
.CountAsync(),
@@ -102,7 +102,7 @@ namespace IRaCIS.Core.Application
///
- /// Site 调研 每个项目 需要处理的审批统计
+ /// 中心调研 每个项目 需要处理的审批统计
///
///
///
@@ -134,7 +134,7 @@ namespace IRaCIS.Core.Application
///
- /// 需要签署文件数量 系统级别的在第一行
+ /// 待签署的项目文件 需要签署文件数量 系统级别的在第一行
///
///
///
@@ -147,35 +147,183 @@ namespace IRaCIS.Core.Application
}
else
{
- var trialDocStat = await _trialRepository/*.AsQueryable(true)*/.Where(t=>t.TrialStatusStr != StaticData.TrialState.TrialStopped)
+ var trialDocStat = await _trialRepository/*.AsQueryable(true)*/.Where(t => t.TrialStatusStr != StaticData.TrialState.TrialStopped)
.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
- .WhereIf(!_userInfo.IsAdmin, c => c.TrialDocumentList.Where(t => t.IsDeleted == false && t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) && !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime!=null))
+ .WhereIf(!_userInfo.IsAdmin, c => c.TrialDocumentList.Where(t => t.IsDeleted == false && t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) && !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id && t.ConfirmTime != null))
.Count() > 0)
.ProjectTo(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id, userTypeId = _userInfo.UserTypeId })
.OrderByDescending(t => t.WaitSignCount)
- .ToPagedListAsync(query.PageIndex, query.PageSize , query.SortField, query.Asc);
-
- //var sysDocStat = new DocSignStat()
- //{
- // IsSystemDoc = true,
- // WaitSignCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
- // ? 0
- // : await _systemDocumentRepository
- // .Where(t =>
- // t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) &&
- // !t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id))
- // .CountAsync()
- //};
- //var list = trialDocStat.CurrentPageData.ToList();
- //list.Insert(0, sysDocStat);
- //trialDocStat.CurrentPageData = list;
- //trialDocStat.TotalCount++;
+ .ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField, query.Asc);
return trialDocStat;
}
-
+ }
+
+
+ #region PM APM 待办
+ ///
+ /// 一致性核查待处理
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetCheckToBeDoneList(CheckToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new CheckToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => (u.CheckState == CheckStateEnum.ToCheck || u.CheckState == CheckStateEnum.CVIng) && u.IsUrgent).Count(),
+ ToBeCheckedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count(),
+ ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck &&
+ u.CheckChallengeDialogList.Any(t => t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).Count(),
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ ///
+ /// 重阅申请待审核
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetReReadingApplyToBeDoneList(ReReadingApplyToBeDoneQuery inQuery,
+ [FromServices] IRepository _visitTaskReReadingRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _visitTaskReReadingRepository.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed)
+ .GroupBy(t => new { t.OriginalReReadingTask.Trial.ExperimentName, t.OriginalReReadingTask.Trial.ResearchProgramNo, t.OriginalReReadingTask.Trial.TrialCode, t.OriginalReReadingTask.TrialId })
+ .Select(g => new ReReadingApplyToBeDoneDto()
+ {
+ TrialId = g.Key.TrialId,
+ ResearchProgramNo = g.Key.ResearchProgramNo,
+ ExperimentName = g.Key.ExperimentName,
+ TrialCode = g.Key.TrialCode,
+ UrgentCount = g.Where(u => u.OriginalReReadingTask.IsUrgent == true).Count(),
+ ToBeApprovalCount = g.Count(),
+
+ });
+
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+ #endregion
+
+
+ #region SPM CPM 待办
+
+ ///
+ /// 阅片人筛选
+ ///
+ ///
+ /// vvv
+ [HttpPost]
+ public async Task> GetReviewerSelectToBeDoneList(ReviewerSelectToBeDoneQuery inQuery
+ , [FromServices] IRepository _enrollRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+ var query = _trialRepository
+ .Select(t => new ReviewerSelectToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+
+ IsUrgent = t.IsUrgent || t.IsSubjectExpeditedView,
+ ToBeApprovalCount = t.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.HasCommittedToCRO).Count()
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ ///
+ /// 重阅审批
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetReReadingApprovalToBeDoneToBeDoneList(ReReadingApprovalToBeDoneQuery inQuery,
+ [FromServices] IRepository _visitTaskReReadingRepository,
+ [FromServices] IRepository _trialRepository)
+
+ {
+ var query = _visitTaskReReadingRepository.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed)
+ .GroupBy(t => new { t.OriginalReReadingTask.Trial.ExperimentName, t.OriginalReReadingTask.Trial.ResearchProgramNo, t.OriginalReReadingTask.Trial.TrialCode, t.OriginalReReadingTask.TrialId })
+ .Select(g => new ReReadingApprovalToBeDoneDto()
+ {
+ TrialId = g.Key.TrialId,
+ ResearchProgramNo = g.Key.ResearchProgramNo,
+ ExperimentName = g.Key.ExperimentName,
+ TrialCode = g.Key.TrialCode,
+ UrgentCount = g.Where(u => u.OriginalReReadingTask.IsUrgent == true).Count(),
+ ToBeApprovalCount = g.Count(),
+
+ });
+
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ #endregion
+
+
+ #region CRC 待办
+
+
+ ///
+ /// 临床数据
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageClinicalDataToBeDoneList(ImageClinicalDataToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Where(t=>t.clinicalDataTrialSets.Any(t=>t.ClinicalDataLevel==ClinicalLevel.Subject && t.IsConfirm))
+ .Select(t => new ImageClinicalDataToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.IsBaseLine&& u.SubmitState != SubmitStateEnum.Submitted && u.IsUrgent ).Count(),
+ ToBeDealedCount = t.SubjectVisitList.Where(u => u.IsBaseLine && u.SubmitState != SubmitStateEnum.Submitted).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
}
@@ -183,6 +331,364 @@ namespace IRaCIS.Core.Application
+ ///
+ /// CRC影像质疑待处理
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetCRCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+ var query = _trialRepository
+ .Select(t => new ImageQuestionToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.SelectMany(c=>c.QCChallengeList)
+ .Where(u => u.IsClosed==false && u.LatestReplyUser.UserTypeEnum==UserTypeEnum.IQC && u.SubjectVisit.IsUrgent).Count(),
+ ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+
+ .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC ).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ ///
+ /// 核查质疑待处理
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageCheckQuestionToBeDoneList(ImageCheckQuestionToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new ImageCheckQuestionToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState==CheckChanllengeTypeEnum.PMWaitCRCReply && u.IsUrgent).Count(),
+ ToBeDealedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply ).Count()
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+ ///
+ /// 影像重传
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageReUploadToBeDoneList(ImageReUploadToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new ImageReUploadToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(),
+ ToBeDealedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+
+
+ ///
+ /// 加急影像提交
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageSubmittedToBeDoneList(ImageSubmittedToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new ImageSubmittedToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState ==SubmitStateEnum.ToSubmit && u.IsUrgent).Count(),
+ ToBeDealedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit ).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+
+ #endregion
+
+ #region IQC待办
+
+
+
+ ///
+ /// 影像质控 待领取 跟项目配置有关系 --未完成
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetImageQualityToBeDoneList(ImageQualityToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository.Where(t=>t.QCProcessEnum != TrialQCProcess.NotAudit)
+ .Select(t => new ImageQualityToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+
+ // 待审核 加急的(待领取 已领取)-- 领取了 还没做 就是待审核
+ UrgentCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId==_userInfo.Id && u.IsUrgent).Count(),
+
+
+ //待领取量
+ ToBeClaimedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count(),
+
+ //已领取 待审核 审核中 (审核完成 领取人就会清理 所以只用查询当前领取人是自己的就好了)
+ ToBeReviewedCount= t.SubjectVisitList.Where(u => u.CurrentActionUserId==_userInfo.Id ).Count()
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+ ///
+ /// QC 质疑
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetQCImageQuestionToBeDoneList(ImageQuestionToBeDoneQuery inQuery,
+ [FromServices] IRepository _subjectVisitRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new ImageQuestionToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+ UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
+ ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ #endregion
+
+
+ #region IR待办
+
+ ///
+ /// IR 影像阅片 待阅量 复杂 --未完成
+ ///
+ ///
+ ///
+ ///
+ ///
+ [HttpPost]
+ public async Task> GetIRImageReadingToBeDoneList(IRImageReadingToBeDoneQuery inQuery,
+ [FromServices] IRepository _visitTaskRepository,
+ [FromServices] IRepository _trialRepository)
+ {
+
+ var query = _trialRepository
+ .Select(t => new IRImageReadingToBeDoneDto()
+ {
+ TrialId = t.Id,
+ ResearchProgramNo = t.ResearchProgramNo,
+ ExperimentName = t.ExperimentName,
+ TrialCode = t.TrialCode,
+
+
+ UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
+
+ UnReadCount=t.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id && t.ReadingTaskState != ReadingTaskState.HaveSigned && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze))
+ .Where(y=>y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true))
+
+
+ .Count(),
+
+ HaveSignedCount = t.VisitTaskList.Where(t => t.DoctorUserId == _userInfo.Id
+ && (t.TaskState == TaskState.Effect || t.TaskState == TaskState.Freeze)
+ && t.ReadingTaskState==ReadingTaskState.HaveSigned).Count()
+
+ });
+
+
+ //var query = _visitTaskRepository.Where(t=>t.DoctorUserId==_userInfo.Id && (t.TaskState == TaskState.Effect ||t.TaskState==TaskState.Freeze))
+ // .GroupBy(t=>new {t.SubjectId,t.TrialId,t.Subject.Code,t.Trial.ResearchProgramNo,t.Trial.ExperimentName, t.BlindSubjectCode})
+ // .Select(t => new IRImageReadingToBeDoneDto()
+ // {
+ // TrialId = t.Id,
+ // ResearchProgramNo = t.ResearchProgramNo,
+ // ExperimentName = t.ExperimentName,
+ // TrialCode = t.TrialCode,
+ // UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ // .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(),
+ // ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
+ // .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(),
+
+ // });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+ ///
+ /// IR医学反馈
+ ///
+ ///
+
+ ///
+ [HttpPost]
+ public async Task> GetIRMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
+ [FromServices] IRepository _taskMedicalReviewRepository)
+ {
+
+ var query = _taskMedicalReviewRepository
+ .Where(t=>t.IsClosedDialog==false)
+ .GroupBy(t=>new {t.TrialId, t.Trial.ResearchProgramNo, t.Trial.ExperimentName, t.Trial.TrialCode ,
+ t.VisitTask.TrialReadingCriterionId,t.VisitTask.TrialReadingCriterion.CriterionName})
+ .Select(g => new MedicalCommentsToBeDoneDto()
+ {
+ TrialId = g.Key.TrialId,
+ ResearchProgramNo = g.Key.ResearchProgramNo,
+ ExperimentName = g.Key.ExperimentName,
+ TrialCode = g.Key.TrialCode,
+ CriterionName=g.Key.CriterionName,
+
+ UrgentCount = g.Where(u => u.VisitTask.IsUrgent
+ && u.ReadingMedicalReviewDialogList.OrderByDescending(l=>l.CreateTime).First().UserTypeEnumInt==(int) UserTypeEnum.MIM).Count(),
+
+ ToBeDealedCount = g.Where(u =>
+ u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+
+
+
+ #endregion
+
+ #region MIM待办
+
+ ///
+ /// MIM医学反馈
+ ///
+ ///
+
+ ///
+ [HttpPost]
+ public async Task> GetMIMMedicalCommentsToBeDoneList(MedicalCommentsToBeDoneQuery inQuery,
+ [FromServices] IRepository _taskMedicalReviewRepository)
+ {
+
+ var query = _taskMedicalReviewRepository
+ .Where(t => t.IsClosedDialog == false)
+ .GroupBy(t => new {
+ t.TrialId,
+ t.Trial.ResearchProgramNo,
+ t.Trial.ExperimentName,
+ t.Trial.TrialCode,
+ t.VisitTask.TrialReadingCriterionId,
+ t.VisitTask.TrialReadingCriterion.CriterionName
+ })
+ .Select(g => new MedicalCommentsToBeDoneDto()
+ {
+ TrialId = g.Key.TrialId,
+ ResearchProgramNo = g.Key.ResearchProgramNo,
+ ExperimentName = g.Key.ExperimentName,
+ TrialCode = g.Key.TrialCode,
+ CriterionName = g.Key.CriterionName,
+
+ UrgentCount = g.Where(u => u.VisitTask.IsUrgent
+ && u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count(),
+
+ ToBeDealedCount = g.Where(u =>
+ u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count(),
+
+ });
+
+ var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, inQuery.SortField, inQuery.Asc);
+
+ return result;
+
+ }
+
+ #endregion
}
}
diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs
new file mode 100644
index 000000000..912f5b093
--- /dev/null
+++ b/IRaCIS.Core.Application/Service/TrialSiteUser/_MapConfig2.cs
@@ -0,0 +1,51 @@
+using AutoMapper;
+using AutoMapper.EquivalencyExpression;
+using IRaCIS.Application.Contracts;
+using IRaCIS.Core.Application.Contracts;
+using IRaCIS.Core.Application.Contracts.DTO;
+using IRaCIS.Core.Application.ViewModel;
+using IRaCIS.Core.Domain.Models;
+using IRaCIS.Core.Domain.Share;
+
+namespace IRaCIS.Core.Application.Service
+{
+ public class PersonalWorkstation : Profile
+ {
+ public PersonalWorkstation()
+ {
+ var userTypeEnumInt = 0;
+
+ var userTypeId = Guid.Empty;
+
+
+ CreateMap()
+ .ForMember(t => t.ExperimentName, u => u.MapFrom(c => c.ExperimentName))
+ .ForMember(t => t.TrialCode, u => u.MapFrom(c => c.TrialCode))
+ .ForMember(t => t.ResearchProgramNo, u => u.MapFrom(c => c.ResearchProgramNo))
+
+ .ForMember(t => t.UrgentCount, u => u.MapFrom(c => c
+ .SubjectVisitList.Where(t=>(t.CheckState==CheckStateEnum.ToCheck ||t.CheckState==CheckStateEnum.CVIng) && t.IsUrgent).Count()))
+ .ForMember(t => t.ToBeCheckedCount, u => u.MapFrom(c => c
+ .SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.ToCheck ).Count()))
+ .ForMember(t => t.ToBeRepliedCount, u => u.MapFrom(c => c
+ .SubjectVisitList.Where(t => (t.CheckState == CheckStateEnum.ToCheck || t.CheckState == CheckStateEnum.CVIng) && t.IsUrgent).Count()));
+
+
+
+
+ CreateMap();
+
+
+
+ CreateMap();
+
+
+ CreateMap();
+
+
+
+
+ }
+ }
+
+}
diff --git a/IRaCIS.Core.Domain/Allocation/TaskMedicalReview.cs b/IRaCIS.Core.Domain/Allocation/TaskMedicalReview.cs
index 4ee122c21..7c77ea807 100644
--- a/IRaCIS.Core.Domain/Allocation/TaskMedicalReview.cs
+++ b/IRaCIS.Core.Domain/Allocation/TaskMedicalReview.cs
@@ -82,6 +82,8 @@ namespace IRaCIS.Core.Domain.Models
public Guid TrialId { get; set; }
+ public Trial Trial { get; set; }
+
///
/// 冗余 废弃
///
diff --git a/IRaCIS.Core.Domain/Trial/Trial.cs b/IRaCIS.Core.Domain/Trial/Trial.cs
index dec43ae0e..ad71a19eb 100644
--- a/IRaCIS.Core.Domain/Trial/Trial.cs
+++ b/IRaCIS.Core.Domain/Trial/Trial.cs
@@ -17,6 +17,10 @@ namespace IRaCIS.Core.Domain.Models
TrialDicList = new List();
}
+ [JsonIgnore]
+ public List TaskMedicalReviewList { get; set; }
+
+
[JsonIgnore]
public List TaskConsistentRuleList { get; set; }
[JsonIgnore]
@@ -39,6 +43,8 @@ namespace IRaCIS.Core.Domain.Models
[JsonIgnore]
public List SubjectList { get; set; } = new List();
[JsonIgnore]
+ public List SubjectVisitList { get; set; } = new List();
+ [JsonIgnore]
public List StudyList { get; set; } = new List();
[JsonIgnore]
public List TrialSiteList { get; set; } = new List();