From c695e780f5876b15c3a5f9da138772badcdea559 Mon Sep 17 00:00:00 2001 From: cyh Date: Fri, 26 Jan 2024 10:35:35 +0800 Subject: [PATCH] =?UTF-8?q?BOM=20=E5=BC=82=E6=AD=A5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Message_zh_CN.properties | 6 +- .../connor/chint/sap2/util/BomUtilWh$1.class | Bin 618 -> 618 bytes .../connor/chint/sap2/util/BomUtilWh$2.class | Bin 1138 -> 1138 bytes .../connor/chint/sap2/util/BomUtilWh.class | Bin 62318 -> 64478 bytes .../chint/yunpi/command/BomSapWhBjOp.class | Bin 12573 -> 14882 bytes .../yunpi/command/BomSendSapController.class | Bin 20927 -> 22150 bytes com.connor.chint.wuhan/plugin.xml | 698 ++++++++-------- .../createbomdifference/ExtractDiffComd.java | 13 - .../Message_zh_CN.properties | 6 +- .../com/connor/chint/sap2/util/BomUtilWh.java | 50 +- .../chint/yunpi/command/BomSapWhBjOp.java | 435 +++++----- .../yunpi/command/BomSendSapController.java | 743 +++++++++--------- .../chint/yunpi/command/BomSendSapOp.java | 44 +- 13 files changed, 1039 insertions(+), 956 deletions(-) diff --git a/com.connor.chint.wuhan/bin/com/chint/plm/createbomdifference/Message_zh_CN.properties b/com.connor.chint.wuhan/bin/com/chint/plm/createbomdifference/Message_zh_CN.properties index e1b09a2..b97fb23 100644 --- a/com.connor.chint.wuhan/bin/com/chint/plm/createbomdifference/Message_zh_CN.properties +++ b/com.connor.chint.wuhan/bin/com/chint/plm/createbomdifference/Message_zh_CN.properties @@ -1,7 +1,3 @@ ERROR_NOT_CHANGE=\u8BF7\u9009\u62E9\u66F4\u6539\u901A\u77E5\u5355\u5BF9\u8C61 -<<<<<<< HEAD ERROR_NO_CHANGE=\u672A\u627E\u5230\u53D8\u66F4\u524D\u540E\u5BF9\u8C61,\u65E0\u6CD5\u63D0\u53D6\u5DEE\u5F02\u9879\uFF01 -SUCC_CHANGE=\u63D0\u53D6\u5B8C\u6210 -======= -ERROR_NO_CHANGE=\u672A\u627E\u5230\u53D8\u66F4\u524D\u540E\u5BF9\u8C61,\u65E0\u6CD5\u63D0\u53D6\u5DEE\u5F02\u9879\uFF01 ->>>>>>> 65c5903c8f3927b85b3c68d928802214a146ec48 +SUCC_CHANGE=\u63D0\u53D6\u5B8C\u6210 \ No newline at end of file diff --git a/com.connor.chint.wuhan/bin/com/connor/chint/sap2/util/BomUtilWh$1.class b/com.connor.chint.wuhan/bin/com/connor/chint/sap2/util/BomUtilWh$1.class index 3d1eed23f2012d8a75bceffa274d0c91f29dda5c..d06ae7274eabed64c29eee519e8e7893f1130d12 100644 GIT binary patch delta 13 UcmaFG@``1HHWOp=WF00u03z}P9RL6T delta 13 UcmaFG@``1HHWQ=&WF00u03wbA2><{9 diff --git a/com.connor.chint.wuhan/bin/com/connor/chint/sap2/util/BomUtilWh$2.class b/com.connor.chint.wuhan/bin/com/connor/chint/sap2/util/BomUtilWh$2.class index 77c14af029f154ceed1aa714cc1358f169e39910..ce2c9867cd558547279c66697e671592e71cc80c 100644 GIT binary patch delta 19 bcmeyw@rh%@0%pdP$qSjC88aq7W$pz4PpSu) delta 19 bcmeyw@rh%@0%pd5$qSjC8AB#NW$pz4PHG2m diff --git a/com.connor.chint.wuhan/bin/com/connor/chint/sap2/util/BomUtilWh.class b/com.connor.chint.wuhan/bin/com/connor/chint/sap2/util/BomUtilWh.class index 4adb4a23c357fcc9ea8de696c2e391f81dbe2dd5..94f7f418e0f62c5d4ffb7e586eb60f13cf87358f 100644 GIT binary patch literal 64478 zcmeFa2Vj&%`aeGH-Fe~4uIqOzjSKH87UfXzZ zc}-K5$pUz*vb?c;Zh1r1oW=^yd^L6ROOC8DS%|Y&s%smn>Kl_VjJl-a113x^oik?2 zq&cNi=9G+{I%n*-(g~v{mL#QD)Kykx&n<7PSWw%vcy3jF_L7>#4OO+3_)cR}L(E-$ zV`KH=s_c2?6^(WE%d?l%*Ht!EG%hZ0tg5druc@ueUQ*pywYa)6dr1@i#MCdH+dxmz zt?n`->EO{5XN<$A_s!lnJ8kO3N!#x^e*3yJ-?``N_m4k6ExV+w1S>HP&szUY+j03# z+pj(O-9Mh1mXU;M&YU=LLP@E~x^WhqIk9-k7IWW6{G%q}gQGjmMIKMh&m}s)nYT#_Y!W^4f-Z z0O+Es<%=8UX9E?TCsU_SIdEKYDTbGgjt?F;{eUSYrP=h631c&ojw0M@u%WYWc4OTf zU|1Dkm9`xJ- zy?5V*+b_E^%?4@)p=xzQV?!Zl5gXGrk&LddFJC?p4}k1}lIr=jz`^<|&N4b{vv)@l z8HM-Ey(?;}YpWYa0Rrh62Ll6&f#QCa%UNny=rg$>$Z}YIh!wCb40CVYSAcOgEW}b- z8fV=nR@YWd*2Gd;KDP$LOPp9&QC@R!IS2vwx-!Tl1KO#^1=S7s@Wifs8H4xFuWF>> zVp-CiNoyuCp|-JVepNkM1jj9_s9Mrk4Nl-^`=FiX6Aee!i zBw;{vNFFII;!J|ZH(ldpNmb*>I5wV5@UsK3a^C2@ry+JAI|zN! z05u3_Q}an7HknNUJg`7m3_MStkTD^^rm+$~o8E?@mMm`oBMPxnHUsb1HKDPCW7Tze zQ^86b!BDHp7mxI_nVj`*&u7OpRo7Hj)tju0GlRHeG{_EShY&s-N?_?^jt5hV!$WKi zI|3stU$O*?%~^kputQ^~_mT9*+z_i^XlORp*({#3o^7D+F#aH$$FOb8=PaxT+jbfu zR!sx*FQJ*$)Drv_g;)(CubNk1RTX5lY>A(NNA+l(s)J7w%;T(A+c7)M zfOZlP1%9m(5@v~#v z0#EOCezp`00GrvY#Wj-}F!7VpC)U-^&#SCkJbYo^xSFcPRke*HV?N}p)UT`|L~jH} zRG`w`io8Wt^|e(sd8NfARSgXwwvibC@(JuDKRc1Lp_yVD0|1rQ879X9 z&%?ga?CcObhn)-HqL8>&Fsz)+d%Btzo5KfGR6{Q&8)@GHoCk>f8N`6LTnT9o$i_!X*w?jF@Xh*W}8Fo z9(v{{o;11!%p?K)s;YiGRu@=Az(Aj!Ko?t{BWq5s162K5Rwa?kfEYwqe}he;oTcoR zrd&z}H)?1kM%IQ^IZKFPwMP+r0Wy7~M#;Fjb&G+{bb}65W5opU?`})VLEVj$Aeh(F zfFuN9@H#BDv+uNBB(TF?Z3TwqOKhQmX3!Q3_wHmtMq%T6#Lu2@1A@{8^>s^aX(SFr zI<~H&$tI%3>APK&;=094>S{51;Pc|?RYz58W_L)}-WeH75RTY(+wb{3M+EeUcJHo@ zn;2LFr4chxE8*Iw)+l4~TrguQ0_9)e*FT}19XZv;N^cQvl zD%Lw;T?L4h^TA!jl1byH*6UY1)a=^&v{~HUzT$EPdxEjtwCgn*aUjt+5{ZY7BRiqq z&Z;`dWso*FU-kdw8g-(z?G`?*C_k$G@^+EhJK_*}>L7h|TGbg~g6tpcLqGcfLR^<< zAQlxv>?6Io+oZ4r=9%R|_6hsU&pzcWiMqp1)0y??pcz`*`kZ}%eXqKqw0IJUU0qzb z3}{eav2XnBYwT66%m4@*V&4*Hi=+Lm99D^gs+ODVI}ByV6(_yF`j79loc&(&o!L7s zzIw-<7rl4e=I!UMdiV4jcdS}{2&peWkizpL2xSwWcy0bGm3}%5b zQ>MF3=!E9?@ActfHW zgFK%12=PQ7279l7qDnGbRTp9HvdQU9HC5Q1yZH4<_JUx@5zcbE_>#Mdyf?S}ybotZ zU3#$tHHLU!-VggHAV8!-_|(OLQ}dBQ-jfdq@qv60pomS~o=R!m60*{8_Iei=PWRQd z^@=6vkzISGtIfJNap(**yOAb`bobgJ0J>Ix2Bm^??TGE-wz8J-v7`J~VV zAvZZHdypN?3t@EN!(bDOrLRsX+3R`)WSx=%lkb7Kf>OwY3r&gd72;8C_yEvJOEUT1 zc7w^ICyg^X%zwId*;L%@2U%U4difaenfPcAk2SQKIWoQdcALtMufV30CON=KK@ zF!_O~8E*24sDU+l#=$0^tlykGdZNjvf-Xf;^xWoH($tLwPNquk9|$ z>5vP z%Z6JeHHTVknV?lN{|y2kc9?TR{EuY4h_9%rYpC+}Yk&v57II40hTLKAgBmAm>tO5j zH!f?OTHd$-%R0Zlu4xI83D$l7@;QsE>Xv{ZbZ<8wFzec?s!9lgZVTde1S51-GG($| z3dcxBt+w25bL*Bk+a!n&euA!z-kY@+Z$O<(wHU=&{x5tVv-UT-8+2}0U$(bAFbP!*uv5-ZGtG zF2_RId=Pam2Xu<|DE$uC14D#$$>l)+a8(Q;Vh9JeMSN({tz6(UD}puiwN;Y_@nmVON(Jl(n>dH z(ar>{-LeGtU2N))^C$d#s}t|BE60)BKE(e_f>Av7aeHgh4j7Vzp9=A(=}}x`-3<5) z>x*HOB*pdF5Py!tysH|jSAdJbi#@^QFT$a?zk94vwhZQcLhU?w8y>d-_cN8zryV%t|x+GO~w37ZS zLcZ~ijsjI%x3 zVXnRN{ajxZS@J85;4Z~b7g}g8ty?;NnJLWOP;?EO?@4I}6?}RdLsX2SgOTLZY{T&4;*}jfjOn zAwcHq|2MF)YsBJ0RuiY_8xsA9ILXoBtO?N070P|{YRc!2fv!Yazl7wBQX}UF|2M7I zf3L*yOW|P(7{gRbeo-YhT9FbGsRCv%-@Lkd1SWE}S0}rFtXXT9G%(T>8Jr>T@(qy{ z64_!PI<0P)1lu`P<%UEa^MPHB88>_XiBwY%5`{#1K}~wLOP+5M!$V?(D6%>J_*s)- zLmKl7w_itGisi)gy*)!>FB+7;x?xJ=0z@$hFdd$63Pg$l6%QCUdaNlB8U`EKwzn#)`tS)}2JWVt66y>uM_4Lk2S?vq#xJJIkE|17S-^Z@#D!td9*k;B>qTl9v>nb%WE1;aXyArkeg3)zR-TB zuA*X2BP;@@ScOH_DAhEvy1dR5m*BnkwwwZ&mMJa;rC@TG;~f}KT8DTgWT;E@@#P4OyTSW-F96t4k%;9-@f_!~-g`TTr&Jdb4Ji z%^q9Qx`6L+*2i7I@rZ;PQ&+dhT|raqz)SO&fwK2${b!UZ-ouJ6!HT;t*bngl`dM$+ ze234pz67U&_z?aRyrot8wog9Ryr%eoam5F@giN&fX-Iq~K6hxbX5sQ>q(T)!=j$}Q zv`dTJhSn(D+<d*!k(JAf7gSZWBDSGd_A9m#-;_fDZR&|as7;xSiO}7`h0EqHFlDNHyL{Q=3R9*#Uj=G6EL=F> zl$p-vHFw4QiU$2gHZ4Couxm`28`EN$ZUJ1;L#GximT7X&@JoPAvz=XN%G30Ekd-GW z3*`vdR%8)p7sPU#HlCT-ZKJ~u<3#%WJKAI%?3a5&SR~@!#Z=%4B(vwt1<8d$xd(P} zIa2Q9mwSURw?@wt*VWMB3Tz7vAvsF!3p8ucwwnxR%B{AW7=r`x=5ifRj1VtVLi|pI z%tvf0M&t-!0gFR&2=h^CTu3G}pDD-d%}uw3R8CJOgk&l`IS35R=|vx{(hnzvWI8>Z z68l;qy*4c*GwDf5yVvx?86lZX4`;@{HjG{?3&~u1a!9+^^uxnKGM_Y`cvn2r*Z?Nf ztxW|G%e@Dcc@#pFgtlOPII`rRr;SgppJo@3YDGHm0&GU@RuYO{%-R#B?bg^6(;I9x z9LHI9gCzUAHqGD1u=d}pn#1@3t?*n34i)-bPIWC=IVhCGHi7`<=b93Vi1s3D4OBuG z36W3P-J4AbmBdFi5X&S`K)2O8j)YpG+qOy={jrtHWg+1sH}pAO6r)`M_m?1q2V(>b zb_Es4ye*Fg6-=5pKfj@=f_AmK`Ub3z9AL_0q1Mm?9K)-uavnivm&b?X31k!Q5o?~C zQ=^T;Z^)BE@??1mRs;)LT!T<;Iu~Kfl)E4bZ`7c#il%xBO{Xf*m2Ii8ZzRS?!X6#3 z^PyZ!!1Li&7yPwVOP!bS-I;S6a0&6>%=K6;q*8N>rF~6;`zMSZGjQf`buq_0I_B-cbqc7fUn`^lOJd2_=3U zXdotq5-gKS9ApKGJ}_G}w_DpzaPnX5D&F0~{VuTUWQq<~-4#l88J@o(b|D6yfL14C?3y+Lit5Z6 z-yZgzBT*NJuQeWgr+ueRjf-)=dJb(!v9s^c=5_^bz3W2qY_t=F=4dJiA83RgvmV@Y=0tB(=c`S*0jevIVY5sk--Nl&jaAtV@8)2 zA24~wq%q^BoBUE!K8&sl@=b|tHp#OTfCEDFqMbOY?x?DIx1I+5ct~!QPhf}@B%9)( ze{DTylRGLiE=0RTUTszw))x6BLV|QPmozRXM}J40$e2yDcsV5hB42^n(Vo9^4vR-SCfKDZ{9oYi9kouE zwmKm`B8tC4cIyz@XG++lyXoNHN#jb(>w#=!1NeJLz9A9eFkmUXGq6TDR)ESe%gLDI z+Q~ROw6oCbLplL;hkb(VCFRxg+!M^BC+zR>_hLG^xU3OpiEHIs2*Z|dlQ7vyr!iG- z*q|x51L>UOAEta4sC$@wcH^D<*6cXpwrEhkFF){080>?qaPw0s*lTZr2t}bV^ZN+ioR0kv}@%)NimX|BTG&q1L~1 zqv~XeKQpZViL#VR!vl^(_Z`^Zze$wE9@Gg)e)c&eIIj?=XB$HzL z9hSsYa6Tm2G6c?+Za??7cQ3r5!>~*Rmjo{}75or=cRhLF;jdu;Ywt?JvH!?$qsEV7wEMyd*@I$2W=)=b;22l0frUa%3#o(DL7@g8w_}yDw_05xZRE`V?XLgZT`8-sv+LPNI`e*d&{A?R;X4I$O2;Djf}JiE*Z zUWFsL!<>J`Qg-YlR^4!5NP}2PgFslpSzX)^+5qg|H84}HfQhkn@${OdlS*lW(_Z2X zo$E8-REV1Hk8^HVSML=HLw5sWGJ@(jb%I|V4+QjzfY&9F4r8cpNf{nU^P2J26E=!!Xktbo ztle22TgH~7)e5u-Grkjzl%E~#XXE`0L`c&*mK}$eu$W>tI_iPCr!AwI9iM16vs0r! z%h$rrnwgmxzlr@(u&CeiCnjuSt57s8a}&E1=ZAyq*fJ})iCxXv{p`GGzzQT@XSa^C z;u0g9*gCWhS)s&1&FoLnZm8>R*Ttha#4dJEj7u=@Wk;9EtdcU7Q&MImCYF@>kOJLr zb(4i9Wv11=q%6T_#pAEvQY9_y)|vFtJ2<;^=gI3>9~xRSyQ_uWy^h646L7T>?!({p zScpV+2fGV-wGxqd^Fho|>BXK6)MacU3$aOfGL`j53gt959m`vaT%|McFH#w^nMf); z3rkyuMV-yA#q|cXxq}_bHnPLe-yHOKIC~h^$Ji0<30$9IXj-1}l& zkD)Gru^!GIM=1^?E@4~IK7^VBk^J-#AVW1;K7qP;%wahDGfLeta)UjIar*HshSu=( z=zgC;zl17NnQtc>#^U_!JdG_t82i5y{Onm>c^Tea!`Sz%aVOsQciNC~KWm=oXV3Ws zMhVY1W^9x3OPY9EaBtvi*_+wRAl_FdIoHX~HL9|6HnCR)o0)BajC7%uRQh5jjGclJ zpNe%p4UFR&u##)R9In%=Kiuw{{f+${?eG=$2741THCZy-h7}Zet3P`SC5d;#>}`~k zUXLWy*sb32T5b1QZAYsBxw=r}GJ|GkUhmPojJL5iLqJboXC?M;X75Miz!^SX&D46! zXT@z|UkWe=wLbGPHh42@F4Jt`pI{4CTr>MV@hAKNbJ)n)ebhX26X%l6wEQR-f?di& zRJ7M3%*|#Vyr0Jtaq(uJa6j(}^6Hk^%zI^WRP>L=XZkf!g?SRlD$Iv~u);hUlojTw zCCxlN+TAk4JbM$*1&t=qSgh`{u!R?3Kt!+KTisQmJ)~$4tGiJcO$_tl(XbU4?P(>1 zd69n8>amIMDHv6Zv?~(5ihb;guvf9KUD4C47;RS=UPZC42=j4X&3LC~f>(2puF3K4 zCv|wo?j>euQ*@J=G|FkM#S&eNMl!>EMl+uo?Pc{Ui}u}8WXYmF>)2OT-$t3a$Rl{D{@;87mUz<#sOv&`VM?uZRw$mdVs|P?%RnldOKt zd|q_0vkioKH357e7Bp|>q;!yT?v6#Ifj%9C( zbJ;erhP@^3WY3Fx*$(kAdsn=~-WS{02jWxqk@yPvDCjN#JaeD}FD6Pg?n7VYS=KH8a{{*3>rv{-Z$ZZTQoIoXW7&_d1264`)qIcNz;9%| zv8LPjP5e)+A6E7+{ARq-A8UI*pNlsJV1+jV0zNhn>wF8p6{SH~?Hl-QC?#Rd*YMj> z8jKY!-dNYc{0@E^>x0#e@YB(Ym&kywBoc?0d z`xqML1OVrG2=3B!2zGnVFGk>g^KM7&U+{B;Z z$gn=p;|(tmZvbn5$)kQ*1Q~0HWk!OV_{&6x$0N^VBzP(Ft94At7XIqVLEJlit=ajC z<#&4B7rlo0-ymzEN=s{T>sU|PhDciDZ$yJuu$gb83N1;!r`x}S_UqU|y1WDB&HRlr zwUNJv$d)3!-#;@FSGa+HfPE*pfq!a+><#JUI39`1+_Glp+jgIRlFw+@w)`#p3q6Na z%kRzMjVQ#!NHEI^Wan7QG9YR4Z|r&4qhGW0#a3o=6cC)TFR`v)0e!y)1NjER{I_g> z_8mmH@7V%em$IMO32Y}j1GKgl>|q_Q>#=>_%@wWGX%&?ph&f}l|%bOk}9 zM1%^0#v4SaK48rr{CiE%-FX4Xf&{t2$k+KJJ!2E_%Pc=ZUJtUh%-}oGZ4iuagy6dL z0vjp>p2mRzb`uf=jeM;j82ttx$P#tCxK=XJW4a4t(q9z{Y(#%m82BoY$y2P`Pi%ip z2B3taf1r_i_w+gLe`Ihtp((C+)j5Fu42 z>|_xZ{F#>QN7l!WJTiU$$s#|nARod4bPNL1Z6}r4B&kZUn2^W$#$Q2_!vEVz68PVi zDn%fMDnmq-pd*JWK^a7qsOUhIlZh$?WW`phj8jD*OmqRl3~9oIl0}5s%^}PXkA!T( z)ZO}t++zqcPQQF1Xfx#Smp7u_@EH;Z!=f9_z1s%Sy;&qW!U)|x#tw=ESF`yfXx|J$ggD2GKxCkt$2m57oMWTMIW~Hn zW25NraE^^0=h*0Rj$1v>af8P>R(0SUEBHQQfEWm5zs}(yaZtVXba=z74i5>j?G6v= z#>4DdF^KpI?*;TDZW7{Y?0Ee~H$I*1Ba%=T&*x!VCa%*xhQrXEuwkNFWlv4+(iN%xuGu^!*Co{$14_fJQbBL6{ZZDFF7ymUX@*5Knqc|DVsBes zPqd)C*@_ajW~~4uhQ%mbM~HJPxUE`2<#t=_XSYc3D#qvvjMJ+bYd3N9K=caT4Jsu# zklTr^!dYMuq<93H#RO=P0o&#i7L!Ol6;nt(71KyP6(unJgvE@KW-$}0X4q*MtH+92 zT91V`i-xn&@X%;PYp{{F8f?VVV0+Qh_O=4FKz*!mSj=h`Q0E?lCeu?EM*CV3Um=vd zh`%t}pB8*T4iq^|=5Rfk=pbuQSR7$btd~6xRLr$2`gs+Vc13TmVxC>m$E#RiS6E)f zLc5}`S7EQP)!J!|-J-wOqSme$;8iTKD;)I@1FN?yda6RNO{1;~i=(`nWlkfbwb6#Ysxl?Yg)v$(LDOd z4f-Qip4*eS$*xFmr)YT3Z`RLeLcb8VCIpWFD}o^x9j&+DL-n0r+YP!dESkNV7P}Qz z?QX1^TkSw~Ci?L#E2-Y3GVErl-e5DmihJztV16Rg!%!X>8cAOBQwEXQ7X1j|4U=6) z+#elk4K0hNZ7E8XMJemJ-%5+56h@P+WU|Wu)Q(*ygX}UH+Ag!r8sgbyGO3#+GR9?5 zQ*D^ZCc_M1NrstRSK6@+Gg;aMqYX3Jx~L5^Il8C~Gr68>28?nIGgYAUvrR93WUan+fYL7LGt@rZ> zqbXL(qx={vrCB@`O|<|Jy^d*CT3Iw}OHrmQ%2>w_wz47_h3*21XQSD)fZ4Qwd=D$x zTfiK8UoT)Tm6B;G^Qbh0O8NGp;`IVrRCEv)FEopnRHaAjG#YZiZAT=3pI*$^;`x!RjIwCXmZEG~l(mkRSUHib zLe1-7s{~9u@!>rsk03JpF zMpX=eQKbPq%*rGH4|m6I6Bt3p0k92KO<)972f)K^(2<6e*9O4(u>dCIfJ$OR3+)^L zJMct>17HW9c^-g=d#|*EC*EmCW?4Lv70F)n)6E3WkL)D^zp=tC;uB9Pkv`Za8J`1@ z`v}&Dm&5us7m7&*OXZa;0~V-Uh|j}dnT+yEvc1FV|IA}QE$>=S-G9GEBY9{d8{hhNB3 z`9-`CR>Qqf9?dW2hww}Avji6--REUUTYot}hhKpfSMs&|Dp>5U=C>jh-v-=m;@9wd zptd~Duj8-s>yZR@9si!+fP9)aiUIs4k<0&tBzZR@2i+~AoZl+y`EAHvcDuNkuNOD* zJH$QwPVo%iAhtmS{gO9JAKxhZ@D?Onxf@AOHX~KXJ@Qa~uUx>lAl1Qr@+f}4JdQsg zPv;NH3;9EGHGf22!ylD5@W*g~@p1VO-zuNsPsr!^pXG)a(2e^)7!^ea>GqB!AuL$^T}g@Oz9r z{)RD@<{QI5_m%Q(zQg%fzJ>g2-%|dK?->5A?)Xu?0;4C^nbv=^M56f7+Ul-<3&HS zK=e0@!~k<2G0+?@2AM~QB(q5jHjfiS%!|cPbFD}*ZxyL#i%2&g6dC4|BGY_MWSOsv zY;&8)F+UNx=9kEL_>IUne-OxlB8COB#PGmgxb7`R1S&;Qph@fzI92Q!xLE8JxKTs{ zn?+LK5wUOJIk8{h6>%V`J2D%7R46@KfrJi>(ic!5VT%jAs?}duvjVSb#TDiXcc6A0uR9YPWJEqfqP*U zClBagNcrEO)QzPE?iAmm6wfjOw~K#5IquGK1Ah|Vp)P?93tTV0N2v!}8JH&a!PgRb zAM*k61N??zKH9uQ{0NJAPrlHs)3$S1qs^(}C%n;%pJN^*cB0gqUu2HOWPG6gwdNiY zu_4UjH<$$yV8@SW-)d$_iBdnl!Ay|~rT%=AnItJRV*tO$902|S>o|Yh>>=i01cPLe z?;3FmN=b6O?|f}O7z{evD*e)ALqJXUiqr5k6*SdMsg+q8DC;(Xgn=v_^mV=V24sNB zE*EE^=S(~`RK{f-W|^xFW|zwlp5_@N)s^BtJRM?; zQx|G`|4?H#ei4i8{mDi-etwJW{prRc_P)0FXBa2Kze4u@OyewgW60j0WvpUbw7oyu zxQuPm_Wm4WEsR=Z@6Yuuly%}!ypil%D(A{>GM=S?g6d^=%p(918tI zVEmyG3^O@@MZAR(q?+;IIAM$+&D@8tls#!B&GGzL8NmoL%qAFvXy%#bap18uf?V@f zn2l+^d1ecKsf$LCZ$8NWslQubJ_#O8-z_ws!(nXtF46nS>K%qJ4hsJgKLXzYmOy91!`LVLp!>GNj6dK6tA$~2s=tGz6c0c8u&l7`1vAT}>@8P{^ekVeQA4n>PR>L?ADQq-+sOhJYTs6w1!0_yTgnq>hZ zr_9Z=u#CbDt!@hc8~ERc|NZ#i#QzC&li)AhD2F?KHFCN~;@0duiC*2KY@^((MMh)7 zBA;@@B4Jz(z=9}kOFB8eJ&RjlgM_h{Y~rZ1ZH5-=U{JT~rFU^(4}ZOp(Kyoq(T9 z5v$9@RERdy;9Z)|;zbEd!!=!$vZ-PQD;Ec|dNC6LDYMv_qKuu7kkiY>A&3t>l-({4 zV~;@ieN!C4eiC!Igt|FE%mviT`EYRLd|lt>bbFt+6)SF8|);t$#zcaDwf2$s;$ z2rURpb|$|{&Ve|n*!lbtc?85kgF%g! zg95E8Xz@^RS&6z@c89FO8*w5ReNynH@I*h|hn(kl<>yoIW+lhE;J5F;KO|`r0d$yJ0G=<%#4$MRpBmGE2N9UECPn@CmR!k0o&%yo3G9KvY zyb8j31&mF1JXml8(~a%Hf)mPfUL`0zK^NUo8SA_vFV?P{SKS=vRreU@RS&C&=e!Eo zNZP}5UIpEXc4l+5uu0D9?zRx1Hn0*8uhGPDUOE0PR5;G7koS(`yt2JnnQ(P$?{!fk z&FL{G3a2P6i+ZjL#L?qOPtOw`iNvpF*;WKiyEn@PtC??|`LVvu*S7&x6kcaO9|>Pd zPoA(MuvSwnrEz!Hjnmc!?CSCF3XNu1U&e^$TQZ@f}hOwjPItP~mvS95)v# z9M72J=0e3nyAQ|Bg$f&dZWJUcYU~!+A&6n3!tsnHc@>UlY_L~RZ@<#p^^D=AMqTB3 z#!$1&Y2^B3P}R;eh8o8+*4y=rp{ku{3^m6)J-MDSRGrxVbMEHo`oZA4a14>HHLhoD zC_H14SkD;TAZ5|?Ek$XvD3v^8>5eRdF~&2N7vmYrx3Yf5Gge^bySto5$bz;AS>Ph14XS+4 ziB#Z10aa~1V_DqFZ08v(q>nhBF~=5+ikoaGv=6~^za(zf&)a#%@ZNg+y;jc{>NYsw zb39|Hv3E;awN}p<#%hZ^Gch2~GnU~^D%<{chBsKpKZFX$GnS`YoSe!dsgX4Di~)5V z&sYkm)b{AWw^J6)+)|Vwi_*z6mKjMegcCH4JYxX0;~8sp?67TCif8T5p>7<<4w`Du z7>wYR@abTs=0ywI8t!8}GkMxtuMPLMIbVBb9Fsg5?mf?p)#^TREcEugsD)#p&$pKX zNce!g+}Y0ns3kd9|;7_Gl{ zoD8Q$9RY7ftY>TlIZjX&<2XT;cASjB`onQj)OP)CcbN7}l8eL%86TmGdi{%Rmk6yt zaPCOGm^P)wI!+w_nTz|b<7Bv3;ecg?Tj4^X$g6PRBa{=#;cvu+X z5fLXI6+OgbqL+AFSYoS45l@IB{6@-n@uZj~o)XpKX(%Jlh%?2r;&SnvxJ5iKwul!{ z^P+f5yd=I9FH8I|iL}HkGF!YVM~T16Y2r0mAzqhF;&1Xa@rJxWyeY30+vFzkmV89K zEuR$c$QQ(R`MTI4cZhf8XW~8iwfKi(;sa%f4^=<$kxCLDt8DR!$`zlg3Aj!cpQ#n% zb9J`(0yh3H)t%xi^|1I_JuSXbZ{Yfl_*Q)){;7Tt-x&$wdt-?B!PrauXp9v<8B-)P zj*#3qQVQclvCTM3D&rDq7;B}^*eLzR7HJxf%YgBM3>t69IOBa8GQN=AjBjPUu~T;U zrO5=}2weA+J$w^nqHneg`xeQbzGGy>ced>1yGr)nGTXmI z=J*?Au78=#_a7$<{Oe?)|1MlxbPM4$1 z!{xr_BDtS=jvQ@XAjg=O%3||cIo7;ajx(Q^`F#Fw}v{$w}y9Z-o2M1}7T8O0v z`)ZF`HbFtwnp(dhq^%WLXU_U?R^9^pXqVgA4PV zKq9Ab)1G`k^DFJsi|{7%eyx=E;#b0FNuIaf{4ujutJ8h>4s(hi&zr?RFb~u=w7&dv zvsioH`thBB9(msS3&YIUp0@!a&dk)Fw}GMu;7gvjL86yANPFIr;5+TFJ#T~I8BNfh zw;}QZ-&*Z?8!E5$ou@r-$#Rq9c}tOxIG(o*WURG4Z<+E1$McqjJg2tjEnDtzJa0KT zD{On-a+TqD-tv(9%l5qGtI3Y%tw7!Bc-{()OVkzG^Oj<)RTpT_TdJ|q@w}xOTO7|@ zmhrgbdCNB5a6E50#`})vE!X(M@x0|3-!j|tmX8R0+w)cc+N#x_w=_^#x%RxJ``&as zZyCOSIG(pm-%iK#mgNsPp0_-IlH+;H_h&kuw*vog$MaU`ALV%7hWQV0Ja5DOlN`_6 z2>)@8=dH**oc~38-ZIQZ@bi=BEz`Wz@w{c3*E*iJZ1Z`?^Oj@2?s(n`0&$M#tuPRA zJa5ASgB;J>@IZ#+c^eVPbv$oHfg>Ex+aAGOoE9PjP?l$YA&P1BygkQ;lIN|*t}WPY z9S*T>w;$O}u(06V#gEL-5u`m7ZmJ&souZg!{KD?28**~kUanu`kK2tWpwkKbx-WLw zCHH$T0CEKUE=!JOi}8tl?>Of2e#dX?5p?ju%x6Xap)vSH7u<9I=>^i8$M1uaHipJF$_a6=f1xJ|k#1>_>J%Tp@m z6)^PY;mr2YWatZaH1z*or&OeE$c_H@oKk5u^oQFR`g_{PS0Y_KzS3&V|C!?}y|twV z2KQK19#(2w<&X9u2;s0j8R=oGZ#B}xVhS(XAcqw6_5o&8>8ABRA68K{6U3hVLx$AOqtY;HZlEo z98};=1_{R;+rf!XapCRELe9B_odH6(qioAra=WuURz#opPPY7(*&>&EHX=kpABw1i zqnII=vOaPd>o1qH!Eyy69gk)i@)(vY|GJ3yYorpQy-EV+`+ zk*Bjtc?Me~&t#4AY_?RM!;X=EWGm%)Y_&X}-6Styo8^VPkDz(k#~wBxj~GVcZpfDSyao7VufrG zXTy?nmAqTrAvcSMpyb#UP;%@FDABQZ z#O$Kv*cI@u6SIr{oS0p8lpC|FD%_Y|HAh<*5VNahyD__Jh8wf1rn@n_YLed05VNZe zaAS7m7jiMan+WL5(H4d2+ z0!MMY79!lA($<8&e6zS;TNC>62gKdln$RDXzYW@&fQWQ)tF|T#MBu@V+L|zkza*~L z)`TR!O4PxmBapaB*Tu**z@qTVhE)rFJJmJ$_xx z5;R!~*6gAh8ZWXXRlN&!&*?w(1O8aP}3#kH?Wg>sdr9xB?K|M~(oLZM##ELJJzqekSliWSyUXn3nc7`uAJ5e8GTTe7{h{QgcCuE$d1t%JEXVPV3db+zINnj=_{AJ~ z2NjM0LZ3qv`VykhR}h81 zhA8w6M4^8|6#5RL&<_xWeuOCW6GWk%Y%|W?JgGSQyAtdZh5b$`-UEi}{>a*rsZ5@) z0(?Ieo8Ta9mxk^29AFUu;nY;yG0)-d4lls2VO!HA41NMKVY2A@@^z%IRt^S*fD( zC^b@^sP>j;seR-cHA>!~_LX<2{p7uBwA`x3KoBaHe^X=STWXwqU+u4YsPSqLu0zxT zYM7d!#;OC=4CG^l^|&h4V$;(smo^_yY})FHOM|`X!5yPkx$YRuo`fa1W8^KaJ4RmRx?|*Jt~*8^>$+p)1lJuSlU#R<_{Md|h*yN; zj)5DK1Sq&;#FMT&M%?GRW5g!c9V6~^-7(@8*Bv8naNRNDI@cW|R%-!jh&+++tp%u| z@+@Ac1*l}X#u1=WnXhHYqFH4z12c z5M`!ajQG{HEIxaKJTA7Pd$!I&WM*gHCAvp^mm;I4Dl*rx%U;P zsvzLn^8Y(lovmslCZL|u@ zKYCkkPFS928vu|;I4m!)%ShB~8MgS~!wE~f5&`{Td68WP^xW(-rkx=n8!zaLRqI$# z9}tii>+o~-2X;JuZQ9N^8Kv-UwSt+@I}_9~EK42Fiqr{gj5?7Wq)uWp)yb?vodRH; z${N*a0Mbf!qB?_}rq0$tSppw7!}fS7vopr7l$5fKfU;6v4)73AR>~{DKq)_LlRjgq zaDsF(&VEzg#v(Qz`WflKW7tU87$`h^CQg8lLCItltS{^hl&|+hw0%-ug;9HF|L6=51YCOa9Ra8T?{x~!bYprfYW7clDeFgsVmrAbtS7+SFsgf&L^og>`b+m zU8t^MtJQVvN_9gFysq-#b(IINt2}sJ<-zML4_+rb@S5botIUH}tp~3a9=uj}0xx{Q zgV#`|eq^KVb7(k(RZ1zgq3z;W+GQ}|BiP=C@v!@gs6v?F#y~| ztR7n~MVhvV{wgKM>FJb^(>UO!21nxD$MA^m^(b+VRN=aaEV6FYZ?sQ#$AEP&c@CY> zxmBmoL2g-X47b`E!!6esZu5`cZY(Xd!oHT}nuU8K0lEHgKYUo;ZkJ&m56e63@&L?5 zuiKz?JkJ{BtlJ@oa7W%JC)y9DbBUn0B+7a**e>fhzae&c2-Od@U})Ddvq+UviID4o zq@$#^)lmk6A3Dh{5FP5qY^La<)=^SDhKXcGu_1kfWBmX_?N;{0lfv>&Jr!%PS8+%S1$0BVz{*69`L`e`7LvF`J}bHCjOsGjfxpLtMMzy&2A ziVku~K|X@qGud7kuPjPh$2Ws|+@xAKO%h3>bY41z*HAl!7c2=~ViqY@&`NHRkIjV3 zAvW(;N?YcU(w2F^owKh!_7sKauzU&vTUb7$6QKFlu{|wJyhT2DDeGZ%qp}57LFwi*t)W)3la!Y% z6p+V)RtRn4TjWb8Cvn~XnxBfZk^v;ranK+vkyseX&Shb{Rs-yFfk6u2zq*yVavGjy%pDRa@Dg)f4Px^(5P-o?;)V zr`gBq8Qxtz&3mfn_@3$oK32WRr>K|sZ1pmXBCqgz^;dp|dX29_Hk!5SZ~RvEcYe2e zgFmd^Rzgo77*$ z2KA|UQhg>~QJ;%#>I+2oeu>E4uf&h)Ybn$>GN8Vd1?r!2UtGti@8m-DlRR4OlxG=C zUSV)~t0CllhLq14O1`Z=l^+>?`GsMsfkr^(8$q?75vQgZAyr{?Q%y#^T4{7w=Nk!X zozX*WG7{AjMp(UUMAU0WFZH?6TYYQvF%*vH#u!_Y|(r8zX(M8hiWRHumuc zjZyyo#=ibETr-Vgf1WYUKin8kav~0-A|tSWg#4Oc42+@DH^`U*xgI5w^?^tJ5u9?b z!*YQ-lJ#L1^N-Nk+L4b2Ps!f}-xf+vK6aESM?3P-;Eiv!Tu-Hc!pH_47$s8ZpiiJ3 z<#!M1x*zZc(t_hDC47!&K7X?FiyVpmK3Y;uV1xW|I_k6so6fq)pAZ+B$d2{hjHJ(R zqI9b7TA1w~MP~L3d>3Po$oR>w_MHI}-lHtS9`#kC|1D5nxA`U@%gq+nn|fKF@equ1BdquZJc_x#kD(GkB8rPYuLedveNk zl7yU5rp|RT7}-sJ(Aido@VnWkI_t?$_z`#LtS8BQD>A}U){_+eEc>g@dXg%h7^FHUe3 z4V|f5tg&-+>%`r5UJQB_gIU8^A36e@_$zy0=1w+__4;*h>qE>KEd9sW53DcrqMd9V zOZx5IQIM4LAKZ&x`8<2d-}9`<_k74s-V^ZqRZAB;^qBtJd`s6OFFMDCdWLrH*1%}$( zsse|h=XokHe(Xl8z^>vO51pERw}I@AttxQDinLLIaqp_Y(1u;nG}^msDsUgmjtAS- zp>13EgS*U@Vi6ezrP-Bad$}rbUwqhAf$3zos{;3T6}W+<0uS_5-~sf@HI52A$m-## zzz`{^tW{tL>r~b%@DTbD8La}tiC2k?tOG~|PI2Xa+f4^85PGk6(~%nM99y)tVXXp_ zHte|RaK7Aj(`o%bDOLrB>e!m^age71C)q233P%NYbYk@6`1gjoEnNSeqZ1>g<3o-L z;I(M$%|q75_9`&e%29z~S0UpIRxou}E9k1gNv;Y^y0BJ(|L-o`%OIvJ#iv%^SQU8p zSl-uFfjtE8+fD_>eOuM7ZwD0^HSJVj)Ho_I@*CI~(AQPyI#+@5hNIsOApO?+)s_zW zEi6lCfHYkFHpxne3@W4;Oge}^1Q#5{N2p+z^xI^pUqiKii)7bVX@u3pk=$0lO>V2- z!j|Odx5+M7KvmmC8p^F9t@>>WCDV5F+g2lyqu&ngRKLXw?etsJIQlKz->v#Bs@v(e zsB!dLoF8q~Z!tzU?7-1)QR5J$tKSX+2HE|sF{h_cXIqGUWen5+|PyNzS{!^UxZt8qMk);NKGi^HBi;{*{fP7(#i zX=04AQj{2{i%R1R(PW${PBqRFml$V@n~ddRgK@5S()goz#W)WKM9&xhFfI^Z7#HFI z=|wm+x(bIwFO~&3G`cUYV~o{up>c&g+PD(xDvb5U)lgU0KwVu6b@dwgws9`h)$5_I zu7kRI1Ju8 z@{lC$p;&E2e4tj)+CxvPR$H}Iixpc7LccS2?#;u3#K$@9IpmMbWp?-OZtierzMuL2 zen0)7dR}i=FY7w>x~^C6=mzz^{+VtAA&RXKozgoXNPnS6>79Cten`*Mztju#Bl-^g zE4>avwO&7}AJ@C|OZqYWuHH>C{WxXoC#buAk}C95bgq7yF3``=#ri==*5~Ldy_c>< zTch{UP5OCSs$ZZw{af0tU!=WgU(mm&{rV5|l77ib(m|-{iA7H+Npa*PDUO^ZrI$lV ziasYv>E%$8;!!6_apWW^j+`XLE1V?7k&~o2a*`C!bCMK&fg~k*)(TOGP5QMJqU}X4 zlGmDwM;#&|nh7B~)(X)~$d?gTh@Ju=+TRM%ID}}q6`~0U(GFIKW?>YXdQC=>zNO!= zLbM}B;v-gwcEVU(ZiQ$Pqj9bkqMb1&XILScjgdLo3ei&|A(|5j(cDOg=0!p@KN6w^ zkq|A6glJJDM2jOKniC1p+(?M#MM5+`5~2l>5G{;^Xi+3Yi`6!-&%SbAfzjTOpdKUYA!}A)2q=k<+XYEl}^nO=E;;p-#zOR)`kq1!AuiqQz9>glI0^ zn!)_p2A&M*MgeZ=j5H%ws5TbTuSRragK_EoUwRb|)T*+4f7lJGK8YF3O zC5l3`RsfcT;KXX6jxsD|Wn~P6zpw&Xx zi1wx*`dDvd`$Of~<#YNr?oCY7Qg)hhVXYPMt^RISab}$OmkZ@4tnp7^)&=|nmXX+g z#-6KZ>ahXP$thuuL)Fe?3RI{r49uB%VV#N(3m*!ib+93chfp-tq(4NGL*qY)tBx)i z5)PA=rx%pQRd$`qK~hBgM(tD_YI7J@dH6lXZ%_qQ8aWQ@R7n+;VX20e%gj?ss?z-O zSgn|sq^#H(r(o+A1xl)weL<3UX2tFi$g*S}%Kf;v>So?5nPy+}MHCE-oe@_^GlKIS z=kuLzUNk=@vtmg?`M$ZR|EzkhIo>PIvft=_Q;W=EeN_&u-wnG$k&J^IbGv^(C~G#% zB?GYN2?|`>GJg71A@ysbGumwZ7g4TX7rpeGVx<17n4#YiGxgh8;Jkwc&fmoneL$?x z?}~MZXRp=oi5-|u_UZSzT{{B6!vKI^+{m7F8$d?02$;(K~ zNo30~3G45WQ|yF@F(Id@3fy+hCmf>AR+ShkNDMj)=Di+A@!^mW#68sxYdAuF>%WMPYOOiy%NC-187LVL zg)3SMQLGo>BnWXk*(X7W*<*IPudy3{ULIQe-;GEf)Ib+|0f9fh!+58 z#CZYQg(&4?SV>&B&aY!ggYgG?D5JaWF9 zt;`%f*vx3P@~V@h#hDNS_F~aVOVR>Q!AG0~jr1kmkeHCZlqL(3g)N-~ZH`oXSkpk8tZog<$>yN7zC?##I! zQ9rLE_4m5c0I!k;dP8WCH=fS(rqh|;Y#Qt>qaog%bb+^lhI$XsFt475dk@oByj?WH z+e0J0gEY$bX(aM(UFi3qF@7H!>yMy|{fWrSRZU;>Z=~`5O1i|aMXs(bG{LW@iT*3} zb^kq@q!dk7Su{nJ&{S1Pm#d-l4Kx-ZSu{Q*)gpd0lpny(iDsH~+0dK2BO zchEw;ixvT<+@jy6TS?Pm>PSnd2Q8((w2Vg4Z8V;i(^OhPvuGto}d(bBcb?5mZ=EV_XCk z);rJ+-hnP5vf<7lvf*|P+4Q3~9jF;XuQ*UMhMsqzW-{$|pk@)Rcc5kiecyqaEi@+p zH5jX3b)Y7ViX5m(QHBFGrQ|tKQ?7&R^rxZ}Zr~Wmk>i|WAQy#l1IIufqPqjfKt8Hi z1v~r&@@BWgUx?bx!47{BzICv}U+gV&j)5HSPUjfNMOMGSF_7my;2Z<_UVV5z@8R%# z$ZzG&=j{p4r`CAO9jLk6TkJs1qw=5wHT&d#2Ws}Cu9R^MIAT%i5|0z8tstU-;cN>8Sr&>mR3vShm50*lHd*ex(rYiPPdjKU2~_lVm@ zTVSZ>5G+d36>NcZ3;vxh5fcQ5XPGg0W|$%jZUf92TG8P)z|#Ng1{fZ1u>po2w*dw> zL*oV*x?603p~r22A#%NO0}P+A#ReF9ns0#3XPL#Q=ze6HF+?Ju#_liy9iY75dMsmt zK#LlYi{%RnUC~yNPTNGB9u%EvyXZ>wSiUrf^XO-|z5GI4L_5VqdPq#7UyAu?7t+IG z8SN4~=rQpO?G}He$Hm+9q&P}X$r#FQ<5 z;~va;C}U{in;7-U7uuV1nuyDJ_U0Uem2Hk14V=>k({!d9gMEv(;v%GaH3qP@0yQM; ztvg*Tl4%q2ea-Nzg1EY*PHe({68v=PGQ-i@)yd}_(n9+G;Id5w`dTe+N9;!Q0v8F20Fb%n zS|R%EjjEF9Ad&$6sLSW4WLCqB+hPGR5s>DQC)Zj?3Yk zkmEQ@PUSDiYVIg&xRbn@lX5Y4mMb`0?%-496KMBvjy%ZuDB@e-b>u>?D;If{TUp$!jK`=Kc&z#zk5hl*@#-DE zL>=Nwb$h-{r_dJi1l^6N=rKH1Pvgt=9R7yBg{SE|`3ik6U#WNSxAfCIUBAXx>3{MJ z%HXRhkE`hno=FpU7R}??bQ51kOL-1Z%3RvY-=*z*J?-M}(c^pr?d5s&GS8<2d=ni) zdxVE`j2CeR-^y`b(&&>xvUjrr#1ALbH)RmIk%*v6B7!c72)ZO9=#q$_OCo|Ui3qwR zBIuHcpi3fxE{O=bB-AtnSQzNyhtP%o8A2DN%MN@p{jgp(VH%kjiw{N6WoraoHbl_n z`UtvAj-bof2)YE-!#V*G$`HC>Yt)2kbe5$^t8c)bK_>(FIZ1YK_PX4^G< z3fV~}*)@EwTJMdwYxq31(Ywg5;q#F#;uO1vFF=@7HgYE*CVttFe#)WPy6<4Xrctr_kG{Y}Jz=j!10e-<~argxz!{HY*G6MX9Yj5$38FSO{ zyms!I1|Y^<(*VSnYZ`)>3tIYQS_5L%TIulFfSCV&u4ADKD5`bXbatT<;%^8+I#GJm zx;MfHfbcsa21GLIC`w3|e2(uHy^;Ilx-4`sTpkvuqc7kxpYQjDPHZDi#J&0~i1ut3?N-cu+IU zepcM8+MMKWNmxm$4ZYc1YL90&f9kc3Pu*PR>VX9(UoEh%Gnl1b%`vgNaW&U13~=)H zm2AjPO(mNd9639{AmVC10xJEB{Z8DV7F^ii6>T=3(>x*vnu^;?#VWBH)4M>*;caNo z6n$*l7b#cFzb_RNY&%hGwQb-UnJSXF`L94?g;l7Fcn9$24@8Prqt5dhT*kF1LwuL$ z%|8@tVO}u^7kqh)eliF_AZlX?&lk=1t;O{t1=?KNYKZGh&gph#&Dbv5mKj z?cgUr=LQQbY>`O#I~D>an4g_CkrT!(`W9jGF*e?v>K2=t#T?y=Z-u*o*l8yajT^;R z)nfFao;z+@OVG0DEqt{UM`>a(QaPC;7SqIFwG2n*Z&IXgQ_In}*4?mT!lWKD9+Ch+ zj23Ah;!9dsi;As>MGlTX5J=5biUSkYm1a{;pakUiFnR(UF~<)^(ovveIAD;GqRGSd iA>pap@yR`;wpxj{GY|~2fSMn_B538`)GB1>i2Vlw*lu9} literal 62318 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 AuK)l5 diff --git a/com.connor.chint.wuhan/bin/com/connor/chint/yunpi/command/BomSendSapController.class b/com.connor.chint.wuhan/bin/com/connor/chint/yunpi/command/BomSendSapController.class index 82fc34702001f2119e25d1f444149c0ba31969f7..ffa7a80cfa124e368d359699544f6482d3e41f20 100644 GIT binary patch delta 8258 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 delta 7222 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 Ndg1q>Un&d0{$HrxvhM%@ diff --git a/com.connor.chint.wuhan/plugin.xml b/com.connor.chint.wuhan/plugin.xml index aa402a2..21f830c 100644 --- a/com.connor.chint.wuhan/plugin.xml +++ b/com.connor.chint.wuhan/plugin.xml @@ -3,8 +3,8 @@ - - + + @@ -18,19 +18,19 @@ - - - - - - - - - - - + + + + + + + + + + + - + @@ -44,33 +44,33 @@ - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - - - + @@ -133,310 +133,310 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - + + @@ -521,30 +521,30 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + - + diff --git a/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/ExtractDiffComd.java b/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/ExtractDiffComd.java index 1a4a7f9..96aa7ff 100644 --- a/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/ExtractDiffComd.java +++ b/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/ExtractDiffComd.java @@ -74,11 +74,7 @@ public class ExtractDiffComd extends KCommand { return; } readChangeDesign(oldComponents, newComponents, tar); -<<<<<<< HEAD MessageBox.post(resource.getString("SUCC_CHANGE"), "", 2); -======= - ->>>>>>> 65c5903c8f3927b85b3c68d928802214a146ec48 } catch (TCException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -154,16 +150,10 @@ public class ExtractDiffComd extends KCommand { ChangeDesignBean changeDesignBean = itemChangeMap.get(keyItem); TCComponentItemRevision oldDesgin = changeDesignBean.getOldDesgin(); Map materialOld = getMaterialByDesign(oldDesgin); -<<<<<<< HEAD System.out.println("materialOld===>" + materialOld.toString()); TCComponentItemRevision newDesgin = changeDesignBean.getNewDesgin(); Map materialNew = getMaterialByDesign(newDesgin); -======= - TCComponentItemRevision newDesgin = changeDesignBean.getNewDesgin(); - Map materialNew = getMaterialByDesign(newDesgin); - System.out.println("materialOld===>" + materialOld.toString()); ->>>>>>> 65c5903c8f3927b85b3c68d928802214a146ec48 System.out.println("materialNew===>" + materialNew.toString()); // 比较变更前后物料BOM for (String materialNo : materialOld.keySet()) { @@ -327,11 +317,8 @@ public class ExtractDiffComd extends KCommand { if (pbomMap.containsKey(materialNo)) { PBomBean pBomBean = pbomMap.get(materialNo); // 是否PBOM -<<<<<<< HEAD System.out.println("matnrProps[1]===>" + matnrProps[1]); System.out.println("matnrProps[2]===>" + matnrProps[2] + "pBomBean.getpRevision()"+pBomBean.getpRevision()); -======= ->>>>>>> 65c5903c8f3927b85b3c68d928802214a146ec48 if (matnrProps[1].equals(Util.ZT_VAL_PBOM) && matnrProps[2].compareTo(pBomBean.getpRevision()) > 0) { pBomBean.setpMaterial(represent); pBomBean.setpRevision(matnrProps[2]); diff --git a/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/Message_zh_CN.properties b/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/Message_zh_CN.properties index e1b09a2..b97fb23 100644 --- a/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/Message_zh_CN.properties +++ b/com.connor.chint.wuhan/src/com/chint/plm/createbomdifference/Message_zh_CN.properties @@ -1,7 +1,3 @@ ERROR_NOT_CHANGE=\u8BF7\u9009\u62E9\u66F4\u6539\u901A\u77E5\u5355\u5BF9\u8C61 -<<<<<<< HEAD ERROR_NO_CHANGE=\u672A\u627E\u5230\u53D8\u66F4\u524D\u540E\u5BF9\u8C61,\u65E0\u6CD5\u63D0\u53D6\u5DEE\u5F02\u9879\uFF01 -SUCC_CHANGE=\u63D0\u53D6\u5B8C\u6210 -======= -ERROR_NO_CHANGE=\u672A\u627E\u5230\u53D8\u66F4\u524D\u540E\u5BF9\u8C61,\u65E0\u6CD5\u63D0\u53D6\u5DEE\u5F02\u9879\uFF01 ->>>>>>> 65c5903c8f3927b85b3c68d928802214a146ec48 +SUCC_CHANGE=\u63D0\u53D6\u5B8C\u6210 \ No newline at end of file diff --git a/com.connor.chint.wuhan/src/com/connor/chint/sap2/util/BomUtilWh.java b/com.connor.chint.wuhan/src/com/connor/chint/sap2/util/BomUtilWh.java index aa13846..753939e 100644 --- a/com.connor.chint.wuhan/src/com/connor/chint/sap2/util/BomUtilWh.java +++ b/com.connor.chint.wuhan/src/com/connor/chint/sap2/util/BomUtilWh.java @@ -1,5 +1,7 @@ package com.connor.chint.sap2.util; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -40,8 +42,26 @@ public class BomUtilWh { public static final String WH_FACOTRY = "M060"; public static final String PARENTTCID = "PARENTTCID"; public static final String PARENTWLBM = "PARENTWLBM"; + public static final String ZT2_WBSNO = "zt2_WBSNo"; + public static final String ZT2_MATERIALNO = "zt2_MaterialNo"; public static final String SPLIT_MSG = "/"; public static final String UID = "UID"; + public static final String detailsSql = "insert into CHINT_BOM_TO_SAP_SUM (code,factory,\"USER\",starttime,wbsno,projectno,taskstauts" + + ",plmresult,transfer,keymsg,sapresult,PROJECTUID,SERVERHOST,USERID) values " + + "(?,?,?,to_date(?,'yyyy-mm-ddhh24:mi:ss')" + ",?,?,'组织完成','未处理',?,?,'未返回',?,?,?)"; + // 获取传递BOM中最大的序列 + public static Integer getCode() throws SQLException { + String sql = "select Tab_SendBom_Sequence.nextval as sid from dual"; + ResultSet rs = SqlUtil.read(sql); + Object objs[] = new Object[1]; + int code = 0; + if (rs.next()) { + code = rs.getInt(1); + System.out.println("code:" + code); + } + SqlUtil.free(); + return code; + } /** * 写入BOM头信息到DETAILS表 @@ -51,21 +71,21 @@ public class BomUtilWh { * @param productNos 产成品物料编码 * @function */ - public static void logXmlMsg(Document interGrationList, String code, String productNos, String batchNo, + public static void logXmlMsg(Element interGrationList, String code, String productNos, String batchNo, String wbsNo, TCSession session) { String strs[] = session.getPreferenceService().getStringValues(DATABASE_TC); SqlUtil.getTCDataConnection(strs); try { - Element rootElement = interGrationList.getRootElement(); // 物料信息 - Element element = rootElement.element(WLLIST); + Element element = interGrationList.element(WLLIST); List elements = element.elements(WLCONTENTS); for (Element content : elements) { // 记录TCid UID 物料编码 - String tcId = content.elementText(PARENTTCID); + Element bomContents = content.element("BOMCONTENTS"); + String tcId = bomContents.elementText(PARENTTCID); String[] split = tcId.split(SPLIT_MSG); - String parentMantrNo = content.elementText(PARENTWLBM); - String uid = content.elementText(UID); + String parentMantrNo = bomContents.elementText(PARENTWLBM); + String uid = bomContents.elementText(UID); SqlUtil.write(logSql, new String[] { code, batchNo, WH_FACOTRY, productNos, split[0], uid, parentMantrNo, wbsNo }); } @@ -1176,7 +1196,7 @@ public class BomUtilWh { TCComponentItemRevision pRev, String groupName, List wbsList, TCSession session, String now, List needTCM_meops, Map gy_meops, Element INTERGRATIONLIST, StringBuffer errMessage, List cppRevision, String txtPath, - Map material_revs) { + Map material_revs, String batchNum) { try { String uid = pBomLine.getUid(); @@ -1274,6 +1294,8 @@ public class BomUtilWh { BOMCONTENTS.addElement("QUANTITY").setText(properties[3]); BOMCONTENTS.addElement("QUIT") .setText(pRev.getItem().getTCProperty("zt2_unit").getStringValue().toUpperCase()); + BOMCONTENTS.addElement("UID").setText(pRev.getUid()); + BOMCONTENTS.addElement("BATCHNUMBER").setText(batchNum); Element SONLIST = BOMCONTENTS.addElement("SONLIST"); // 获取工艺信息 BOPLIST BOPCONTENTS ()二级工序下的辅料放到子件 String maxSeq = "10"; @@ -1310,11 +1332,7 @@ public class BomUtilWh { material_revs.put(properties2[2], rev2); } expandAllBomPart(expands, line2, rev2, groupName, wbsList, session, now, needTCM_meops, gy_meops, - INTERGRATIONLIST, errMessage, txtPath, material_revs); - -// if (!KUtil.isEmpty(zt2_materialNo)) { -// material_revs.put(zt2_materialNo, part2Rev); -// } + INTERGRATIONLIST, errMessage, txtPath, material_revs, batchNum); } AIFComponentContext[] meops = pRev.whereReferencedByTypeRelation(new String[] { "MEProcessRevision" }, new String[] { "IMAN_METarget" }); @@ -1530,7 +1548,7 @@ public class BomUtilWh { TCComponentItemRevision pRev, String groupName, List wbsList, TCSession session, String now, List needTCM_meops, Map gy_meops, Element INTERGRATIONLIST, StringBuffer errMessage, String txtPath, - Map material_revs) { + Map material_revs, String batchNum) { try { String uid = pBomLine.getUid(); @@ -1621,6 +1639,10 @@ public class BomUtilWh { BOMCONTENTS.addElement("QUANTITY").setText(properties[3]); BOMCONTENTS.addElement("QUIT") .setText(pRev.getItem().getTCProperty("zt2_unit").getStringValue().toUpperCase()); + //新增字段UID和批次号 + BOMCONTENTS.addElement("UID").setText(pRev.getUid()); + BOMCONTENTS.addElement("BATCHNUMBER").setText(batchNum); + Element SONLIST = BOMCONTENTS.addElement("SONLIST"); // 获取工艺信息 BOPLIST BOPCONTENTS ()二级工序下的辅料放到子件 String maxSeq = "10"; @@ -1665,7 +1687,7 @@ public class BomUtilWh { material_revs.put(properties2[2], rev2); } expandAllBomPart(expands, line2, rev2, groupName, wbsList, session, now, needTCM_meops, gy_meops, - INTERGRATIONLIST, errMessage, txtPath, material_revs); + INTERGRATIONLIST, errMessage, txtPath, material_revs, batchNum); } AIFComponentContext[] meops = pRev.whereReferencedByTypeRelation(new String[] { "MEProcessRevision" }, diff --git a/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSapWhBjOp.java b/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSapWhBjOp.java index 1f27f13..7f0c948 100644 --- a/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSapWhBjOp.java +++ b/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSapWhBjOp.java @@ -18,6 +18,7 @@ import com.connor.chint.sap2.util.MyProgressBarCompent; import com.connor.chint.sap2.util.SAPMessageUtil; import com.connor.chint.sap2.util.SAPMessageUtilFram; import com.connor.chint.sap2.util.SAPUtil; +import com.connor.chint.sap2.util.SqlUtil; import com.connor.chint.sap2.util.TXTUtil; import com.teamcenter.rac.aif.AbstractAIFApplication; import com.teamcenter.rac.aif.AbstractAIFOperation; @@ -40,202 +41,246 @@ import com.teamcenter.rac.util.MessageBox; import com.teamcenter.services.rac.cad._2007_01.StructureManagement.ExpandPSData; public class BomSapWhBjOp extends AbstractAIFOperation { - private SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"); - private AbstractAIFApplication app; - private TCSession session; - private SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); - private String now; - private String groupName = ""; - private TCComponentItemType ccomponentitemtype; - public BomSapWhBjOp(AbstractAIFApplication app) { - // TODO Auto-generated constructor stub - this.app = app; - this.session = (TCSession) app.getSession(); - now = format.format(new Date()); - try { - ccomponentitemtype = (TCComponentItemType)session.getTypeComponent("ZT2_Design3D"); - } catch (TCException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - public List getCPPPRevision(TCComponentItemRevision rev2) throws TCException { - - List itemList = new ArrayList<>(); - List itemPList = new ArrayList<>(); - String id = "1ZDB300000P-"; - if(rev2.getType().equals("Part Revision")) { - String desc = rev2.getStringProperty("object_desc"); - String[] split = desc.split(" "); - if(split.length>=2) { - String[] split2 = split[1].split("-"); - if(split2.length==2) { - id = id + split2[1]; - }else if(split2.length==3) { - id = id + split2[2]; - } - } - }else if(rev2.getType().equals("ZT2_Design3DRevision")) { - String desc = rev2.getStringProperty("item_id"); - String[] split2 = desc.split("-"); - if(split2.length==2) { - id = id + split2[1]; - }else if(split2.length==3) { - id = id + split2[2]; - } - } - System.out.print("id===>"+id); - TCComponentItem find = ccomponentitemtype.find(id); - TCComponentItemRevision zztRev = find.getLatestItemRevision(); - TCComponent[] matnrs = zztRev.getRelatedComponents("representation_for"); - for(TCComponent matnr:matnrs) { - String[] properties = matnr.getProperties(new String[]{"zt2_ifpbom"}); - TCComponentItemRevision revItem = (TCComponentItemRevision)matnr; - TCComponentItem item = revItem.getItem(); - if(properties[0].equals("P") && !itemPList.contains(item)) { - itemPList.add(item); - }else if(!itemList.contains(item)){ - itemList.add(item); - } - } - if(itemPList.size()>0) { - return itemPList; - } - return itemList; - - } - public TCComponentItemRevision getPRevision(TCComponentItemRevision rev2) throws TCException { - - String zt2_MaterialNo = rev2.getStringProperty("zt2_MaterialNo"); - if(rev2.getType().equals("Part Revision")) { - String zt2_ifpbom = rev2.getProperty("zt2_ifpbom"); - if(zt2_ifpbom.equals("P")) { - return rev2; - }else { - TCComponent designRev = rev2.getRelatedComponent("TC_Is_Represented_By"); - if(designRev!=null) { - TCComponent[] matnrs = designRev.getRelatedComponents("representation_for"); - for(TCComponent matnr:matnrs) { - String[] properties = matnr.getProperties(new String[]{"zt2_ifpbom","zt2_MaterialNo"}); - if(properties[1].equals(zt2_MaterialNo) && properties[0].equals("P")) { - return (TCComponentItemRevision)matnr; - } - } - } - } - }else if(rev2.getType().equals("ZT2_Design3DRevision")) { - TCComponent[] matnrs = rev2.getRelatedComponents("representation_for"); - for(TCComponent matnr:matnrs) { - String[] properties = matnr.getProperties(new String[]{"zt2_ifpbom","zt2_MaterialNo"}); - if(properties[0].equals("P")) { - return (TCComponentItemRevision)matnr; - } - } - return (TCComponentItemRevision)matnrs[0]; - } - return rev2; - - } - public static String getXML(){ + private SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"); + private AbstractAIFApplication app; + private TCSession session; + private SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + private String now; + private String groupName = ""; + private TCComponentItemType ccomponentitemtype; + + public BomSapWhBjOp(AbstractAIFApplication app) { + // TODO Auto-generated constructor stub + this.app = app; + this.session = (TCSession) app.getSession(); + now = format.format(new Date()); + try { + ccomponentitemtype = (TCComponentItemType) session.getTypeComponent("ZT2_Design3D"); + } catch (TCException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public List getCPPPRevision(TCComponentItemRevision rev2) throws TCException { + + List itemList = new ArrayList<>(); + List itemPList = new ArrayList<>(); + String id = "1ZDB300000P-"; + if (rev2.getType().equals("Part Revision")) { + String desc = rev2.getStringProperty("object_desc"); + String[] split = desc.split(" "); + if (split.length >= 2) { + String[] split2 = split[1].split("-"); + if (split2.length == 2) { + id = id + split2[1]; + } else if (split2.length == 3) { + id = id + split2[2]; + } + } + } else if (rev2.getType().equals("ZT2_Design3DRevision")) { + String desc = rev2.getStringProperty("item_id"); + String[] split2 = desc.split("-"); + if (split2.length == 2) { + id = id + split2[1]; + } else if (split2.length == 3) { + id = id + split2[2]; + } + } + System.out.print("id===>" + id); + TCComponentItem find = ccomponentitemtype.find(id); + TCComponentItemRevision zztRev = find.getLatestItemRevision(); + TCComponent[] matnrs = zztRev.getRelatedComponents("representation_for"); + for (TCComponent matnr : matnrs) { + String[] properties = matnr.getProperties(new String[] { "zt2_ifpbom" }); + TCComponentItemRevision revItem = (TCComponentItemRevision) matnr; + TCComponentItem item = revItem.getItem(); + if (properties[0].equals("P") && !itemPList.contains(item)) { + itemPList.add(item); + } else if (!itemList.contains(item)) { + itemList.add(item); + } + } + if (itemPList.size() > 0) { + return itemPList; + } + return itemList; + + } + + public TCComponentItemRevision getPRevision(TCComponentItemRevision rev2) throws TCException { + + String zt2_MaterialNo = rev2.getStringProperty("zt2_MaterialNo"); + if (rev2.getType().equals("Part Revision")) { + String zt2_ifpbom = rev2.getProperty("zt2_ifpbom"); + if (zt2_ifpbom.equals("P")) { + return rev2; + } else { + TCComponent designRev = rev2.getRelatedComponent("TC_Is_Represented_By"); + if (designRev != null) { + TCComponent[] matnrs = designRev.getRelatedComponents("representation_for"); + for (TCComponent matnr : matnrs) { + String[] properties = matnr.getProperties(new String[] { "zt2_ifpbom", "zt2_MaterialNo" }); + if (properties[1].equals(zt2_MaterialNo) && properties[0].equals("P")) { + return (TCComponentItemRevision) matnr; + } + } + } + } + } else if (rev2.getType().equals("ZT2_Design3DRevision")) { + TCComponent[] matnrs = rev2.getRelatedComponents("representation_for"); + for (TCComponent matnr : matnrs) { + String[] properties = matnr.getProperties(new String[] { "zt2_ifpbom", "zt2_MaterialNo" }); + if (properties[0].equals("P")) { + return (TCComponentItemRevision) matnr; + } + } + return (TCComponentItemRevision) matnrs[0]; + } + return rev2; + + } + + public static String getXML() { String soapXML = "\r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + ""; + + " \r\n" + " \r\n" + " \r\n" + + " \r\n" + " \r\n" + ""; return soapXML; } - @Override - public void executeOperation() throws Exception { - // TODO Auto-generated method stub - MyProgressBarCompent comp = null; - try { - groupName = SAPUtil.getGroupID(session); - if (KUtil.isEmpty(groupName) || groupName.equalsIgnoreCase("dba")) { - MessageBox.post("当前登录组[" + groupName + "]不可使用该功能", "", MessageBox.INFORMATION); - return; - } - - InterfaceAIFComponent target = app.getTargetComponent(); - if (target == null) { - MessageBox.post("请选择图纸版本", "", MessageBox.INFORMATION); - return; - } - TCComponentItemRevision degignRev = null; - // String bmeng = "1"; - if (target.getType().equals("ZT2_Design3DRevision")) { - degignRev = (TCComponentItemRevision) target; - - } else if (target.getType().equals("Part Revision")) { - degignRev = (TCComponentItemRevision) target; - // bmeng = SAPUtil.getSAPBMENG(degignRev); - } else { - MessageBox.post("请选择图纸/物料版本", "", MessageBox.INFORMATION); - return; - } - - comp = new MyProgressBarCompent("", "正在进行部件BOM传递SAP...."); - TCComponentItemRevision pRevision = getPRevision(degignRev); //获取PBOM - List cppRevision = getCPPPRevision(degignRev); - //获取产成品 - System.out.println("cppRevision===>"+cppRevision.toString()); - List wbsList = new ArrayList(); - - StringBuffer errMessage = new StringBuffer(""); - - BomUtilWh.checkMatnr(errMessage, pRevision); - - TCComponentBOMWindowType bomWinType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); - TCComponentBOMWindow win = bomWinType.create(null); - TCComponentBOMLine setWindowTopLine = win.setWindowTopLine(pRevision.getItem(), pRevision, null, null); - //优化项:BOM全展开 - System.out.println("BOM全展开"); - Map gy_meops = new HashMap<>(32); - - String txtName = format2.format(new Date()) + getUserName(session); - String txtPath = TXTUtil.createTxt(txtName); - - Document document = DocumentHelper.parseText(getXML()); - Element rootElement = document.getRootElement(); - Element body = rootElement.element("Body"); - Element element = body.element("MT_MATERIAL_BOP_REQ"); - Element INTERGRATIONLIST = element.addElement("INTERGRATIONLIST"); - Map bomLineTree = BomToSapUtil.getBomLineTreeNodeSOA(setWindowTopLine); - List needTCM_meops = new ArrayList(); - Map material_revs = new HashMap<>(); - BomUtilWh.expandAllBomPartBj(bomLineTree, setWindowTopLine, pRevision, - groupName,wbsList,session,now,needTCM_meops,gy_meops,INTERGRATIONLIST,errMessage,cppRevision,txtPath,material_revs); - System.out.println("BOM全document===>"+document.asXML()); - if(errMessage.length()>0) { - TXTUtil.writeTXT(txtPath, "----------------BOM异常--------------"); - TXTUtil.writeTXT(txtPath, errMessage.toString()); - TXTUtil.writeTXT(txtPath, "----------BOM信息-----------"); - new SAPMessageUtilFram("", "BOM传递SAP异常:\n" + errMessage.toString()).show(); - win.close(); - }else { - new BomSendSapOp(session,document.asXML(),txtPath,gy_meops).executeOperation(); - win.close(); - } - if (comp != null) { - comp.setVisible(false); - } - TCComponentDataset dataset = TXTUtil.createDataset(txtPath, txtName, session); - System.out.println("日志所挂对象:" + pRevision); - KUtil.setByPass(true); - TXTUtil.addTxttoTarget(pRevision, dataset); - MessageBox.post("BOM数据推送完成..","提示",2); - } catch (Exception e) { - e.printStackTrace(); - } finally { - KUtil.setByPass(false); - } - } - public String getUserName(TCSession session) throws TCException { - TCComponentUser user = session.getUser(); - session.getUserName(); - return user.getTCProperty("user_name").getDisplayValue(); - } + + @Override + public void executeOperation() throws Exception { + // TODO Auto-generated method stub + MyProgressBarCompent comp = null; + try { + + String strs[] = session.getPreferenceService().getStringValues("database_tc"); + if (SqlUtil.getTCDataConnection(strs) == null) { + MessageBox.post("数据库连接失败,请检查首选项", "", 2); + return; + } + String code = BomUtilWh.getCode().toString(); + + + String batchNum = code + "-00001"; + + groupName = SAPUtil.getGroupID(session); + if (KUtil.isEmpty(groupName) || groupName.equalsIgnoreCase("dba")) { + MessageBox.post("当前登录组[" + groupName + "]不可使用该功能", "", MessageBox.INFORMATION); + return; + } + + InterfaceAIFComponent target = app.getTargetComponent(); + if (target == null) { + MessageBox.post("请选择图纸版本", "", MessageBox.INFORMATION); + return; + } + TCComponentItemRevision degignRev = null; + // String bmeng = "1"; + if (target.getType().equals("ZT2_Design3DRevision")) { + degignRev = (TCComponentItemRevision) target; + + } else if (target.getType().equals("Part Revision")) { + degignRev = (TCComponentItemRevision) target; + // bmeng = SAPUtil.getSAPBMENG(degignRev); + } else { + MessageBox.post("请选择图纸/物料版本", "", MessageBox.INFORMATION); + return; + } + + comp = new MyProgressBarCompent("", "正在进行部件BOM传递SAP...."); + TCComponentItemRevision pRevision = getPRevision(degignRev); // 获取PBOM + List cppRevision = getCPPPRevision(degignRev); + // 获取产成品 + System.out.println("cppRevision===>" + cppRevision.toString()); + + //记录SUM表信息 + String userName = session.getUser().getProperty("user_name"); + String dataTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); +// String zt2_WBSNo = project.getStringProperty("zt2_WBSNo"); +// String object_name = project.getStringProperty("object_name"); + String userId = session.getUser().getUserId(); +// String code = BomUtilWh.getCode().toString(); + StringBuilder productNosBuild = new StringBuilder(""); + StringBuilder productUidsBuild = new StringBuilder(""); + for(TCComponentItem cppItem:cppRevision) { + TCComponentItemRevision latestItemRevision = cppItem.getLatestItemRevision(); + String property = latestItemRevision.getProperty(BomUtilWh.ZT2_MATERIALNO); + productNosBuild.append(property).append(";"); + productUidsBuild.append(latestItemRevision.getUid()).append(";"); + } + String substring = productUidsBuild.toString().substring(0, productUidsBuild.length() - 1); + String serverHostname = session.getServerHostname(); + String wbsNo = cppRevision.get(0).getLatestItemRevision().getProperty(BomUtilWh.ZT2_WBSNO); + SqlUtil.write(BomUtilWh.detailsSql, new String[] { code, "M060", userName, dataTime, wbsNo, + "", "部件传递", substring, "", serverHostname, userId }); + + SqlUtil.freeAll(); + List wbsList = new ArrayList(); + + StringBuffer errMessage = new StringBuffer(""); + + BomUtilWh.checkMatnr(errMessage, pRevision); + + TCComponentBOMWindowType bomWinType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); + TCComponentBOMWindow win = bomWinType.create(null); + TCComponentBOMLine setWindowTopLine = win.setWindowTopLine(pRevision.getItem(), pRevision, null, null); + // 优化项:BOM全展开 + System.out.println("BOM全展开"); + Map gy_meops = new HashMap<>(32); + + String txtName = format2.format(new Date()) + getUserName(session); + String txtPath = TXTUtil.createTxt(txtName); + + Document document = DocumentHelper.parseText(getXML()); + Element rootElement = document.getRootElement(); + Element body = rootElement.element("Body"); + Element element = body.element("MT_MATERIAL_BOP_REQ"); + Element INTERGRATIONLIST = element.addElement("INTERGRATIONLIST"); + Map bomLineTree = BomToSapUtil.getBomLineTreeNodeSOA(setWindowTopLine); + List needTCM_meops = new ArrayList(); + Map material_revs = new HashMap<>(); + BomUtilWh.expandAllBomPartBj(bomLineTree, setWindowTopLine, pRevision, groupName, wbsList, session, now, + needTCM_meops, gy_meops, INTERGRATIONLIST, errMessage, cppRevision, txtPath, material_revs, batchNum); + System.out.println("BOM全document===>" + document.asXML()); + if (errMessage.length() > 0) { + TXTUtil.writeTXT(txtPath, "----------------BOM异常--------------"); + TXTUtil.writeTXT(txtPath, errMessage.toString()); + TXTUtil.writeTXT(txtPath, "----------BOM信息-----------"); +// BomUtilWh.logXmlMsg(INTERGRATIONLIST, code, productNosBuild.toString(), batchNum, pRevision.getProperty(BomUtilWh.ZT2_WBSNO), session); + new SAPMessageUtilFram("", "BOM传递SAP异常:\n" + errMessage.toString()).show(); + win.close(); + } else { + //记录产成品的物料编码 +// StringBuilder productNosBuild = new StringBuilder(""); +// for(TCComponentItem cppItem:cppRevision) { +// String property = cppItem.getLatestItemRevision().getProperty(BomUtilWh.ZT2_MATERIALNO); +// productNosBuild.append(property).append(";"); +// } + BomUtilWh.logXmlMsg(INTERGRATIONLIST, code, productNosBuild.toString(), batchNum, wbsNo, session); + new BomSendSapOp(session, document.asXML(), txtPath, gy_meops).executeOperation(); + win.close(); + } + if (comp != null) { + comp.setVisible(false); + } + TCComponentDataset dataset = TXTUtil.createDataset(txtPath, txtName, session); + System.out.println("日志所挂对象:" + pRevision); + KUtil.setByPass(true); + TXTUtil.addTxttoTarget(pRevision, dataset); + MessageBox.post("BOM数据推送完成..", "提示", 2); + } catch (Exception e) { + e.printStackTrace(); + } finally { + KUtil.setByPass(false); + SqlUtil.freeAll(); + } + } + + public String getUserName(TCSession session) throws TCException { + TCComponentUser user = session.getUser(); + session.getUserName(); + return user.getTCProperty("user_name").getDisplayValue(); + } } diff --git a/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSendSapController.java b/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSendSapController.java index 07669a5..53c0d1a 100644 --- a/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSendSapController.java +++ b/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSendSapController.java @@ -32,6 +32,7 @@ import com.connor.chint.sap2.util.KUtil; import com.connor.chint.sap2.util.MyProgressBarCompent; import com.connor.chint.sap2.util.SAPMessageUtil; import com.connor.chint.sap2.util.SAPUtil; +import com.connor.chint.sap2.util.SqlUtil; import com.connor.chint.sap2.util.TXTUtil; import com.squareup.okhttp.Credentials; import com.squareup.okhttp.MediaType; @@ -62,375 +63,411 @@ import com.teamcenter.rac.util.MessageBox; import com.teamcenter.services.rac.cad._2007_01.StructureManagement.ExpandPSData; public class BomSendSapController { - - public static final String TYPE_REV_PART = "Part Revision"; - public TCComponent project; //项目信息 - public String groupName; - public String zt2_ProjectNo; - public String wbs; - public AbstractAIFApplication app; - private TCSession session; - public List partList = new ArrayList<>(); - public BomSendSapWhFram dialog; - private SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"); - public BomSendSapController(BomSendSapWhFram sapzyDialog, AbstractAIFApplication app) { - this.app = app; - this.session = (TCSession) app.getSession(); - } - - // 检查选定项目下是否存在产成品 - public boolean checkTargets() throws Exception { - InterfaceAIFComponent target = app.getTargetComponent(); - if (target == null || !(target instanceof TCComponent)) { - return false; - } - project = (TCComponent) target; - - zt2_ProjectNo = project.getProperty("zt2_ProjectNo"); - wbs = project.getProperty("zt2_WBSNo"); - System.out.println("检查对象:" + target); - List partRevList = KUtil.getCCPFromProject(project); - - for(TCComponentItemRevision rev:partRevList) { - String cType = rev.getType(); + + public static final String TYPE_REV_PART = "Part Revision"; + public TCComponent project; // 项目信息 + public String groupName; + public String zt2_ProjectNo; + public String wbs; + public AbstractAIFApplication app; + private TCSession session; + public List partList = new ArrayList<>(); + public BomSendSapWhFram dialog; + private SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"); + + public BomSendSapController(BomSendSapWhFram sapzyDialog, AbstractAIFApplication app) { + this.app = app; + this.session = (TCSession) app.getSession(); + } + + // 检查选定项目下是否存在产成品 + public boolean checkTargets() throws Exception { + InterfaceAIFComponent target = app.getTargetComponent(); + if (target == null || !(target instanceof TCComponent)) { + return false; + } + project = (TCComponent) target; + + zt2_ProjectNo = project.getProperty("zt2_ProjectNo"); + wbs = project.getProperty("zt2_WBSNo"); + System.out.println("检查对象:" + target); + List partRevList = KUtil.getCCPFromProject(project); + + for (TCComponentItemRevision rev : partRevList) { + String cType = rev.getType(); // System.out.println(">> 找到子对象:" + cName + "|" + cType); - if (TYPE_REV_PART.equals(cType)) { - PartBean bean = new PartBean(rev, partList.size() + 1,""); - SAPPushBOMBean.readUser(bean, rev, groupName, session); - bean.setPSPID(project.getProperty("zt2_ProjectNo")); - partList.add(bean); - } - } - if (partList.size() == 0) { - return false; - } - return true; - } - - public String sapState = ""; - private TCComponent released_Red; - private TCComponent released_Yellow; - private TCComponent released_Green; - - public void getSapState() throws TCException { - TCComponentListOfValues unitLov = KUtil.getLov(session, "zt2_SapState"); - if (unitLov != null) { - ListOfValuesInfo listOfValues = unitLov.getListOfValues(); - String[] realval = listOfValues.getStringListOfValues(); - for (int i = 0; i < realval.length; i++) { - String disval = listOfValues.getDisplayableValue(realval[i]); - System.out.println("显示值:" + disval + ";真实值:" + realval[i]); - if (disval.equals("已传")) { - sapState = realval[i]; - } - - } - - } - - TCComponentReleaseStatusType releaseType = (TCComponentReleaseStatusType) session - .getTypeComponent("ReleaseStatus"); - - released_Green = releaseType.create("ZT2_Green"); - released_Green.save(); - released_Green.unlock(); - released_Red = releaseType.create("ZT2_Red"); - released_Red.save(); - released_Red.unlock(); - released_Yellow = releaseType.create("ZT2_Yellow"); - released_Yellow.save(); - released_Yellow.unlock(); - } - private SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); - - public static String getXML(){ + if (TYPE_REV_PART.equals(cType)) { + PartBean bean = new PartBean(rev, partList.size() + 1, ""); + SAPPushBOMBean.readUser(bean, rev, groupName, session); + bean.setPSPID(project.getProperty("zt2_ProjectNo")); + partList.add(bean); + } + } + if (partList.size() == 0) { + return false; + } + return true; + } + + public String sapState = ""; + private TCComponent released_Red; + private TCComponent released_Yellow; + private TCComponent released_Green; + + public void getSapState() throws TCException { + TCComponentListOfValues unitLov = KUtil.getLov(session, "zt2_SapState"); + if (unitLov != null) { + ListOfValuesInfo listOfValues = unitLov.getListOfValues(); + String[] realval = listOfValues.getStringListOfValues(); + for (int i = 0; i < realval.length; i++) { + String disval = listOfValues.getDisplayableValue(realval[i]); + System.out.println("显示值:" + disval + ";真实值:" + realval[i]); + if (disval.equals("已传")) { + sapState = realval[i]; + } + + } + + } + + TCComponentReleaseStatusType releaseType = (TCComponentReleaseStatusType) session + .getTypeComponent("ReleaseStatus"); + + released_Green = releaseType.create("ZT2_Green"); + released_Green.save(); + released_Green.unlock(); + released_Red = releaseType.create("ZT2_Red"); + released_Red.save(); + released_Red.unlock(); + released_Yellow = releaseType.create("ZT2_Yellow"); + released_Yellow.save(); + released_Yellow.unlock(); + } + + private SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); + + public static String getXML() { String soapXML = "\r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + " \r\n" - + ""; + + " \r\n" + " \r\n" + " \r\n" + + " \r\n" + " \r\n" + ""; return soapXML; } - public TCComponentItemRevision getPRevision(TCComponentItemRevision rev2) throws TCException { - - String zt2_MaterialNo = rev2.getStringProperty("zt2_MaterialNo"); - if(rev2.getType().equals("Part Revision")) { - String zt2_ifpbom = rev2.getProperty("zt2_ifpbom"); - if(zt2_ifpbom.equals("P")) { - return rev2; - }else { - TCComponent designRev = rev2.getRelatedComponent("TC_Is_Represented_By"); - if(designRev!=null) { - TCComponent[] matnrs = designRev.getRelatedComponents("representation_for"); - for(TCComponent matnr:matnrs) { - String[] properties = matnr.getProperties(new String[]{"zt2_ifpbom","zt2_MaterialNo"}); - if(properties[1].equals(zt2_MaterialNo) && properties[0].equals("P")) { - return (TCComponentItemRevision)matnr; - } - } - } - } - } - return rev2; - - } - public String getUserName(TCSession session) throws TCException { - TCComponentUser user = session.getUser(); - session.getUserName(); - return user.getTCProperty("user_name").getDisplayValue(); - } - public void sendSap() { - try { - List selectedParts = getSelectedParts(); - String now = format.format(new Date()); - MyProgressBarCompent comp = null; -// try { - String txtName = format2.format(new Date()) + getUserName(session); - String txtPath = TXTUtil.createTxt(txtName); - comp = new MyProgressBarCompent("", "正在进行项目BOM传递......"); - StringBuffer errMessageAll = new StringBuffer(""); - StringBuffer sendMessageAll = new StringBuffer(""); - - //2024 1 22新增逻辑往CHINT_BOM_TO_SAP_SUM - project.getProperty("zt2_WBSNo"); - //产成品BOM组织时除了产成品不同,其他相同 BOM结构是一样的 - for(PartBean bean : selectedParts) { - - Document document = DocumentHelper.parseText(getXML()); - Element rootElement = document.getRootElement(); - Element body = rootElement.element("Body"); - Element element = body.element("MT_MATERIAL_BOP_REQ"); - Element INTERGRATIONLIST = element.addElement("INTERGRATIONLIST"); - - TCComponentItemRevision rev2 = getPRevision(bean.part); - - StringBuffer errMessage = new StringBuffer(""); - + + public TCComponentItemRevision getPRevision(TCComponentItemRevision rev2) throws TCException { + + String zt2_MaterialNo = rev2.getStringProperty("zt2_MaterialNo"); + if (rev2.getType().equals("Part Revision")) { + String zt2_ifpbom = rev2.getProperty("zt2_ifpbom"); + if (zt2_ifpbom.equals("P")) { + return rev2; + } else { + TCComponent designRev = rev2.getRelatedComponent("TC_Is_Represented_By"); + if (designRev != null) { + TCComponent[] matnrs = designRev.getRelatedComponents("representation_for"); + for (TCComponent matnr : matnrs) { + String[] properties = matnr.getProperties(new String[] { "zt2_ifpbom", "zt2_MaterialNo" }); + if (properties[1].equals(zt2_MaterialNo) && properties[0].equals("P")) { + return (TCComponentItemRevision) matnr; + } + } + } + } + } + return rev2; + + } + + public String getUserName(TCSession session) throws TCException { + TCComponentUser user = session.getUser(); + session.getUserName(); + return user.getTCProperty("user_name").getDisplayValue(); + } + + public void sendSap() { + try { + + String strs[] = session.getPreferenceService().getStringValues("database_tc"); + if (SqlUtil.getTCDataConnection(strs) == null) { + MessageBox.post("数据库连接失败,请检查首选项", "", 2); + return; + } + List selectedParts = getSelectedParts(); + // 记录SUM表信息 + String userName = session.getUser().getProperty("user_name"); + String dataTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); + String zt2_WBSNo = project.getStringProperty("zt2_WBSNo"); + String object_name = project.getStringProperty("object_name"); + String userId = session.getUser().getUserId(); + String code = BomUtilWh.getCode().toString(); + StringBuilder productNosBuild = new StringBuilder(""); + StringBuilder productUidsBuild = new StringBuilder(""); + for (PartBean cppItem : selectedParts) { + String property = cppItem.part.getProperty(BomUtilWh.ZT2_MATERIALNO); + productNosBuild.append(property).append(";"); + productUidsBuild.append(cppItem.part.getUid()).append(";"); + } + String substring = productUidsBuild.toString().substring(0, productUidsBuild.length() - 1); + String serverHostname = session.getServerHostname(); + SqlUtil.write(BomUtilWh.detailsSql, new String[] { code, "M060", userName, dataTime, zt2_WBSNo, object_name, + "产成品传递", substring, project.getUid(), serverHostname, userId }); + SqlUtil.freeAll(); + // 存在多个产成品时 下面的PBOM是一样的,只需要记录一次日志新的 + boolean flag = true; + String batchNum = code + "-00001"; + + String now = format.format(new Date()); + MyProgressBarCompent comp = null; + + String txtName = format2.format(new Date()) + getUserName(session); + String txtPath = TXTUtil.createTxt(txtName); + comp = new MyProgressBarCompent("", "正在进行项目BOM传递......"); + StringBuffer errMessageAll = new StringBuffer(""); + StringBuffer sendMessageAll = new StringBuffer(""); + + // 2024 1 22新增逻辑往CHINT_BOM_TO_SAP_SUM +// project.getProperty("zt2_WBSNo"); + // 产成品BOM组织时除了产成品不同,其他相同 BOM结构是一样的 + // 记录产成品的物料编码 + + for (PartBean bean : selectedParts) { + + Document document = DocumentHelper.parseText(getXML()); + Element rootElement = document.getRootElement(); + Element body = rootElement.element("Body"); + Element element = body.element("MT_MATERIAL_BOP_REQ"); + Element INTERGRATIONLIST = element.addElement("INTERGRATIONLIST"); + + TCComponentItemRevision rev2 = getPRevision(bean.part); + + StringBuffer errMessage = new StringBuffer(""); + // BomUtilWh.checkMatnr(errMessage, rev2); - - TCComponentBOMWindowType bomWinType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); - TCComponentBOMWindow win = bomWinType.create(null); - TCComponentBOMLine setWindowTopLine = win.setWindowTopLine(rev2.getItem(), rev2, null, null); - //优化项:BOM全展开 - System.out.println("BOM全展开"); - Map gy_meops = new HashMap<>(32); - List needTCM_meops = new ArrayList(); - //三种情况有PBOM传PDBOM,没PBOM传EBOM,没EBOM传图纸BOM - Map bomLineTree = BomToSapUtil.getBomLineTreeNodeSOA(setWindowTopLine); - List wbsList = new ArrayList(); - // 记录物料图纸关系的集合 - Map material_revs = new HashMap<>(); - BomUtilWh.expandAllBomPart(bomLineTree, setWindowTopLine, rev2, - groupName,wbsList,session,now,needTCM_meops,gy_meops,INTERGRATIONLIST,errMessage,txtPath,material_revs); - System.out.println("BOM全document===>"+document.asXML()); - if(errMessage.length()>0) { - TXTUtil.writeTXT(txtPath, "----------------BOM异常--------------"); - TXTUtil.writeTXT(txtPath, errMessage.toString()); - TXTUtil.writeTXT(txtPath, "----------BOM信息-----------"); - errMessageAll.append(errMessage); + + TCComponentBOMWindowType bomWinType = (TCComponentBOMWindowType) session.getTypeComponent("BOMWindow"); + TCComponentBOMWindow win = bomWinType.create(null); + TCComponentBOMLine setWindowTopLine = win.setWindowTopLine(rev2.getItem(), rev2, null, null); + // 优化项:BOM全展开 + System.out.println("BOM全展开"); + Map gy_meops = new HashMap<>(32); + List needTCM_meops = new ArrayList(); + // 三种情况有PBOM传PDBOM,没PBOM传EBOM,没EBOM传图纸BOM + Map bomLineTree = BomToSapUtil.getBomLineTreeNodeSOA(setWindowTopLine); + List wbsList = new ArrayList(); + // 记录物料图纸关系的集合 + Map material_revs = new HashMap<>(); + // 2024 1 24 新加字段 UID 和 BATCHNUMBER + BomUtilWh.expandAllBomPart(bomLineTree, setWindowTopLine, rev2, groupName, wbsList, session, now, + needTCM_meops, gy_meops, INTERGRATIONLIST, errMessage, txtPath, material_revs, batchNum); + System.out.println("BOM全document===>" + document.asXML()); + if (errMessage.length() > 0) { + TXTUtil.writeTXT(txtPath, "----------------BOM异常--------------"); + TXTUtil.writeTXT(txtPath, errMessage.toString()); + TXTUtil.writeTXT(txtPath, "----------BOM信息-----------"); + errMessageAll.append(errMessage); // new SAPMessageUtil("", "BOM传递SAP异常:\n" + errMessage.toString()); - win.close(); - }else { + win.close(); + } else { // new BomSendSapOp(session,document.asXML(),txtPath,gy_meops).executeOperation(); - //记录XML信息到CHINT_BOM_TO_SAP_DETIALS - - sendMessageAll.append(SendToSap(txtPath,document.asXML())); - win.close(); - } - TCComponentDataset dataset = TXTUtil.createDataset(txtPath, txtName, session); - System.out.println("日志所挂对象:" + rev2); - KUtil.setByPass(true); - TXTUtil.addTxttoTarget(rev2, dataset); - KUtil.setByPass(false); - } - if(comp!=null) { - comp.setVisible(false); - } - if(errMessageAll.length()>0) { - new SAPMessageUtil("", "BOM传递SAP异常:\n" + errMessageAll.toString()); - }else if(sendMessageAll.length()>0) { - new SAPMessageUtil("", "BOM推送异常:\n" + sendMessageAll.toString()); - }else { - MessageBox.post("BOM数据推送完成..","提示",2); - } - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } - - public List getSelectedParts() throws Exception { - List selectedParts = new ArrayList<>(); - int rowCnt = dialog.t_part.getRowCount(); - for (int i = 0; i < rowCnt; i++) { - System.out.println(dialog.t_part.getValueAt(i, 0)); - if ("true".equals(dialog.t_part.getValueAt(i, 0).toString())) { - PartBean bean = (PartBean) dialog.t_part.getValueAt(i, 5); - System.out.println("准备传递对象:" + bean); - if (bean != null) { - /* - * if(bean.factoryNo==null) { throw new Exception("对象<"+bean.part+">没有找到出厂编号"); - * } - */ - selectedParts.add(bean); - } - } - } - return selectedParts; - } - - public StringBuffer SendToSap(String txtPath,String wsdlString) throws IOException { + // 记录XML信息到CHINT_BOM_TO_SAP_DETIALS + if (flag) { + flag = false; + BomUtilWh.logXmlMsg(INTERGRATIONLIST, code, productNosBuild.toString(), batchNum, wbs, session); + } + sendMessageAll.append(SendToSap(txtPath, document.asXML())); + win.close(); + } + TCComponentDataset dataset = TXTUtil.createDataset(txtPath, txtName, session); + System.out.println("日志所挂对象:" + rev2); + KUtil.setByPass(true); + TXTUtil.addTxttoTarget(rev2, dataset); + KUtil.setByPass(false); + } + if (comp != null) { + comp.setVisible(false); + } + if (errMessageAll.length() > 0) { + new SAPMessageUtil("", "BOM传递SAP异常:\n" + errMessageAll.toString()); + } else if (sendMessageAll.length() > 0) { + new SAPMessageUtil("", "BOM推送异常:\n" + sendMessageAll.toString()); + } else { + MessageBox.post("BOM数据推送完成..", "提示", 2); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + SqlUtil.freeAll(); + } + + } + + public List getSelectedParts() throws Exception { + List selectedParts = new ArrayList<>(); + int rowCnt = dialog.t_part.getRowCount(); + for (int i = 0; i < rowCnt; i++) { + System.out.println(dialog.t_part.getValueAt(i, 0)); + if ("true".equals(dialog.t_part.getValueAt(i, 0).toString())) { + PartBean bean = (PartBean) dialog.t_part.getValueAt(i, 5); + System.out.println("准备传递对象:" + bean); + if (bean != null) { + /* + * if(bean.factoryNo==null) { throw new Exception("对象<"+bean.part+">没有找到出厂编号"); + * } + */ + selectedParts.add(bean); + } + } + } + return selectedParts; + } + + public StringBuffer SendToSap(String txtPath, String wsdlString) throws IOException { // new BomSendSapOp(session,document.asXML(),txtPath,gy_meops).executeOperation(); - TXTUtil.writeTXT(txtPath, "----------------BOM传递数据--------------"); - TXTUtil.writeTXT(txtPath, wsdlString); - TXTUtil.writeTXT(txtPath, "----------BOM传递数据-----------"); - - //推送SAP - String[] stringValues = session.getPreferenceService().getStringValues("CHINT_WhBomUrl"); - String sapUrl = ""; - String momUrl = ""; - for(String stringValue:stringValues) { - if(stringValue.startsWith("SAP:1=")) { - sapUrl = stringValue.replaceAll("SAP:1=", ""); - }else if(stringValue.startsWith("MOM:1=")) { - momUrl = stringValue.replaceAll("MOM:1=", ""); - } - } - StringBuffer sendSap = sendSap(sapUrl,wsdlString,txtPath); - StringBuffer sendMom = sendMom(momUrl,wsdlString,txtPath); - StringBuffer errBuffer = new StringBuffer(""); - if(sendSap.length()>0) { - errBuffer.append("推送SAP异常:").append("\n"); - errBuffer.append(sendSap); - //new SAPMessageUtil("", "s:\n" + errBuffer.toString()); - } - if(sendMom.length()>0) { - errBuffer.append("推送MOM异常:").append("\n"); - errBuffer.append(sendMom); - } + TXTUtil.writeTXT(txtPath, "----------------BOM传递数据--------------"); + TXTUtil.writeTXT(txtPath, wsdlString); + TXTUtil.writeTXT(txtPath, "----------BOM传递数据-----------"); + + // 推送SAP + String[] stringValues = session.getPreferenceService().getStringValues("CHINT_WhBomUrl_YB"); + String sapUrl = ""; + String momUrl = ""; + for (String stringValue : stringValues) { + if (stringValue.startsWith("SAP:1=")) { + sapUrl = stringValue.replaceAll("SAP:1=", ""); + } else if (stringValue.startsWith("MOM:1=")) { + momUrl = stringValue.replaceAll("MOM:1=", ""); + } + } + StringBuffer sendSap = sendSap(sapUrl, wsdlString, txtPath); + StringBuffer sendMom = sendMom(momUrl, wsdlString, txtPath); + StringBuffer errBuffer = new StringBuffer(""); + if (sendSap.length() > 0) { + errBuffer.append("推送SAP异常:").append("\n"); + errBuffer.append(sendSap); + // new SAPMessageUtil("", "s:\n" + errBuffer.toString()); + } + if (sendMom.length() > 0) { + errBuffer.append("推送MOM异常:").append("\n"); + errBuffer.append(sendMom); + } // if(errBuffer.length()>0) { // new SAPMessageUtil("", "推送结果异常:\n" + errBuffer.toString()); // } - return errBuffer; - } - public StringBuffer sendSap(String url,String wsdlString,String txtPath) throws IOException { - - StringBuffer errBuffer = new StringBuffer(""); - if(!url.contains("http")) { - return errBuffer; - } - OkHttpClient client = new OkHttpClient(); - client.setConnectTimeout(100, TimeUnit.SECONDS); - client.setReadTimeout(100, TimeUnit.SECONDS); + return errBuffer; + } + + public StringBuffer sendSap(String url, String wsdlString, String txtPath) throws IOException { + + StringBuffer errBuffer = new StringBuffer(""); + if (!url.contains("http")) { + return errBuffer; + } + OkHttpClient client = new OkHttpClient(); + client.setConnectTimeout(100, TimeUnit.SECONDS); + client.setReadTimeout(100, TimeUnit.SECONDS); // Authenticator authenticator = client.setAuthenticator(new Au); - String credential = "";//Credentials.basic("shpodev", "sap@2019"); - if(url.contains("192.168.0.184")) { - credential = Credentials.basic("shpodev", "sap@2019"); - }else { - credential = Credentials.basic("shplm", "sap@2019"); - } - MediaType mediaType = MediaType.parse("application/xml"); - RequestBody body = RequestBody.create(mediaType,wsdlString); - //http://192.168.0.184:50100/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_CHINT_ELECTRIC&receiverParty=&receiverService=&interface=SIO_MATERIAL_BOP_PLM_SYN&interfaceNamespace=urn:chintelectric.com:xi:plm - Request request = new Request.Builder() - .url(url) - .method("POST", body) - .header("Authorization", credential) - .addHeader("Content-Type", "application/xml") - .build(); - Response response = client.newCall(request).execute(); - Document document = null; - - try { - String string = response.body().string(); + String credential = "";// Credentials.basic("shpodev", "sap@2019"); + if (url.contains("192.168.0.184") || url.contains("gfpot01")) { + credential = Credentials.basic("po_rfc", "1qaz!QAZ"); + } else { + credential = Credentials.basic("shplm", "sap@2019"); + } + MediaType mediaType = MediaType.parse("application/xml"); + RequestBody body = RequestBody.create(mediaType, wsdlString); + // http://192.168.0.184:50100/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_CHINT_ELECTRIC&receiverParty=&receiverService=&interface=SIO_MATERIAL_BOP_PLM_SYN&interfaceNamespace=urn:chintelectric.com:xi:plm + Request request = new Request.Builder().url(url).method("POST", body).header("Authorization", credential) + .addHeader("Content-Type", "application/xml").build(); + Response response = client.newCall(request).execute(); + Document document = null; + + try { + String string = response.body().string(); // System.out.println("response.body().string()==>"+string); - TXTUtil.writeTXT(txtPath, "----------------BOM传递SAP结果--------------"); - TXTUtil.writeTXT(txtPath, string); - TXTUtil.writeTXT(txtPath, "----------BOM传递SAP结果-----------"); - document = DocumentHelper.parseText(string); - Element rootElement = document.getRootElement(); - Element bodys = rootElement.element("Body"); - Element elements = bodys.element("MT_MATERIAL_BOP_RSP"); -// String attributeValue = elements.get(0).attributeValue("CODE"); - List ztable = elements.elements("ZTABLE_RETURN"); - for(Element zret:ztable) { - String status = zret.elementText("TYPE"); - if(status.equals("E")) { - String attributeValue = zret.elementText("MESSAGE"); - String MATNR = zret.elementText("MATNR"); - if(MATNR!=null) { - attributeValue = attributeValue+",在"+MATNR+"BOM中"; - } -// String gbk = new String(attributeValue.getBytes("GBK"), "UTF-8"); - System.out.println(attributeValue); - errBuffer.append(attributeValue).append("\n"); - } - } - } catch (DocumentException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - return errBuffer; + TXTUtil.writeTXT(txtPath, "----------------BOM传递SAP结果--------------"); + TXTUtil.writeTXT(txtPath, string); + TXTUtil.writeTXT(txtPath, "----------BOM传递SAP结果-----------"); +// document = DocumentHelper.parseText(string); +// Element rootElement = document.getRootElement(); +// Element bodys = rootElement.element("Body"); +// Element elements = bodys.element("MT_MATERIAL_BOP_RSP"); +//// String attributeValue = elements.get(0).attributeValue("CODE"); +// List ztable = elements.elements("ZTABLE_RETURN"); +// for (Element zret : ztable) { +// String status = zret.elementText("TYPE"); +// if (status.equals("E")) { +// String attributeValue = zret.elementText("MESSAGE"); +// String MATNR = zret.elementText("MATNR"); +// if (MATNR != null) { +// attributeValue = attributeValue + ",在" + MATNR + "BOM中"; +// } +//// String gbk = new String(attributeValue.getBytes("GBK"), "UTF-8"); +// System.out.println(attributeValue); +// errBuffer.append(attributeValue).append("\n"); +// } +// } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return errBuffer; // if(errBuffer.length()>0) { // new SAPMessageUtil("", "BOM物料异常:\n" + errBuffer.toString()); // } - } - public String sendJsonHttpPost(String url, String xmlContent,String txtPath) { - - CloseableHttpClient httpclient = HttpClients.createDefault(); - String responseInfo = null; - try { - HttpPost httpPost = new HttpPost(url); - // 设置请求头部 - httpPost.setHeader("Content-Type", "application/xml"); - - // 设置请求体 - StringEntity entityReq = new StringEntity(xmlContent, StandardCharsets.UTF_8); - - if(url.contains("10.128.11.12")) { - httpPost.addHeader("Authorization", "Basic MTQyODI0Mjg2NDU2ODMwNzcxNDpkREF3TWpveE1EQXg="); + } + + public String sendJsonHttpPost(String url, String xmlContent, String txtPath) { + + CloseableHttpClient httpclient = HttpClients.createDefault(); + String responseInfo = null; + try { + HttpPost httpPost = new HttpPost(url); + // 设置请求头部 + httpPost.setHeader("Content-Type", "application/xml"); + + // 设置请求体 + StringEntity entityReq = new StringEntity(xmlContent, StandardCharsets.UTF_8); + + if (url.contains("10.128.11.12")) { + httpPost.addHeader("Authorization", "Basic MTQyODI0Mjg2NDU2ODMwNzcxNDpkREF3TWpveE1EQXg="); // http://10.128.11.12:7788/gateway/chint/bop-sync - }else { - httpPost.addHeader("Authorization", "Basic MTcxNDkwNTkyNTc2MjUzNTQyNjpkREF3TWpveE1EQXg="); - } + } else { + httpPost.addHeader("Authorization", "Basic MTcxNDkwNTkyNTc2MjUzNTQyNjpkREF3TWpveE1EQXg="); + } // - httpPost.setEntity(entityReq); - - CloseableHttpResponse response = httpclient.execute(httpPost); - HttpEntity entity = response.getEntity(); - int status = response.getStatusLine().getStatusCode(); - String string = EntityUtils.toString(entity); - System.out.println("MOM status:" + status + "responseInfo:" + string); - TXTUtil.writeTXT(txtPath, "----------------BOM传递MOM结果--------------"); - TXTUtil.writeTXT(txtPath, "MOM status:" + status); - TXTUtil.writeTXT(txtPath, "responseInfo:" + string); - TXTUtil.writeTXT(txtPath, "----------BOM传递MOM结果-----------"); - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - httpclient.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return responseInfo; - } - public StringBuffer sendMom(String url,String wsdlString,String txtPath) throws IOException { - - - StringBuffer errBuffer = new StringBuffer(""); - if(!url.contains("http")) { - return errBuffer; - } - String string = sendJsonHttpPost(url,wsdlString,txtPath); //"http://10.128.11.12:7788/gateway/chint/bop-sync" - - return errBuffer; - - } - + httpPost.setEntity(entityReq); + + CloseableHttpResponse response = httpclient.execute(httpPost); + HttpEntity entity = response.getEntity(); + int status = response.getStatusLine().getStatusCode(); + String string = EntityUtils.toString(entity); + System.out.println("MOM status:" + status + "responseInfo:" + string); + TXTUtil.writeTXT(txtPath, "----------------BOM传递MOM结果--------------"); + TXTUtil.writeTXT(txtPath, "MOM status:" + status); + TXTUtil.writeTXT(txtPath, "responseInfo:" + string); + TXTUtil.writeTXT(txtPath, "----------BOM传递MOM结果-----------"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + httpclient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return responseInfo; + } + + public StringBuffer sendMom(String url, String wsdlString, String txtPath) throws IOException { + + StringBuffer errBuffer = new StringBuffer(""); + if (!url.contains("http")) { + return errBuffer; + } + String string = sendJsonHttpPost(url, wsdlString, txtPath); // "http://10.128.11.12:7788/gateway/chint/bop-sync" + + return errBuffer; + + } + } diff --git a/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSendSapOp.java b/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSendSapOp.java index 6ccff5d..7f0873a 100644 --- a/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSendSapOp.java +++ b/com.connor.chint.wuhan/src/com/connor/chint/yunpi/command/BomSendSapOp.java @@ -77,8 +77,8 @@ public class BomSendSapOp extends AbstractAIFOperation { client.setReadTimeout(100, TimeUnit.SECONDS); // Authenticator authenticator = client.setAuthenticator(new Au); String credential = "";//Credentials.basic("shpodev", "sap@2019"); - if(url.contains("192.168.0.184")) { - credential = Credentials.basic("shpodev", "sap@2019"); + if(url.contains("192.168.0.184") || url.contains("gfpot01")) { + credential = Credentials.basic("po_rfc", "1qaz!QAZ"); }else { credential = Credentials.basic("shplm", "sap@2019"); } @@ -100,25 +100,25 @@ public class BomSendSapOp extends AbstractAIFOperation { TXTUtil.writeTXT(txtPath, "----------------BOM传递SAP结果--------------"); TXTUtil.writeTXT(txtPath, string); TXTUtil.writeTXT(txtPath, "----------BOM传递SAP结果-----------"); - document = DocumentHelper.parseText(string); - Element rootElement = document.getRootElement(); - Element bodys = rootElement.element("Body"); - Element elements = bodys.element("MT_MATERIAL_BOP_RSP"); -// String attributeValue = elements.get(0).attributeValue("CODE"); - List ztable = elements.elements("ZTABLE_RETURN"); - for(Element zret:ztable) { - String status = zret.elementText("TYPE"); - if(status.equals("E")) { - String attributeValue = zret.elementText("MESSAGE"); - String MATNR = zret.elementText("MATNR"); - if(MATNR!=null) { - attributeValue = attributeValue+",在"+MATNR+"BOM中"; - } - System.out.println(attributeValue); - errBuffer.append(attributeValue).append("\n"); - } - } - } catch (DocumentException e) { +// document = DocumentHelper.parseText(string); +// Element rootElement = document.getRootElement(); +// Element bodys = rootElement.element("Body"); +// Element elements = bodys.element("MT_MATERIAL_BOP_RSP"); +//// String attributeValue = elements.get(0).attributeValue("CODE"); +// List ztable = elements.elements("ZTABLE_RETURN"); +// for(Element zret:ztable) { +// String status = zret.elementText("TYPE"); +// if(status.equals("E")) { +// String attributeValue = zret.elementText("MESSAGE"); +// String MATNR = zret.elementText("MATNR"); +// if(MATNR!=null) { +// attributeValue = attributeValue+",在"+MATNR+"BOM中"; +// } +// System.out.println(attributeValue); +// errBuffer.append(attributeValue).append("\n"); +// } +// } + } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -191,7 +191,7 @@ public class BomSendSapOp extends AbstractAIFOperation { TXTUtil.writeTXT(txtPath, "----------BOM传递数据-----------"); //推送SAP - String[] stringValues = session.getPreferenceService().getStringValues("CHINT_WhBomUrl"); + String[] stringValues = session.getPreferenceService().getStringValues("CHINT_WhBomUrl_YB"); String sapUrl = ""; String momUrl = ""; for(String stringValue:stringValues) {