P&^yudvLxP44;9XzUr&a$&`?VNhU^$J
z`3m68BAuA?ia*IF%Hs)@>xre4W0YoB^(X8RwlZ?pKR)rvGX?u&K`kb8XBs^pe}2v*
z_NS*z7;4%Be$ts_emapc#zKjVMEqn8;aCX=dISG3zvJP>l4zHdpUwARLixQSFzLZ0
z$$Q+9fAnVjA?7PqANPiH*XH~VhrVfW11#NkAKjfjQN-UNz?ZT}SG#*sk*)VUXZ1$P
zdxiM@I2RI7Tr043ZgWd3G^k56$Non@LKE|zLwBgXW#e~{7C{iB3&UjhKZPEj#)cH9
z%HUDubc0u@}dBz>4zU;sTluxBtCl!O4>g9ywc
zhEiM-!|!C&LMjMNs6dr6Q!h{nvTrNN0hJ+w*h+EfxW=ro
zxAB%*!~&)uaqXyuh~O`J(6e!YsD0o0l_ung1rCAZt~%4R{#izD2jT~${>f}m{O!i4
z`#UGbiSh{L=FR`Q`e~9wrKHSj?I>eXHduB`;%TcCTYNG<)l@A%*Ld?PK=fJi}J?
z9T-|Ib8*rLE)v_3|1+Hqa!0ch>f%
zfNFz@o6r5S`QQJCwRa4zgx$7AyQ7ZTv2EM7ZQHh!72CFL+qT`Y)k!)|Zr;7mcfV8T
z)PB$1r*5rUzgE@y^E_kDG3Ol5n6q}eU2hJcXY7PI1}N=>nwC6k%nqxBIAx4Eix*`W
zch0}3aPFe5*lg1P(=7J^0ZXvpOi9v2l*b?j>dI%iamGp$SmFaxpZod*TgYiyhF0=
za44lXRu%9MA~QWN;YX@8LM32BqKs&W4&a3ve9C~ndQq>S{zjRNj9&&8k-?>si8)^m
zW%~)EU)*$2YJzTXjRV=-dPAu;;n2EDYb=6XFyz`D0f2#29(mUX}*5~KU3k>$LwN#OvBx@
zl6lC>UnN#0?mK9*+*DMiboas!mmGnoG%gSYeThXI<=rE(!Pf-}oW}?yDY0804dH3o
zo;RMFJzxP|srP-6ZmZ_peiVycfvH<`WJa9R`Z#suW3KrI*>cECF(_CB({ToWXSS18#3%vihZZJ{BwJPa?m^(6xyd1(oidUkrOU
zlqyRQUbb@W_C)5Q)%5bT3K0l)w(2cJ-%?R>wK35XNl&}JR&Pn*laf1M#|s4yVXQS#
zJvkT$HR;^3k{6C{E+{`)J+~=mPA%lv1T|r#kN8kZP}os;n39exCXz^cc{AN(Ksc%}
zA561&OeQU8gIQ5U&Y;Ca1TatzG`K6*`9LV<|GL-^=qg+nOx~6
zBEMIM7Q^rkuhMtw(CZtpU(%JlBeV?KC+kjVDL34GG1sac&6(XN>nd+@Loqjo%i6I~
zjNKFm^n}K=`z8EugP20fd_%~$Nfu(J(sLL1gvXhxZt|uvibd6rLXvM%!s2{g0oNA8
z#Q~RfoW8T?HE{ge3W>L9bx1s2_L83Odx)u1XUo<`?a~V-_ZlCeB=N-RWHfs1(Yj!_
zP@oxCRysp9H8Yy@6qIc69TQx(1P`{iCh)8_kH)_vw1=*5JXLD(njxE?2vkOJ
z>qQz!*r`>X!I69i#1ogdVVB=TB40sVHX;gak=fu27xf*}n^d>@*f~qbtVMEW!_|+2
zXS`-E%v`_>(m2sQnc6+OA3R
z-6K{6$KZsM+lF&sn~w4u_md6J#+FzqmtncY;_
z-Q^D=%LVM{A0@VCf
zV9;?kF?vV}*=N@FgqC>n-QhKJD+IT7J!6llTEH2nmUxKiBa*DO4&PD5=HwuD$aa(1
z+uGf}UT40OZAH@$jjWoI7FjOQAGX6roHvf_wiFKBfe4w|YV{V;le}#aT3_Bh^$`Pp
zJZGM_()iFy#@8I^t{ryOKQLt%kF7xq&ZeD$$ghlTh@bLMv~||?Z$#B2_A4M&8)PT{
zyq$BzJpRrj+=?F}zH+8XcPvhRP+a(nnX2^#LbZqgWQ7uydmIM&FlXNx4o6m;Q5}rB
z^ryM&o|~a-Zb20>UCfSFwdK4zfk$*~<|90v0=^!I?JnHBE{N}74iN;w6XS=#79G+P
zB|iewe$kk;9^4LinO>)~KIT%%4Io6iFFXV9gJcIvu-(!um{WfKAwZDmTrv=wb#|71
zWqRjN8{3cRq4Ha2r5{tw^S>0DhaC3m!i}tk9q08o>6PtUx1GsUd{Z17FH45rIoS+oym1>3S0B`>;uo``+ADrd_Um+8s$8V6tKsA8KhAm
z{pTv@zj~@+{~g&ewEBD3um9@q!23V_8Nb0_R#1jcg0|MyU)?7ua~tEY63XSvqwD`D
zJ+qY0Wia^BxCtXpB)X6htj~*7)%un+HYgSsSJPAFED7*WdtlFhuJj5d3!h8gt6$(s
ztrx=0hFH8z(Fi9}=kvPI?07j&KTkssT=Vk!d{-M50r!TsMD8fPqhN&%(m5LGpO>}L
zse;sGl_>63FJ)(8&8(7Wo2&|~G!Lr^cc!uuUBxGZE)ac7Jtww7euxPo)MvxLXQXlk
zeE>E*nMqAPwW0&r3*!o`S7wK&078Q#1bh!hNbAw0MFnK-2gU25&8R@@j5}^5-kHeR
z!%krca(JG%&qL2mjFv380Gvb*eTLllTaIpVr3$gLH2e3^xo
z=qXjG0VmES%OXAIsOQG|>{aj3fv+ZWdoo+a9tu8)4AyntBP>+}5VEmv@WtpTo<-aH
zF4C(M#dL)MyZmU3sl*=TpAqU#r>c8f?-zWMq`wjEcp^jG2H`8m$p-%TW?n#E5#Th+
z7Zy#D>PPOA4|G@-I$!#Yees_9Ku{i_Y%GQyM)_*u^nl+bXMH!f_
z8>BM|OTex;vYWu`AhgfXFn)0~--Z7E0WR-v|n$XB-NOvjM156WR(eu
z(qKJvJ%0n+%+%YQP=2Iz-hkgI_R>7+=)#FWjM#M~Y1xM8m_t8%=FxV~Np$BJ{^rg9
z5(BOvYfIY{$h1+IJyz-h`@jhU1g^Mo4K`vQvR<3wrynWD>p{*S!kre-(MT&`7-WK!
zS}2ceK+{KF1yY*x7FH&E-1^8b$zrD~Ny9|9(!1Y)a#)*zf^Uo@gy~#%+*u`U!R`^v
zCJ#N!^*u_gFq7;-XIYKXvac$_=booOzPgrMBkonnn%@#{srUC<((e*&7@YR?`CP;o
zD2*OE0c%EsrI72QiN`3FpJ#^Bgf2~qOa#PHVmbzonW=dcrs92>6#{pEnw19AWk%;H
zJ4uqiD-dx*w2pHf8&Jy{NXvGF^Gg!ungr2StHpMQK5^+
zEmDjjBonrrT?d9X;BHSJeU@lX19|?On)(Lz2y-_;_!|}QQMsq4Ww9SmzGkzVPQTr*
z)YN>_8i^rTM>Bz@%!!v)UsF&Nb{Abz>`1msFHcf{)Ufc_a-mYUPo@ei#*%I_jWm#7
zX01=Jo<@6tl`c;P_uri^gJxDVHOpCano2Xc5jJE8(;r@y6THDE>x*#-hSKuMQ_@nc
z68-JLZyag_BTRE(B)Pw{B;L0+Zx!5jf%z-Zqug*og@^
zs{y3{Za(0ywO6zYvES>SW*cd4gwCN^o9KQYF)Lm^hzr$w&spGNah6g>EQBufQCN!y
zI5WH$K#67$+ic{yKAsX@el=SbBcjRId*cs~xk~3BBpQsf%IsoPG)LGs
zdK0_rwz7?L0XGC^2$dktLQ9qjwMsc1rpGx2Yt?zmYvUGnURx(1k!kmfPUC@2Pv;r9
z`-Heo+_sn+!QUJTAt;uS_z5SL-GWQc#pe0uA+^MCWH=d~s*h$XtlN)uCI4$KDm4L$
zIBA|m0o6@?%4HtAHRcDwmzd^(5|KwZ89#UKor)8zNI^EsrIk
z1QLDBnNU1!PpE3iQg9^HI){x7QXQV{&D>2U%b_II>*2*HF2%>KZ>bxM)Jx4}|CCEa`186nD_B9h`mv6l45vRp*L+z_nx5i#9KvHi>rqxJIjKOeG(5lCeo
zLC|-b(JL3YP1Ds=t;U!Y&Gln*Uwc0TnDSZCnh3m$N=xWMcs~&Rb?w}l51ubtz=QUZsWQhWOX;*AYb)o(^<$zU_v=cFwN~ZVrlSLx|
zpr)Q7!_v*%U}!@PAnZLqOZ&EbviFbej-GwbeyaTq)HSBB+tLH=-nv1{MJ-rGW%uQ1
znDgP2bU@}!Gd=-;3`KlJYqB@U#Iq8Ynl%eE!9g;d*2|PbC{A}>mgAc8LK<69qcm)piu?`y~3K8zlZ1>~K_4T{%4zJG6H?6%{q3B-}iP_SGXELeSv*bvBq~^&C=3TsP
z9{cff4KD2ZYzkArq=;H(Xd)1CAd%byUXZdBHcI*%a24Zj{Hm@XA}wj$=7~$Q*>&4}
z2-V62ek{rKhPvvB711`qtAy+q{f1yWuFDcYt}hP)Vd>G?;VTb^P4
z(QDa?zvetCoB_)iGdmQ4VbG@QQ5Zt9a&t(D5Rf#|hC`LrONeUkbV)QF`ySE5x+t_v
z-(cW{S13ye9>gtJm6w&>WwJynxJQm8U2My?#>+(|)JK}bEufIYSI5Y}T;vs?rzmLE
zAIk%;^qbd@9WUMi*cGCr=oe1-nthYRQlhVHqf{ylD^0S09pI}qOQO=3&dBsD)BWo#
z$NE2Ix&L&4|Aj{;ed*A?4z4S!7o_Kg^8@%#ZW26_F<>y4ghZ0b|3+unIoWDUVfen~
z`4`-cD7qxQSm9hF-;6WvCbu$t5r$LCOh}=`k1(W<&bG-xK{VXFl-cD%^Q*x-9eq;k8FzxAqZB
zH@ja_3%O7XF~>owf3LSC_Yn!iO}|1Uc5uN{Wr-2lS=7&JlsYSp3IA%=E?H6JNf()z
zh>jA>JVsH}VC>3Be>^UXk&3o&rK?eYHgLwE-qCHNJyzDLmg4G(uOFX5g1f(C{>W3u
zn~j`zexZ=sawG8W+|SErqc?uEvQP(YT(YF;u%%6r00FP;yQeH)M9l+1Sv^yddvGo-
z%>u>5SYyJ|#8_j&%h3#auTJ!4y@yEg<(wp#(~NH
zXP7B#sv@cW{D4Iz1&H@5wW(F82?-JmcBt@Gw1}WK+>FRXnX(8vwSeUw{3i%HX6-pvQS-~Omm#x-udgp{=9#!>kDiLwqs_7fYy{H
z)jx_^CY?5l9#fR$wukoI>4aETnU>n<$UY!JDlIvEti908)Cl2Ziyjjtv|P&&_8di>
z<^amHu|WgwMBKHNZ)t)AHII#SqDIGTAd<(I0Q_LNPk*?UmK>C5=rIN^gs}@65VR*!J{W;wp5|&aF8605*l-Sj
zQk+C#V<#;=Sl-)hzre6n0n{}|F=(#JF)X4I4MPhtm~qKeR8qM?a@h!-kKDyUaDrqO
z1xstrCRCmDvdIFOQ7I4qesby8`-5Y>t_E1tUTVOPuNA1De9|
z8{B0NBp*X2-ons_BNzb*Jk{cAJ(^F}skK~i;p0V(R7PKEV3bB;syZ4(hOw47M*-r8
z3qtuleeteUl$FHL$)LN|q8&e;QUN4(id`Br{rtsjpBdriO}WHLcr<;aqGyJP{&d6?
zMKuMeLbc=2X0Q_qvSbl3r?F8A^oWw9Z{5@uQ`ySGm@DUZ=XJ^mKZ-ipJtmiXjcu<%z?Nj%-1QY*O{NfHd
z=V}Y(UnK=f?xLb-_~H1b2T&0%O*2Z3bBDf06-nO*q%6uEaLs;=omaux7nqqW%tP$i
zoF-PC%pxc(ymH{^MR_aV{@fN@0D1g&zv`1$Pyu3cvdR~(r*3Y%DJ@&EU?EserVEJ`
zEprux{EfT+(Uq1m4F?S!TrZ+!AssSdX)fyhyPW6C`}ko~@y#7acRviE(4>moNe$HXzf
zY@@fJa~o_r5nTeZ7ceiXI=k=ISkdp1gd1p)J;SlRn^5;rog!MlTr<<6-U9|oboRBN
zlG~o*dR;%?9+2=g==&ZK;Cy0pyQFe)x!I!8g6;hGl`{{3q1_UzZy)J@c{lBIEJVZ&
z!;q{8h*zI!kzY#RO8z3TNlN$}l;qj10=}du!tIKJs8O+?KMJDoZ+y)Iu`x`yJ@krO
zwxETN$i!bz8{!>BKqHpPha{96eriM?mST)_9Aw-1X^7&;Bf=c^?17k)5&s08^E$m^
zRt02U_r!99xfiow-XC~Eo|Yt8t>32z=rv$Z;Ps|^26H73JS1Xle?;-nisDq$K5G3y
znR|l8@rlvv^wj%tdgw+}@F#Ju{SkrQdqZ?5zh;}|IPIdhy3ivi0Q41C@4934naAaY
z%+otS8%Muvrr{S-Y96G?b2j0ldu1&coOqsq^vfcUT3}#+=#;fii6@M+hDp}dr9A0Y
zjbhvqmB03%4jhsZ{_KQfGh5HKm-=dFxN;3tnwBej^uzcVLrrs
z>eFP-jb#~LE$qTP9JJ;#$nVOw%&;}y>ezA6&i8S^7YK#w&t4!A36Ub|or)MJT
z^GGrzgcnQf6D+!rtfuX|Pna`Kq*ScO#H=de2B7%;t+Ij<>N5@(Psw%>nT4cW338WJ
z>TNgQ^!285hS1JoHJcBk;3I8%#(jBmcpEkHkQDk%!4ygr;Q2a%0T==W
zT#dDH>hxQx2E8+jE~jFY$FligkN&{vUZeIn*#I_Ca!l&;yf){eghi
z>&?fXc-C$z8ab$IYS`7g!2#!3F@!)cUquAGR2oiR0~1pO<$3Y$B_@S2dFwu~B0e4D
z6(WiE@O{(!vP<(t{p|S5#r$jl6h;3@+ygrPg|bBDjKgil!@Sq)5;rXNjv#2)N5_nn
zuqEURL>(itBYrT&3mu-|q;soBd52?jMT75cvXYR!uFuVP`QMot+Yq?CO%D9$Jv24r
zhq1Q5`FD$r9%&}9VlYcqNiw2#=3dZsho0cKKkv$%X&gmVuv&S__zyz@0zmZdZI59~s)1xFs~kZS0C^271hR*O
z9nt$5=y0gjEI#S-iV0paHx!|MUNUq&$*zi>DGt<#?;y;Gms|dS{2#wF-S`G3$^$7g
z1#@7C65g$=4Ij?|Oz?X4=zF=QfixmicIw{0oDL5N7iY}Q-vcVXdyQNMb>o_?3A?e6
z$4`S_=6ZUf&KbMgpn6Zt>6n~)zxI1>{HSge3uKBiN$01WB9OXscO?jd!)`?y5#%yp
zJvgJU0h+|^MdA{!g@E=dJuyHPOh}i&alC+cY*I3rjB<~DgE{`p(FdHuXW;p$a+%5`
zo{}x#Ex3{Sp-PPi)N8jGVo{K!$^;z%tVWm?b^oG8M?Djk)L)c{_-`@F|8LNu|BTUp
zQY6QJVzVg8S{8{Pe&o}Ux=ITQ6d42;0l}OSEA&Oci$p?-BL187L6rJ>Q)aX0)Wf%T
zneJF2;<-V%-VlcA?X03zpf;wI&8z9@Hy0BZm&ac-Gdtgo>}VkZYk##OOD+nVOKLFJ
z5hgXAhkIzZtCU%2M#xl=D7EQPwh?^gZ_@0p$HLd*tF>qgA_P*dP;l^cWm&iQSPJZE
zBoipodanrwD0}}{H#5o&PpQpCh61auqlckZq2_Eg__8;G-CwyH#h1r0iyD#Hd_$WgM89n+ldz;=b!@pvr4;x
zs|YH}rQuCyZO!FWMy%lUyDE*0)(HR}QEYxIXFexCkq7SHmSUQ)2tZM2s`G<9dq;Vc
ziNVj5hiDyqET?chgEA*YBzfzYh_RX#0MeD@xco%)ON%6B7E3#3iFBkPK^P_=&8$pf
zpM<0>QmE~1FX1>mztm>JkRoosOq8cdJ1gF5?%*zMDak%qubN}SM!dW6fgH<*F>4M7
zX}%^g{>ng^2_xRNGi^a(epr8SPSP>@rg7s=0PO-#5*s}VOH~4GpK9<4;g=+zuJY!&
ze_ld=ybcca?dUI-qyq2Mwl~-N%iCGL;LrE<#N}DRbGow7@5wMf&d`kT-m-@geUI&U
z0NckZmgse~(#gx;tsChgNd|i1Cz$quL>qLzEO}ndg&Pg4f
zy`?VSk9X5&Ab_TyKe=oiIiuNTWCsk6s9Ie2UYyg1y|i}B7h0k2X#YY0CZ;B7!dDg7
z_a#pK*I7#9-$#Iev5BpN@xMq@mx@TH@SoNWc5dv%^8!V}nADI&0K#xu_#y)k%P2m~
zqNqQ{(fj6X8JqMe5%;>MIkUDd#n@J9Dm~7_wC^z-Tcqqnsfz54jPJ1*+^;SjJzJhG
zIq!F`Io}+fRD>h#wjL;g+w?Wg`%BZ{f()%Zj)sG8permeL0eQ9vzqcRLyZ?IplqMg
zpQaxM11^`|6%3hUE9AiM5V)zWpPJ7nt*^FDga?ZP!U1v1aeYrV2Br|l`J^tgLm;~%gX^2l-L9L`B?UDHE9_+jaMxy|dzBY4
zjsR2rcZ6HbuyyXsDV(K0#%uPd#<^V%@9c7{6Qd_kQEZL&;z_Jf+eabr)NF%@Ulz_a1e(qWqJC$tTC!
zwF&P-+~VN1Vt9OPf`H2N{6L@UF@=g+xCC_^^DZ`8jURfhR_yFD7#VFmklCR*&qk;A
zzyw8IH~jFm+zGWHM5|EyBI>n3?2vq3W?aKt8bC+K1`YjklQx4*>$GezfU%E|>Or9Y
zNRJ@s(>L{WBXdNiJiL|^In*1VA`xiE#D)%V+C;KuoQi{1t3~4*8
z;tbUGJ2@2@$XB?1!U;)MxQ}r67D&C49k{ceku^9NyFuSgc}DC2pD|+S=qLH&L}Vd4
zM=-UK4{?L?xzB@v;qCy}Ib65*jCWUh(FVc&rg|+KnopG`%cb>t;RNv=1%4=
z#)@CB7i~$$JDM>q@4ll8{Ja5Rsq0
z$^|nRac)f7oZH^=-VdQldC~E_=5%JRZSm!z8TJocv`w<_e0>^teZ1en^x!yQse%Lf
z;JA5?0vUIso|MS03y${dX19A&bU4wXS~*T7h+*4cgSIX11EB?XGiBS39hvWWuyP{!5AY^x5j{!c?z<}7f-kz27%b>llPq%Z7hq+CU|Ev2
z*jh(wt-^7oL`DQ~Zw+GMH}V*ndCc~
zr>WVQHJQ8ZqF^A7sH{N5~PbeDihT$;tUP`OwWn=j6@L+!=T|+ze%YQ
zO+|c}I)o_F!T(^YLygYOTxz&PYDh9DDiv_|Ewm~i7|&Ck^$jsv_0n_}q-U5|_1>*L44)nt!W|;4q?n&k#;c4wpSx5atrznZbPc;uQI^I}4h5Fy`9J)l
z7yYa7Rg~f@0oMHO;seQl|E@~fd|532lLG#e6n#vXrfdh~?NP){lZ
z&3-33d;bUTEAG=!4_{YHd3%GCV=WS|2b)vZgX{JC)?rsljjzWw@Hflbwg3kIs^l%y
zm3fVP-55Btz;<-p`X(ohmi@3qgdHmwXfu=gExL!S^ve^MsimP
zNCBV>2>=BjLTobY^67f;8mXQ1YbM_NA3R^s
z{zhY+5@9iYKMS-)S>zSCQuFl!Sd-f@v%;;*fW5hme#xAvh0QPtJ##}b>&tth$)6!$
z0S&b2OV-SE<|4Vh^8rs*jN;v9aC}S2EiPKo(G&<6C|%$JQ{;JEg-L|Yob*<-`z?AsI(~U(P>cC=1V$OETG$7i#
zG#^QwW|HZuf3|X|&86lOm+M+BE>UJJSSAAijknNp*eyLUq=Au
z7&aqR(x8h|>`&^n%p#TPcC@8@PG%
zM&7k6IT*o-NK61P1XGeq0?{8kA`x;#O+|7`GTcbmyWgf^JvWU8Y?^7hpe^85_VuRq7yS~8uZ=Cf%W^OfwF_cbBhr`TMw^MH0<{3y
zU=y;22&oVlrH55eGNvoklhfPM`bPX`|C_q#*etS^O@5PeLk(-DrK`l|P*@#T4(kRZ
z`AY7^%&{!mqa5}q%<=x1e29}KZ63=O>89Q)yO4G@0USgbGhR#r~OvWI4+yu4*F8o`f?EG~x
zBCEND=ImLu2b(FDF3sOk_|LPL!wrzx_G-?&^EUof1C~A{feam{2&eAf@2GWem7!
z|LV-lff1Dk+mvTw@=*8~0@_Xu@?5u?-u*r8E7>_l1JRMpi{9sZqYG+#Ty4%Mo$`ds
zsVROZH*QoCErDeU7&=&-ma>IUM|i_Egxp4M^|%^I7ecXzq@K8_oz!}cHK#>&+$E4rs2H8Fyc)@Bva?(KO%+oc!+3G0&Rv1cP)e9u_Y|dXr#!J;n%T4+9rTF>^m_4X3
z(g+$G6Zb@RW*J-IO;HtWHvopoVCr7zm4*h{rX!>cglE`j&;l_m(FTa?hUpgv%LNV9
zkSnUu1TXF3=tX)^}kDZk|AF%7FmLv6sh?XCORzhTU%d>y4cC;4W5mn=i6vLf2
ztbTQ8RM@1gn|y$*jZa8&u?yTOlNo{coXPgc%s;_Y!VJw2Z1bf%57p%kC1*5e{bepl
zwm?2YGk~x=#69_Ul8A~(BB}>UP27=M)#aKrxWc-)rLL+97=>x|?}j)_5ewvoAY?P|
z{ekQQbmjbGC%E$X*x-M=;Fx}oLHbzyu=Dw>&WtypMHnOc92LSDJ~PL7sU!}sZw`MY
z&3jd_wS8>a!si2Y=ijCo(rMnAqq
z-o2uzz}Fd5wD%MAMD*Y&=Ct?|B6!f0jfiJt;hvkIyO8me(u=fv_;C;O4X^vbO}R_%
zo&Hx7C@EcZ!r%oy}|S-8CvPR?Ns0$j`FtMB;h
z`#0Qq)+6Fxx;RCVnh2=#PkDIv$AIDNnSVfS59UFO=}Ne{@?#Jjq#PzG_(MuVtbC
zzt*wR=8leEB=et%{Awp`%>0H4hk(>Kd!(Y}>U+Tr_6Yp?W%jt_zdusOcA$pTA
z(4l9$K=VXT2ITDs!OcShuUlG=R6#x@t74B2x7Dle%LGwsZrtiqtTuZGFUio_Xwpl}
z=T7jdfT~ld#U${?)B67E*mP*E)XebDuMO(=3~Y=}Z}rm;*4f~7ka196QIHj;JK%DU
z?AQw4I4ZufG}gmfVQ3w{snkpkgU~Xi;}V~S5j~;No^-9eZEYvA`Et=Q4(5@qcK=Pr
zk9mo>v!%S>YD^GQc7t4c!C4*qU76b}r(hJhO*m-s9OcsktiXY#O1<OoH
z#J^Y@1A;nRrrxNFh?3t@Hx9d>EZK*kMb-oe`2J!gZ;~I*QJ*f1p93>$lU|4qz!_zH
z&mOaj#(^uiFf{*Nq?_4&9ZssrZeCgj1J$1VKn`j+bH%9#C5Q5Z@9LYX1mlm^+jkHf
z+CgcdXlX5);Ztq6OT@;UK_zG(M5sv%I`d2(i1)>O`VD|d1_l(_aH(h>c7fP_$LA@d
z6Wgm))NkU!v^YaRK_IjQy-_+>f_y(LeS@z+B$5be|FzXqqg}`{eYpO;sXLrU{*fJT
zQHUEXoWk%wh%Kal`E~jiu@(Q@&d&dW*!~9;T=gA{{~NJwQvULf;s43Ku#A$NgaR^1
z%U3BNX`J^YE-#2dM*Ov*CzGdP9^`iI&`tmD~Bwqy4*N=DHt%RycykhF*
zc7BcXG28Jvv(5G8@-?OATk6|l{Rg1
zwdU2Md1Qv?#$EO3E}zk&9>x1sQiD*sO0dGSUPkCN-gjuppdE*%*d*9tEWyQ%hRp*7
zT`N^=$PSaWD>f;h@$d2Ca7
z8bNsm14sdOS%FQhMn9yC83$
z-YATg3X!>lWbLUU7iNk-`O%W8MrgI03%}@6l$9+}1KJ1cTCiT3>^e}-cTP&aEJcUt
zCTh_xG@Oa-v#t_UDKKfd#w0tJfA+Ash!0>X&`&;2%qv$!Gogr4*rfMcKfFl%@{ztA
zwoAarl`DEU&W_DUcIq-{xaeRu(ktyQ64-uw?1S*A>7pRHH5_F)_yC+2o@+&APivkn
zwxDBp%e=?P?3&tiVQb8pODI}tSU8cke~T#JLAxhyrZ(yx)>fUhig`c`%;#7Ot9le#
zSaep4L&sRBd-n&>6=$R4#mU8>T>=pB)feU9;*@j2kyFHIvG`>hWYJ_yqv?Kk2XTw`
z42;hd=hm4Iu0h{^M>-&c9zKPtqD>+c$~>k&Wvq#>%FjOyifO%RoFgh*XW$%Hz$y2-W!@W6+rFJja=pw-u_s0O3WMVgLb&CrCQ)8I^6g!iQj%a%#h
z<~<0S#^NV4n!@tiKb!OZbkiSPp~31?f9Aj#fosfd*v}j6&7YpRGgQ5hI_eA2m+Je)
zT2QkD;A@crBzA>7T
zw4o1MZ_d$)puHvFA2J|`IwSXKZyI_iK_}FvkLDaFj^&6}e|5@mrHr^prr{fPVuN1+
z4=9}DkfKLYqUq7Q7@qa$)o6&2)kJx-3|go}k9HCI6ahL?NPA&khLUL}k_;mU&7GcN
zNG6(xXW}(+a%IT80=-13-Q~sBo>$F2m`)7~wjW&XKndrz8soC*br=F*A_>Sh_Y}2Mt!#A1~2l?|hj)
z9wpN&jISjW)?nl{@t`yuLviwvj)vyZQ4KR#mU-LE)mQ$yThO1oohRv;93oEXE8mYE
zXPQSVCK~Lp3hIA_46A{8DdA+rguh@98p?VG2+Nw(4mu=W(sK<#S`IoS9nwuOM}C0)
zH9U|6N=BXf!jJ#o;z#6vi=Y3NU5XT>ZNGe^z4u$i&x4ty^Sl;t_#`|^hmur~;r;o-
z*CqJb?KWBoT`4`St5}10d*RL?!hm`GaFyxLMJPgbBvjVD??f7GU9*o?4!>NabqqR!
z{BGK7%_}96G95B299eErE5_rkGmSWKP~590$HXvsRGJN5-%6d@=~Rs_68BLA1RkZb
zD%ccBqGF0oGuZ?jbulkt!M}{S1;9gwAVkgdilT^_AS`w6?UH5Jd=wTUA-d$_O0DuM
z|9E9XZFl$tZctd`Bq=OfI(cw4A)|t
zl$W~3_RkP
zFA6wSu+^efs79KH@)0~c3Dn1nSkNj_s)qBUGs6q?G0vjT&C5Y3ax-seA_+_}m`aj}
zvW04)0TSIpqQkD@#NXZBg9z@GK1^ru*aKLrc4{J0PjhNfJT}J;vEeJ1ov?*KVNBy<
zXtNIY3TqLZ=o1Byc^wL!1L6#i6n(088T9W<_iu~$S&VWGfmD|wNj?Q?Dnc#6iskoG
zt^u26JqFnt=xjS-=|ACC%(=YQh{_alLW1tk;+tz1ujzeQ--lEu)W^Jk>UmHK(H303f}P2i
zrsrQ*nEz`&{V!%2O446^8qLR~-Pl;2Y==NYj^B*j1vD}R5plk>%)GZSSjbi|tx>YM
zVd@IS7b>&Uy%v==*35wGwIK4^iV{31mc)dS^LnN8j%#M}s%B@$=bPFI_ifcyPd4hilEWm71chIwfIR(-SeQaf20{;EF*(K(Eo+hu{}I
zZkjXyF}{(x@Ql~*yig5lAq7%>-O5E++KSzEe(sqiqf1>{Em)pN`wf~WW1PntPpzKX
zn;14G3FK7IQf!~n>Y=cd?=jhAw1+bwlVcY_kVuRyf!rSFNmR4fOc(g7(fR{ANvcO<
zbG|cnYvKLa>dU(Z9YP796`Au?gz)Ys?w!af`F}1#W>x_O|k9Q
z>#<6bKDt3Y}?KT2tmhU>H6Umn}J5M
zarILVggiZs=kschc2TKib2`gl^9f|(37W93>80keUkrC3ok1q{;PO6HMbm{cZ^ROcT#tWWsQy?8qKWt<42BGryC(Dx>^ohIa0u7$^)V@Bn17^(VUgBD>
zAr*Wl6UwQ&AAP%YZ;q2cZ;@2M(QeYFtW@PZ+mOO5gD1v-JzyE3^zceyE5H?WLW?$4
zhBP*+3i<09M$#XU;jwi7>}kW~v%9agMDM_V1$WlMV|U-Ldmr|<_nz*F_kcgrJnrViguEnJt{=Mk5f4Foin7(3vUXC>4gyJ>sK<;-p{h7
z2_mr&Fca!E^7R6VvodGznqJn3o)Ibd`gk>uKF7aemX*b~Sn#=NYl5j?v*T4FWZF2D
zaX(M9hJ2YuEi%b~4?RkJwT*?aCRT@ecBkq$O!i}EJJEw`*++J_a>gsMo0CG^pZ3x+
zdfTSbCgRwtvAhL$p=iIf7%Vyb!j*UJsmOMler--IauWQ;(ddOk+U$WgN-RBle~v9v
z9m2~@h|x*3t@m+4{U2}fKzRoVePrF-}U{`YT|vW?~64Bv*7|Dz03
zRYM^Yquhf*ZqkN?+NK4Ffm1;6BR0ZyW3MOFuV1ljP~V(=-tr^Tgu#7$`}nSd<8?cP
z`VKtIz5$~InI0YnxAmn|pJZj+nPlI3zWsykXTKRnDCBm~Dy*m^^qTuY+8dSl@>&B8~0H$Y0Zc25APo|?R=
z>_#h^kcfs#ae|iNe{BWA7K1mLuM%K!_V?fDyEqLkkT&<`SkEJ;E+Py^%hPVZ(%a2P4vL=vglF|X_`Z$^}q470V+7I4;UYdcZ7vU=41dd{d#KmI+|ZGa>C10g6w1a?wxAc&?iYsEv
zuCwWvcw4FoG=Xrq=JNyPG*yIT@xbOeV`$s_kx`pH0DXPf0S7L?F208x4ET~j;yQ2c
zhtq=S{T%82U7GxlUUKMf-NiuhHD$5*x{6}}_eZ8_kh}(}BxSPS9<(x2m$Rn0sx>)a
zt$+qLRJU}0)5X>PXVxE?Jxpw(kD0W43ctKkj8DjpYq}lFZE98Je+v2t7uxuKV;p0l
z5b9smYi5~k2%4aZe+~6HyobTQ@4_z#*lRHl#
zSA`s~Jl@RGq=B3SNQF$+puBQv>DaQ--V!alvRSI~ZoOJx3VP4sbk!NdgMNBVbG&BX
zdG*@)^g4#M#qoT`^NTR538vx~rdyOZcfzd7GBHl68-rG|fkofiGAXTJx~`~%a&boY
zZ#M4sYwHIOnu-Mr!Ltpl8!NrX^p74tq{f_F4%M@&<=le;>xc5pAi&qn4P>04D$fp`
z(OuJXQia--?vD0DIE6?HC|+DjH-?Cl|GqRKvs8PSe027_NH=}+8km9Ur8(JrVx@*x
z0lHuHd=7*O+&AU_B;k{>hRvV}^Uxl^L1-c-2j4V^TG?2v66BRxd~&-GMfcvKhWgwu
z60u{2)M{ZS)r*=&J4%z*rtqs2syPiOQq(`V0UZF)boPOql@E0U39>d>MP=BqFeJzz
zh?HDKtY3%mR~reR7S2rsR0aDMA^a|L^_*8XM9KjabpYSBu
z;zkfzU~12|X_W_*VNA=e^%Za14PMOC!z`5Xt|Fl$2bP9fz>(|&VJFZ9{z;;eEGhOl
zl7OqqDJzvgZvaWc7Nr!5lfl*Qy7_-fy9%f(v#t#&2#9o-ba%J3(%s#C=@dagx*I{d
zB&AzGT9EEiknWJU^naNdz7Logo%#OFV!eyCIQuzgpZDDN-1F}JJTdGXiLN85p|GT!
zGOfNd8^RD;MsK*^3gatg2#W0J<8j)UCkUYoZRR|R*UibOm-G)S#|(`$hPA7UmH+fT
ziZxTgeiR_yzvNS1s+T!xw)QgNSH(_?B@O?uTBwMj`G)2c^8%g8zu
zxMu5SrQ^J+K91tkPrP%*nTpyZor#4`)}(T-Y8eLd(|sv8xcIoHnicKyAlQfm1YPyI
z!$zimjMlEcmJu?M6z|RtdouAN1U5lKmEWY3gajkPuUHYRvTVeM05CE@`@VZ%dNoZN
z>=Y3~f$~Gosud$AN{}!DwV<6CHm3TPU^qcR!_0$cY#S5a+GJU-2I2Dv;ktonSLRRH
zALlc(lvX9rm-b5`09uNu904c}sU(hlJZMp@%nvkcgwkT;Kd7-=Z_z9rYH@8V6Assf
zKpXju&hT<=x4+tCZ{elYtH+_F$V=tq@-`oC%vdO>0Wmu#w*&?_=LEWRJpW|spYc8V
z=$)u#r}Pu7kvjSuM{FSyy9_&851CO^B
zTm$`pF+lBWU!q>X#;AO1&=tOt=i!=9BVPC#kPJU}K$pO&8Ads)XOFr336_Iyn
z$d{MTGYQLX9;@mdO;_%2Ayw3hv}_$UT00*e{hWxS?r=KT^ymEwBo429b5i}LFmSk`
zo)-*bF1g;y@&o=34TW|6jCjUx{55EH&DZ?7wB_EmUg*B4zc6l7x-}qYLQR@^7o6rrgkoujRNym9O)K>wNfvY+uy+4Om{XgRHi#Hpg*bZ36_X%pP`m7FIF
z?n?G*g&>kt$>J_PiXIDzgw3IupL3QZbysSzP&}?JQ-6TN-aEYbA$X>=(Zm}0{hm6J
zJnqQnEFCZGmT06LAdJ^T#o`&)CA*eIYu?zzDJi#c$1H9zX}hdATSA|zX0Vb^q$mgg
z&6kAJ=~gIARct>}4z&kzWWvaD9#1WK=P>A_aQxe#+4cpJtcRvd)TCu!
z>eqrt)r(`qYw6JPKRXSU#;zYNB7a@MYoGuAT0Nzxr`>$=vk`uEq2t@k9?jYqg)MXl
z67MA3^5_}Ig*mycsGeH0_VtK3bNo;8#0fFQ&qDAj=;lMU9%G)&HL>NO|lWU3z+m4t7
zfV*3gSuZ++rIWsinX@QaT>dsbD>Xp8%8c`=-
zWLa05h}VRqMNEf2?UdwL2G$a@>HLamm~(i{7L&S0uZ;`W-tqU4XAgQclM$PxE76OH(PSjHjR$(nh({vsNnawhP!!HcP!l)5
zG;C=k0xL<^q+4rpbp{sGzcc~ZfGv9J*k~PPl}e~t$>WPSxzi0}05(D6d<=5+E}Y4e
z@_QZtDcC7qh4#dQFYb6Pulf_8iAYYE
z1SWJfNe5@auBbE5O=oeO@o*H5mS(pm%$!5yz-71~lEN5=x0eN|V`xAeP;eTje?eC=
z53WneK;6n35{OaIH2Oh6Hx)kV-jL-wMzFlynGI8Wk_A<~_|06rKB#Pi_QY2XtIGW_
zYr)RECK_JRzR1tMd(pM(L=F98y~7wd4QBKAmFF(AF(e~+80$GLZpFc;a{kj1h}g4l
z3SxIRlV=h%Pl1yRacl^g>9q%>U+`P(J`oh-w8i82mFCn|NJ5oX*^VKODX2>~HLUky
z3D(ak0Sj=Kv^&8dUhU(3Ab!U5TIy97PKQ))&`Ml~hik%cHNspUpCn24cqH@dq6ZVo
zO9xz!cEMm;NL;#z-tThlFF%=^ukE8S0;hDMR_`rv#eTYg7io1w9n_vJpK+6%=c#Y?wjAs_(#RQA0gr&Va2BQTq`
zUc8)wHEDl&Uyo<>-PHksM;b-y(`E_t8Rez@Iw+eogcEI*FDg@Bc;;?3j3&kPsq(mx
z+Yr_J#?G6D?t2G%O9o&e7Gbf&>#(-)|8)GIbG_a${TU26cVrIQSt=%
zQ~XY-b1VQVc>IV=7um0^Li>dF
z`zSm_o*i@ra4B+Tw5jdguVqx`O(f4?_USIMJzLvS$*kvBfEuToq-VR%K*%1VHu=++
zQ`=cG3cCnEv{ZbP-h9qbkF}%qT$j|Z7ZB2?s7nK@gM{bAD=eoDKCCMlm4LG~yre!-
zzPP#Rn9ZDUgb4++M78-V&VX<1ah(DN
z(4O5b`Fif%*k?L|t%!WY`W$C_C`tzC`tI7XC`->oJs_Ezs=K*O_{*#SgNcvYdmBbG
zHd8!UTzGApZC}n7LUp1fe0L<3|B5GdLbxX@{ETeUB2vymJgWP0q2E<&!Dtg4>v`aa
zw(QcLoA&eK{6?Rb&6P0kY+YszBLXK49i~F!jr)7|xcnA*mOe1aZgkdmt4{Nq2!!SL
z`aD{6M>c00muqJt4$P+RAj*cV^vn99UtJ*s${&agQ;C>;SEM|l%KoH_^kAcmX=%)*
zHpByMU_F12iGE#68rHGAHO_ReJ#<2ijo|T7`{PSG)V-bKw}mpTJwtCl%cq2zxB__m
zM_p2k8pDmwA*$v@cmm>I)TW|7a7ng*X7afyR1dcuVGl|BQzy$MM+zD{d~n#)9?1qW
zdk(th4Ljb-vpv5VUt&9iuQBnQ$JicZ)+HoL`&)B^Jr9F1wvf=*1and~v}3u{+7u7F
zf0U`l4Qx-ANfaB3bD1uIeT^zeXerps8nIW(tmIxYSL;5~!&&ZOLVug2j4t7G=zzK+
zmPy5<4h%vq$Fw)i1)ya{D;GyEm3fybsc8$=$`y^bRdmO{XU#95EZ$I$bBg)FW#=}s
z@@&c?xwLF3|C7$%>}T7xl0toBc6N^C{!>a8vWc=G!bAFKmn{AKS6RxOWIJBZXP&0CyXAiHd?7R#S46K6UXYXl#c_#APL5SfW<<-|rcfX&B6e*isa|L^RK=0}D`4q-T0VAs0
zToyrF6`_k$UFGAGhY^&gg)(Fq0p%J{h?E)WQ(h@Gy=f6oxUSAuT4ir}jI)36|NnmnI|vtij;t!jT?6Jf-E19}9Lf9(+N+
z)+0)I5mST_?3diP*n2=ZONTYdXkjKsZ%E$jjU@0w_lL+UHJOz|K{{Uh%Zy0dhiqyh
zofWXzgRyFzY>zpMC8-L^43>u#+-zlaTMOS(uS!p{Jw#u3_9s)(s)L6j-+`M5sq?f+
zIIcjq$}~j9b`0_hIz~?4?b(Sqdpi(;1=8~wkIABU+APWQdf5v@g=1c{c{d*J(X5+cfEdG?qxq
z{GKkF;)8^H&Xdi~fb~hwtJRsfg#tdExEuDRY^x9l6=E+|fxczIW4Z29NS~-oLa$Iq
z93;5$(M0N8ba%8&q>vFc=1}a8T?P~_nrL5tYe~X>G=3QoFlBae8vVt-K!^@vusN<8gQJ!WD7H%{*YgY0#(tXxXy##C@o^U7ysxe
zLmUWN@4)JBjjZ3G-_)mrA`|NPCc8Oe!%Ios4$HWpBmJse7q?)@Xk%$x&lIY>vX$7L
zpfNWlXxy2p7TqW`Wq22}Q3OC2OWTP_X(*#kRx1WPe%}$C!Qn^FvdYmvqgk>^nyk;6
zXv*S#P~NVx1n6pdbXuX9x_}h1SY#3ZyvLZ&VnWVva4)9D|i7kjGY{>am&^
z-_x1UYM1RU#z17=AruK~{BK$A65Sajj_OW|cpYQBGWO*xfGJXSn4E&VMWchq%>0yP
z{M2q=zx!VnO71gb8}Al2i+uxb=ffIyx@oso@8Jb88ld6M#wgXd=WcX$q$91o(94Ek
zjeBqQ+CZ64hI>sZ@#tjdL}JeJu?GS7N^s$WCIzO`cvj60*d&-BQ>+qK#7l+!u1t
zBuyL-Cqups?2>)ek2Z|QnAqs_`u1#y8=~Hvsn^2Jtx-O`limc*w;byk^2D-!*zqRi
zVcX+4lzwcCgb+(lROWJ~qi;q2!t6;?%qjGcIza=C6{T7q6_?A@qrK#+)+?drrs3U}4Fov+Y}`>M
z#40OUPpwpaC-8&q8yW0XWGw`RcSpBX+7hZ@xarfCNnrl-{k@`@Vv>
zYWB*T=4hLJ1SObSF_)2AaX*g(#(88~bVG9w)ZE91eIQWflNecYC
zzUt}ov<&)S&i$}?LlbIi9i&-g=UUgjWTq*v$!0$;8u&hwL*S^V!GPSpM3PR3Ra5*d
z7d77UC4M{#587NcZS4+JN=m#i)7T0`jWQ{HK3rIIlr3cDFt4odV25yu9H1!}BVW-&
zrqM5DjDzbd^pE^Q<-$1^_tX)dX8;97ILK{
z!{kF{!h`(`6__+1UD5=8sS!R>*KqN9_?(Z$4cY#B)pG8>2pZqI;RiYW6aUt7kk*s^D~Rml_fg$m+4+O5?J&p1)wE
zp5L-X(6og1s(?d7X#l-RWO+5Jj(pAS{nz1abM^O;8hb^X4pC7ADpzUlS{F~RUoZp^
zuJCU_fq}V!9;knx^uYD2S9E`RnEsyF^ZO$;`8uWNI%hZzKq=t`q12cKEvQjJ9dww9
zCerpM3n@Ag+XZJztlqHRs!9X(Dv&P;_}zz$N&xwA@~Kfnd3}YiABK*T)Ar2E?OG6V
z<;mFs`D?U7>Rradv7(?3oCZZS_0Xr#3NNkpM1@qn-X$;aNLYL;yIMX4uubh^Xb?HloImt$=^s8vm)3g!{H1D|k
zmbg_Rr-ypQokGREIcG<8u(=W^+oxelI&t0U`dT=bBMe1fl+9!l&vEPFFu~yAu!XIv4@S{;|
z8?%<1@hJp%7AfZPYRARF1hf`cq_VFQ-y74;EdMob{z&qec2hiQJOQa>f-?Iz^VXOr
z-wnfu*uT$(5WmLsGsVkHULPBvTRy0H(}S0SQ18W0kp_U}8Phc3gz!Hj#*VYh$AiDE245!YA0M$Q@rM
zT;}1DQ}MxV<)*j{hknSHyihgMPCK=H)b-iz9N~KT%<&Qmjf39L@&7b;;>9nQkDax-
zk%7ZMA%o41l#(G5K=k{D{80E@P|I;aufYpOlIJXv!dS+T^plIVpPeZ)Gp`vo+?BWt
z8U8u=C51u%>yDCWt>`VGkE5~2dD4y_8+n_+I9mFN(4jHJ&x!+l*>%}b4Z>z#(tb~<
z+<+X~GIi`sDb=SI-7m>*krlqE3aQD?D5WiYX;#8m|ENYKw}H^95u!=n=xr3jxhCB&InJ7>zgLJg;i?Sjjd`YW!2;
z%+y=LwB+MMnSGF@iu#I%!mvt)aXzQ*NW$cHNHwjoaLtqKCHqB}LW^ozBX?`D4&h%#
zeMZ3ZumBn}5y9&odo3=hN$Q&SRte*^-SNZg2<}6>OzRpF91oy0{RuZU(Q0I
zvx%|9>;)-Ca9#L)HQt~axu0q{745Ac;s1XQKV
ze3D9I5gV5SP-J>&3U!lg1`HN>n5B6XxYpwhL^t0Z)4$`YK93vTd^7BD%<)cIm|4e!;*%9}B-3NX+J*Nr@;5(27Zmf(TmfHsej^Bz+J1
zXKIjJ)H{thL4WOuro|6&aPw=-JW8G=2
z|L4YL)^rYf7J7DOKXpTX$4$Y{-2B!jT4y^w8yh3LKRKO3-4DOshFk}N^^Q{r(0K0+
z?7w}x>(s{Diq6K)8sy)>%*g&{u>)l+-Lg~=gteW?pE`B@FE`N!F-+aE;XhjF+2|RV
z8vV2((yeA-VDO;3=^E;fhW~b=Wd5r8otQrO{Vu)M1{j(+?+^q%xpYCojc6rmQ<&ytZ2ly?bw*X)WB8(n^B4Gmxr^1bQ&=m;I4O$g{
z3m|M{tmkOyAPnMHu(Z}Q1X1GM|A+)VDP3Fz934zSl)z>N|D^`G-+>Mej|VcK+?iew
zQ3=DH4zz;i>z{Yv_l@j*?{936kxM{c7eK$1cf8wxL>>O#`+vsu*KR)te$adfTD*w(
zAStXnZk<6N3V-Vs#GB%vXZat+(EFWbkbky#{yGY`rOvN)?{5qUuFv=r=dyYZrULf%MppWuNRUWc
z8|YaIn}P0DGkwSZ(njAO$Zhr3Yw`3O1A+&F*2UjO{0`P%kK(qL;kEkfjRC=lxPRjL
z{{4PO3-*5RZ_B3LUB&?ZpJ4nk1E4L&eT~HX0Jo(|uGQCW3utB@p)rF@W*n$==TlS
zKiTfzhrLbAeRqru%D;fUwXOUcHud{pw@Ib1xxQ}<2)?KC&%y5PVef<7rcu2l!8dsy
z?lvdaHJ#s$0m18y{x#fB$o=l)-sV?Qya5GWf#8Vd{~Grn@qgX#!EI`Y>++l%1A;eL
z{_7t6jMeEr@a+oxyCL^+_}9Qc;i0&Xd%LXp?to*R|26LKHG(m0)*QF4*h;5%YG5<9)c>
z1vq!7bIJSv1^27i-mcH!zX>ep3Iw0^{nx<1jOy)N_UoFD8v}x~2mEWapI3m~kMQkR
z#&@4FuEGBn`mgtSx6jeY7vUQNf=^}sTZErIEpH!cy|@7Z
zU4h_Oxxd2s=f{}$XXy4}%JqTSjRC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AcquisitionServer.log b/AcquisitionServer.log
new file mode 100644
index 0000000..c29684a
--- /dev/null
+++ b/AcquisitionServer.log
@@ -0,0 +1,101 @@
+2019-11-20 09:42:58.798 INFO 1000 --- [main] com.ann.DemoApplication : Starting DemoApplication on DESKTOP-0E3CB3K with PID 1000 (E:\2019Project\AcquisitionServer\target\classes started by ljx in E:\2019Project\AcquisitionServer)
+2019-11-20 09:42:58.805 INFO 1000 --- [main] com.ann.DemoApplication : No active profile set, falling back to default profiles: default
+2019-11-20 09:43:00.684 INFO 1000 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
+2019-11-20 09:43:01.108 INFO 1000 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 388ms. Found 6 repository interfaces.
+2019-11-20 09:43:01.929 INFO 1000 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$b33f4b18] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2019-11-20 09:43:03.904 INFO 1000 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8888 (http)
+2019-11-20 09:43:04.082 INFO 1000 --- [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+2019-11-20 09:43:04.082 INFO 1000 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.21]
+2019-11-20 09:43:04.548 INFO 1000 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
+2019-11-20 09:43:04.550 INFO 1000 --- [main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 5678 ms
+2019-11-20 09:43:06.221 INFO 1000 --- [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
+ name: default
+ ...]
+2019-11-20 09:43:06.503 INFO 1000 --- [main] org.hibernate.Version : HHH000412: Hibernate Core {5.3.10.Final}
+2019-11-20 09:43:06.507 INFO 1000 --- [main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
+2019-11-20 09:43:06.869 INFO 1000 --- [main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
+2019-11-20 09:43:07.132 INFO 1000 --- [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
+2019-11-20 09:43:07.504 INFO 1000 --- [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
+2019-11-20 09:43:07.533 INFO 1000 --- [main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
+2019-11-20 09:43:10.962 INFO 1000 --- [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2019-11-20 09:43:11.344 INFO 1000 --- [main] org.quartz.impl.StdSchedulerFactory : Using default implementation for ThreadExecutor
+2019-11-20 09:43:11.363 INFO 1000 --- [main] org.quartz.core.SchedulerSignalerImpl : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2019-11-20 09:43:11.364 INFO 1000 --- [main] org.quartz.core.QuartzScheduler : Quartz Scheduler v.2.3.1 created.
+2019-11-20 09:43:11.369 INFO 1000 --- [main] org.quartz.simpl.RAMJobStore : RAMJobStore initialized.
+2019-11-20 09:43:11.372 INFO 1000 --- [main] org.quartz.core.QuartzScheduler : Scheduler meta-data: Quartz Scheduler (v2.3.1) 'quartzScheduler' with instanceId 'NON_CLUSTERED'
+ Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
+ NOT STARTED.
+ Currently in standby mode.
+ Number of jobs executed: 0
+ Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
+ Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
+
+2019-11-20 09:43:11.373 INFO 1000 --- [main] org.quartz.impl.StdSchedulerFactory : Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2019-11-20 09:43:11.373 INFO 1000 --- [main] org.quartz.impl.StdSchedulerFactory : Quartz scheduler version: 2.3.1
+2019-11-20 09:43:11.374 INFO 1000 --- [main] org.quartz.core.QuartzScheduler : JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@1d5048d1
+2019-11-20 09:43:12.135 INFO 1000 --- [main] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory
+2019-11-20 09:43:12.727 INFO 1000 --- [main] o.a.c.w.s.f.ReflectionServiceFactoryBean : Creating Service {http://interfaces.ann.com/}HomepageDictionary from class com.ann.interfaces.HomepageDictionary
+2019-11-20 09:43:13.602 INFO 1000 --- [main] org.apache.cxf.endpoint.ServerImpl : Setting the server's publish address to be HomepageDictionary
+2019-11-20 09:43:14.699 INFO 1000 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
+2019-11-20 09:43:14.864 WARN 1000 --- [main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2019-11-20 09:43:15.268 INFO 1000 --- [main] o.s.s.quartz.SchedulerFactoryBean : Starting Quartz Scheduler now
+2019-11-20 09:43:15.268 INFO 1000 --- [main] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2019-11-20 09:43:15.317 INFO 1000 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8888 (http) with context path ''
+2019-11-20 09:43:15.320 INFO 1000 --- [main] com.ann.DemoApplication : Started DemoApplication in 17.414 seconds (JVM running for 19.395)
+2019-11-20 09:44:33.860 WARN 1000 --- [HikariPool-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=56s252ms809µs400ns).
+2019-11-20 09:45:55.693 WARN 1000 --- [HikariPool-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=1m21s833ms754µs500ns).
+2019-11-20 09:51:02.840 WARN 1000 --- [HikariPool-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=1m59s810ms819µs100ns).
+2019-11-20 09:52:30.189 INFO 1000 --- [Thread-37] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2019-11-20 09:52:30.191 INFO 1000 --- [Thread-37] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
+2019-11-20 09:52:30.196 INFO 1000 --- [Thread-37] o.s.s.quartz.SchedulerFactoryBean : Shutting down Quartz Scheduler
+2019-11-20 09:52:30.196 INFO 1000 --- [Thread-37] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED shutting down.
+2019-11-20 09:52:30.196 INFO 1000 --- [Thread-37] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
+2019-11-20 09:52:30.197 INFO 1000 --- [Thread-37] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED shutdown complete.
+2019-11-20 09:52:30.198 INFO 1000 --- [Thread-37] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
+2019-11-20 09:52:30.202 INFO 1000 --- [Thread-37] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
+2019-11-20 09:52:30.212 INFO 1000 --- [Thread-37] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
+2019-11-20 15:07:59.503 INFO 8916 --- [main] com.ann.DemoApplication : Starting DemoApplication on DESKTOP-0E3CB3K with PID 8916 (E:\2019Project\AcquisitionServer\target\classes started by ljx in E:\2019Project\AcquisitionServer)
+2019-11-20 15:07:59.519 INFO 8916 --- [main] com.ann.DemoApplication : No active profile set, falling back to default profiles: default
+2019-11-20 15:08:00.987 INFO 8916 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data repositories in DEFAULT mode.
+2019-11-20 15:08:01.362 INFO 8916 --- [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 359ms. Found 6 repository interfaces.
+2019-11-20 15:08:01.862 INFO 8916 --- [main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$4b65e02d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
+2019-11-20 15:08:02.284 INFO 8916 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8888 (http)
+2019-11-20 15:08:02.378 INFO 8916 --- [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+2019-11-20 15:08:02.378 INFO 8916 --- [main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.21]
+2019-11-20 15:08:02.534 INFO 8916 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
+2019-11-20 15:08:02.534 INFO 8916 --- [main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2937 ms
+2019-11-20 15:08:03.643 INFO 8916 --- [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
+ name: default
+ ...]
+2019-11-20 15:08:03.737 INFO 8916 --- [main] org.hibernate.Version : HHH000412: Hibernate Core {5.3.10.Final}
+2019-11-20 15:08:03.737 INFO 8916 --- [main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
+2019-11-20 15:08:04.112 INFO 8916 --- [main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
+2019-11-20 15:08:04.362 INFO 8916 --- [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
+2019-11-20 15:08:04.627 INFO 8916 --- [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
+2019-11-20 15:08:04.643 INFO 8916 --- [main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
+2019-11-20 15:08:05.893 INFO 8916 --- [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2019-11-20 15:08:06.033 INFO 8916 --- [main] org.quartz.impl.StdSchedulerFactory : Using default implementation for ThreadExecutor
+2019-11-20 15:08:06.049 INFO 8916 --- [main] org.quartz.core.SchedulerSignalerImpl : Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
+2019-11-20 15:08:06.049 INFO 8916 --- [main] org.quartz.core.QuartzScheduler : Quartz Scheduler v.2.3.1 created.
+2019-11-20 15:08:06.049 INFO 8916 --- [main] org.quartz.simpl.RAMJobStore : RAMJobStore initialized.
+2019-11-20 15:08:06.049 INFO 8916 --- [main] org.quartz.core.QuartzScheduler : Scheduler meta-data: Quartz Scheduler (v2.3.1) 'quartzScheduler' with instanceId 'NON_CLUSTERED'
+ Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
+ NOT STARTED.
+ Currently in standby mode.
+ Number of jobs executed: 0
+ Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
+ Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
+
+2019-11-20 15:08:06.049 INFO 8916 --- [main] org.quartz.impl.StdSchedulerFactory : Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
+2019-11-20 15:08:06.049 INFO 8916 --- [main] org.quartz.impl.StdSchedulerFactory : Quartz scheduler version: 2.3.1
+2019-11-20 15:08:06.049 INFO 8916 --- [main] org.quartz.core.QuartzScheduler : JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@2f0e7fa8
+2019-11-20 15:08:06.439 INFO 8916 --- [main] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory
+2019-11-20 15:08:07.486 INFO 8916 --- [main] o.a.c.w.s.f.ReflectionServiceFactoryBean : Creating Service {http://interfaces.ann.com/}HomepageDictionary from class com.ann.interfaces.HomepageDictionary
+2019-11-20 15:08:08.720 INFO 8916 --- [main] org.apache.cxf.endpoint.ServerImpl : Setting the server's publish address to be HomepageDictionary
+2019-11-20 15:08:08.986 INFO 8916 --- [main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
+2019-11-20 15:08:09.064 WARN 8916 --- [main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2019-11-20 15:08:09.298 INFO 8916 --- [main] o.s.s.quartz.SchedulerFactoryBean : Starting Quartz Scheduler now
+2019-11-20 15:08:09.298 INFO 8916 --- [main] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED started.
+2019-11-20 15:08:09.345 INFO 8916 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8888 (http) with context path ''
+2019-11-20 15:08:09.345 INFO 8916 --- [main] com.ann.DemoApplication : Started DemoApplication in 10.701 seconds (JVM running for 15.401)
+2019-11-20 16:34:29.676 INFO 8916 --- [Thread-23] org.quartz.core.QuartzScheduler : Scheduler quartzScheduler_$_NON_CLUSTERED paused.
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..54443a5
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,164 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.1.6.RELEASE
+
+
+ com.ann
+ demo
+ 0.0.1-SNAPSHOT
+ war
+ demo
+ Demo project for Spring Boot
+
+
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.30
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.4
+
+
+
+
+ jaxen
+ jaxen
+ 1.1-beta-11
+
+
+ xerces
+ xercesImpl
+
+
+
+
+
+
+ com.itextpdf
+ itextpdf
+ 5.5.10
+
+
+
+
+ jcifs
+ jcifs
+ 1.3.17
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-quartz
+
+
+
+
+ org.apache.cxf
+ cxf-spring-boot-starter-jaxws
+ 3.2.5
+
+
+
+
+
+
+ com.microsoft.sqlserver
+ sqljdbc4
+ 4.0
+
+
+
+
+ commons-net
+ commons-net
+ 3.6
+
+
+
+ commons-io
+ commons-io
+ 2.4
+
+
+ org.apache.commons
+ commons-lang3
+ 3.8
+
+
+
+
+
+ com.jcraft
+ jsch
+ 0.1.54
+
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ filing
+
+
+
diff --git a/src/main/java/com/ann/DemoApplication.java b/src/main/java/com/ann/DemoApplication.java
new file mode 100644
index 0000000..a14eb62
--- /dev/null
+++ b/src/main/java/com/ann/DemoApplication.java
@@ -0,0 +1,13 @@
+package com.ann;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class DemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DemoApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/ann/ServletInitializer.java b/src/main/java/com/ann/ServletInitializer.java
new file mode 100644
index 0000000..9f21060
--- /dev/null
+++ b/src/main/java/com/ann/ServletInitializer.java
@@ -0,0 +1,13 @@
+package com.ann;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+public class ServletInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(DemoApplication.class);
+ }
+
+}
diff --git a/src/main/java/com/ann/controller/QuartzController.java b/src/main/java/com/ann/controller/QuartzController.java
new file mode 100644
index 0000000..d3affa9
--- /dev/null
+++ b/src/main/java/com/ann/controller/QuartzController.java
@@ -0,0 +1,88 @@
+package com.ann.controller;
+
+import com.ann.entity.other.QuartzBean;
+import com.ann.job.obsolete.MyTask;
+import com.ann.utils.QuartzUtils;
+import org.quartz.Scheduler;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/13 17:01
+ */
+@Controller
+@RequestMapping("/quartz/")
+public class QuartzController {
+ //注入任务调度
+ @Autowired
+ private Scheduler scheduler;
+
+
+
+ @RequestMapping("/createJob")
+ @ResponseBody
+ public String createJob(QuartzBean quartzBean) {
+ try {
+ //进行测试所以写死
+ quartzBean.setJobClass(MyTask.class.getName());
+ quartzBean.setJobName("MyTask");
+ quartzBean.setCronExpression("*/5 * * * * ?");
+ QuartzUtils.createScheduleJob(scheduler, quartzBean);
+ } catch (Exception e) {
+ return "创建失败";
+ }
+ return "创建成功";
+ }
+
+ @RequestMapping("/pauseJob")
+ @ResponseBody
+ public String pauseJob() {
+ try {
+ // QuartzUtils.pauseScheduleJob (scheduler,"MyTask");
+ } catch (Exception e) {
+ return "暂停失败";
+ }
+ return "暂停成功";
+ }
+
+ @RequestMapping("/runOnce")
+ @ResponseBody
+ public String runOnce() {
+ try {
+ QuartzUtils.runOnce(scheduler, "MyTask");
+ } catch (Exception e) {
+ return "运行一次失败";
+ }
+ return "运行一次成功";
+ }
+
+ @RequestMapping("/resume")
+ @ResponseBody
+ public String resume() {
+ try {
+
+ // QuartzUtils.resumeScheduleJob(scheduler,"MyTask");
+ } catch (Exception e) {
+ return "启动失败";
+ }
+ return "启动成功";
+ }
+
+ @RequestMapping("/update")
+ @ResponseBody
+ public String update(QuartzBean quartzBean) {
+ try {
+ //进行测试所以写死
+ quartzBean.setJobClass(MyTask.class.getName());
+ quartzBean.setJobName("MyTask");
+ quartzBean.setCronExpression("10 * * * * ?");
+ QuartzUtils.updateScheduleJob(scheduler, quartzBean);
+ } catch (Exception e) {
+ return "启动失败";
+ }
+ return "启动成功";
+ }
+}
diff --git a/src/main/java/com/ann/controller/TestController.java b/src/main/java/com/ann/controller/TestController.java
new file mode 100644
index 0000000..a1b02e0
--- /dev/null
+++ b/src/main/java/com/ann/controller/TestController.java
@@ -0,0 +1,134 @@
+package com.ann.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.ann.entity.filing.MessageSubordinate;
+import com.ann.entity.filing.dto.MessageDto;
+import com.ann.entity.filing.dto.PatientMainDto;
+import com.ann.entity.interfaceEntity.MessageLog;
+import com.ann.entity.other.QuartzBean;
+import com.ann.repository.MessageSubordinateRepository;
+import com.ann.service.ArchiveDetailService;
+import com.ann.utils.*;
+import jcifs.smb.SmbFileInputStream;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
+import org.omg.SendingContext.RunTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import sun.net.ftp.FtpClient;
+
+import java.io.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/18 10:47
+ */
+@Controller
+@RequestMapping("/")
+public class TestController {
+
+ @Autowired
+ private ArchiveDetailService archiveDetailService;
+
+ @Autowired
+ MessageSubordinateRepository messageSubordinateRepository;
+
+ @RequestMapping("/demo")
+ public String aa() {
+ return "demo";
+ }
+
+ @RequestMapping("/haha")
+ public String createJob(QuartzBean quartzBean) {
+
+
+ JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
+ Client client = dcf.createClient("http://localhost:8080/services/HomepageDictionary?wsdl");
+ Object[] objects = new Object[0];
+ // invoke("方法名",参数1,参数2,参数3....);
+ try {
+ objects = client.invoke("CheckData", "2b52c101-69d3-495c-94dc-1e3c47e61623");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return objects[0].toString();
+ }
+
+ @RequestMapping("/xixi")
+ public String xixi() {
+ // 创建url地址
+ /*String address = "ftp://PTVIEW:MedExTech@10.6.0.65:10021/ecgdata/ECG/2019-07-24/MECGCAS1907240069_1.jpg";
+ address = address.substring(address.indexOf("/")+2,address.length());
+ // 10.6.0.65:10021/ecgdata/ECG/2019-07-24/MECGCAS1907240069_1.jpg
+ String ftpAccount = address.substring(0,address.indexOf("@"));
+ String[] split = ftpAccount.split(":");
+
+ address = address.substring(address.indexOf("@")+1,address.length());
+
+ String url = address.substring(0,address.indexOf(":"));
+ Integer port = 0;
+ if(address.indexOf(":") != -1 && address.indexOf("/") != -1 ){
+ port = Integer.parseInt(address.substring(address.indexOf(":")+1,address.indexOf("/")));
+ }
+ String path = address.substring(address.indexOf("/"),address.length());
+*/
+ String address = "ftp://10.6.0.75/000/000568558/2/000568558000_2_麻醉_麻醉单_1_1.pdf";
+ //String address = "ftp://10.6.0.65:10021/ecgdata/ECG/2019-07-25/201907250940334102.pdf";
+ String temp = address;
+ address = address.substring(address.indexOf("/") + 2, address.length());
+
+ String url = address.substring(0, address.indexOf("/"));
+ String path = address.substring(address.indexOf("/"), address.length());
+
+ try {
+ FtpClient ftpClient = FtpUtils.connectFTP(url, 21, "mdsd", "mdsd");
+ // File pdfFile = FileUtils.createFile("pdfs","789","123456", "阿雷小猴子");
+ //FtpUtils.downloadFtp(temp,ftpClient,pdfFile);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+
+ return "我是测试ftp的~~~~";
+ }
+
+ @RequestMapping("/deleteDetail")
+ public String deleteDetail() throws Exception{
+ archiveDetailService.delete();
+ return "成功";
+ }
+
+ @ResponseBody
+ @RequestMapping("/test")
+ public String xixi1() {
+ archiveDetailService.test();
+ return "哈哈哈哈";
+ }
+
+ @ResponseBody
+ @RequestMapping("/updatePatient")
+ public String cc1(){
+ List haha = messageSubordinateRepository.findHaha();
+ for (MessageSubordinate messageSubordinate:
+ haha) {
+ String contentJson = messageSubordinate.getContentJson();
+ MessageLog messageLog = JSON.parseObject(contentJson, MessageLog.class);
+ if (messageLog != null) {
+ String outJson = messageLog.getOutJson();
+ if (outJson != null) {
+ MessageDto messageDto = JSON.parseObject(outJson, MessageDto.class);
+ String patientMainStr = JSON.toJSONString(new PatientMainDto(messageDto.getInpNo(), messageDto.getVisitId()), SerializerFeature.WriteMapNullValue);
+ }
+ }
+ }
+ return haha.size()+"";
+ }
+
+}
diff --git a/src/main/java/com/ann/controller/UsingStaticController.java b/src/main/java/com/ann/controller/UsingStaticController.java
new file mode 100644
index 0000000..ab9d026
--- /dev/null
+++ b/src/main/java/com/ann/controller/UsingStaticController.java
@@ -0,0 +1,18 @@
+package com.ann.controller;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/8/1 9:30
+ */
+
+@Configuration
+public class UsingStaticController extends WebMvcConfigurationSupport {
+
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ann/entity/constant/AliasName.java b/src/main/java/com/ann/entity/constant/AliasName.java
new file mode 100644
index 0000000..f1b2d61
--- /dev/null
+++ b/src/main/java/com/ann/entity/constant/AliasName.java
@@ -0,0 +1,78 @@
+package com.ann.entity.constant;
+
+/**
+ * @Description 类型
+ * @Date 2019/6/12
+ * @Created by ljx
+ */
+public class AliasName {
+
+ public static final String USER = "用户字典";
+
+ public static final String DEPARTMENT = "科室字典";
+
+ // 超声报告
+ public static final String ULTRASONIC_REPORT = "57";
+
+ // 病理检查报告单
+ public static final String PATHOLOGY_REPORT = "52";
+
+ // 放射诊断报告单 54
+ public static final String RADIATION_REPORT = "54";
+
+ // 心电图报告单 59
+ public static final String EKG_REPORT = "59";
+
+ // 入院记录
+ public static final String ADMISSION_RECORD = "9";
+
+ // 出院记录
+ public static final String DISCHARGE_RECORD = "113";
+
+ // 转科记录
+ public static final String TRANSFER_RECORD = "114";
+
+ // 取消入院
+ public static final String CANCELLATION_DISCHARGE = "115";
+
+ // 手麻
+ public static final String HANDNUMBNESS_REPORT = "117";
+
+ // ICU报告
+ public static final String ICU_REPORT = "121";
+
+ // 其他类型 目前来说 是手麻系统的其他三个
+ public static final String OTHER = "110";
+
+ // 检查申请单
+ public static final String PARAMETER_EXAMAPPLY = "119";
+
+ // 输血单
+ public static final String BLOODAPPLY_REPORT = "120";
+
+ // PET/CT报告单
+ public static final String PETCT_REPORT = "60";
+
+ // V6护理记录单
+ public static final String NURSING_RECORD_SHEET = "2";
+
+ // 病案首页
+ public static final String MEDICAL_RECORD_HOMEPAGE = "3";
+
+ // 评估护理单
+ public static final String ASSESSMENT_NURSING_LIST = "4";
+
+ // 体温单
+ public static final String THERMOGRAM = "5";
+
+ // 检验申请单
+ //public static final String PARAMETER_EXAMAPPLY = "118";
+
+ // 检验报告
+ public static final String INSPECTION_REPORT = "10";
+
+ // 扫描文件
+ public static final String SCANNING_FILE = "30";
+
+
+}
diff --git a/src/main/java/com/ann/entity/constant/Identification.java b/src/main/java/com/ann/entity/constant/Identification.java
new file mode 100644
index 0000000..f24a76e
--- /dev/null
+++ b/src/main/java/com/ann/entity/constant/Identification.java
@@ -0,0 +1,15 @@
+package com.ann.entity.constant;
+
+/**
+ * @Description 操作
+ * @Date 2019/6/13 16:39
+ * @Created by ljx
+ */
+public class Identification {
+
+ public static final String INSERT = "insert";
+
+ public static final String UPDATE = "update";
+
+ public static final String DELETE = "delete";
+}
diff --git a/src/main/java/com/ann/entity/constant/InterfaceName.java b/src/main/java/com/ann/entity/constant/InterfaceName.java
new file mode 100644
index 0000000..8a2dd3a
--- /dev/null
+++ b/src/main/java/com/ann/entity/constant/InterfaceName.java
@@ -0,0 +1,116 @@
+package com.ann.entity.constant;
+
+/**
+ * @Description 接口名称
+ * @Date 2019/7/10 9:46
+ * @Created by ljx
+ */
+public class InterfaceName {
+
+
+ /**
+ * 用户、科室接口 ReceiveDict
+ */
+ public static final String RECEIVE_DICT = "his系统";
+ /**
+ * V3接口
+ */
+ public static final String HIP_MESSAGE_SERVER = "HIPMessageServer";
+
+ /**
+ * 检查报告参数
+ */
+ public static final String PARAMETER_REPORT = "ExamReportBackRequest";
+
+ /**
+ * 超声
+ */
+ public static final String ULTRASOUND_REPORT = "超声系统";
+ /**
+ * 心电图
+ */
+ public static final String EKG_REPORT = "心电图系统";
+ /**
+ * 病理
+ */
+ public static final String PATHOLOGY_REPORT = "病理系统";
+ /**
+ * 放射
+ */
+ public static final String RADIATION_REPORT = "PACS系统";
+
+ /**
+ * petct
+ */
+ public static final String PET_REPORT = "核医学系统";
+ /**
+ * 入院参数
+ */
+ public static final String PARAMETER_ADMISSION = "InPatientAddRequest";
+ /**
+ * 出院参数
+ */
+ public static final String PARAMETER_DISCHARGE = "PatientOutRequest";
+
+ /**
+ * 转科参数
+ */
+ public static final String PARAMETER_TRANSFER = "InpatientTransferRequest";
+
+ /**
+ * 取消入院
+ */
+ public static final String PARAMETER_CANCELLATION_DISCHARGE = "CalPatientRequest";
+
+
+ /**
+ * 检查申请单
+ */
+ public static final String PARAMETER_EXAMAPPLY = "ExamApplyRequest";
+
+
+ /**
+ * 病案首页
+ */
+ public static final String INP_SUMMARY = "InpSummary";
+
+ /**
+ * 手麻报告
+ */
+ public static final String HANDNUMBNESS_REPORT = "手麻系统";
+
+ /**
+ * 重症ICU报告
+ */
+ public static final String ICU_REPORT = "重症监护归档";
+
+ /**
+ * 输血单
+ */
+ public static final String BLOODAPPLY_REPORT = "输血系统";
+
+ /**
+ * 医生资料 病案首页 病历文书
+ * DoctorData
+ */
+ public static final String DOCTOR_DATA = "医生";
+
+ /**
+ * 护士资料 评估单 体温单 护理单2
+ * NurseData
+ */
+ public static final String NURSE_DATA = "护士";
+
+ /**
+ * lis系统
+ */
+ public static final String INSPECTION_REPORT = "LIS系统";
+ public static final String INSPECTION_REPORT_NAME = "LisSendReportBack";
+
+ /**
+ * 扫描文件
+ * ScanningFile
+ */
+ public static final String SCANNING_FILE = "扫描系统";
+
+}
diff --git a/src/main/java/com/ann/entity/constant/OutParaConstant.java b/src/main/java/com/ann/entity/constant/OutParaConstant.java
new file mode 100644
index 0000000..35a1622
--- /dev/null
+++ b/src/main/java/com/ann/entity/constant/OutParaConstant.java
@@ -0,0 +1,16 @@
+package com.ann.entity.constant;
+
+/**
+ * @Description 除了HL7V3的xml 返回参数
+ * @Date 2019/6/13 21:50
+ * @Created by ljx
+ */
+public class OutParaConstant {
+
+ public static final boolean RESULT_CODE_SUCCESS = true;
+ public static final boolean RESULT_CODE_FILED = false;
+
+ public static final String RESULT_CONTENT_SUCCESS = "成功";
+ public static final String RESULT_CONTENT_FILED = "失败";
+
+}
diff --git a/src/main/java/com/ann/entity/constant/PropertiesPath.java b/src/main/java/com/ann/entity/constant/PropertiesPath.java
new file mode 100644
index 0000000..9954df3
--- /dev/null
+++ b/src/main/java/com/ann/entity/constant/PropertiesPath.java
@@ -0,0 +1,11 @@
+package com.ann.entity.constant;
+
+/**
+ * @Description 需要解析的xml路径
+ * @Date 2019/7/10 16:39
+ * @Created by ljx
+ */
+public class PropertiesPath {
+
+
+}
diff --git a/src/main/java/com/ann/entity/constant/Root.java b/src/main/java/com/ann/entity/constant/Root.java
new file mode 100644
index 0000000..75a611f
--- /dev/null
+++ b/src/main/java/com/ann/entity/constant/Root.java
@@ -0,0 +1,27 @@
+package com.ann.entity.constant;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description
+ * @Date 2019/7/3 9:32
+ * @Created by ljx
+ */
+public class Root {
+
+ /**
+ * 超声报告root
+ */
+ public static final Map reportMap;
+
+ static {
+ reportMap = new HashMap();
+ reportMap.put("patientId", "2.16.156.10011.1.12");
+ reportMap.put("checkReportId", "2.16.156.10011.1.32");
+ reportMap.put("applyId", "2.16.156.10011.1.24");
+ reportMap.put("treatCount", "2.16.156.10011.1.22");
+ }
+
+
+}
diff --git a/src/main/java/com/ann/entity/filing/ArchiveDetail.java b/src/main/java/com/ann/entity/filing/ArchiveDetail.java
new file mode 100644
index 0000000..1c97e6d
--- /dev/null
+++ b/src/main/java/com/ann/entity/filing/ArchiveDetail.java
@@ -0,0 +1,81 @@
+package com.ann.entity.filing;
+
+import lombok.Data;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * @Description 患者清单详情 是 ArchiveMaster患者清单 从属关系
+ * @Date 2019/7/9 10:07
+ * @Created by ljx
+ */
+@Data
+@Entity
+@Table
+public class ArchiveDetail {
+
+ @Id
+ @GenericGenerator(name = "system-uuid", strategy = "uuid2")
+ @GeneratedValue(generator = "system-uuid")
+ private String id;
+
+ private String pdfPath;
+
+ // -----------------------绑定关系
+ @Column(name = "masterid")
+ private String masterID;
+
+ @Column(name = "uploaddatetime")
+ private Date upLoadDateTime;
+
+ @Column(name = "assortid")
+ private String assortID;
+
+ private String source;
+
+ @Column(name = "subassort")
+ private String subAssort;
+
+ private String title;
+
+ private String flag = "0";
+
+ private String sys;
+
+ /**
+ * 扩展字段: 用于进行更新状态、与报告进行匹配
+ * 2019-9-4
+ */
+ private String applyId;
+
+ public ArchiveDetail() {
+ }
+
+ public ArchiveDetail(String masterID, Date upLoadDateTime, String assortID, String source, String applyId) {
+ this.masterID = masterID;
+ this.upLoadDateTime = upLoadDateTime;
+ this.assortID = assortID;
+ this.source = source;
+ this.applyId = applyId;
+ }
+
+ public ArchiveDetail(String masterID, Date upLoadDateTime, String assortID, String source, String applyId, String title,Integer i) {
+ this.masterID = masterID;
+ this.upLoadDateTime = upLoadDateTime;
+ this.assortID = assortID;
+ this.source = source;
+ this.applyId = applyId;
+ this.title = title;
+ }
+
+ public ArchiveDetail(String masterID, Date upLoadDateTime, String assortID, String source, String applyId, String pdfPath) {
+ this.masterID = masterID;
+ this.upLoadDateTime = upLoadDateTime;
+ this.assortID = assortID;
+ this.source = source;
+ this.applyId = applyId;
+ this.pdfPath = pdfPath;
+ }
+}
diff --git a/src/main/java/com/ann/entity/filing/ArchiveDetail1.java b/src/main/java/com/ann/entity/filing/ArchiveDetail1.java
new file mode 100644
index 0000000..8eb659d
--- /dev/null
+++ b/src/main/java/com/ann/entity/filing/ArchiveDetail1.java
@@ -0,0 +1,63 @@
+package com.ann.entity.filing;
+
+import lombok.Data;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * @Description 患者清单详情 是 ArchiveMaster患者清单 从属关系
+ * @Date 2019/7/9 10:07
+ * @Created by ljx
+ */
+@Data
+@Entity
+@Table(name = "archive_detail_20191202")
+public class ArchiveDetail1 {
+
+ @Id
+ @GenericGenerator(name = "system-uuid", strategy = "uuid2")
+ @GeneratedValue(generator = "system-uuid")
+ private String id;
+
+ private String pdfPath;
+
+ // -----------------------绑定关系
+ @Column(name = "masterid")
+ private String masterID;
+
+ @Column(name = "uploaddatetime")
+ private Date upLoadDateTime;
+
+ @Column(name = "assortid")
+ private String assortID;
+
+ private String source;
+
+ @Column(name = "subassort")
+ private String subAssort;
+
+ private String title;
+
+ private String flag = "0";
+
+ private String sys;
+
+ /**
+ * 扩展字段: 用于进行更新状态、与报告进行匹配
+ * 2019-9-4
+ */
+ private String applyId;
+
+ public ArchiveDetail1() {
+ }
+
+ public ArchiveDetail1(String masterID, Date upLoadDateTime, String assortID, String source, String applyId) {
+ this.masterID = masterID;
+ this.upLoadDateTime = upLoadDateTime;
+ this.assortID = assortID;
+ this.source = source;
+ this.applyId = applyId;
+ }
+}
diff --git a/src/main/java/com/ann/entity/filing/MessageSubordinate.java b/src/main/java/com/ann/entity/filing/MessageSubordinate.java
new file mode 100644
index 0000000..dd43b5e
--- /dev/null
+++ b/src/main/java/com/ann/entity/filing/MessageSubordinate.java
@@ -0,0 +1,68 @@
+package com.ann.entity.filing;
+
+import lombok.Data;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @Description 消息从属版本
+ * @Date 2019/7/9 16:33
+ * @Created by ljx
+ */
+@Data
+@Table
+@Entity
+public class MessageSubordinate {
+
+ /**
+ * 消息从属Id
+ */
+ @Id
+ @GenericGenerator(name = "system-uuid", strategy = "uuid2")
+ @GeneratedValue(generator = "system-uuid")
+ private String id;
+
+ /**
+ * 消息Id
+ */
+ private String messageId;
+
+ /**
+ * 患者清单的关键信息
+ */
+ private String patientMain;
+
+ /**
+ * 消息Json
+ */
+ private String contentJson;
+
+ /**
+ * 是否解析 0 未解析 1 解析 2 错误
+ */
+ private Integer status = 0;
+
+ /**
+ * 错误信息
+ */
+ private String remark;
+
+ /**
+ * 2019-8-16
+ * 循环次数
+ */
+ private Integer runs = 0;
+
+ public MessageSubordinate(String messageId, String patientMain, String contentJson) {
+ this.messageId = messageId;
+ this.patientMain = patientMain;
+ this.contentJson = contentJson;
+ }
+
+ public MessageSubordinate() {
+ }
+}
diff --git a/src/main/java/com/ann/entity/filing/Queue.java b/src/main/java/com/ann/entity/filing/Queue.java
new file mode 100644
index 0000000..090afd5
--- /dev/null
+++ b/src/main/java/com/ann/entity/filing/Queue.java
@@ -0,0 +1,24 @@
+package com.ann.entity.filing;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * 对列表
+ *
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/11 21:49
+ */
+@Data
+@Table
+@Entity
+public class Queue {
+
+ @Id
+ private String id;
+
+ private String time;
+}
diff --git a/src/main/java/com/ann/entity/filing/dto/MessageDto.java b/src/main/java/com/ann/entity/filing/dto/MessageDto.java
new file mode 100644
index 0000000..7fc8962
--- /dev/null
+++ b/src/main/java/com/ann/entity/filing/dto/MessageDto.java
@@ -0,0 +1,63 @@
+package com.ann.entity.filing.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Description
+ * @Date 2019/7/9 16:50
+ * @Created by ljx
+ */
+@Data
+public class MessageDto {
+
+ private String entity;
+
+ private T object;
+
+ private Date xmlCreateTime;
+
+ private String type;
+
+ private String inpNo;
+
+ private String visitId;
+
+ private String propertiesPath;
+
+ private String reportAddress;
+
+ // 2019-7-26 新增报告单号 考虑会传多次报告 但地址一样
+ private String checkReportId;
+
+ /**
+ * 如果是入院信息 那么就会有新增 修改
+ */
+ private String addFlag;
+
+ /**
+ * 扩展字段: 用于进行更新状态、与报告进行匹配
+ * 2019-9-4
+ */
+ private String applyId;
+
+ // 2019-9-16 新增来源
+ private String source;
+
+ // 2019-10-21 新增排序时间
+ private String captionDateTime;
+
+ // 2019-11-28 新增三级标题
+ private String detailType;
+
+ public MessageDto() {
+ }
+
+ public MessageDto(String entity, T object, String type, String propertiesPath) {
+ this.entity = entity;
+ this.object = object;
+ this.type = type;
+ this.propertiesPath = propertiesPath;
+ }
+}
diff --git a/src/main/java/com/ann/entity/filing/dto/PatientMainDto.java b/src/main/java/com/ann/entity/filing/dto/PatientMainDto.java
new file mode 100644
index 0000000..d5a91ce
--- /dev/null
+++ b/src/main/java/com/ann/entity/filing/dto/PatientMainDto.java
@@ -0,0 +1,45 @@
+package com.ann.entity.filing.dto;
+
+import lombok.Data;
+
+/**
+ * @Description 患者清单的关键信息
+ * @Date 2019/7/9 16:36
+ * @Created by ljx
+ */
+@Data
+public class PatientMainDto {
+
+ /**
+ * 住院号
+ */
+ private String inpNo;
+
+ /**
+ * 就诊次数
+ */
+ private String visitId;
+
+ /**
+ * 拓展字段1
+ */
+ private String extendedField1;
+
+ /**
+ * 拓展字段2
+ */
+ private String extendedField2;
+
+ /**
+ * 拓展字段3
+ */
+ private String extendedField3;
+
+ public PatientMainDto(String inpNo, String visitId) {
+ this.inpNo = inpNo;
+ this.visitId = visitId;
+ }
+
+ public PatientMainDto() {
+ }
+}
diff --git a/src/main/java/com/ann/entity/interfaceEntity/ArchiveMaster.java b/src/main/java/com/ann/entity/interfaceEntity/ArchiveMaster.java
new file mode 100644
index 0000000..30631df
--- /dev/null
+++ b/src/main/java/com/ann/entity/interfaceEntity/ArchiveMaster.java
@@ -0,0 +1,157 @@
+package com.ann.entity.interfaceEntity;
+
+import lombok.Data;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * @Description 患者清单
+ * @Date 2019/7/9 9:49
+ * @Created by ljx
+ */
+
+@Table
+@Entity
+@Data
+public class ArchiveMaster {
+ /**
+ * 主键
+ */
+ @Id
+ @GenericGenerator(name = "system-uuid", strategy = "uuid2")
+ @GeneratedValue(generator = "system-uuid")
+ private String id;
+
+ /**
+ * 患者id
+ */
+ private String patientId;
+
+ /**
+ * 住院号
+ */
+ private String inpNo;
+
+ /**
+ * 住院次数
+ */
+ private String visitId;
+
+ /**
+ * 姓名
+ */
+ private String name;
+
+ /**
+ * 性别
+ */
+ private String sex;
+
+ /**
+ * 出院科室
+ */
+ private String deptName;
+
+ /**
+ * 出院日期
+ */
+ private Date dischargeDateTime;
+
+ /**
+ * 归档状态 没出院的填在院,出院填未归档
+ */
+ @Column(name = "archivestate")
+ private String archiveState = "在院";
+
+ /**
+ * 入院日期
+ */
+ private Date admissionDateTime;
+
+ /**
+ * 入院科室
+ */
+ private String deptAdmissionTo;
+
+ /**
+ *
+ */
+ private String checkDoctor;
+
+ /**
+ *
+ */
+ private Date checkDatetime;
+
+
+ /**
+ *
+ */
+ private Date checkedDoctor;
+
+
+ /**
+ *
+ */
+ private Date checkedDatetime;
+
+ /**
+ *
+ */
+ @Column(name = "lockinfo")
+ private String LockInfo;
+
+ /**
+ * 主管医生
+ */
+ private String doctorInCharge;
+
+ /**
+ * 身份证号
+ */
+ private String idNo;
+
+ /**
+ * 离院方式
+ */
+ private String dischargeDisposition;
+
+ private String deptCodeLend;
+
+
+ /**
+ * 是否有效 默认0 为有效 1为作废
+ * 2019-7-30
+ */
+ private int isValid;
+
+ /**
+ * 转科
+ * 2019-7-30
+ */
+ private String transferDept;
+
+ /*
+ * 2019-12-27
+ * 新增两个提交
+ * */
+ @Column(name = "emr_nure_cmt")
+ private String emrNurseCmt;
+
+ private String emrDoctorCmt;
+
+ /**
+ * 2020-01-02
+ * 发送时间
+ * */
+ private String sendTime;
+
+ /**
+ * 2020-03-03
+ * 初审人
+ * */
+ private String firstInstance;
+
+}
diff --git a/src/main/java/com/ann/entity/interfaceEntity/MedicalRecordHomepage.java b/src/main/java/com/ann/entity/interfaceEntity/MedicalRecordHomepage.java
new file mode 100644
index 0000000..2d34067
--- /dev/null
+++ b/src/main/java/com/ann/entity/interfaceEntity/MedicalRecordHomepage.java
@@ -0,0 +1,26 @@
+package com.ann.entity.interfaceEntity;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 病案首页
+ *
+ * @Author: LeiJiaXin
+ * @Date: 2019/8/6 9:06
+ */
+@Data
+public class MedicalRecordHomepage {
+
+ /* private CommonTable commonTable;
+
+ private CommonTable1 commonTable1;
+
+ *//**
+ * 手术节点
+ * *//*
+ private List OperDetails;
+
+ private List DiagDetails;*/
+}
diff --git a/src/main/java/com/ann/entity/interfaceEntity/MessageLog.java b/src/main/java/com/ann/entity/interfaceEntity/MessageLog.java
new file mode 100644
index 0000000..aa2f2ae
--- /dev/null
+++ b/src/main/java/com/ann/entity/interfaceEntity/MessageLog.java
@@ -0,0 +1,107 @@
+package com.ann.entity.interfaceEntity;
+
+import lombok.Data;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * @Description 消息表
+ * @Date 2019/6/17 10:27
+ * @Created by ljx
+ */
+
+@Data
+@Table
+@Entity
+public class MessageLog {
+
+ @Id
+ @GenericGenerator(name = "system-uuid", strategy = "uuid2")
+ @GeneratedValue(generator = "system-uuid")
+ private String id;
+
+ @Lob
+ /**
+ * 输入内容
+ * */
+ private String inputContent;
+
+ /**
+ * 输出内容
+ */
+ @Lob
+ private String outContent;
+
+ /**
+ * 类型 与 字典表匹配
+ */
+ private String type;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 消息结果 0 未成功 1是成功
+ */
+ private Integer result;
+
+ /**
+ * 返回json
+ */
+ @Lob
+ private String outJson;
+
+ /**
+ * 接口名称
+ */
+ private String interfaceName;
+
+ /**
+ * xml创建时间
+ */
+ private Date xmlCreateTime;
+
+ /**
+ * 执行时间
+ */
+ private Long executionTime;
+
+ /**
+ * 结束时间
+ */
+ private Date endTime;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * xml执行时间
+ */
+ private Long xmlExecutionTime;
+
+ public MessageLog(String inputContent, String interfaceName, Date createTime) {
+ this.inputContent = inputContent;
+ this.interfaceName = interfaceName;
+ this.createTime = createTime;
+ }
+
+ public MessageLog() {
+
+ }
+
+ public void setValue(String outContent, Integer result, String outJson, Date xmlCreateTime, Long executionTime, Date endTime, String type) {
+ this.outContent = outContent;
+ this.result = result;
+ this.outJson = outJson;
+ this.xmlCreateTime = xmlCreateTime;
+ this.executionTime = executionTime;
+ this.endTime = endTime;
+ this.type = type;
+ }
+}
diff --git a/src/main/java/com/ann/entity/interfaceEntity/ScanningFile.java b/src/main/java/com/ann/entity/interfaceEntity/ScanningFile.java
new file mode 100644
index 0000000..83f5063
--- /dev/null
+++ b/src/main/java/com/ann/entity/interfaceEntity/ScanningFile.java
@@ -0,0 +1,29 @@
+package com.ann.entity.interfaceEntity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/10/10 9:46
+ */
+@Data
+public class ScanningFile {
+
+ private Date xmlCreateTime;
+
+ private String inpNo;
+
+ private String visitId;
+
+ private String fileName;
+
+ private String path;
+
+ private String applyId;
+
+ private String number;
+
+ private String remark;
+}
diff --git a/src/main/java/com/ann/entity/interfaceEntity/UltrasonicReport.java b/src/main/java/com/ann/entity/interfaceEntity/UltrasonicReport.java
new file mode 100644
index 0000000..6a021fa
--- /dev/null
+++ b/src/main/java/com/ann/entity/interfaceEntity/UltrasonicReport.java
@@ -0,0 +1,97 @@
+package com.ann.entity.interfaceEntity;
+
+import lombok.Data;
+
+/**
+ * @Description 超声报告
+ * @Date 2019/6/24 21:58
+ * @Created by ljx
+ */
+
+@Data
+public class UltrasonicReport {
+
+ /*
+ * 文档流水号
+ * */
+ private String id;
+
+ /*
+ * 住院号标识号
+ * */
+ private String inpNo;
+
+ /*
+ * 检查报告单号
+ * */
+ private String checkReportId;
+
+ /**
+ * 电子申请单号
+ */
+ private String applyId;
+
+ /**
+ * 就诊次数
+ */
+ private String visitId;
+
+ /**
+ * 患者姓名
+ */
+ private String name;
+
+
+ /*检查报告医师(文档创作者)*/
+
+ /**
+ * 检查报告日期
+ */
+ private String authorReportTime;
+
+
+ /**
+ * 医师标识
+ */
+ private String assignedAuthorId;
+
+ /**
+ * 医师姓名
+ */
+ private String assignedPersonName;
+
+
+ /* 审核医师签名 */
+
+ /**
+ * 审核医师Id
+ */
+ private String examineId;
+
+ /**
+ * 审核医师姓名
+ */
+ private String examineAssignedPersonName;
+
+ /**
+ * 检查报告地址
+ */
+ private String reportAddress;
+
+ @Override
+ public String toString() {
+ return "UltrasonicReport{" +
+ "id='" + id + '\'' +
+ ", inpNo='" + inpNo + '\'' +
+ ", checkReportId='" + checkReportId + '\'' +
+ ", applyId='" + applyId + '\'' +
+ ", visitId='" + visitId + '\'' +
+ ", name='" + name + '\'' +
+ ", authorReportTime='" + authorReportTime + '\'' +
+ ", assignedAuthorId='" + assignedAuthorId + '\'' +
+ ", assignedPersonName='" + assignedPersonName + '\'' +
+ ", examineId='" + examineId + '\'' +
+ ", examineAssignedPersonName='" + examineAssignedPersonName + '\'' +
+ '}';
+ }
+}
diff --git a/src/main/java/com/ann/entity/interfaceEntity/dto/ArchiveMasterDto.java b/src/main/java/com/ann/entity/interfaceEntity/dto/ArchiveMasterDto.java
new file mode 100644
index 0000000..f5df23b
--- /dev/null
+++ b/src/main/java/com/ann/entity/interfaceEntity/dto/ArchiveMasterDto.java
@@ -0,0 +1,130 @@
+package com.ann.entity.interfaceEntity.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Description 患者清单
+ * @Date 2019/7/9 9:49
+ * @Created by ljx
+ */
+
+@Data
+public class ArchiveMasterDto {
+
+ /**
+ * 文档Id
+ */
+ private String id;
+
+ private String xmlCreateTime;
+
+ /**
+ * 患者id
+ */
+ private String patientId;
+
+ /**
+ * 住院号
+ */
+ private String inpNo;
+
+ /**
+ * 住院次数
+ */
+ private String visitId;
+
+ /**
+ * 姓名
+ */
+ private String name;
+
+ /**
+ * 性别
+ */
+ private String sex;
+
+ /**
+ * 出院科室
+ */
+ private String deptName;
+
+ /**
+ * 出院日期
+ */
+ private Date dischargeDateTime;
+
+ /**
+ * 归档状态
+ */
+ private String archiveState;
+
+ /**
+ * 入院日期
+ */
+ private Date admissionDateTime;
+
+ /**
+ * 入院科室
+ */
+ private String deptAdmissionTo;
+
+ /**
+ * 入院科室名称
+ */
+ private String deptAdmissionToName;
+
+ /**
+ *
+ */
+ private String checkDoctor;
+
+ /**
+ *
+ */
+ private Date checkDatetime;
+
+
+ /**
+ *
+ */
+ private Date checkedDoctor;
+
+
+ /**
+ *
+ */
+ private Date checkedDatetime;
+
+ /**
+ *
+ */
+ private String LockInfo;
+
+ /**
+ * 主管医生
+ */
+ private String doctorInCharge;
+
+ /**
+ * 主管医生名称
+ */
+ private String doctorInChargeName;
+
+ /**
+ * 身份证号
+ */
+ private String idNo;
+
+ /**
+ * 离院方式
+ */
+ private String dischargeDisposition;
+
+ /**
+ * 归档状态
+ */
+ private String deptCodeLend;
+
+}
diff --git a/src/main/java/com/ann/entity/other/QuartzBean.java b/src/main/java/com/ann/entity/other/QuartzBean.java
new file mode 100644
index 0000000..df06caf
--- /dev/null
+++ b/src/main/java/com/ann/entity/other/QuartzBean.java
@@ -0,0 +1,36 @@
+package com.ann.entity.other;
+
+import lombok.Data;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/13 16:53
+ */
+@Data
+public class QuartzBean {
+
+ /**
+ * 任务id
+ */
+ private String id;
+
+ /**
+ * 任务名称
+ */
+ private String jobName;
+
+ /**
+ * 任务执行类
+ */
+ private String jobClass;
+
+ /**
+ * 任务状态 启动还是暂停
+ */
+ private Integer status;
+
+ /**
+ * 任务运行时间表达式
+ */
+ private String cronExpression;
+}
diff --git a/src/main/java/com/ann/job/ScheduledJob.java b/src/main/java/com/ann/job/ScheduledJob.java
new file mode 100644
index 0000000..5015a13
--- /dev/null
+++ b/src/main/java/com/ann/job/ScheduledJob.java
@@ -0,0 +1,51 @@
+package com.ann.job;
+
+import com.ann.entity.filing.MessageSubordinate;
+import com.ann.service.MessageSubordinateService;
+import com.ann.service.impl.QueueService;
+import com.ann.utils.QuartzUtils;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.Scheduler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalTime;
+import java.util.List;
+
+/**
+ * 取从属表未解析的数据
+ *
+ * @Author: LeiJiaXin
+ * @Date: 2019/8/16 10:11
+ */
+public class ScheduledJob implements Job {
+
+ static final Logger logger = LoggerFactory.getLogger(ScheduledJob.class);
+
+ @Autowired
+ Scheduler scheduler;
+
+ @Autowired
+ MessageSubordinateService messageSubordinateService;
+
+ @Autowired
+ QueueService queueService;
+
+ @Override
+ public void execute(JobExecutionContext context) {
+ try {
+ //System.out.println("动态的定时任务1执行时间:" + LocalTime.now());
+ QuartzUtils.pauseScheduleJob(scheduler, "group1", "job1");
+ List all = messageSubordinateService.findAllByStatus(0);
+ queueService.doSomething(all);
+ } catch (Exception e) {
+ // 如果报错-- 捕捉异常 继续执行
+ logger.error("出错咯!错误信息为{},以及错误行数为:{}" ,e,e.getStackTrace()[0]);
+ }
+ QuartzUtils.resumeScheduleJob(scheduler, "group1", "job1");
+ }
+}
+
diff --git a/src/main/java/com/ann/job/ScheduledJob2.java b/src/main/java/com/ann/job/ScheduledJob2.java
new file mode 100644
index 0000000..1d58047
--- /dev/null
+++ b/src/main/java/com/ann/job/ScheduledJob2.java
@@ -0,0 +1,50 @@
+package com.ann.job;
+
+import com.ann.entity.filing.MessageSubordinate;
+import com.ann.service.MessageSubordinateService;
+import com.ann.service.impl.QueueService;
+import com.ann.utils.QuartzUtils;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.Scheduler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalTime;
+import java.util.List;
+
+/**
+ * 取从属表报错的消息 次数小于6
+ *
+ * @Author: LeiJiaXin
+ * @Date: 2019/8/16 10:12
+ */
+public class ScheduledJob2 implements Job {
+
+ static final Logger logger = LoggerFactory.getLogger(ScheduledJob2.class);
+
+ @Autowired
+ Scheduler scheduler;
+
+ @Autowired
+ MessageSubordinateService messageSubordinateService;
+
+ @Autowired
+ QueueService queueService;
+
+ @Override
+ public void execute(JobExecutionContext context) throws JobExecutionException {
+ try {
+ //System.out.println("动态的定时任务2执行时间:" + LocalTime.now());
+ QuartzUtils.pauseScheduleJob(scheduler, "group1", "job2");
+ List all = messageSubordinateService.findAllMessageSubordinateByError();
+ queueService.doSomethingByError(all);
+ } catch (Exception e) {
+ // 如果报错-- 捕捉异常 继续执行
+ logger.error("出错咯!错误信息为{},以及错误行数为:{}" ,e,e.getStackTrace()[0]);
+ }
+ QuartzUtils.resumeScheduleJob(scheduler, "group1", "job2");
+ }
+}
diff --git a/src/main/java/com/ann/job/ScheduledJob3.java b/src/main/java/com/ann/job/ScheduledJob3.java
new file mode 100644
index 0000000..8512301
--- /dev/null
+++ b/src/main/java/com/ann/job/ScheduledJob3.java
@@ -0,0 +1,52 @@
+package com.ann.job;
+
+import com.ann.entity.filing.MessageSubordinate;
+import com.ann.entity.interfaceEntity.ArchiveMaster;
+import com.ann.service.ArchiveMasterService;
+import com.ann.service.MessageSubordinateService;
+import com.ann.service.impl.GenerateService;
+import com.ann.service.impl.QueueService;
+import com.ann.utils.QuartzUtils;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.Scheduler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.time.LocalTime;
+import java.util.List;
+
+/**
+ * 取从属表报错的消息 次数小于6
+ *
+ * @Author: LeiJiaXin
+ * @Date: 2019/8/16 10:12
+ */
+public class ScheduledJob3 implements Job {
+
+ static final Logger logger = LoggerFactory.getLogger(ScheduledJob3.class);
+
+ @Autowired
+ Scheduler scheduler;
+
+ @Autowired
+ ArchiveMasterService archiveMasterService;
+
+ @Autowired
+ GenerateService generateService;
+
+ @Override
+ public void execute(JobExecutionContext context) throws JobExecutionException {
+ try {
+ //System.out.println("动态的定时任务3执行时间:" + LocalTime.now());
+ QuartzUtils.pauseScheduleJob(scheduler, "group1", "job3");
+ generateService.doSomethingBySendTime();
+ } catch (Exception e) {
+ // 如果报错-- 捕捉异常 继续执行
+ logger.error("出错咯!错误信息为{},以及错误行数为:{}" ,e,e.getStackTrace()[0]);
+ }
+ QuartzUtils.resumeScheduleJob(scheduler, "group1", "job3");
+ }
+}
diff --git a/src/main/java/com/ann/job/SchedulerAllJob.java b/src/main/java/com/ann/job/SchedulerAllJob.java
new file mode 100644
index 0000000..a302dff
--- /dev/null
+++ b/src/main/java/com/ann/job/SchedulerAllJob.java
@@ -0,0 +1,85 @@
+package com.ann.job;
+
+import org.quartz.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/8/16 10:08
+ */
+@Component
+public class SchedulerAllJob {
+
+ @Autowired
+ private SchedulerFactoryBean schedulerFactoryBean;
+ /*
+ * 此处可以注入数据库操作,查询出所有的任务配置
+ */
+
+ /**
+ * 该方法用来启动所有的定时任务
+ *
+ * @throws SchedulerException
+ */
+ public void scheduleJobs() throws SchedulerException {
+ Scheduler scheduler = schedulerFactoryBean.getScheduler();
+ /**
+ *
+ */
+ scheduleJob1(scheduler);
+ scheduleJob2(scheduler);
+ scheduleJob3(scheduler);
+ }
+
+ /**
+ * 配置Job1
+ * 此处的任务可以配置可以放到properties或者是放到数据库中
+ * 如果此时需要做到动态的定时任务,请参考:http://blog.csdn.net/liuchuanhong1/article/details/60873295
+ * 博客中的ScheduleRefreshDatabase类
+ *
+ * @param scheduler
+ * @throws SchedulerException
+ */
+ private void scheduleJob1(Scheduler scheduler) throws SchedulerException {
+ /*
+ * 此处可以先通过任务名查询数据库,如果数据库中存在该任务,则按照ScheduleRefreshDatabase类中的方法,更新任务的配置以及触发器
+ * 如果此时数据库中没有查询到该任务,则按照下面的步骤新建一个任务,并配置初始化的参数,并将配置存到数据库中
+ */
+ JobDetail jobDetail = JobBuilder.newJob(ScheduledJob.class).withIdentity("job1", "group1").build();
+ // 每5s执行一次
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/15 * * * * ?");
+ CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("job1", "group1").withSchedule(scheduleBuilder).build();
+ scheduler.scheduleJob(jobDetail, cronTrigger);
+ }
+
+ /**
+ * 配置Job2
+ *
+ * @param scheduler
+ * @throws SchedulerException
+ */
+ private void scheduleJob2(Scheduler scheduler) throws SchedulerException {
+ JobDetail jobDetail = JobBuilder.newJob(ScheduledJob2.class).withIdentity("job2", "group1").build();
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0 0/10 * 1/1 * ? *");
+ // 每10分钟执行一次
+ CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("job2", "group1").withSchedule(scheduleBuilder).build();
+ scheduler.scheduleJob(jobDetail, cronTrigger);
+ }
+
+ /**
+ * 配置Job3
+ *
+ * @param scheduler
+ * @throws SchedulerException
+ */
+ private void scheduleJob3(Scheduler scheduler) throws SchedulerException {
+ JobDetail jobDetail = JobBuilder.newJob(ScheduledJob3.class).withIdentity("job3", "group1").build();
+ // 0 1-2 * * * ?
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/15 * * * * ?");
+ // 每1分钟执行一次
+ CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("job3", "group1").withSchedule(scheduleBuilder).build();
+ scheduler.scheduleJob(jobDetail, cronTrigger);
+ }
+}
diff --git a/src/main/java/com/ann/job/config/QuartzConfig.java b/src/main/java/com/ann/job/config/QuartzConfig.java
new file mode 100644
index 0000000..4af1c58
--- /dev/null
+++ b/src/main/java/com/ann/job/config/QuartzConfig.java
@@ -0,0 +1,28 @@
+package com.ann.job.config;
+
+/**
+ * 定时任务
+ *
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/13 17:03
+ */
+//@Configuration
+public class QuartzConfig {
+
+// @Bean
+// public JobDetail uploadTaskDetail() {
+// // 创建工作
+// return JobBuilder.newJob(MyTask.class).withIdentity("MyTask").storeDurably().build();
+// }
+//
+// @Bean
+// public Trigger uploadTaskTrigger() {
+// //TODO 这里设定执行方式
+// CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("*/10 * * * * ?");
+// // 返回任务触发器
+// return TriggerBuilder.newTrigger().forJob(uploadTaskDetail())
+// .withIdentity("MyTask")
+// .withSchedule(scheduleBuilder)
+// .build();
+// }
+}
diff --git a/src/main/java/com/ann/job/obsolete/MyTask.java b/src/main/java/com/ann/job/obsolete/MyTask.java
new file mode 100644
index 0000000..a9a1112
--- /dev/null
+++ b/src/main/java/com/ann/job/obsolete/MyTask.java
@@ -0,0 +1,45 @@
+package com.ann.job.obsolete;
+
+import com.ann.service.MessageSubordinateService;
+import com.ann.service.impl.QueueService;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.quartz.Scheduler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/13 16:55
+ */
+public class MyTask extends QuartzJobBean {
+
+ static final Logger logger = LoggerFactory.getLogger(MyTask.class);
+
+ //验证是否成功可以注入service 之前在ssm当中需要额外进行配置
+ @Autowired
+ MessageSubordinateService messageSubordinateService;
+ @Autowired
+ QueueService queueService;
+
+ //注入任务调度
+ @Autowired
+ private Scheduler scheduler;
+
+ @Override
+ protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+ /* try {
+ System.out.println("动态的定时任务执行时间:"+ LocalTime.now());
+ // QuartzUtils.pauseScheduleJob (scheduler,"MyTask");
+ List all = messageSubordinateService.findAllByStatus(0);
+ queueService.doSomething(all);
+ } catch (Exception e) {
+ // 如果报错-- 捕捉异常 继续执行
+ logger.error("出错咯!错误信息:" + e);
+ }
+ // QuartzUtils.resumeScheduleJob(scheduler,"MyTask");*/
+ }
+
+}
diff --git a/src/main/java/com/ann/job/obsolete/QuartzConfig1.java b/src/main/java/com/ann/job/obsolete/QuartzConfig1.java
new file mode 100644
index 0000000..6fba3dc
--- /dev/null
+++ b/src/main/java/com/ann/job/obsolete/QuartzConfig1.java
@@ -0,0 +1,25 @@
+package com.ann.job.obsolete;
+
+import com.ann.job.SchedulerAllJob;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+
+/**
+ * 定时任务
+ *
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/13 17:03
+ */
+@Component
+public class QuartzConfig1 implements CommandLineRunner {
+
+ @Autowired
+ public SchedulerAllJob scheduleJobs;
+
+ @Override
+ public void run(String... args) throws Exception {
+ scheduleJobs.scheduleJobs();
+ System.out.println(">>>>>>>>>>>>>>>定时任务开始执行<<<<<<<<<<<<<");
+ }
+}
diff --git a/src/main/java/com/ann/repository/ArchiveDetail1Repository.java b/src/main/java/com/ann/repository/ArchiveDetail1Repository.java
new file mode 100644
index 0000000..a725c24
--- /dev/null
+++ b/src/main/java/com/ann/repository/ArchiveDetail1Repository.java
@@ -0,0 +1,27 @@
+package com.ann.repository;
+
+import com.ann.entity.filing.ArchiveDetail;
+import com.ann.entity.filing.ArchiveDetail1;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/12 9:10
+ */
+@Repository
+public interface ArchiveDetail1Repository extends JpaRepository {
+
+ // or Source = 'DoctorData' or AssortID = '117' or AssortID = '10' or AssortID = '60' or AssortID = '57' or AssortID = '52' or AssortID = '54' or AssortID = '59'
+ @Query(nativeQuery = true, value = "select * from archive_detail o where o.MasterID in (select id from archive_master m where m.dept_admission_to = '1040100'\n" +
+ "and m.admission_date_time < '2019-11-27 00:00:00.000' )")
+ public List findAllHaha();
+
+ @Query("select count (o) from ArchiveDetail o where o.masterID = ?1 and o.assortID = ?2 and o.source=?3 and (o.applyId = ?4 and o.applyId is not null) ")
+ Integer countByMasterIDAndAssortIDAndSourceAndApplyId(String masterId, String AssortID, String source, String applyId);
+
+ public ArchiveDetail findByMasterIDAndAssortIDAndSourceAndApplyId(String masterId, String AssortID, String source, String applyId);
+}
diff --git a/src/main/java/com/ann/repository/ArchiveDetailRepository.java b/src/main/java/com/ann/repository/ArchiveDetailRepository.java
new file mode 100644
index 0000000..dde485d
--- /dev/null
+++ b/src/main/java/com/ann/repository/ArchiveDetailRepository.java
@@ -0,0 +1,47 @@
+package com.ann.repository;
+
+import com.ann.entity.filing.ArchiveDetail;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/12 9:10
+ */
+@Repository
+public interface ArchiveDetailRepository extends JpaRepository {
+
+ // or Source = 'DoctorData' or AssortID = '117' or AssortID = '10' or AssortID = '60' or AssortID = '57' or AssortID = '52' or AssortID = '54' or AssortID = '59'
+ @Query("select o from ArchiveDetail o ")
+ public List findAllHaha();
+
+ @Query("select count (o) from ArchiveDetail o where o.masterID = ?1 and o.assortID = ?2 and o.source=?3 and (o.applyId = ?4 and o.applyId is not null) and o.flag = 0")
+ Integer countByMasterIDAndAssortIDAndSourceAndApplyId(String masterId, String AssortID, String source, String applyId);
+
+
+ public ArchiveDetail findByMasterIDAndAssortIDAndSourceAndApplyIdAndFlag(String masterId, String AssortID, String source, String applyId,String flag);
+
+ @Query(value = "SELECT stuff(" +
+ " (SELECT ',' + CONVERT(VARCHAR,a.assort_name) " +
+ " FROM zd_assort a WHERE a.assort_id in ?1 " +
+ " and NOT EXISTS(SELECT id FROM archive_detail d WHERE a.assort_id = d.AssortID and d.MasterID = ?2 ) " +
+ " FOR XML PATH ('') " +
+ " ),1,1,'') ", nativeQuery = true)
+ String getTypeNotExits(List type, String masterId);
+
+ @Query(value = "SELECT stuff(" +
+ " (SELECT ',' + CONVERT(VARCHAR,a.assort_name) " +
+ " FROM zd_assort a WHERE a.assort_id in ?1 " +
+ " and NOT EXISTS(SELECT id FROM archive_detail d WHERE a.assort_id = d.AssortID and d.MasterID = ?2 ) " +
+ " FOR XML PATH ('') " +
+ " ),1,1,'') ", nativeQuery = true)
+ String checkExamApply(String masterId);
+
+ @Query(value = " select * from archive_detail o where o.MasterID in (select m.ID from archive_master m where " +
+ " m.dept_name in(select code from emr_dictionary where name like ?1 ) and m.admission_Date_Time <= ?2 ) " +
+ " order by masterid,AssortID ",nativeQuery = true)
+ public List findArchiveDetail(String deptName,String admissionDateTime);
+}
diff --git a/src/main/java/com/ann/repository/ArchiveMasterRepository.java b/src/main/java/com/ann/repository/ArchiveMasterRepository.java
new file mode 100644
index 0000000..c344ab3
--- /dev/null
+++ b/src/main/java/com/ann/repository/ArchiveMasterRepository.java
@@ -0,0 +1,37 @@
+package com.ann.repository;
+
+import com.ann.entity.interfaceEntity.ArchiveMaster;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @Author: LeiJiaXin
+ * @Date: 2019/7/11 20:55
+ */
+@Repository
+public interface ArchiveMasterRepository extends JpaRepository {
+
+ public ArchiveMaster findByInpNoAndVisitIdAndIsValid(String inpNo, String visitId, Integer isValid);
+
+
+ @Query(value = "select o from ArchiveMaster o where (o.archiveState = '初审' or o.archiveState = '已归档') and o.sendTime is null ")
+ public List findArchiveMasterBySendTime();
+
+ @Transactional
+ @Modifying
+ @Query(value = "update ArchiveMaster o set o.sendTime = ?1 where (o.archiveState = '初审' or o.archiveState = '已归档') and o.id = ?2 and o.isValid = 0 ")
+ public Integer updateSendTime(String nowDate,String id);
+
+ @Transactional
+ @Modifying
+ @Query(value = "update ArchiveMaster o set o.sendTime = null where o.archiveState = '复审退回' and o.id = ?1 and o.isValid = 0 ")
+ public Integer updateSendTimeBySendBack(String id);
+
+ @Query(value = "select o from ArchiveMaster o where o.archiveState = '复审退回' and o.sendTime is not null ")
+ List