}6n+jUj*?Z;JThLJ#$ff>_Tt)1xUVe&~a9k$_!39qZ9glVx#
zB(#OmCMnD?6)9<5QWFx=##U^BfmdGtk3muDRWScHs;idX!7B*}AE^cX
zaYpkBf6?kkR$==I_I}Sz&QYtRH;!cZa5@(Un(1@s=|%+|#jcB#isTUH0s_
z%gX8fPF#ZQGGi-IX18ALML!>2r*EVsL@dao+UfSR!0V{_C}9W~7p$BW5t445_iTa8
z8A{n%%wM5xvc<=5`FiN~xD(vS`+(OCyAsUVt)@`R&)A||wB*xvd?re)6(n%2<}fL|
z`oBc^M`cL98^`io@*#@XTr*k!eWNdyFB3mBnZ%&DZHr&}NN%gF;$c@2R&F7m|Ijt8SH1Ae($O(*Gnq8Q<2r>
z81sMKKu#Y0cV-JPtW7{hgkg@CuICZ{)a3^Zq|d}?CAC(SsrS=}Jff)#D4@SN@`Ddi_SI;Vm63;Ovg-;P}MnsI=$Pk@?5S0ZMC_-f7tPtT54K&&$T$@uEx1jy%
zU|gh}m?!B&u9k7e&Crbu2pwd$&Uj*#`xXgH~j6{8*69}0*`_8e!_#Ypj+h`+kTe1WQb<>
zN6W`%Ax?B(0hFURpmc}(C$sg`o5b!HI~*{z&7mHs+d8rU>s`6l{PWFsrpUQ2M#?B$
zk`>MzbxdhC%KV2Dl+J#7Fh6rLPIBuJ19D`((Ta&Pyl^WUtge(SbwFzUCE7>*Rx<#M
zBvLc{b-O0u+PtqQ5+oEXR*S`JokK?a0BIsUp=iigZrIXd1IbK|z~Rc-CkwZab;NCB
z<4z{uW|hTqy>s}MP!-Q8c^zt^P}C|eR-ih_FE>kEBW6z}dRIyECEGW5BUEVklgo63
zSA#Q!N~?Lu3x;7vFnbJ-I}I*|-pL!&T-zLe9Bw&A&dgBvJdm-+3FdV
zKm@}gg8KE-sh%R@KKhBX)m?58Pj!6C)SJA3%@vj(&qt*|%HNHRV>mPCh;|Kj2AXS*
zx>Ok$z%?g3jLyC{nYf3fWGHW+Q1%b?{5Ugi9MozQHUdRq_6?WZI`pcwz`NtiO5&SZ
zx0Rt#qIQ|NT9^!W4UL+ue*Y<<|89puaNeviy~vfb!pB$~*i@p@GOm|ux8y9;FH3s8
zCbGN@+((wK{AqRZiQ@OiuoIB@sK*6~KPAbzS|{GlIH!w7#O_sl(xLCd`($+Xjk)r$
z`72F+10j%-Wp;ODBTw=|&CO!UZ7s7oZO0E4%zK@YL2^`=c-%T;{A+h&r`{^DR|t
zG|8F-XGir|>MoFcf>|TZbb{_`)ONGfY{)@w6r~#!?z3iOn&i1L5%fy6vB?5UZWP
zd8hsp%-A%Bg#F7h$ouA-Ze>+|HFnbbVhJCr
z)%x5BVXzj4^^=5@as?_xS*okwHJlNjAvz>5_(h`m+a}mOFoTbkht
zJ8K++Uew)94o=cD`4aV+m7%D~8~sMLHdOJ|GSjlWr?wW3=1POOy=|dY+MS9IzAAcb
zmpaOP_gh6XnWEWZ)Tj221euiC6WcD1SDm~FP4_+G&{*e-X8kOZ{Pv?I#nDr{hgE;q
zd09MFBf5soHw|0VCFgJ43}NaY7Z%wsWFn6MpodxchVKr?#xlhxPJ)B#$hSh2^|lGI
zCaMS2vRv|p#YY8XFg0|g#lr*oQAb+?ALD&chof#+a*QrXKNePQ{yuxcF6{#6GZvmGhbgz
zI2e@v9W;x`7^rc+7BD6y<@?^O7xkCeV2{p0pYsiMMlVfk5bL^DA_n^8fL|YXMo5j3
zS)+ILi~FjV?#8HBQ|KpeVKLVANvJ(Y6X|01v^K)sfTO$#wRikGRLASN(W
zrCEtDf^ChA4tujCbeRTmFVMnC6hm6b?kC~PQuI2Z^p-@)T$0TrHKGxkDEI*@zIG`x
zu?xm?ySjijG(APa**f3agnEaDnkx{qoYp-H&8M~FrEBE{x@*M%_6!=aLGzO9`*6}Oyxz!P
zqgkya|61>Ecd9DyLtH|Mix6L6O{x!jfQ4jcY<*_p65gaV#$-i4_4WPuIKAG2AJ0>I
z;^!X`Xt8eJpQ5A#YWqXq+p)9AT?r+4kcY#5?obFlycS`ydb*bJ(4vLezG2t@1?q_6
z*%lmg^6!X-8{AI6C~756SVQ>F=J(G=_dU68O55{}GU|Cp$q3zYGRy;Cf=0AZJzo6T
zIWis}RUlxY&NKP>W4|JsG$w_CEd*JB}Jj!(zM+qcm2Jj
zwt(GAfmKSMowY0xMHaQ2fxWVTZ==+dJ8{32%5@C4FLmVoTC!gC+m`SwgN{ma%PpC=J2MI}pm}C9&;)5SfhMqKt6vPk*_iC_
zef$0zSylkIp52_E|7A1=L7ey((+fjdr)gPpS)D4&?=BZ@cIwM71hqxL*Xh6FRWDeU
zpP&CxNa`pDOy1NfBSqOpOOnaBi9%!}d|ym6+M`FxM2Wd-+IHZzojj4Zxzmt0^_L4b
z{75kk6AV=#`BM$_j3CnO$(9jYmi?bP$NRcr#61~TsB9ct)Ma&9*_Yhrjc{jKuO9lQ
z$R9U3$h|Imha6geRTCB4RUt(7W>3GGnKML+P
zzBX7bGQs6WwPp`V=Ry@;QXO2xOXEE42Xdmk)%skKq9&XVXA7D*$7-laJ(-Ph8^+%D
zK9srWm`I?@3t6fb7mtfdpQq7e|NIt9GB4eaDw$)&@&qYMt7=?jBPe-)AXP&<#%x3iRgG}kBWqnSdpOHH
z2fWF)&Yae!IFTmj68U*{+ep^ZLgl<~-2*|6IPCzhqVO09T2yKr*B)%O
zmuNo~?+9}{TkwzNd)X+rMYXpp%BV?Gc%51>0UH%w!I2&ngjdD(6AyeLh0ExGlZMn=AOXiD8>20R8n(79V
zpfM*a9d{7Vu}@L4l@2aBQBAGws!eKvjkC_egPhsI!Q%o|TX3>A@z^ci9ST@G3
zx4dC_YooO&Zr-5T!p$g@MnE5Ai>0u!!oM1Lid`n?Q4Q2e@+Yvy|2gS9;q153d)GCQyM>+VrHds?MdfCqv|)&`>M1D2m=RohWn
z#zi*>P6k!NO2nz;`lq4IeHV*%ZgDFHUemV*kB%tvu4r~elanOIA74=HmA|Yd-!8sI
z_LJ{NJTpN%M^?N0_U+iP!E}=o
zvGd0z#Y030=HZQ&PaZqYFKUTNG92c?ngts(Q1gg0A54nj2mM|c-mywiwDsKYn!PeT
zW2h(1UENf?<}{N9q@Ddp`G;>kfUG5Vk2&iZ#^H65L~hZ_)TFtvSD!s8oAS1{ZfJ5E
z-d>~qTGA^sV7m;^KIwF1AyrBI(m>mkyr3Jl#egWc-xOgLf}|qef=!Gks0j+UBECy#
z2WhzKs@#w{GAURR1RU}Ue^Ed_ktf`urTdO%@oFQYq&OrRIB;!~
zeoq}&a}}dFaeWo#sQBXWrYvMlo#6=s2=Zpxh=?m^hR}%!=2{?id|sP7L*#$N0)1!V
z<;bmU2_(a=CCuE3BxN$15MzXt-O5*vWMRfaJ}V
zTB(=E1(J=B&%rOGBP3~!Svudba>~leau(g?QCQIJpMFnln!KoVeL#OqEG2fe0SSxs
zAA2aiZ+mgiU3vFdbK&1%lB{7R-h^$?C1U9z(=W1_srdxX`H8aAtj;Lx
zIW5^AS0Hzdso4X+x1=f2z3f?W`V<~jxoLn`kYvT5p=2P|c6(8t2PnVfdT0rG8b8mx
zVKv{s$Wyfr)pcN*zi_PBAg;A%2DSb|Jd=}9GC17`(W7{qWmzMNpV=Li|Ne1i;e;Q?
zedYAqI|5Y4^fM~IbQPFo9x8boTV~9Z?M@}!!E$FrT=lx>`9z3jgGrxWOkS!KZOUHo
zcFRMHvz6M>XvF6{iI>=IW^6{qnlY5)6fv^QAZT?$^sJ
zNj->;oHUiHX9pZ46cgxfyU%8xqTNwI7kNi*n@dQCxtrYe00^fYRj|;8NJQoPB@D!ZK@PL)hmR*a#U#bzEF%#s5RNy2&&n+
zNbM?9sK%bczovaOMybx||?L`r7^m!;nG(Je#y;_~D-u)m+s&MRa
zEmc6lui--K%6tm`2eMbukp(tK9+7u2*T)Yj{_C_}9HsOxO3wl#u4Pb+I6(|^rgfBU
z?iMAGq*q?4VDVv5jyds^Jh;e4_s==VVt$v$x?GN09Eg~0O+m9kqOJCRznH}<_hjNO
z%Zhfk(Nc7=mJLA3@dT&XCS2B92?70UUm3dROUzq{{1WRKZ}GOlMXQlu3fAgs(UXm-
zQ#Xkp`ogZ!q9<|pw;0C7f}#vux2P;shK5@OBk1ji;|17heVaQak~5r%Aiy2XGOoT*
zBp1F~f5^^(q-&EA$^^ZwH--%F!0C#Lr4xNg&wURfBoAbVa?HB5&dJXbTR)~|k~vcYuRoeMn`?*jHPZ$ZF&h1>cN%pZ;%#>3z1CnU)pJA#sJQTSo3`E5wyqbDx3S
zW40Mq!bBiHpMu}-JS+=HF)_#LJ`}R;_y%!|Jla%2rmSWuwRz{(e;M?^-P5MR#&psM
z@&!APhr*RqY!y$n%iNq~(EFTzBJx<|3BInzn)jZkAOW=+F*>Nb1GAqu~#42W`s&(s8c3I(BP6v?W+YY8(zNck4YYS86?
zlma{DA$NRms^3Ml
zH7^drxIaU>>gfbhJ0bDaZKd-@6!P6MMQsN1N)Xb$-sWY=j*FGw;3q3+)t5f%vtau)
z7S{uQ6WVwNHx|c6_G>f8Pf|0)C}bGvw_kh(2Q8+N?iHmJy2@l&-Juujln|L%rfq@D
zZSng;PDv`xgKC+a8hD^}){r;}x^lZh!yq?kQm>HMS9RpoSno}VZDG&xcG1USqKm7&
zw}Ue%@+0c2#S4Q1Tsi{t7Zdu3`4HEG;2Ie>8`-`wc?7GH-S4+AYd+DkGqJ&AX*Qe?70
z8}NpTg(Sh*@U?}3z3HywrNS85x(@v2i|_-=Y}DO2cRvyDRik0xHo
ziBfN((cGP~I|;9Z`d$l#Z+pDB-g0uc;f~$@$l_Q^vUxG^d;-3#?oCEc_O)j){^Wv_
zX>W#_AkQ^w7?AftVi|Q#Ugo%en*}}=qzo6!SPW6ZXXO7uu*P`foA%U_uYvG`(+Y8=
zkb*7BZK^2cyV;E>oE`gS`x*r@;qE=XRP)-HAkJAgdZcj+
zQ(B(Z6es2h_&=LJXos98v{mk(ADGWp?!BrQvy{99E4Zx_hz0xHL$amQ7+`|908pia-;A0nj)l|N
zP51YfBCZ)-xV{`w{8tB2b{e>7*Mup}d|I^yikl<9!Z(*XG&Q8K#b5M}X!X$F)3M%?
zbGxtal`qiv`iy6sMNDg7!YaxDVP3%gZ*Si}k%N=I|Lx-g4}5T
z?0Jblz;+C11qJhC|4bJj2bw`WrQ<+DD8QKbCk*q6XU?B6CMJN&P(VBRPhi25|B&}4
z{~?P`0k!`Bc0F*(6p(}DUyXYIc?+S}?%=d3ATjJmP9XTa4@d&$X95y}Pp5#;PD!xt
z^z#@8A21F`{Sy3j8u*I*&soKPF699Lw*T|l&GV-Qk4*zbU;QCP54^(D#Q*>(-v9u-
z|00oSgU6?Vv|zOv;46whRHnRTmz8G<7x4Ms{$JEl%fCyPJyW5t&DhLyKo?ejy?<`^
z!Oyq*7|j2bljcRX{BSco0Dy%0--^f{|2y{u*nak(Jbh=MWl{WqV5cuYVsOLk^J;%y
z_k}-hr7uu7E4Xt8hz8A{GQlHJ^ZBfXgd70i{#U$-V5K?WduXJ|bI)_%=KLf1+&X{<
z6@VuEul9j|31n9S!CjR=GK9aamEh{0-d+IWV2A)j0K<3yz{=S3I}7-KFjHR$
delta 8308
zcmZWu1yqzxxZaOagasr836btvx}-!}x|Qy30a*d*mRP!x2I&TAX;`{jLO@Vb1uiW9
z|2_Y`aQ4hI&-2XtzVprQcjnBr4crT;z6X9Ohm7(7bo-~6I~D_`Mpn3KATUHTOpa*2
z)896+BmfKYjVD$XU`O=d0=$T}4uBxq1Aqsi(;@LA`o>6nh<-ZK9Y2l4b=$83Bj*#`
z8mj6ZVWJ^G4>>(5LOP<_#X&Gj5GzaskP}ltMSzs&7Wu_Q;hS_G|$_g*nUu_h9KW
z0AW>hX!czY?zqFdMD)q7cOWz4(Vf&(U~(5Ngqin%`4I?Y{0anO{!cWtD(zySM~K{s
zo!{@qhxS?AfsoUh0WSK!Np^z!Ym5r4XCz&YFZsq_2IX8Bo0H^6vkc_3cpjFL^E;$-Qy6T;S_HjRSHTnuR%6A2=H)Tx=%@!G9;mPl^VY1wv
zwWyUpqk>b8w9LVasT&8L+{alNJz4hJ^R(a>gB4ycJ6WNa=q}}xE>-m+aurDaKO>IV
z1ZyhabShNncBbRFD=%}-q>X)w;>x!KaW69HevMBn3L_nLh(@k167^IZ`RoND{Th7$
zN@S||%>kB9ITs^}vgYggBY<-pJ;@%*A!}llljo
zqk%{_MpVMxDw3}rzhwNk?40MYtrL6wc&Dl;X)u+cUkOta!%nIG;LW#ytV^_-&|F$kZLRmWZZ|bOyw5fO!L*|j`rVveI58%QQuPY
zd=AbaNMT)Eps8`JlQiGTbx;B;Y+A^fVo>p?y=V^D;9WX;8dWyRU-@{8K0VD?bIwjf
zf7}q0@KZ={c9yZZbR^l(4V6YT!RIrC$)+#^T{m4#JlqL0*KD{31Q`_=c{H3`j;-(6
z25pu&w@i8XO7BVu?l(T(7a_vZT=t22=oTPzHPJ~u!oBjLNFkQu*kWkdESrdw(sNj!
zbu4nw<4ex-#U0Zi>c&jXw}vzctRpO`IgAoN7s^J>iX&vsAVX#OmLxl0EXHHRPHK)z
zpaKbWxbV%&8hs{`tpOpwtYEv04gKsqL2K>E{fXmUzts|5nkKdo&88!&KU(d!W%T9f
z;Sio`o25z~@aw==G5qC3WW}{q4uZ^T8QU~(HF)I+I?0pjN{04}a^tEoOaR&K5xKJb
zDf}wWyh=T{a2W#o`_05j(5ctgmN9~R&=#Z_t3An_Zlwf;MDxzcA8z_Fecs@ua)(r9~>1{utgB1l;MPqAIex?WTD%J32l+aoXcXXf9E4BIg;2F0Cor8%v9vv$*Dx$K%HGkf(_jUb6
z@JGlJ{faEE?rHm5xPhmojNka#({_m)*#5%rUbe7#Zo3?OW!2)4((-T|ZumU{>vsXf
zLwoM$mBom*(U2Z!Q9GV^_=_SGn7Gc?cLp}FX#*$swk)~Zq(my}9eMBZm
zn4Ii198w<+Hga_E^=ZJQ?(O+55fZBFn&a+;DVki$gDPQw7oX7e`#aU5pLonqZj!h^Lmev=Id$X{z%?pKBSCjwr-DGsO5KUJXL(J0^^_?%pojt%0#_(
z)^m+=;!53k5OMu*SKMw7NOwswAsrc8CTnx_Bcb!_VX#VlK%zR4_<+Q`z>(HskX6OH
z7ANDJ%ailS9m?)NG$%=W1)_M+SpV|H#(Byhbz-ddJ%9I@VQS7k9LtK#jq_qNeA+@0
znZ5!_c%C?8@A83ssLY}WL;Ma_Oc}nX)1OIBVR^VWt~MonQe2>Sc}YH5rbUDyZ3q0q
zk+nmg<+tO!?u>!x7f*D-_t;^~A~GUN?QQF-8{e{3&Y`^C$t8TPfxpi&wb7gXc#pIz
zKb&*7hKU%
zB$fTTO=N#J3Q)AJ^ygeVPo>Kkb
zCYCuPqWuRo`W@`JzEmq+Df%KT#6P$bmCKbhk{7|PD2Eaggt-rCdjEWm!?fwD4KQvt
zaDn(M*G+QQ4Z^=g)$|CM+ExT>6_z}jVi@pO@Bd{Y+#C@Fj0GieUhX0FoF8->VQn90TFYi31A32&9w^=z$TN8MnYIkwP30
zD1;FNVv2P{dITeD1&E>EYMb%b6dwj#h*`1ekkFLHkkF`!B_pCiNE|QNQ3f#{axci+
zeL#hmGatJ0`;uP7YO)l&g!0+Z7))2Q>3hxMftRMWyZ+hOqFa-z_4RU#
zd!P`lL}qQ{%
zK=PB1Yban!WEwuGGCLbC_G{vOO5aWD4!4fbATPnrl%X`TF)bU{r;Wp*G|bZM4fC=W
zEj4cWH1#Fkknii?`U*E(21gw}_^J%z$IU9b^Ci8M(2txoKbapsbr2wkxHvAgp+(h+
zO0uaa%O=R*d}-I7*PR%k3Q4tEfeaF+COPj^+h&kqJMSn!H8{!SYGz%JTqt-0gY`#+K=E-G=I9jgxUS+Tg3K0?7$FKpTG6uoCY0
z10P>I(%4zob0A74O0S1v>krB100uZUM9MD&eOyL|IHR=RbYDnu_jg64tQdPzb}?{ZpM`_aPX^g|TBiKo)(>`)fSh`eQ3xbj{ZA4!-*sV1qSdh@w+
zOQcmhwNe0BgVWNjNr##D6B6dRkyT7c*M+ol$9H&z?8_O;kMdw^lz9Hq`QFK%4vCJC
z=ZZ5&xp}L8&D(I3q_oa4(^6lIieXjmDhjd-i7Fm5C~fQ;Ws~|u!-3;7Mg9X%WTGrz
zLzukuQ%Jgj6jn7!oBxglekwdxmgd9c>Zhb&jZ-%bMjA3fg_o+kmNRj)n!JCells!Z
zW>147=tsxo^#>)h-!|1aKh+T{S+ZHdwOJ*kND_BCc>7dAkYy;#t_(GN7hVzn&Y-c_
zPHA?&6j~oSkVM~TlRqNAW08+R@9LVkw_l|q?3N!HY+%QBmOUQnuGu57FPTRycbpi1
znNFc5pwSh2@X2MA-!uqIK)?M%f44yP!jf9`NOs1lW9j_E@lo?9SV-*)sZ;7q3W03w
zstJD2#j#s*c=q`;gz^M*zsNfny-~bw`5>oTSpwZ{t|}@TE?bk3a7rA~B^_|GJ)lqd
zo;gIt)5(+$cOdu~;r(K8
zQ$vlH^En8l
z`L`oZ(sJ$4ihFg|^_`#7>g61U6RVPY32Et}eUI|&IzJ|`>|5_@@WM&djlV?)rC5h~
zVJ?LIepK+#eUPA%B`RfO-F?TyHVZ}6U`0%*3+KCLUPj8i2Awl)DXB*S_?PsfHFHgt
zgBRaz%&mBT&k0w*4NnjdPh)|)>=CeE2>H@+3z@Dkc?gK&a!WU@ljABVR?ZsHC6_Rb
zLs1~@4XvTX4&<+W3)YE^O4jmL`P+}Fn1%dK+#q)R0P0mYGtK;we1IWlTaEAGh%oZ0TATt?bBttg#w
zU?Z9|*HnZ6d_?Q>y7LUPIY4xUVcP;vYssx3!9aujRPBPy`*kM;WBhgSJK<#ZZ%~t;
zPCt%jTKljGpv&hzTXJp-(;UtM}f*oP8esO5_EIa7OT
zPQO`^lHlM^a~QTcguKS}4>-Q`
z6m53Ybguk;pQ0)F-05Tl^YqA{HB*(}=%^Yhx|Gu502Pt#iOc&)I5dz0N@M3B6WHH0s{*
zFndFO(lfxDfmA&_a_9`cHeMk*e{Hr?AycS!uOX6o#+z^Y@aU5+hW+Jk9Q2wAIirBe
zN9HM6*hNr;LSze7|InCJaQ6Xa<>JxiAs;1bAbt_@5;bACbfi@y%6&u4vubypzF^iy
z1DTJ}wweJpO}bxd>Ab)0KY-0&s``$I813M0$i}Vj7~wo8tve`>a-U6>|LQ|_nH#74
zia}s98jo7Cw7^0_t^2%oc^F#Q+igjcWtN>vKMqN<`-17(oGRo!qadw09&D=8?;kUW
z&&*a%(YO9cQG!$M)062pl*V6WO~1-64>qRCrW|DcoQo7t4rB*@yCg|4+uCaDRzT>T
z^W3bCU~!@MAxRMSCxySNish&<*_(j!YlKeZ`tf&=
zh0m>OnAJ;mxT$F5GktKG{U9FeKzm>BN@1s7;D<@CzY2pnN6-K+ZGKj0^)a7YTak$R
zTAcHSoWR<%6lz3_vVdV2M1fM
zm4;J%@;-a@V{I8i+Fuisy>SmWYa25il<@kod)@a86cnC|3o1M|^0O&$^44e_+_Imd
zbsc`u7=S&3>ihnhc-uA0Us;5(z=0vPQbygxM@GPT?`aGHG+ll;w)3#w
zPMWMQUijVgdX(cEACuXst4p#eKVxZS70OoBn?O?7oUPCo-f+4Ql~}+12Z3R39_|ZV
z-YtRG9;&s8@jslPxNL3`gE*N~cil!-Ko~WNRAy{F*Jv}eMJDstCei*uKqU~>Mue8-j
z@W?tlbanmlvE;UX_oY^LXLQ-SpTk=O(ETYQiyeWbc3P2
z@IodjS=eZBmEQ#klpS7_HVdC+6$d?KIw$xFJJhds5Z$2Rq5UE&f^4_d=OmI5DE*|^
zgnPN0K88D2B^J8DiNwPu-`+X3$ollQ{u5lJOY<_d0LD~d#&l**IJ
z3I*QZb2x<}^ZEM!dByXN1eQ(j;$y*`G=Y_Q;95d1c^PJ+zf#0CPM|tm!@LnnSfL)`
zTH6W#@gWOAJ+|iqu
zvkE)lqJOMs4C%N`TdL9kEHA)?7`6qhLhmDVPuHPF?&=B{*qM2tl-Xt%<=Qve+o3jI
zx&>782biv=^TPhyCnDk@yPqlfHj;{_WNThFc6<|k?{m6eG9`ENw%!wzv8Y!>MBX!`
z``~o-=MeHa+>HBElL5%RO1%iYaqDf7%8rRe-;~kh_w=rP7lUh0mU;gPhzb-e#TvQbb@?dmZ?M0HE*SPeGXbm
zdpG(z=;{=7)%tFH2~R}ii4;eCmf)WO&{d9r7KzZiYr^Kp*BVO9Y3D|+(Z3wHbPl%*+}S(sq$<-i$GLV@UU`{e$3HVpf2|k{=tE*^==$K6gb4t
zQhCR!EP9<5OwJ&srYKcDC?P*APOL)sX7lCoiBF=1Q?
zg~)Jq+OlC8luaB*m#MngDUB>U&|L}#=s!X|qHGtaxyv-X&<>{kn^yO|D)^{GSX;k96V{pe7($_d*XeBseMn*4a
zIQs&~lElxjNpYN*!I=Fr4}63~Q%72me_brd&^IRFxR8l$dwMQ{^?pSJubBBPu0elw
z3fPlr)6c~RWb5BFH2IB98sRD4^vVAFSyod8ZZ$W2G|2#6}^h5l3g&$Zo_vq?g+0&y3?i%ByCUwS1s;K$p!B
z2am$b+o)b9kgZwc7gCCPOKiW!0&P6kBa~#SqCa_ZiCiDw`zAS`(9!_rI-EVeDBLurkvwWF_m}U
zG=~u#lA|3`p0024eR0~0MmYqduYMXdKo!6!@6&6hH1t-rI%L^BvCW=v*MmlpJ`1ko
zt*^(=bisx}`cE8W@+UA^$@A4we@tkQD9b8^=c{Id2`IHlfTGcy$~8%QHhU|
z`)=mA)5**#LkRmC*+HXp7FnW5&Z-{KmA55IqnAvg7Eu10eDV1ZMm%{}9&VB_eLe;L
z*Ia-hUrEtQh&o=E@pNEq`W4iPO6a|1_c>2%RBHw<-lD3{pFS?^No(TN
zRU3Bf(_#wzh}A#KHo&Q_)gRsAM9A%^w;(GU`h9$d-tttRX}S;WglDPNwhdk0g?>+%
zmznM=o!-D|uvTZV+O#`+8?nH2_VaC((2CFZn4pET6wDxLr0#QI$#I!t%{=?Vu(9`d
zF#f>$k6drmyf(Cd&QlP#Z?MY&fbsVD1I9QAh$7BGYzBb}B=j3ftLXB@Cnp%~2%rdc
zxONzwH8A3Mxji9;32YY@gXnUHEOrf$v
zU&;YU_{jfW4r(E82|*y(@d&_tdvXJ#8oep=7MP9#tO$@W3h*Jo*eD>3n99R3;2DBZ
z8v~>fAbkvwM1ajP;5ov>3I}8mj3*p;fnd7fe6x3iF$1`H9Pboy^Vlo>!7
z!D!6@76{Ne16U&f$1Grl0O_-UIRf0D`ya=cuB;Uoqg{>^!m~X!q5=%GcTadB@Xd{ltvi97$>`_1<)SG33z)+U~
zE?E3BK>p-rK3e~|2mHHuw@t2Z2RqDh8K4&U@0H;Ht~cU%PbMbKn(vG
z&%=K^o(Q(P3_L-U3SI#oBhkIQV>4F(Y}m^cfEXd!+)5NW|4M9#+L&_}To!L)as&T2
z_L#+;6>aq<_U&95R&N5FSl+Svx9sg=y}M;GJ?>Z`4*(xlKL=nwx&5h-q6u*RzIh(@
z#2^ssf9eMN-1&ul0Ag6?_>KSeIh{WpN4~i6>-|5!TF9N>d<~#M)DpFJlQk*sj_r#B
zDDR@&X1(mD>Ba?vKmp_+5ZiyUN@d^q>DB>SM8f}^Y5vEWTYhJ~IpZX}4gCQ1?#+O{
z0X%+|@EHIpNU4dj$S6K%vo&-xwPX9=B}4fB`H3Q8QvVwn2XuYi`5Az*j{r2VkPQHn
z^0wfAjd-api
1.5.4
system
- ${project.basedir}/libs/jd-api-1.5.4.jar
+ ${project.basedir}/libs/jd-api-1.6.17.jar
org.codehaus.jackson
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/controller/WaybillController.java b/open-api/jd-api/src/main/java/com/qihang/jd/controller/WaybillController.java
new file mode 100644
index 00000000..1035e325
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/controller/WaybillController.java
@@ -0,0 +1,328 @@
+package com.qihang.jd.controller;
+
+
+import cn.qihangerp.open.jd.WaybillAccountApiHelper;
+import cn.qihangerp.open.jd.WaybillApiHelper;
+import cn.qihangerp.open.jd.common.ApiResultVo;
+import cn.qihangerp.open.jd.jdl.CloudPrintApiHelper;
+import cn.qihangerp.open.jd.jdl.CloudPrintData;
+import cn.qihangerp.open.jd.jdl.PullCloudPrintRequestDto;
+import cn.qihangerp.open.jd.jdl.WayBillInfo;
+import cn.qihangerp.open.jd.model.WaybillAccount;
+import cn.qihangerp.open.jd.model.WaybillCodeResponse;
+import cn.qihangerp.open.jd.request.WaybillAddress;
+import cn.qihangerp.open.jd.request.WaybillReceiveRequest;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.qihang.common.common.AjaxResult;
+import com.qihang.common.enums.HttpStatus;
+import com.qihang.jd.domain.ErpShipWaybill;
+import com.qihang.jd.domain.OmsJdOrder;
+import com.qihang.jd.domain.OmsJdWaybillAccount;
+import com.qihang.jd.domain.bo.JdWaybillGetBo;
+import com.qihang.jd.openApi.ApiCommon;
+import com.qihang.jd.openApi.PullRequest;
+import com.qihang.jd.service.ErpShipWaybillService;
+import com.qihang.jd.service.OmsJdOrderService;
+import com.qihang.jd.service.OmsJdWaybillAccountService;
+import com.qihang.security.common.BaseController;
+import lombok.AllArgsConstructor;
+import lombok.extern.java.Log;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Log
+@AllArgsConstructor
+@RestController
+@RequestMapping("/ewaybill")
+public class WaybillController extends BaseController {
+ private final ApiCommon apiCommon;
+ private final OmsJdWaybillAccountService waybillAccountService;
+ private final OmsJdOrderService orderService;
+ private final ErpShipWaybillService erpShipWaybillService;
+ private final KafkaTemplate kafkaTemplate;
+
+ @RequestMapping(value = "/get_waybill_account_list", method = RequestMethod.POST)
+ public AjaxResult getWaybillAccountList(@RequestBody PullRequest params) throws Exception {
+ if (params.getShopId() == null || params.getShopId() <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id");
+ }
+ List list = waybillAccountService.list(new LambdaQueryWrapper().eq(OmsJdWaybillAccount::getShopId, params.getShopId()).eq(OmsJdWaybillAccount::getIsShow, 1));
+ return AjaxResult.success(list);
+ }
+
+ /**
+ * 拉取电子面单账号
+ * @param params
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value = "/pull_waybill_account", method = RequestMethod.POST)
+ public AjaxResult pullWaybillAccount(@RequestBody PullRequest params) throws Exception {
+ if (params.getShopId() == null || params.getShopId() <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id");
+ }
+
+ var checkResult = apiCommon.checkBefore(params.getShopId());
+ if (checkResult.getCode() != HttpStatus.SUCCESS) {
+ return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(), checkResult.getData());
+ }
+ String accessToken = checkResult.getData().getAccessToken();
+ String appKey = checkResult.getData().getAppKey();
+ String appSecret = checkResult.getData().getAppSecret();
+ Long sellId = checkResult.getData().getSellerShopId();
+
+ ApiResultVo apiResultVo = WaybillAccountApiHelper.getWaybillAccount(appKey, appSecret, accessToken, sellId.toString());
+
+ List list = new ArrayList<>();
+ if(apiResultVo.getCode()==0){
+ for (var item : apiResultVo.getList()) {
+
+ OmsJdWaybillAccount vo = new OmsJdWaybillAccount();
+ vo.setShopId(params.getShopId());
+ vo.setSellerId(sellId);
+ vo.setIsShow(1);
+
+ vo.setProviderId(item.getProviderId());
+ vo.setProviderType(item.getProviderType());
+ vo.setProviderName(item.getProviderName());
+ vo.setProviderCode(item.getProviderCode());
+ vo.setBranchCode(item.getBranchCode());
+ vo.setBranchName(item.getBranchName());
+ vo.setAmount(item.getAmount());
+// vo.setSupportCod();
+ vo.setSettlementCode(item.getSettlementCode());
+ if (item.getAddress()!=null) {
+ vo.setProvinceId(item.getAddress().getProvinceId());
+ vo.setProvinceName(item.getAddress().getProvinceName());
+ vo.setCityId(item.getAddress().getCityId());
+ vo.setCityName(item.getAddress().getCityName());
+ vo.setCountryId(item.getAddress().getCountryId());
+ vo.setCountryName(item.getAddress().getCountryName());
+ vo.setCountrysideId(item.getAddress().getCountrysideId());
+ vo.setCountrysideName(item.getAddress().getCountrysideName());
+ vo.setAddress(item.getAddress().getAddress());
+ list.add(vo);
+ }
+
+ waybillAccountService.save(vo);
+ log.info("========添加jd电子面单账户信息==========");
+
+ }
+ }
+
+
+ return AjaxResult.success(list);
+ }
+
+ @PostMapping("/get_waybill_code")
+ @ResponseBody
+ public AjaxResult getWaybillCode(@RequestBody JdWaybillGetBo req) {
+ if (req.getAccountId() == null || req.getAccountId() <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,请选择电子面单账户");
+ }
+ if (req.getShopId() == null || req.getShopId() <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id");
+ }
+ if(req.getIds()==null || req.getIds().length<=0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有选择订单");
+ }
+ var checkResult = apiCommon.checkBefore(req.getShopId());
+ if (checkResult.getCode() != HttpStatus.SUCCESS) {
+ return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(), checkResult.getData());
+ }
+ String accessToken = checkResult.getData().getAccessToken();
+ String appKey = checkResult.getData().getAppKey();
+ String appSecret = checkResult.getData().getAppSecret();
+ Long sellerShopId = checkResult.getData().getSellerShopId();
+
+ // 获取电子面单账户信息(包含了发货地址信息)
+ OmsJdWaybillAccount account = waybillAccountService.getById(req.getAccountId());
+
+ for(String orderId:req.getIds()){
+ if(StringUtils.hasText(orderId)){
+ List list = orderService.list(new LambdaQueryWrapper().eq(OmsJdOrder::getOrderId, orderId));
+
+ if(list!=null && list.size()>0) {
+ OmsJdOrder omsTaoOrder = list.get(0);
+ WaybillReceiveRequest request = new WaybillReceiveRequest();
+ request.setWaybillType(1);
+ request.setWaybillCount(1);
+ request.setProviderCode(account.getProviderCode());
+ request.setProviderId(account.getProviderId());
+ request.setSettlementCode(account.getSettlementCode());
+ request.setSalePlatform("0010001");
+ request.setPlatformOrderNo(omsTaoOrder.getOrderId());
+ request.setVendorCode(sellerShopId.toString());
+ request.setVendorName("xxxxxx");
+ request.setVendorOrderCode(omsTaoOrder.getOrderId());
+ request.setWeight(BigDecimal.ZERO);
+ request.setVolume(BigDecimal.ZERO);
+ request.setPayType(0);
+ request.setGoodsMoney(BigDecimal.ZERO);
+ request.setShouldPayMoney(BigDecimal.ZERO);
+ request.setNeedGuarantee(false);
+ request.setGuaranteeMoney(BigDecimal.ZERO);
+ request.setReceiveTimeType(0);
+
+ WaybillAddress fromAddress = new WaybillAddress();
+ fromAddress.setProvinceId(account.getProvinceId());
+ fromAddress.setProvinceName(account.getProvinceName());
+ fromAddress.setCityId(account.getCityId());
+ fromAddress.setCityName(account.getCityName());
+ fromAddress.setCountryId(account.getCountryId());
+ fromAddress.setCountryName(account.getCountryName());
+ fromAddress.setCountrysideId(account.getCountrysideId());
+ fromAddress.setCountrysideName(account.getCountrysideName());
+ fromAddress.setAddress(account.getAddress());
+ fromAddress.setContact(account.getName());
+ fromAddress.setMobile(account.getMobile());
+ fromAddress.setPhone(account.getPhone());
+ request.setFromAddress(fromAddress);
+
+ WaybillAddress toAddress = new WaybillAddress();
+ toAddress.setProvinceId(StringUtils.hasText(omsTaoOrder.getProvinceId())?Integer.parseInt(omsTaoOrder.getProvinceId()):0);
+ toAddress.setProvinceName(omsTaoOrder.getProvince());
+ toAddress.setCityId(StringUtils.hasText(omsTaoOrder.getCityId())?Integer.parseInt(omsTaoOrder.getCityId()):0);
+ toAddress.setCityName(omsTaoOrder.getCity());
+ toAddress.setCountryId(StringUtils.hasText(omsTaoOrder.getCountyId())?Integer.parseInt(omsTaoOrder.getCounty()):0);
+ toAddress.setCountryName(omsTaoOrder.getCounty());
+ toAddress.setCountrysideId(StringUtils.hasText(omsTaoOrder.getTownId())?Integer.parseInt(omsTaoOrder.getTownId()):0);
+ toAddress.setCountrysideName(omsTaoOrder.getTown());
+ toAddress.setAddress(omsTaoOrder.getFullAddress());
+ toAddress.setContact(omsTaoOrder.getFullname());
+ toAddress.setMobile(omsTaoOrder.getMobile());
+ toAddress.setPhone(omsTaoOrder.getTelephone());
+ request.setToAddress(toAddress);
+
+ ApiResultVo apiResultVo = WaybillApiHelper.getWaybillCode(appKey, appSecret, accessToken, request);
+ if(apiResultVo.getCode()==0){
+ // 保持数据
+
+ ErpShipWaybill waybill = new ErpShipWaybill();
+ waybill.setShopId(req.getShopId());
+ waybill.setOrderId(apiResultVo.getData().getPlatformOrderNo());
+ if(apiResultVo.getData().getWaybillCodeList()!=null&&apiResultVo.getData().getWaybillCodeList().size()>0) {
+ waybill.setWaybillCode(apiResultVo.getData().getWaybillCodeList().get(0));
+ }
+ waybill.setLogisticsCode(account.getProviderCode());
+// waybill.setPrintData(result.getPrintData());
+ waybill.setStatus(1);//1已取号
+ erpShipWaybillService.waybillUpdate(waybill);
+ log.info("====保存電子面單信息jd========"+apiResultVo.getData().getPlatformOrderNo());
+
+ }else{
+ return AjaxResult.error(apiResultVo.getMsg());
+ }
+ }
+ }
+ }
+
+
+
+
+
+ return success();
+ }
+
+ @PostMapping("/get_print_data")
+ @ResponseBody
+ public AjaxResult getPrintData(@RequestBody JdWaybillGetBo req) {
+ if (req.getShopId() == null || req.getShopId() <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id");
+ }
+ if (req.getIds() == null || req.getIds().length <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有选择订单");
+ }
+ var checkResult = apiCommon.checkBefore(req.getShopId());
+ if (checkResult.getCode() != HttpStatus.SUCCESS) {
+ return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(), checkResult.getData());
+ }
+ String accessToken = checkResult.getData().getAccessToken();
+ String appKey = checkResult.getData().getAppKey();
+ String appSecret = checkResult.getData().getAppSecret();
+ Long sellerShopId = checkResult.getData().getSellerShopId();
+
+ List list = erpShipWaybillService.getListByOrderIds(req.getShopId(), req.getIds());
+ List dtos = new ArrayList<>();
+ if(list!=null && list.size()>0) {
+ for (var ship:list) {
+ if(!StringUtils.hasText(ship.getPrintData())) {
+ PullCloudPrintRequestDto dto = new PullCloudPrintRequestDto();
+ dto.setCpCode(ship.getLogisticsCode());
+ dto.setObjectId(ship.getOrderId());
+ Map map = new HashMap<>();
+ map.put("eCustomerCode", sellerShopId.toString());
+ dto.setParameters(map);
+ List wayBillInfos = new ArrayList<>();
+ WayBillInfo w = new WayBillInfo();
+ w.setPopFlag(1);
+ w.setOrderNo(ship.getOrderId());
+ w.setWayBillCode(ship.getWaybillCode());
+ wayBillInfos.add(w);
+ dto.setWayBillInfos(wayBillInfos);
+ dtos.add(dto);
+ }
+ }
+ }
+ ApiResultVo apiResultVo = CloudPrintApiHelper.pullCloudPrintData(appKey, appSecret, accessToken, dtos);
+ if(apiResultVo.getCode()==0){
+ // 更新数据
+ for (var item:apiResultVo.getList()) {
+ ErpShipWaybill waybillNew = new ErpShipWaybill();
+ waybillNew.setPrintData(item.getPerPrintData());
+ waybillNew.setUpdateBy("获取打印数据");
+ waybillNew.setUpdateTime(new Date());
+ erpShipWaybillService.update(waybillNew,new LambdaQueryWrapper().eq(ErpShipWaybill::getWaybillCode,item.getWayBillNo()));
+ log.info("====保存電子面單打印信息jd========"+item.getWayBillNo());
+ ErpShipWaybill list1 = list.stream().filter(x -> x.getWaybillCode().equals(item.getWayBillNo())).findFirst().get();
+ if(list1!=null){
+ list1.setPrintData(item.getPerPrintData());
+ }
+ }
+
+
+
+ }else{
+ return AjaxResult.error(apiResultVo.getMsg());
+ }
+ return AjaxResult.success(list);
+ }
+
+ @PostMapping("/push_print_success")
+ @ResponseBody
+ public AjaxResult pushPrintSuccess(@RequestBody JdWaybillGetBo req) {
+ if (req.getShopId() == null || req.getShopId() <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id");
+ }
+ if (req.getIds() == null || req.getIds().length <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有选择订单");
+ }
+ erpShipWaybillService.printSuccess(req.getShopId(), req.getIds());
+
+ return AjaxResult.success();
+ }
+
+ /**
+ * 发货
+ * @param req
+ * @return
+ */
+ @PostMapping("/push_ship_send")
+ @ResponseBody
+ public AjaxResult pushShipSend(@RequestBody JdWaybillGetBo req) {
+ if (req.getShopId() == null || req.getShopId() <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id");
+ }
+ if (req.getIds() == null || req.getIds().length <= 0) {
+ return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有选择订单");
+ }
+ erpShipWaybillService.pushShipSend(req.getShopId(), req.getIds());
+
+ return AjaxResult.success();
+ }
+}
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/domain/ErpShipWaybill.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/ErpShipWaybill.java
new file mode 100644
index 00000000..87355054
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/ErpShipWaybill.java
@@ -0,0 +1,78 @@
+package com.qihang.jd.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+/**
+ * 发货电子面单记录表
+ * @TableName erp_ship_waybill
+ */
+@Data
+public class ErpShipWaybill implements Serializable {
+ /**
+ *
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 订单号
+ */
+ private String orderId;
+
+ /**
+ * 店铺id
+ */
+ private Long shopId;
+
+ /**
+ * 店铺类型
+ */
+ private Integer shopType;
+
+ /**
+ * 快递单号
+ */
+ private String waybillCode;
+
+ /**
+ * 快递公司编码
+ */
+ private String logisticsCode;
+
+ /**
+ * 打印数据
+ */
+ private String printData;
+
+ /**
+ * 状态(1已取号2已打印3已发货)
+ */
+ private Integer status;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 创建人
+ */
+ private String createBy;
+
+ /**
+ * 更新时间
+ */
+ private Date updateTime;
+
+ /**
+ * 更新人
+ */
+ private String updateBy;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdOrder.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdOrder.java
index 78a4cfde..991d61dd 100644
--- a/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdOrder.java
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdOrder.java
@@ -262,6 +262,20 @@ public class OmsJdOrder implements Serializable {
* 订单审核时间
*/
private Date auditTime;
+ /**
+ * erp发货快递公司
+ */
+ private String erpSendCompany;
+
+ /**
+ * erp发货快递单号
+ */
+ private String erpSendCode;
+
+ /**
+ * erp发货状态
+ */
+ private Integer erpSendStatus;
@TableField(exist = false)
private List itemList;
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdWaybillAccount.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdWaybillAccount.java
new file mode 100644
index 00000000..be25727d
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdWaybillAccount.java
@@ -0,0 +1,142 @@
+package com.qihang.jd.domain;
+
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+/**
+ * 京东电子面单账户信息表
+ * @TableName oms_jd_waybill_account
+ */
+@Data
+public class OmsJdWaybillAccount implements Serializable {
+ /**
+ *
+ */
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 店铺id
+ */
+ private Long shopId;
+
+ /**
+ * 商家ID
+ */
+ private Long sellerId;
+
+ /**
+ * 承运商id
+ */
+ private Integer providerId;
+
+ /**
+ * 承运商编码
+ */
+ private String providerCode;
+
+ /**
+ * 承运商名称
+ */
+ private String providerName;
+
+ /**
+ * 承运商类型,1-快递公司 2-物流公司 3-安装公司 4-生鲜冷链公司
+ */
+ private Integer providerType;
+
+ /**
+ * 可用单数
+ */
+ private Integer amount;
+
+ /**
+ * 是否支持货到付款
+ */
+ private String supportCod;
+
+ /**
+ * 网点ID
+ */
+ private String branchCode;
+
+ /**
+ * 网点名称
+ */
+ private String branchName;
+
+ /**
+ * 财务结算编码
+ */
+ private String settlementCode;
+
+ /**
+ *
+ */
+ private Integer provinceId;
+
+ /**
+ * 省名称(一级地址)
+ */
+ private String provinceName;
+
+ /**
+ *
+ */
+ private Integer cityId;
+
+ /**
+ * 市名称(二级地址)
+ */
+ private String cityName;
+
+ /**
+ * 区名称(三级地址)
+ */
+ private Integer countryId;
+
+ /**
+ *
+ */
+ private String countryName;
+
+ /**
+ *
+ */
+ private Integer countrysideId;
+
+ /**
+ * 区名称(三级地址)
+ */
+ private String countrysideName;
+
+ /**
+ * 详细地址
+ */
+ private String address;
+
+ /**
+ * 发货人
+ */
+ private String name;
+
+ /**
+ * 发货手机号
+ */
+ private String mobile;
+
+ /**
+ * 发货固定电话
+ */
+ private String phone;
+
+ /**
+ * 是否前台显示1显示0不显示
+ */
+ private Integer isShow;
+
+ private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdOrderBo.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdOrderBo.java
index 73d42d73..98b8b814 100644
--- a/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdOrderBo.java
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdOrderBo.java
@@ -9,4 +9,5 @@ public class JdOrderBo implements Serializable {
private String orderId;
private Integer shopId;
private String orderState;
+ private Integer erpSendStatus;
}
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdWaybillGetBo.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdWaybillGetBo.java
new file mode 100644
index 00000000..deb9b7df
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdWaybillGetBo.java
@@ -0,0 +1,10 @@
+package com.qihang.jd.domain.bo;
+
+import lombok.Data;
+
+@Data
+public class JdWaybillGetBo {
+ private Long accountId;//电子面单账户id
+ private String[] ids;
+ private Long shopId;//店铺Id
+}
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/mapper/ErpShipWaybillMapper.java b/open-api/jd-api/src/main/java/com/qihang/jd/mapper/ErpShipWaybillMapper.java
new file mode 100644
index 00000000..e29f0b15
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/mapper/ErpShipWaybillMapper.java
@@ -0,0 +1,18 @@
+package com.qihang.jd.mapper;
+
+import com.qihang.jd.domain.ErpShipWaybill;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【erp_ship_waybill(发货电子面单记录表)】的数据库操作Mapper
+* @createDate 2024-06-18 18:48:08
+* @Entity com.qihang.jd.domain.ErpShipWaybill
+*/
+public interface ErpShipWaybillMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/mapper/OmsJdWaybillAccountMapper.java b/open-api/jd-api/src/main/java/com/qihang/jd/mapper/OmsJdWaybillAccountMapper.java
new file mode 100644
index 00000000..cd3857fa
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/mapper/OmsJdWaybillAccountMapper.java
@@ -0,0 +1,18 @@
+package com.qihang.jd.mapper;
+
+import com.qihang.jd.domain.OmsJdWaybillAccount;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author TW
+* @description 针对表【oms_jd_waybill_account(京东电子面单账户信息表)】的数据库操作Mapper
+* @createDate 2024-06-18 18:25:19
+* @Entity com.qihang.jd.domain.OmsJdWaybillAccount
+*/
+public interface OmsJdWaybillAccountMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/openApi/ApiCommon.java b/open-api/jd-api/src/main/java/com/qihang/jd/openApi/ApiCommon.java
index 11db49cc..ff20ab9e 100644
--- a/open-api/jd-api/src/main/java/com/qihang/jd/openApi/ApiCommon.java
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/openApi/ApiCommon.java
@@ -49,9 +49,9 @@ public class ApiCommon {
// return ResultVo.error(HttpStatus.PARAMS_ERROR, "第三方平台配置错误,没有找到ServerUrl");
// }
-// if(shop.getSellerId() == null || shop.getSellerId() <= 0) {
-// return com.qihang.tao.common.ApiResult.build(HttpStatus.PARAMS_ERROR, "第三方平台配置错误,没有找到SellerUserId");
-// }
+ if(shop.getSellerShopId() == null || shop.getSellerShopId() <= 0) {
+ return ResultVo.error(HttpStatus.PARAMS_ERROR, "店铺配置错误,没有找到SellerShopId");
+ }
ShopApiParams params = new ShopApiParams();
params.setAppKey(platform.getAppKey());
@@ -64,32 +64,6 @@ public class ApiCommon {
return ResultVo.error(HttpStatus.UNAUTHORIZED1, "Token已过期,请重新授权", params);
}
-
- /****************先查询卖家对不对***************/
-// TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);
-// UserSellerGetRequest reqSeller = new UserSellerGetRequest();
-// reqSeller.setFields("nick,user_id");
-// UserSellerGetResponse rsp = client.execute(reqSeller, sessionKey);
-// if(StringUtils.hasText(rsp.getErrorCode())){
-// if(rsp.getErrorCode().equals("27")){
-// return new ApiResult<>(EnumResultVo.TokenFail.getIndex(), "Token已过期,请重新授权",params);
-// }
-// else if(rsp.getErrorCode().equals("11")){
-// if(rsp.getSubCode().equals("isv.permission-api-package-limit"))
-// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), "请检查淘宝用户API:taobao.user.seller.get是否具有访问权限",params);
-// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), rsp.getSubCode(),params);
-// }
-// else if(rsp.getErrorCode().equals("25")){
-// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), "无效签名!请检查SessionKey、appKey、appSecret是否匹配",params);
-// } else
-// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), "参数错误!"+(StringUtils.hasText(rsp.getSubMsg()) ? rsp.getSubMsg(): rsp.getMsg()));
-// }
-// if(rsp.getUser() == null || rsp.getUser().getUserId() == null){
-// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), "参数错误!请设置店铺SellerUserId值!",params);
-// }
-// else if (shop.getSellerUserId().longValue() != rsp.getUser().getUserId().longValue()) {
-// return new ApiResult<>(EnumResultVo.TokenFail.getIndex(), "当前用户是:" + rsp.getUser().getNick() + ",请重新授权",params);
-// }
return ResultVo.success(HttpStatus.SUCCESS, params);
}
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/service/ErpShipWaybillService.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/ErpShipWaybillService.java
new file mode 100644
index 00000000..20141931
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/ErpShipWaybillService.java
@@ -0,0 +1,20 @@
+package com.qihang.jd.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qihang.common.common.ResultVo;
+import com.qihang.jd.domain.ErpShipWaybill;
+
+import java.util.List;
+
+/**
+* @author qilip
+* @description 针对表【erp_ship_waybill(发货电子面单记录表)】的数据库操作Service
+* @createDate 2024-06-16 17:18:22
+*/
+public interface ErpShipWaybillService extends IService {
+ ResultVo waybillUpdate(ErpShipWaybill shipWaybill);
+ List getListByOrderIds(Long shopId,String[] orderIds);
+
+ ResultVo printSuccess(Long shopId,String[] orderIds);
+ ResultVo pushShipSend(Long shopId,String[] orderIds);
+}
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/service/OmsJdWaybillAccountService.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/OmsJdWaybillAccountService.java
new file mode 100644
index 00000000..bc6c2533
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/OmsJdWaybillAccountService.java
@@ -0,0 +1,13 @@
+package com.qihang.jd.service;
+
+import com.qihang.jd.domain.OmsJdWaybillAccount;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author TW
+* @description 针对表【oms_jd_waybill_account(京东电子面单账户信息表)】的数据库操作Service
+* @createDate 2024-06-18 18:25:19
+*/
+public interface OmsJdWaybillAccountService extends IService {
+
+}
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/ErpShipWaybillServiceImpl.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/ErpShipWaybillServiceImpl.java
new file mode 100644
index 00000000..7c4c300e
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/ErpShipWaybillServiceImpl.java
@@ -0,0 +1,161 @@
+package com.qihang.jd.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qihang.common.common.ResultVo;
+import com.qihang.common.enums.EnumShopType;
+import com.qihang.common.mq.MqMessage;
+import com.qihang.common.mq.MqType;
+import com.qihang.jd.domain.ErpShipWaybill;
+import com.qihang.jd.domain.OmsJdOrder;
+import com.qihang.jd.mapper.ErpShipWaybillMapper;
+import com.qihang.jd.mapper.OmsJdOrderMapper;
+import com.qihang.jd.service.ErpShipWaybillService;
+import lombok.AllArgsConstructor;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+/**
+* @author qilip
+* @description 针对表【erp_ship_waybill(发货电子面单记录表)】的数据库操作Service实现
+* @createDate 2024-06-16 17:18:22
+*/
+@AllArgsConstructor
+@Service
+public class ErpShipWaybillServiceImpl extends ServiceImpl
+ implements ErpShipWaybillService{
+ private final ErpShipWaybillMapper mapper;
+ private final OmsJdOrderMapper orderMapper;
+ private final KafkaTemplate kafkaTemplate;
+
+ /**
+ * 更新电子面单信息
+ * @param shipWaybill
+ * @return
+ */
+ @Transactional
+ @Override
+ public ResultVo waybillUpdate(ErpShipWaybill shipWaybill) {
+ String orderId= shipWaybill.getOrderId();
+ if(shipWaybill.getId()!=null&&shipWaybill.getId()>0){
+ // 存在,修改
+ shipWaybill.setCreateBy(null);
+ shipWaybill.setCreateTime(null);
+ shipWaybill.setOrderId(null);
+ shipWaybill.setShopId(null);
+ shipWaybill.setShopType(null);
+ mapper.updateById(shipWaybill);
+ }else{
+ // 新增
+ List erpShipWaybills = mapper.selectList(new LambdaQueryWrapper().eq(ErpShipWaybill::getOrderId, orderId));
+ if(erpShipWaybills==null|| erpShipWaybills.size()==0) {
+ shipWaybill.setStatus(1);//已取号
+ shipWaybill.setShopType(EnumShopType.TAO.getIndex());
+ shipWaybill.setCreateTime(new Date());
+ mapper.insert(shipWaybill);
+ }else{
+ ErpShipWaybill update = new ErpShipWaybill();
+ update.setId(erpShipWaybills.get(0).getId());
+ update.setWaybillCode(shipWaybill.getWaybillCode());
+ update.setLogisticsCode(shipWaybill.getLogisticsCode());
+ update.setPrintData(shipWaybill.getPrintData());
+ update.setStatus(1);
+ update.setUpdateTime(new Date());
+ update.setUpdateBy("重新取号");
+ mapper.updateById(update);
+ }
+ }
+ // 更新关联订单erp_send_status状态
+ OmsJdOrder orderUpdate = new OmsJdOrder();
+ orderUpdate.setErpSendStatus(shipWaybill.getStatus());
+ orderUpdate.setErpSendCode(shipWaybill.getWaybillCode());
+ orderUpdate.setErpSendCompany(shipWaybill.getLogisticsCode());
+ orderMapper.update(orderUpdate,new LambdaQueryWrapper().eq(OmsJdOrder::getOrderId,orderId));
+
+ return ResultVo.success();
+ }
+
+ @Override
+ public List getListByOrderIds(Long shopId, String[] orderIds) {
+ List erpShipWaybills = mapper.selectList(
+ new LambdaQueryWrapper()
+ .eq(ErpShipWaybill::getShopId,shopId)
+ .in(ErpShipWaybill::getOrderId, Arrays.stream(orderIds).toList()));
+ return erpShipWaybills;
+ }
+
+ @Transactional
+ @Override
+ public ResultVo printSuccess(Long shopId, String[] orderIds) {
+ List erpShipWaybills = mapper.selectList(
+ new LambdaQueryWrapper()
+ .eq(ErpShipWaybill::getShopId,shopId)
+ .in(ErpShipWaybill::getOrderId, Arrays.stream(orderIds).toList()));
+ if(erpShipWaybills!=null){
+ for (var w : erpShipWaybills){
+ if(w.getStatus()==1) {
+ ErpShipWaybill update = new ErpShipWaybill();
+ update.setId(erpShipWaybills.get(0).getId());
+ update.setStatus(2);
+ update.setUpdateTime(new Date());
+ update.setUpdateBy("打印面单");
+ mapper.updateById(update);
+
+ // 更新关联订单erp_send_status状态
+ OmsJdOrder orderUpdate = new OmsJdOrder();
+ orderUpdate.setErpSendStatus(update.getStatus());
+
+ orderMapper.update(orderUpdate, new LambdaQueryWrapper().eq(OmsJdOrder::getOrderId, w.getOrderId()));
+
+ //TODO: 打印成功之后 加入备货清单 采用kafka推送消息处理
+
+ // 打印完成,通知备货
+ kafkaTemplate.send(MqType.SHIP_STOCK_UP_MQ, JSONObject.toJSONString(MqMessage.build(w.getShopId(), w.getOrderId())));
+ }
+ }
+ }
+ return ResultVo.success();
+ }
+
+ @Transactional
+ @Override
+ public ResultVo pushShipSend(Long shopId, String[] orderIds) {
+ List erpShipWaybills = mapper.selectList(
+ new LambdaQueryWrapper()
+ .eq(ErpShipWaybill::getShopId,shopId)
+ .in(ErpShipWaybill::getOrderId, Arrays.stream(orderIds).toList()));
+ if(erpShipWaybills!=null){
+ for (var w : erpShipWaybills){
+ if(w.getStatus() > 0 && w.getStatus()<3) {
+ ErpShipWaybill update = new ErpShipWaybill();
+ update.setId(erpShipWaybills.get(0).getId());
+ update.setStatus(3);// 已发货
+ update.setUpdateTime(new Date());
+ update.setUpdateBy("电子面单发货");
+ mapper.updateById(update);
+
+ // 更新关联订单erp_send_status状态
+ OmsJdOrder orderUpdate = new OmsJdOrder();
+ orderUpdate.setErpSendStatus(update.getStatus());
+
+ orderMapper.update(orderUpdate, new LambdaQueryWrapper().eq(OmsJdOrder::getOrderId, w.getOrderId()));
+
+ // 更新erp_sale_order发货状态(controller层采用kafka推送消息处理)
+ // 发货完成,通知发货出库
+ kafkaTemplate.send(MqType.SHIP_SEND_MQ, JSONObject.toJSONString(MqMessage.build(w.getShopId(),w.getOrderId(),w.getLogisticsCode(),w.getWaybillCode())));
+ }
+ }
+ }
+ return ResultVo.success();
+ }
+}
+
+
+
+
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdOrderServiceImpl.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdOrderServiceImpl.java
index 892da29a..8bbbd6b2 100644
--- a/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdOrderServiceImpl.java
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdOrderServiceImpl.java
@@ -43,6 +43,13 @@ public class OmsJdOrderServiceImpl extends ServiceImpl page = mapper.selectPage(pageQuery.build(), queryWrapper);
if(page.getRecords()!=null){
diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdWaybillAccountServiceImpl.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdWaybillAccountServiceImpl.java
new file mode 100644
index 00000000..dd40df0a
--- /dev/null
+++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdWaybillAccountServiceImpl.java
@@ -0,0 +1,22 @@
+package com.qihang.jd.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qihang.jd.domain.OmsJdWaybillAccount;
+import com.qihang.jd.service.OmsJdWaybillAccountService;
+import com.qihang.jd.mapper.OmsJdWaybillAccountMapper;
+import org.springframework.stereotype.Service;
+
+/**
+* @author TW
+* @description 针对表【oms_jd_waybill_account(京东电子面单账户信息表)】的数据库操作Service实现
+* @createDate 2024-06-18 18:25:19
+*/
+@Service
+public class OmsJdWaybillAccountServiceImpl extends ServiceImpl
+ implements OmsJdWaybillAccountService{
+
+}
+
+
+
+
diff --git a/open-api/jd-api/src/main/resources/mapper/ErpShipWaybillMapper.xml b/open-api/jd-api/src/main/resources/mapper/ErpShipWaybillMapper.xml
new file mode 100644
index 00000000..af99b39a
--- /dev/null
+++ b/open-api/jd-api/src/main/resources/mapper/ErpShipWaybillMapper.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id,order_id,shop_id,
+ shop_type,waybill_code,logistics_code,
+ print_data,status,create_time,
+ create_by,update_time,update_by
+
+
diff --git a/open-api/jd-api/src/main/resources/mapper/OmsJdOrderMapper.xml b/open-api/jd-api/src/main/resources/mapper/OmsJdOrderMapper.xml
index a62c2c16..47313fbc 100644
--- a/open-api/jd-api/src/main/resources/mapper/OmsJdOrderMapper.xml
+++ b/open-api/jd-api/src/main/resources/mapper/OmsJdOrderMapper.xml
@@ -55,6 +55,9 @@
+
+
+
@@ -66,7 +69,8 @@
invoice_code,order_remark,order_start_time,
order_end_time,fullname,telephone,
mobile,full_address,province,
- city,county,town,
+ city,county,town,erp_send_company,
+ erp_send_code,erp_send_status,create_time,
province_id,city_id,county_id,
town_id,vender_remark,balance_used,
pin,return_order,payment_confirm_time,
diff --git a/open-api/jd-api/src/main/resources/mapper/OmsJdWaybillAccountMapper.xml b/open-api/jd-api/src/main/resources/mapper/OmsJdWaybillAccountMapper.xml
new file mode 100644
index 00000000..a0a19ff8
--- /dev/null
+++ b/open-api/jd-api/src/main/resources/mapper/OmsJdWaybillAccountMapper.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ id,shop_id,seller_id,
+ provider_id,provider_code,provider_name,
+ provider_type,amount,support_cod,
+ branch_code,branch_name,settlement_code,
+ province_id,province_name,city_id,
+ city_name,country_id,country_name,
+ countryside_id,countryside_name,address,
+ name,mobile,phone,
+ is_show
+
+
diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoOrderServiceImpl.java b/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoOrderServiceImpl.java
index e53538b9..6653e37f 100644
--- a/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoOrderServiceImpl.java
+++ b/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoOrderServiceImpl.java
@@ -165,8 +165,14 @@ public class OmsTaoOrderServiceImpl extends ServiceImpl taoGoodsPage = mapper.selectPage(pageQuery.build(), queryWrapper);
if(taoGoodsPage.getRecords()!=null){
diff --git a/vue/src/api/jd/ewaybill.js b/vue/src/api/jd/ewaybill.js
new file mode 100644
index 00000000..456d81cc
--- /dev/null
+++ b/vue/src/api/jd/ewaybill.js
@@ -0,0 +1,55 @@
+import request from '@/utils/request'
+// 获取电子面单账户list
+export function getWaybillAccountList(data) {
+ return request({
+ url: '/api/jd-api/ewaybill/get_waybill_account_list',
+ method: 'post',
+ data: data
+ })
+}
+
+
+// 更新电子面单账户
+export function pullWaybillAccount(data) {
+ return request({
+ url: '/api/jd-api/ewaybill/pull_waybill_account',
+ method: 'post',
+ data: data
+ })
+}
+
+// 取号
+export function getWaybillCode(data) {
+ return request({
+ url: '/api/jd-api/ewaybill/get_waybill_code',
+ method: 'post',
+ data: data
+ })
+}
+
+// 获取打印的数据
+export function getWaybillPrintData(data) {
+ return request({
+ url: '/api/jd-api/ewaybill/get_print_data',
+ method: 'post',
+ data: data
+ })
+}
+
+// 打印成功
+export function pushWaybillPrintSuccess(data) {
+ return request({
+ url: '/api/jd-api/ewaybill/push_print_success',
+ method: 'post',
+ data: data
+ })
+}
+
+
+export function pushShipSend(data) {
+ return request({
+ url: '/api/jd-api/ewaybill/push_ship_send',
+ method: 'post',
+ data: data
+ })
+}
diff --git a/vue/src/views/shop/jd/ewaybill/index.vue b/vue/src/views/shop/jd/ewaybill/index.vue
index a90a3516..76f40bb1 100644
--- a/vue/src/views/shop/jd/ewaybill/index.vue
+++ b/vue/src/views/shop/jd/ewaybill/index.vue
@@ -79,68 +79,52 @@
-
+
- {{scope.row.tid}}
- {{shopList.find(x=>x.id === scope.row.shopId).name}}
+ {{scope.row.orderId}}
+ {{shopList.find(x=>x.id === scope.row.shopId).name}}
-
+
-
-
-
-
-
- x {{scope.row.num}}
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
{{item.skuName}}
+
{{item.outerSkuId}}
+ x {{item.itemTotal}}
+
+
+ 售后
+
+
+
+
-
+
- {{ parseTime(scope.row.created) }}
+ {{ parseTime(scope.row.orderStartTime) }}
- 买家留言:{{ scope.row.buyerMessage }}
- 卖家备注:{{ scope.row.sellerMemo }}
+ 买家备注:{{ scope.row.orderRemark }}
+ 商家备注:{{ scope.row.venderRemark }}
-
-
-
-
-
-
-
-
-
- {{scope.row.receiverName}} {{scope.row.receiverMobile}}
+ {{scope.row.fullname}} {{scope.row.mobile}}
- {{scope.row.receiverState}} {{scope.row.receiverCity}} {{scope.row.receiverDistrict}} {{scope.row.receiverTown}}
+ {{scope.row.province}} {{scope.row.city}} {{scope.row.county}} {{scope.row.town}}
- {{scope.row.receiverAddress}}
+ {{scope.row.fullAddress}}
@@ -171,10 +155,10 @@
- {{ item.cpCode }}
- {{item.branchName}}:{{item.quantity}}
+ {{ item.providerName }}
+ {{item.branchName}}:{{item.amount}}
更新电子面单账户信息
@@ -193,14 +177,14 @@
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import {listShop} from "@/api/shop/shop";
-import {listOrder} from "@/api/tao/order";
+import {listOrder} from "@/api/jd/order";
import {
getWaybillAccountList,
pullWaybillAccount,
getWaybillCode,
getWaybillPrintData,
pushWaybillPrintSuccess, pushShipSend
-} from "@/api/tao/ewaybill";
+} from "@/api/jd/ewaybill";
export default {
name: "printJd",
@@ -227,8 +211,8 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
- status: 'WAIT_SELLER_SEND_GOODS',
- erpSendStatus:null,
+ orderState: 'WAIT_SELLER_STOCK_OUT',
+ erpSendStatus:-1,
shopId: null
},
// 打印参数
@@ -249,7 +233,7 @@ export default {
},
created() {
this.openWs()
- listShop({platform: 4}).then(response => {
+ listShop({platform: 3}).then(response => {
this.shopList = response.rows;
if (this.shopList && this.shopList.length > 0) {
this.queryParams.shopId = this.shopList[0].id
@@ -292,12 +276,12 @@ export default {
},
// 多选框选中数据
handleSelectionChange(selection) {
- this.ids = selection.map(item => item.tid)
+ this.ids = selection.map(item => item.orderId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
openWs() {
- const ws = new WebSocket('ws://127.0.0.1:13528');
+ const ws = new WebSocket('ws://127.0.0.1:9113');
ws.onopen = () => {
console.log('与打印组件建立连接成功: ');
// 或打印机
@@ -318,7 +302,7 @@ export default {
};
// 当发生错误时触发
ws.onerror = function (error) {
- obj.msgError("打印组件连接失败!请安装并启动菜鸟云打印组件!");
+ obj.msgError("打印组件连接失败!请安装并启动京东云打印组件!");
console.error('WebSocket error:', error);
// alert('WebSocket error occurred. Check the console for more details.');
};
@@ -375,14 +359,13 @@ export default {
// }
if (!this.printParams.printer) {
this.$modal.msgError('请选择打印机!');
- return pushWaybillPrintSuccess({shopId: this.queryParams.shopId, ids: this.ids})
return
}
const ids = this.ids;
getWaybillPrintData({shopId: this.queryParams.shopId, ids: ids}).then(response => {
console.log("======打印======", response.data)
if (response.data) {
- const ws = new WebSocket('ws://127.0.0.1:13528');
+ const ws = new WebSocket('ws://127.0.0.1:9113');
ws.onopen = () => {
let printData = []
response.data.forEach(x => printData.push(JSON.parse(x.printData)))
diff --git a/vue/src/views/shop/tao/ewaybill/index.vue b/vue/src/views/shop/tao/ewaybill/index.vue
index 34a5a2bb..0fa219b1 100644
--- a/vue/src/views/shop/tao/ewaybill/index.vue
+++ b/vue/src/views/shop/tao/ewaybill/index.vue
@@ -228,7 +228,7 @@ export default {
pageNum: 1,
pageSize: 10,
status: 'WAIT_SELLER_SEND_GOODS',
- erpSendStatus:null,
+ erpSendStatus:-1,//-1代表未发货的
shopId: null
},
// 打印参数