From 398395dd4e82aa8b4e3932b9688d0509f6a09dca Mon Sep 17 00:00:00 2001 From: Damonny <826010988@qq.com> Date: Wed, 18 Dec 2024 15:21:51 +0800 Subject: [PATCH] =?UTF-8?q?init:=E5=88=9D=E5=A7=8B=E5=8C=96=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../V5_Order_1/codegen-Orders.zip | Bin 0 -> 23724 bytes .../haoka/enums/ErrorCodeConstants.java | 1 + .../admin/orders/OrdersController.java | 95 +++++++ .../admin/orders/vo/OrdersPageReqVO.java | 93 ++++++ .../admin/orders/vo/OrdersRespVO.java | 251 ++++++++++++++++ .../admin/orders/vo/OrdersSaveReqVO.java | 191 +++++++++++++ .../haoka/dal/dataobject/orders/OrdersDO.java | 267 ++++++++++++++++++ .../haoka/dal/mysql/orders/OrdersMapper.java | 50 ++++ .../haoka/service/orders/OrdersService.java | 55 ++++ .../service/orders/OrdersServiceImpl.java | 74 +++++ .../resources/mapper/orders/OrdersMapper.xml | 12 + .../service/orders/OrdersServiceImplTest.java | 226 +++++++++++++++ .../migration/V5.0.1_order_create_table.sql | 66 +++++ .../V5.0.1_order_insert_api_menu.sql | 55 ++++ 14 files changed, 1436 insertions(+) create mode 100644 code_gen_history/V5_Order_1/codegen-Orders.zip create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/OrdersController.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersPageReqVO.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersRespVO.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersSaveReqVO.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/orders/OrdersDO.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/orders/OrdersMapper.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersService.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImpl.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/orders/OrdersMapper.xml create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImplTest.java create mode 100644 yudao-server/src/main/resources/db/migration/V5.0.1_order_create_table.sql create mode 100644 yudao-server/src/main/resources/db/migration/V5.0.1_order_insert_api_menu.sql diff --git a/code_gen_history/V5_Order_1/codegen-Orders.zip b/code_gen_history/V5_Order_1/codegen-Orders.zip new file mode 100644 index 0000000000000000000000000000000000000000..5a7b32fa39c8d138abc0771a966e8862a72ee653 GIT binary patch literal 23724 zcmc$_V~}p!wk?>}O53(=+qP|+D{W(C=1SYPZQHhO*4lgDdhuRVom2O|h*$TEm=QDP z9N+jeTWh`d*87l`0tP__fPjDi&{t2;0QjGN!GG>OT#OCuXl(3^U93%L%nj_U4Cwx! zk7x`nJn5Vqjp%F)ENtm44O|WAjBM#F?2PP;O&tGOPxsFjbpLE&WM}K_XlHHx=dFRU z&7c3+IsRGcMCWQpC-?WAyn&gCqKSj59PMAb{Yt*Jn&(F!-v03gXHc#D&;#R35Kx$I zeX>^D6xd1Gyipk`<9K_eh=QOwP>SV*#6|X^g^XhSW|*EI@ott@@J{EQFj46g-HIZa zzOi}y%Da6$s)Jpj<`8Vz77bm*B*@Wri8v8A7-pr&9H@apl)0L~G#{iOP2DdV)i3RD zd9gQ3Bo>RF+~2YwZ7Nes$?4$mJmsR@Kk_SN)n{H`d}H7jRF5Tan1O$d4O4hwueCq5 zBy<$i8+7B%RvPeK5l7RB%uspGWL;`BwrgfCgSZKF|IC);5S2LlMh%shR1rpV%>`5> zSZ#qwf1X-iyf0!Lyc z=y>4o(L4JtkQAa;MTZh?^sytSK!u+1TB>0P6i&7b`4(4+^B=0)pi=c)b4GTz?XHsN z6(@(-4xasmf|f|HUHbrjJ?K9}Y+F{4G18%p7!pAzhw<6!cQ})PvbD!aD39Dzd64r#x+ZSi9g6>#ehzn-EKKra#IuBQs zZXUB(I|_q$=AXL~{rZxP=Imw7Y`gBwsicWO1VpTM@=&D~g3j5C1YXfYn-)!AuNO|> z83OgD1Dd1z785kX1Q%r@cYNHNe6F3e;c~np`JT+2J$L$63-l)rIdKR|B^r4BAB<mKO71IXzghuD1JWU>1C1HTIF==iUMFGn8?`EPTDM-GC;>wuca_5wSWQw( zP2g~SZkMrkk$?_QCKIt)MP7h`ipk|B*{ZHLLiFr{D6Z*ly9uglXQWmbwd2!1*1@-y zB;|S%VWryqtIkDy^-nD{vMT8rdvoSNSDGivqX#zsvCV zSyc@@Bjq@)B&7vq@{33pw#(kF_*8P#Q)X>Y3ZJjN9`z{YWgjsns3em`ZBA%-pYvGRU z&#tgKy!R`+WY>@0r!#o?;>_V#e?)lsxEHXU?;0%bJ4546H)~A>k)s~Y2sEwLws0KV z**;MU`T}jbEI`30y6MWnraHIz?noN~5cHB$c}|NzmwE~DHmKYJ*IF%X^2tkqLnJEH z!vz5Y0O0=s0FeKevJvp#CmV_;PWJzy8JQa2a>!!H-v%? zHTPTZ-bbBmc1JuoInjaC%FJ3UaUsrOixhg`;*D`v>GGX0Gwkv##$M>ZNp(QmOjaoS zl;>2)W)ADkrm`5Q!42dX;?86Ptdk{W9?BqEC~IsE0H^tz$~EQL{5bPALr`11^Na|o z0*4mwi}ij2An`x)^jm+1*{izXSg))yKvT1a-?VUs)PQ!NLc74b-+1*0=q;-mlJd0W z=n7%d^Mz+ZnU5&?TNv|$mE6RDO{$h3pL>0j^?qc)>cC*h+K9X=ojG4?Co+B0CWv7 z&S2%Jv&jSOQNEcZ5({J>Cvt;)(hI^<_1o7$xS>Dj6o>neH^q=m?wlcBaOq5b3G6cWp zM_TCegmt;gzMjhB9Tzx9yQ2py-S7vEhG!0E1bLTo*aHr>tXm)4xLrIIc_?hRvPxQ8v7=LN70`c4R2x6db(m5Lnye_qt8f!4#OM_u!bR^gfvz&X}kG|*WoOB!$=is zYNeN!T5Qc1jS?9in0wl!9V{@%y9-eS0np& zD>*C*vobbPW_(kzr;;*NOLVQcZo(BPer`bFsu*u};TBz@943k;17A>tpLZKLS+JZQ z>5mLFeM6=sPeBj#t$%Ogu5u959R>L6i9G9lwWzFa!ewuev|qQ#1*+PxW=8RW-ny6* z?0RT<4j3rQ^SW2XHzHam!IT9ti;SUqYnOy;Rz!$Ak58%8$0*4($TKd3 znDMcKmDuhFwnweZQwy0N2~wsW=33ZoV$0y$i{Hn6QWLs_4vtWfjhBYyO%b!EqTFzt zL0%!rk>{dd6>FbylyU#zpkrwq{dQ!@9TY~<<3ci4A1YdaVZ6(TXUp`ZDhey`c089p zj8ZhW&Gh|MmhM*^chTs+K)WtP#oM=e7*j_Z=d;J_CX=mCB<(O4E;EI9TqCRXEIetW zYj|%Ai+g6rDc3Y#2hg23r4u_So6zKze1`iud)alBXgz(!^q?g0L z1Dqz&bs7U006;PBzYB2xjd`(>f$RU27iXqk%B_oH4{xjO`PR5M%2ZP6gTSXTBXdGl zM#V&R@m&yY7`}JZ;|vu^7*I_I*Rb{|XCY8YTM^8=L*xeglA4iy4^FvCA|Vc^h>T&q z-@R^qUOl7Zh(p4M1{8!tNU4ViXEYf5iJ*)p0}VR(A@L{Gm?Bn?U(m#<6ojYN{0d1O z=%jhpydqE;9zcdijfRAetydX^MF188NehwDC#=B8gE9dbNM(jqnelqZ0xi#HC;0hv zJNk?dDLgJL`PdJFPYR#NFHi^W{A`>GfP5gigecETeJ}f3*!?VLY%UIRN-OpvXzmj8obd~ztxkGgW7l7v zd#hNg{7EzU%8rkE1AG0qlmYsezCb^67Hs3sG4?1Z&8yR;k^o`>MLz=wp)4LFe8|J-O70;|ZGK0)u#Uu4iUYXQv#91kNpmwdH8GtM*;FBkIOw20oxAZ; z%)4V7o5$w!L>btdN3cn=l`6a%y2KnRsVRdd&7zhX^^ES;awI05P()~{WfYK6B)wZK z`KKsS=1e!MsVn7+a|GUS^*$)29B`|`?HKP+edn~U7NeG!Eb%z>rZA9x7_nnhsMqf6 zEpe{`9>wpfXa|1w8rh?ftoD}3OY`%HhlN2+uu zC)2IYY`zmzkjf`h-jlGhOwO$aPp&F+q89iF0cw7>0dhE?gO18-*v2_8fJRVZp`RTM z-xV)UEI&-z>XGaxAo&}3fdo!iXs&0XH@Tk1X+XIEj4;*r>oYnZi!=2s)T>_85(I5$ z2P?BvmgKA|RT(fKwunIvyJkLAXxFeu>W1yi`BU0@qcd_ zWo63B%`b4_lKUfC;q7bB^u*br$5Vh)=0zNmqO1%VitPN0KA(8&znsHT3W;r7EKsnNU*({*}tqY zDCuOH(_yOjmS&cWawA-8aXm6S?IoC8Vh`s_BBTiU31!#3)t&QgU0+1n;!i|Bh03=} z3i@ozOEJc9`HPXlO}ml_k83D71}+!80J zvNQk4E=UV-DO@ne(|0K7o!`Rc$za!!u0*5{DOaStE|&_c-Jx6MYB$Y-D6LDF59U^z zKxd_pjH%+$gr&rQ3WghBOk=m# ztQ$V~HDhFQXFLs&N&_y`IRIPYfhq-Oq#34*u&0SQ0*-`5!gc0!ZdM5e<9TGAcHIVu z8L&?*j#0gbgp65xLM^yv9DexFgHG<}jB&04{9S}_3Mi%t_Yoq>Tk=?lVT#zhpgrDQ zF_2L1`2;e^s04Boj3Y$TvZu4LGbkz06if#UBNF2AJv$PK)3|XW?gH=^KNAE}jUkrV zD6pd)vI=0%t=;N<_VH{BI&-kKbd7g09CYC zg6&b;G|BsvR+d9W2yqO-U2kzJ(qUyu4QXwk7qPDM&scQyv@sEwwgAcXhf-RPdvgH) zq~stI&CKB%w)+ePkwg4k%;!eb$6LVOR?|^sGQY0POYBf(?=Tz6Sjs)2tRevZ8zETX zfrW(Gt|$^?iL8@C8N0QoyP;&DpZ4NH(aq$eT>)+?9P*+SH;ni-V>Ym~;`pF_NcNlJt@6_yHu`uDBi1^%N^bgSGwpCVh9Cv($3q&V^n?0$ei&_eX~MkxA&>J3pT$ zpAh0fex@O7qTseY*|oQqpw;83i=Q90SIrOA19I_>_<=rfSa$GuJU*@V-`11u7Z;yk zdb-_>zuex7BANORy&Vx#t~>CBcF~2y%f|-{rRmsBRvO8Wl32Tl9Ds-C@)1Z9gyuSi zbg{9+b7PqdI#y{)Q^P=Wv6piDkIg5I#6!A%oE*MX^Od7# zVpZFNMZ=Jn`s8^k7fDkX`3{D7^!vB$Cb!N}Pe!tT+T5{@fMa~3puCyhEg1v)LGGPC)QtI_k@ZN9H!=4N;v(o*q?-C;Z*$Ik>UfR@Dk z)ef%Y9gz#SWdx9R;`>9gyf^@W<;D{3DP%)O_MWtKR|QMWk>OAq3BKZv1&}{duAyCf zn;&|u_j&t$tA*2crtGDiPGK@x>Z$!3!K7UDEot6nMpl}W4z-t7m$TPv@jordNA& z_vuFaeCPb_;fBH3bTo)A+7uL%{sr*%?i!}!9J@l9{~397s69u40EYGt*0f&;cw|tP z+WQx;r>pykLmsb8gPM=hCVAl|KVf-a!2dFNZuUmnj6nbZvf=)nD0=)K6GdYKYdT{C zX9GJ!OA{mK|JxbGVk%zbAU+}22Gz&Ns^=1nM8A~C^rE{kjqkSN0 zo2pxza#xutW(56MWz>M2_stN1n;LtVp)B+tVlAo?xi9rr!g1h}&hb373xZzOo)f*M zo-@3r2KndEC5;5;M1sYIhmzQEL$9-ejyUZY^yU znS#OPaxGMEVW+;^WfzQE@}czgK|~X9ti8(+H8Y78ogv zDT;E}io%>T)$K(d&PBH!FCj!QvxuE99P7vtBC5Gsz<;wdoN%%)t*&m7Izu%E+9c~C zA_hiNxgGG)O<)f{i>dVU9N95dAG0_xf{&FLVdrpk&Rs`x zKD`Ay%tMbG!_(w?EN2WvIAI2k6Eb4M1xty>R&~tF+TscIbVxf;&{Q(@=?)#HXHOZ~ zZ!p`pc5F;Uy`Sv{4ACpI`U>ZDhWq(PkqvrTz-ipD&43Pw+M9qmI`}JAQIMJ^vi(OwoQs(Oe_9JArTLN35v>D2fF;t(suehx(#qj>|^i4zek8228)2hp9x!BNxb<(vK0X9fb)}7HZlW3!o^ECMT5x*dZI;ore zq{wSXC=*b^K=QR1*+v#dM8Pmt5-c{tRw}b5JzK=7Vf!hv_?1=04lQquF70^`huGYz z^c4a+A@9SV&OWZEhACL@vrr^^wGu&5e4+gu@-W1wZ<^U-ll7n`Poyx7<)D%(o>q4(c|=B?hf+*aT@bSD=NPFYwdq~^nb1Sm0_;Y$!CNBU&zA~HK^R6 zJN#7Aqcg=ij)54)fKd_$-+aba(zKT>BzIg7sb0VxP@+^OUH5AOC7R?(bo^CDcWC%a z?pkn+;rGGi@^X71`PFNg7zBl1{8VgJiucAOYSYRtwX;youIOob4ee}{flFwE+Hx&I zdPVv{&!H$^5p!;*K=CiE2?(>~bm_0z!tkiIhpmRq&+Y}eZ@|CAoacKGl=M%A%ZdE& z#N7S=sF>S$I5}AVuR1PcU~g~Y_;*@cm@H+xP7fdQ4CW0^YeS^}B%wfTA&<|0Z$8(s z88cctkxFR7n}IG8Gh;$G1N@*0>KUb&fWnlp7D9`b@B;TbX&-{G0-(ho5=24CJdX{d z;{}^`l;#!g4C@J)6j<=OMoY3t3SAr8-)oP5Cx|6>r4PEmMQ}=-%+>STAN#sdL%!%< zn@aP9OQt&D-l{>jtv^M2a#_i~4=hNa?ZJHM0p~yo_ImtU4lDv_^4M8fSEhhW|Mnw0 zO4gE{eP*7^*ftT*Q=?Ost{K^e5el@1Ls5YXtgzvSo~DK-mrto&(Jv;=F@4aiAB*lf zr!p{4WQn_e(j(P)+rB?PMJ+u`mCq2|*_K1NL6$Wh$qzqwcS2ADJ-iC}i>#sc)=ZO=j{O^Gz>$1wyWd(1MZ8tE5NRoX`yFFBSo3 zf1aCf90R7%?Qc_mWZ(9tN-l5FbMG@a5s@T#?!QmBXhzyJ2rpsy0*C0ma2xVigjX0% z1zJx(Dvz{GO+N@9fg{N(=hnebBFljI*osf;vy*p3&#OU(Cp9D1g(lwanu4W?}=CvUSqCeOE2w-oXNhQHSJ`gYb77B zo9W(8RYf1_Foxq8QWs|tM}@zXRJ@IzgRDB84LS1N(z(rWq{+)Jc6l3eFpRC|B{qvn zl4_X2-${Bm9VC-@EV{5?{&<$SI9B=QAv;%UsPK`B8V-F78ou*AxMll`Crb^tDFHwL z04GrYjwf3GdpvP8ak6u9G%|7e(;xo}_y4b4aJR8miPw?C6hIESmid6&-@1;9W|IL< zgJ5Owx6~59I85H$DSB5yjo1KGEmVkLMFw62`k7!Uh@@!G%6FrnrR%o2}P9b55Zrc)M+=KZCu{e3M(8>YH@FEqUai+6C|@>$a# zb}r^s6Yvc_eYT^adnJ3C>>wLILG9Ff$B%O%8|JxOusE8v$%1{fZQ?bvuw5Na(^D{> z#{diJ_8-~~UedO79o`VCC3&07<3~HIAq+tLKW{Sj)VHK8=8dT{QB?=(l^4bx~s=fdI(=r8zV98*- z+5rRraQy?ef89d$`riZEe`4~&$;8ps!pP)*g`mi!7Ht>_BW-_@>Z{pCBz(6hF!UB^#4AU*AMB7k1G&?kafa-|-cdONgoLyq+9x2Z z7OZJ7d*IsSJ%a#a{P3(RC?mt~+EKa6>iSirfFYmAE2H;f=21a{@C-vJia|^*{v>cB z9HlYLf=TWaIYFC}ZnbP!6(EL)t!lIBgRFUnRifmA^vXefssh~WgegoU?1h{W+}ZT! zC{ZsT*tmIb`S9Bq25KhIJooi$>Ai~1XO7#;nV{YSyKTJcHn!r6d;-hyu$y2O(DiF6 z42H1}J|^n6S6kU5JeoEifKWixW6X>kyl$`pFFk|)92P{Autsd_G7l&mnOLt>mJC09 zAln7)YxA5`+2`qt3OFuJ^EWM7uyR0YW%-8bwt%!S2a1P}>87WAzhnbQ4IqOpM?l$U z5W$Y9R&Cj^q)_wKUX$3c1X_fUY>*`&6$7oe((vSSxN=s8HN{vUvWWBix{~XLX*w6- zBny5EtXlO{W7_$3Li`ZufKG*Ktp){F)1Qo2WN)I4c(}N@mC>F z9qb2GwaQ8qfHl)XaM<&wzo}{_gjv#ZxI4XjzkeBif7x#))YtP&uJ+p!WeR4q=q04i1#J|nCei|`v1=@FEqNU|dYVs!MxD&LI$dg|Xg za(%wl^sU#ky|AYZyjNNlV(i}?8(5CWy5^4bO>fsY^b$EGK0_XV@PMdW%m{#%0Hi$U z{P^(~A91QKL5}}$aTMa;@zL$Sg^z!8F*C7OcK=U)bp7iMmbZ?h1#SlA%zs}}1m6MA zP-%nn_YS8&%3hDj;tzYEAoiM?bt-!R0>FS2g4_;J*^GipWkP&KL@U#e@9be$09!cD zj22#$6T}7rY$#Ouo_Kn40L9Tb21}fzxWOr{Qm1%wV ztX|lfNatB*^YCY((ry+P1Zm21jedtSmc6*yLy-4 zMRu7Ni6K~zn($SUyNJ71RZBh64OEoIO-eruajg=0VZ*_TZ~Hr0r~^#uPzuZkRInQ~ zc84Uns(n3pA2`otb6`B{0Va(q>!y1dw!v-36+MgpCD9OZdkEp7RihuP~K>R4rrOmXo*4anDpd4Z|bOQ#j%fhh(dAhjq)@X=2>l@x3&MfI6I zAV-1wb^c6N6n{hTKYEnJ!RH=zs#tdBFsoIF@IcZ7N+a!I$F1N)S+bU5$S}tqI5A6? z@YrNJ+dW_pGcxs>^x;)_F7#tRA?9SwIB(f+iR7{5dZSYCR|5c$(RW8jU{k}_Wuk;EEB-Jlm@2!ZjK!k1&^T)^iGMrkrPLL?r4+8cIy z4nT5W_|Jq%X*}`(2HsS9*oi<4A0X};tD$fAFt-Vdy+rhFfp>^wVxpg1CxR775w)38 zi~rn{epiVLDea=f;b}Ruw&pxn+u-Z6xwOUY{7A&PfsF=8pCF*7QEGy@4%WdvyT-aD z>R13HqvEWoaP-Z#SavZ*dTPw1q7p`w!89*PPO6ZbBOz@P{ub@~xbL28(8^P_0#AhZ zHEAi||9J`_E9yebJ~99S`>IJzAoEK-C&oaW!8`0exsrUQPSS+54*3HHMq=vGYHI#` z>T>+*NY|SP9*cT*t^P$sMvtSD(CEsd2y;jKC|Bab&lREnr@9> zj+_x4A4am6`BB;3vhm0BRGOvPa~*eLiPdH_watPj%|h{H@voWR8HA99EP)m(Pz+=J zNt+`Nd0({$72Ec9zQ+}OPF3AJ8+uN@-WS%}Zn(AzM8zVfoIo~m>$XI3nksKQ%yvKI zKJaOU;txZf8?|wtfSiu2^WC_v;JVwNpGpc88xga0FVTlaYZ^JWlh|jOi0C0WVsA%* zWA_v0&X=r?pLm{k)2h{E)g9pt)U(*}Pu&^1Dl`rXP>R`ne{3+3bJ*#=HuiF~TwGii z|APBq>8jvQY%E9ol{_SqGKHOFsr2i%^z=Tl@%R0{o@%jKkyou+Fz5AmdXKKovbu;| zv6fwFfuky=g||*L(n#W|y>EZY-OXiV7^yjk1Dd%Uc7%sv^&{qCt%A2(?X_VdGE$cX z@Dq9?(XQ$#B&$-s!t$Dr&&zX+*K_m$XNPmk_tVR+=K1S#MR*m?hm-yN$r;u06wUEa z{{D5gBfyoNRwbHT-Q*hwaaWl2u7tW$90<=L{|X%X%Ip(cC^+0kc6OtyuY;}qRD1v| zgH3u-m4G+wyofMCqBCub=x^AD`5#TG3+dM_wd680ETXs~DmcLEnGNZJ5eh1U4Rg{t zZAFnN>AilkN1}m*iv*}YgvC795x2gi!J}cvAnd$wgU-lL^=q^d(<;{#!BZ82-RE6# zCy|wp0BjHDUYc&&^?8>-*X6m?r;wmr@yjS9NMnjAARb}_*Z>(8Cq`oLH0lHK>x)EA zq}Lz3llvz_NB0`Xe5S4y!{4rL{1XA=JUWu#=R%TK+u39(Ntf3CEs&v<{0(AwU4RPi( z7}t}9Z^@&7S0oeNG^vS3II*a0)M4o6_*BrlIw(y<9tHqcSp*%)vub#hg!BagB1 zAQ&^L?&s#vPuT>9;5+SWL}7UBlzzvbsEe30wXOBe%PZ4HLHF6N_tqDwa;#87y`>1GN9p!{vp{-pfp$ zI5Awe3yL1d7s`0cEc{#+_+GWRNgoyq#AXgm6973O>DoD%&t9Zfq#RFvLYZJ6{A@#9 zZj}ajD}6AylXy7m{wt(sOciXBf&&1M5&yf8?)RS#=?3-||D{QK6I&M>Cpr;FM>|KM zKhySqdd5!92DZ*ldPm`rhY=-5iO~n08Gpz0`DHbTTen*^_qOUsi{*}IFVjx-?$6VZ zCNi!zy(ygsZ`JW}3MRb@y>D-U{dtm3Ij$z2%at5?jkJW+>h$z%#k9n-^!U{5%#w8V zxY8Tz!M+rq0?y-OloaBlU&vJ4+b!>-F^#cUX<0V9w-tropINv$ zJkxH|-V5~L)}N8VQrS&SyxUBd7T-@|Fiv_E>(AcTZDd@SSr_V{Zh*p1pIM?1dxvw& zYBj;Y!D#2GJeQeeeg@bHn7Xtr^T;28+S-8u`=1{|dpbnifkFW&)+l$1;|MX!J@gV{ z0+5EIi8!5d%Tw;0X2A(XEOdVt-dms``R{)|gW#Y1>tE+ye+HWY{&Fk-T(p0##RNGy zBmwlH>+}mZce}_@R{mLF7Gn5QgG9++G`ei*SHi4yz8RUAp69B8B2x5V@;TxnBm+Xr zfdmTlKhZhs*Aw-6Ddq`t8Fq~?h?#zK-%oVhr<*BKh%aF|+aNu>b7;&RJzRJLHna-j z1~~G^8L^MhM2{fe9Hqf3_KL042KGE@qlm8_OYRu-xgZgxpf?plHQObKpj;R(t36!F}E6-f6Y;mQ2Y1GKQQeI6rYWw;5Vtm&H~9F|saBn+N0Rth4el{2@mp+Z zFo{rkdOpS2y!|M*7&^T{3 zp}MV3=;7bSU!W{k#?~K5^!_o)|1~WBxPpJf!kqChR8*?S*v-?Ucd4EE)_AUxDm($Z zo-IMEG~hJ+7M4r4^2%Hsfc!dH$V5n=fhXe^6kLlVy#!i^Bp#Y3D9m{I(Xy$D-&FsD zgXCw{bHChHtR;%E+H`Ts@#^F9=_=?6uWi8T;qb-cYqcF&BHi+8Ntsh78DW6j2ZCIV#dan z4Qp>;4vuqFHs{KPzh{lkx=l#V5@@vN3@nzx^;V?~rSwrM)XVT_cbp@>VzI?Q)NDYX zf;5$W5XhET-*|$MP2y4AgwX-Qy(~^|BlScRe%KF5q5*@92MuGr9lDDr*ag`{gs^yg zTgc>`7#e5E9|;Da=h7POhsPCUDe3)zDo9KbUh7q4TdClr?$`gArtdZJ}5D~kq7Aht>zvd3dOT!E}lCE zGr;BbG|j5CmHw5Ps^b^*HH@DR1YWOe6-U3K9ZR*#XrCW%PrtX85k$DVi_Zm^=)FAK z>*vR4j-t2!3P2S&)yd(13=FP+YhW<{j{xLiLG$;KD;if96Q;jIjjM%;o6~0W6ePp|-H1++wjX6_w87r?hMR6?m?Nc~`H_BzgfqkEW~xVoI!y4u>%vC%02aXp&! zvg5tqN@u%2a@-JUD;%Z8^m@jT;N-Q%q-EUTTdNbn%sK5;lz_6WV#(rrXvSN9UJ3xG zQY=M&B&<|svdR1@k&rhU!=y=ms#IvyT|SA9sLA31RWMbq;%3@#GY+SvI7ApAUYY=vn17HT{I>4(byep3 zE(!VdXs2^$w`I=lp&CcM-XQuT#!MqE;sSEL!ZX54bx9$2FxF8SX549?R3eS4QO=S$ z8i5O_!j%!ZpG5|!HuL>0O|JwCcDpR-ujuuhitf72zS#$B(9Ei*FkR+0CQ}MZXma((O|qJzs7ei=wbaF5HjM>v z$}L*UECw7%kx#$fm%BUW)pg*K?NAFiH16?JXy|u>Z)QuMj%whNKeDex z#g~{p+St5^h(J3MBCyQgp|1E~UG46$^!eJe#m&t?;mFye7mIuETz!r)mmaRhKij8? z!lbcG1Ix%Zi6vFo(UPfEev7z@RTz?DQ#5(xMP9_9et~=^O=VDIatJMNNib zaVbgSc-S54+-rfgz>me3A$$*x+jY!AXMDrs^!yr2nLLJk0Dy3*^8I1FijDts0~!{m zd#8AC=hX_APs3r6W2QsyL!A{o4390azqxxn<#UjY`zNcSsj*j^-d`^)d@rD3`QG9` zM)h9B?5{au31tR&8_Pbm3=`F;%WtO<}Ie({NM3T^9hfYyI z7Z3Oq(K9>W@W+<~zX3+<&H0mq)&^W|sdx83}=zKFL?_b2y38Qj7%*F7LV* zsj2T5qnMVAl@Cb4uH5y&pM{A|+!|J8<#)q&mRwLm?|!5n2A!Vg>m{4k)nOYgs7E1f z#E_>lu5L$clr@y}Nn+o>&774~FzNx2(x*RcrA>W>6baP+mBQ=#(Ey}F`C-=JR}lf+ zM#U5?j7sUIWh%O=i<^}Z)+~fYIX?K3h78m@cBBC+9$U#hu={s z;Box>`(|C3{?xK7rkH%hA~N&zzVQ6>{716I{c%i$>6pqNAe%@W4?id&!*GhDN0)Kf z>HAxRy=d8e6mEJ8E5dXyif?-+y$<6R!0w z`x~V|ZlPiA*L~ z4l*L)o+57hr7=V9vR<69@f~FK?u{*ePi%4!7rhgxhe?Nm#9_wMTmd-7#6AoHLkluB zJ_*gbtQlV6B%yRl^@7{?FUUqFqV<4`6COuWvguRX$NJfNPktIR8qGy_K-0-d7~j|O zowG)L8#XLoh#*n*L=;zChb*Ms=%%=?2JWu|RCS-C&_v7joWlFVFYb^m+6GRm>5uow z=*AfnM)eRE+tk+#OLBAUJ2Ho(uPHr|)Y$SX!IY@#>j-+@!aeuOmQ4n5@qwNbsIVz` zXBMB@@W|Cgx9DXx@_p|r!i_au?E?nn=LOVt?NF%I2v6mgp`AOpuQ6HEna4vC#Z&rJ{p*(EBH<>vv#t2qo0{3aosP<&<)~3wVf^wdb`Y1WrOF~qQ$GD zL8ta!n!QU=X}ss#dWzaA&Rj`*fDU@2*N0_Wa z%q6-j79g(LGW`(H;F8c@L|_>6vcpnK`4E%)Fw=N4E*&d)L#yR>zoz=$-WE*$ovE{K zuE`P|Ue#hkwv@EqvLlc|2Vvrlue6CEvE0%o@z%S6$o9LbOaM&m>q~Fo&jIaU=hdur zbIMM-JT-oNPTF7&u>nyY$7fu6QE=Ajsoy?PzxT)oTMmqL)6U9Wy^|#v;wzaH`ipxbGnA(l-c65R} z?PGtkk$+Z1Sk@J{>dQn}IIt8}czLW)s~9EQjaJDNpb&A_Nxrt$g9&slv$V>-lvT_*sqT zlC^cq_>44*N?;{!?eE_p2GfvbZ{oWTdY?WE>7mJDtSu9RuBtu%iv^o|H#T|B;IYpyt^pg5`StJch?pF2gNM%3U?fd;G zUH_e>#klor-n8beOofKvJuEOf>8q*{^{YUI6CpX*Fjp8il-8RwqEfT!0Drl@hsVKW zkfa(+83!${AQCa;X>hxo6Voy}JVF9;uEZnEKz5POqExKE z`)e0TG|0Nt#L&#d((G2;bS=rf0Glm(!b3gXZJPp*gK)N!f|3!3qWc|o0B(^#JMI`% z_BPL$zoAlG$oV7gVU-@Yj6a*|6ab&PgqhLI7he-t&z-{AK7!=& zR4mGL=J9avEMZG61`J^n&X_x&K+6jzH^>N)=1{;WL>es`ogq?wlU{rbPIOm|Pyh3K z0YM?Pay-5d8NS-QIH_4DYXtqJOp_LlXn}J>)k-4H#xK*l#O@0#B+qv-9&Cn8-RaC@gvadEfH97TA z8wF2&4v?3s)VzZvpK6B#jrEd_o12|hJ>N3cF!td4*i~P;F(7>6L*VZ8fwkkoUc)k| z9z!2kG@SYX1fXuc{c;3o)qOWMJVyrD$7rKIdc<8(p+$gJ^NkR1&*;IT&}LDJwepxVZ|~-QqhCS#Q^7JZp4_KEW86lj zAtUU*%~M3d&&4VisALiXM$X0}jo7@{AX;@Oh)gPsMJ)D=>WTCPlN!B|gAD1Z5C;x4 zt9N4-W8zAS8d$2Lq_rRJNg<7_EYvuW7BUQpG!ac8PqcP<@w^!1*Ve9XK;H{l+U#CM z`kDh%D9Qv2d$Z$q-kIDFvZgDO$|R8%KD3J;1(p&P8F(r?M+!xho)`I_l3DD}&=Z+? zVDUi`Rt=6BNP}oq61I;;Imfd|o>jHx%)0SeeEs&Ly!()qp9M$=N4-x7{lQ{mkQ4Yk z-%HSNIfZB9$zP0L8TK3dSBN<&tD^w0H^+?PC$CPo^7V7d^}Ae^Km-X+FF^VbhIeE{ znFyHNQhuldrZm!a?LXsfHM%-m>CgZGaiagOdgu7B6+i!s8jIRF+WcJsX{{?FOJH`f z^|_6lbeh`-<33vk*8FC$XA4+y$W%8yGBu)$r~;uXsVXZ89K#gtnZVB>i~?#42nfla zx>(VV3Y-Dzl2&th{#9M0@ylhTqO77SQ1l|0-{dQlj_Ld3emv03MO{r;Hng8i4#57Y zqbK~17<~>@CukAz+WV)CZ&J^pf7^u6EY+v#Opt@}6*-{_Ijr=EC5|s(PG7j?DD4Y) z2DwMDP!(wV2Y0cPK(J+)yc5a=-zR1~mRNE%M90rkP0ssOvoV$KvpYX>rw)7>!%n)} zP%WMd36CBykOgJyDox93+r~7yiAJpaV<~eMQ9%LF7Tgm zGXN!URyPUMck-3VoLqKX!_O0~+2m}$02G4jl7Y9SOO&=+nzf z;(<@_>Wr(X8}%+c-C2YbgaOO+4A6a#&**9H*i}@q(9wBiBiBODFE3YXyM6l27gmzu z>t&iu$4C+I?;6Lvo3=i`Op0$8v^9l>CJvi_IvER9_C63Cjx*&9dyIv9?24AZZsWf- zN@b*hmQYRgooY>oR&~D3X}V+OFf~x0_Wv?1f}M7a?+_TMNZ?TYwZ(wRPJx(sFySaj zH6C<_f*4o}FeJMl-fF+B*Oo zd=WG+xMIg)tb=0d3Hy;`>4*h%3~CgHz{5dQY_@gf;z6oPZ3c^98>^elmb0B0se^L72#4U$AGvy( zL=cJKfHdR#@{>>-i;|+3Z{wr4aITX>S+CYxZcrW12~6!Y zm11$0^2qf9B+Tj-(RWHgJoDIK~>{`BAD(}{s~&aJ(<7KNP1-2^-3;up z6|DQYwSar2p1M^xa}Y7_)_m`T0b(;Ld%0%Q>wP+5*>AaVHMK)@jp7>&0BM6MahXKp z&X~9BpV8&9@ke*DPWeXz7x?_Bl6U?-rOfLoE~{ISS+2IL z&2ckSU?ykAvQ1gvAny5?!}sn?YWbA0B;p*3b*?JUyHDpV({9c#7|ZM;sMDbhexL{M z9=X@uZ8Ot%Ed~(@3jO6ZtXhFaaJGQgV5W?v{%m`!PqA*kng_jS&bBC zXw$lPKbyB_okgVYl8SeJ!|de?^0nPLoWqOUICTFOi%I#f1BrLUdpC5Sh@W3>kT7IB2W2MUi(fZg@mcAa*yjbR>*86IE|| zi|I=6eeT1unl!Aq)ID6MY4BQZ7W>)~4O%jJj8pVnK!YMA+<~~|_sg`HrN~{2VjCa0 zccSQ^BC}vG-;KVy+kmz8k0aBY2ntC~hO@P!kozYWMI_21slbCK3t62@O}Ojv9E#Tq zCTT2IqU_f-hq8y<%kvjBqLc~&Ko|A?p`7Z|i-}Jbr#QURui>+S+5US!Hi32YLgp{& zJ8aDrbjz$~K8aM#WFy>X5yIfyvTP-C?{xAUVF|o#si?5=inmtkl&-Gc2jiuB3IUn8 zSPgd0=k-;zRa;|=vgTgF!)bYCFxd9!HcH@lFZxrPqh6 zBhM|eK>aZ)Dz1Az>PQZPUJWN6_MPz&ym*Wu49WfF;rZU~5h&ip2r?Ath!;)oY{T-3P4Urfk989G^Wv$neu4>6DT(cM7t>rcgz;2M=3+w)!+Mve@v$_CW{=bF74(yB%HfzzHq{@Jf$Zgp&p zGfo;#S@(XWoEWW!z8ZnsCrlM^7PXbdop-q5DW&rYW18%~hBsvprlJpGb1|1r{8*nB zKn18ud?jl~HKn}cT^Sa`&F-=HCX0Ez8bUupn}M^)oW8J3DrKD_L735&uwJy)k>YI| zJPl__1Jn1c73KesCU{>}En!`;@(7vy>XL2B(=1{Kl3}x*&-Qz}UKmz<<}+7_C)3s2 z^ae9YdWGHeDI~x^-2^=jT-HTW=3A7(I`EK;Hv9Oo3j&=2mh3m@$|Qp?`)iKi41CzouYH<9{uVV_K(Kd$b!Oyj{H>p};cpbbpZO!>xB+foV|&*CW+lpRV`HK!y- zUUR`?nAXFa=)hWM!$#?mEDk=AtqBg;%cDgt*4A{}tlw{sJNkybEXQ(iXnxojk@}{k zG8=F*!*c1=uotxKaeR4A794wpPNChap*kdEVpuM#1VkPY^d&Xuq%$_h5 zFsfup=E>(O>s4^paB6Ad%985<#8S%3GxI#$H7iKJ1o(XAwC5EHSo&(en@>#`YR2m59oHv=Zf zzbV@BDTMsyWn#xpGdA|)3Bx)*du76wfDJ@-VH3(j{VmJ-X;CUh$&tXjzHLut8je)8 zkId|58cqm!(>UWI1}O3O0PT(DWC}WxkdvgG203CZ@_0;AqOc*Cvgrairq~EQ5(R-= z3HD)Y{HnkgK-iEUtIdb|l>Ve|!Me`|`aIxz z7X;KdF8-XLqncZe!Uh?mb1#n~M3kdyga`bEZo6E83k4dNEPIenBHmySUvp*D60oI3 zYi`&OYNg3XeZpozaH*2fzWJztW~O{BRE{6*nWr#g);9h7@<04!>BPhRBimMuKU)4v z{lW78;JE$wO1hs;K73)1)2|zI>irfmq$j597%jpDaKM366$Tnw?b0oTQTFQE9)gcs zv{P1O!~-Q(&MUX2cp1yGA}f5PV&7z}e!)!^qLh>1F7UJFv&|B@lZxBw8Hz4Q_k~tc zvK?3c0n)(2im3@WyZ*>pU2251rTp^7*2dP&3;CfndKMK^?=OY%WUW>ro%!y^F_QA@ zTx<=IBfYV{bs~KBME?6lGGIP5gL4y1TiE#``VyG;gF)qxO8(H>b504#r(Qjp4|n5? zjRdgIPBE1gp0I^#JS}F!(2T|K00bp&Q!A3pE zy~Jb*c=t{X_t?-YXV#*}Svr*?QicB#<-H7D$tE8bM#bEf&DD^lwPfyBj+rSYFS1B~ z>9qo@Qg&R>ENNF$iIJtc>1VZ~FTdnlvEWH@HQv&xTJ{lmpsklGh%NYm(+2YE^Gsyj z)d%H5CHz;lJ4VbJxu#onLVYDz6`3{fllzIffQl-e2P(5)+^Yq8ywb3_@FYz)U#2|; zg?87tB{!Vb8KzK5^qpoBlMk?+m@y8yxWL#`buEe|6X^m7Og6W1ok~(tRVvyRoX^v4 zj7uvN5J97bOlk*!J>*2-y0d1d96}mnqXf@c+)$!T`DSA=trE5c>m5xhy<*b{0X#33%wg^ zxHsWktH{R9)m{Q@{$c{K_v>d2zI!VT{CELhLeN6pbz*_sWiIWfMA>nEq17Ck?02Z+ znvI|^g?z8+o6B(*89WJ(95Fv{uFXPQ%F9AUb9AGwpk zarY?qi>4vt?@In4MOiP(eZ01sBa{_iVT4=|S1`TK!IMLT&76n2%8Z0MS7X?MvsQ(N zQzM#r!)^xB*>3l#P0%c2(2iS!%IA2KT8fZOz^J(=LJ`{(0w(*b+Qla4}+%^GlLi0j42&f6(v~7 zG;O4&X;x`!kO;486$Sd&4iYJ6#GroY+V1B8VftSfEzb!>8wts6dF4HYCrbIEGB^mi zvu&_U^8vJ?k0@&a#~4qdZCM*ZFgAEuBvu^nduNj2E%KL0Mu%O!yLF)qVn0@3zZ7CD zY6fYQ_O{unM0R&p>(zx4+^j_d%sg~VA48Nr|kbv&tJ1_9UtN7 zCh6cLHXK_zO}8^?BLV? E0RzXj9smFU literal 0 HcmV?d00001 diff --git a/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/ErrorCodeConstants.java b/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/ErrorCodeConstants.java index 4f49847714..b415d29f4d 100644 --- a/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/ErrorCodeConstants.java +++ b/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/ErrorCodeConstants.java @@ -28,4 +28,5 @@ public interface ErrorCodeConstants { ErrorCode HAO_KA_PRODUCT_NOT_EXISTS = new ErrorCode(1_801_001_005, "产品/渠道不存在"); ErrorCode ON_SALE_PRODUCT_NOT_EXISTS = new ErrorCode(1_801_001_021, "在售产品不存在"); + ErrorCode ORDERS_NOT_EXISTS = new ErrorCode(1_805_001_001, "订单不存在"); } diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/OrdersController.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/OrdersController.java new file mode 100644 index 0000000000..ba102faae5 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/OrdersController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.haoka.controller.admin.orders; + +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import jakarta.validation.constraints.*; +import jakarta.validation.*; +import jakarta.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.haoka.controller.admin.orders.vo.*; +import cn.iocoder.yudao.module.haoka.dal.dataobject.orders.OrdersDO; +import cn.iocoder.yudao.module.haoka.service.orders.OrdersService; + +@Tag(name = "管理后台 - 订单") +@RestController +@RequestMapping("/haoka/orders") +@Validated +public class OrdersController { + + @Resource + private OrdersService ordersService; + + @PostMapping("/create") + @Operation(summary = "创建订单") + @PreAuthorize("@ss.hasPermission('haoka:orders:create')") + public CommonResult createOrders(@Valid @RequestBody OrdersSaveReqVO createReqVO) { + return success(ordersService.createOrders(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新订单") + @PreAuthorize("@ss.hasPermission('haoka:orders:update')") + public CommonResult updateOrders(@Valid @RequestBody OrdersSaveReqVO updateReqVO) { + ordersService.updateOrders(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除订单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('haoka:orders:delete')") + public CommonResult deleteOrders(@RequestParam("id") Long id) { + ordersService.deleteOrders(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得订单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('haoka:orders:query')") + public CommonResult getOrders(@RequestParam("id") Long id) { + OrdersDO orders = ordersService.getOrders(id); + return success(BeanUtils.toBean(orders, OrdersRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得订单分页") + @PreAuthorize("@ss.hasPermission('haoka:orders:query')") + public CommonResult> getOrdersPage(@Valid OrdersPageReqVO pageReqVO) { + PageResult pageResult = ordersService.getOrdersPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, OrdersRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出订单 Excel") + @PreAuthorize("@ss.hasPermission('haoka:orders:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportOrdersExcel(@Valid OrdersPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = ordersService.getOrdersPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "订单.xls", "数据", OrdersRespVO.class, + BeanUtils.toBean(list, OrdersRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersPageReqVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersPageReqVO.java new file mode 100644 index 0000000000..851d6135d3 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersPageReqVO.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.haoka.controller.admin.orders.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 订单分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class OrdersPageReqVO extends PageParam { + + @Schema(description = "供应商-商品名称", example = "芋艿") + private String supplierProductName; + + @Schema(description = "供应商-商品编码SKU") + private String supplierProductSku; + + @Schema(description = "外部订单编号", example = "1396") + private String sourceId; + + @Schema(description = "产品SKU") + private String productSku; + + @Schema(description = "外部SKU") + private String sourceSku; + + @Schema(description = "证件号码") + private String idCardNum; + + @Schema(description = "收件人电话") + private String addressMobile; + + @Schema(description = "物流单号") + private String trackingNumber; + + @Schema(description = "订单状态码", example = "1") + private Long status; + + @Schema(description = "标志") + private Long flag; + + @Schema(description = "订单来源") + private String source; + + @Schema(description = "用户下单时间") + private LocalDateTime orderedAt; + + @Schema(description = "生产时间") + private LocalDateTime producedAt; + + @Schema(description = "发货时间") + private LocalDateTime deliveredAt; + + @Schema(description = "激活时间") + private LocalDateTime activatedAt; + + @Schema(description = "充值时间") + private LocalDateTime rechargedAt; + + @Schema(description = "状态变更时间") + private LocalDateTime statusUpdatedAt; + + @Schema(description = "退款状态", example = "1") + private String refundStatus; + + @Schema(description = "激活状态", example = "1") + private String activeStatus; + + @Schema(description = "ICCID", example = "2781") + private String iccid; + + @Schema(description = "真实外部订单编号", example = "25683") + private String realSourceId; + + @Schema(description = "分销商名称", example = "王五") + private String merchantName; + + @Schema(description = "上游状态", example = "2") + private String upStatus; + + @Schema(description = "上游订单号", example = "21235") + private String upstreamOrderId; + + @Schema(description = "订单状态名称", example = "王五") + private String statusName; + +} \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersRespVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersRespVO.java new file mode 100644 index 0000000000..88fb97517e --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersRespVO.java @@ -0,0 +1,251 @@ +package cn.iocoder.yudao.module.haoka.controller.admin.orders.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 订单 Response VO") +@Data +@ExcelIgnoreUnannotated +public class OrdersRespVO { + + @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12955") + @ExcelProperty("订单ID") + private Long id; + + @Schema(description = "生产商ID", example = "15873") + @ExcelProperty("生产商ID") + private Long producerId; + + @Schema(description = "产品ID", example = "14115") + @ExcelProperty("产品ID") + private Long productId; + + @Schema(description = "供应商-商品名称", example = "芋艿") + @ExcelProperty("供应商-商品名称") + private String supplierProductName; + + @Schema(description = "供应商-商品编码SKU") + @ExcelProperty("供应商-商品编码SKU") + private String supplierProductSku; + + @Schema(description = "外部订单编号", example = "1396") + @ExcelProperty("外部订单编号") + private String sourceId; + + @Schema(description = "分享ID", example = "26263") + @ExcelProperty("分享ID") + private Long shareId; + + @Schema(description = "用户ID", example = "31769") + @ExcelProperty("用户ID") + private Long userId; + + @Schema(description = "产品SKU") + @ExcelProperty("产品SKU") + private String productSku; + + @Schema(description = "外部SKU") + @ExcelProperty("外部SKU") + private String sourceSku; + + @Schema(description = "计划手机号") + @ExcelProperty("计划手机号") + private String planMobile; + + @Schema(description = "生产手机号") + @ExcelProperty("生产手机号") + private String planMobileProduced; + + @Schema(description = "证件姓名", example = "李四") + @ExcelProperty("证件姓名") + private String idCardName; + + @Schema(description = "证件号码") + @ExcelProperty("证件号码") + private String idCardNum; + + @Schema(description = "地址省编码") + @ExcelProperty("地址省编码") + private String addressProvinceCode; + + @Schema(description = "地址市编码") + @ExcelProperty("地址市编码") + private String addressCityCode; + + @Schema(description = "地址区编码") + @ExcelProperty("地址区编码") + private String addressDistrictCode; + + @Schema(description = "地址省") + @ExcelProperty("地址省") + private String addressProvince; + + @Schema(description = "地址市") + @ExcelProperty("地址市") + private String addressCity; + + @Schema(description = "地址区") + @ExcelProperty("地址区") + private String addressDistrict; + + @Schema(description = "详细地址") + @ExcelProperty("详细地址") + private String address; + + @Schema(description = "收件人电话") + @ExcelProperty("收件人电话") + private String addressMobile; + + @Schema(description = "收件人姓名", example = "李四") + @ExcelProperty("收件人姓名") + private String addressName; + + @Schema(description = "物流公司ID", example = "29667") + @ExcelProperty("物流公司ID") + private Long trackingCompanyId; + + @Schema(description = "物流单号") + @ExcelProperty("物流单号") + private String trackingNumber; + + @Schema(description = "买家备注", example = "你说的对") + @ExcelProperty("买家备注") + private String buyerMemo; + + @Schema(description = "卖家备注", example = "随便") + @ExcelProperty("卖家备注") + private String sellerMemo; + + @Schema(description = "生产备注", example = "你猜") + @ExcelProperty("生产备注") + private String producerMemo; + + @Schema(description = "订单状态码", example = "1") + @ExcelProperty("订单状态码") + private Long status; + + @Schema(description = "标志") + @ExcelProperty("标志") + private Long flag; + + @Schema(description = "预警区域") + @ExcelProperty("预警区域") + private String warnArea; + + @Schema(description = "原因", example = "不对") + @ExcelProperty("原因") + private String reason; + + @Schema(description = "订单来源") + @ExcelProperty("订单来源") + private String source; + + @Schema(description = "用户下单时间") + @ExcelProperty("用户下单时间") + private LocalDateTime orderedAt; + + @Schema(description = "生产时间") + @ExcelProperty("生产时间") + private LocalDateTime producedAt; + + @Schema(description = "发货时间") + @ExcelProperty("发货时间") + private LocalDateTime deliveredAt; + + @Schema(description = "激活时间") + @ExcelProperty("激活时间") + private LocalDateTime activatedAt; + + @Schema(description = "充值时间") + @ExcelProperty("充值时间") + private LocalDateTime rechargedAt; + + @Schema(description = "卖家备注", example = "你猜") + @ExcelProperty("卖家备注") + private String memo; + + @Schema(description = "数量") + @ExcelProperty("数量") + private String amount; + + @Schema(description = "状态变更时间") + @ExcelProperty("状态变更时间") + private LocalDateTime statusUpdatedAt; + + @Schema(description = "退款状态", example = "1") + @ExcelProperty("退款状态") + private String refundStatus; + + @Schema(description = "激活状态", example = "1") + @ExcelProperty("激活状态") + private String activeStatus; + + @Schema(description = "ICCID", example = "2781") + @ExcelProperty("ICCID") + private String iccid; + + @Schema(description = "真实外部订单编号", example = "25683") + @ExcelProperty("真实外部订单编号") + private String realSourceId; + + @Schema(description = "图片大小") + @ExcelProperty("图片大小") + private Long picSize; + + @Schema(description = "归属地省") + @ExcelProperty("归属地省") + private String regionP; + + @Schema(description = "归属地市") + @ExcelProperty("归属地市") + private String regionC; + + @Schema(description = "分销商名称", example = "王五") + @ExcelProperty("分销商名称") + private String merchantName; + + @Schema(description = "上游状态", example = "2") + @ExcelProperty("上游状态") + private String upStatus; + + @Schema(description = "上游订单号", example = "21235") + @ExcelProperty("上游订单号") + private String upstreamOrderId; + + @Schema(description = "镇/乡") + @ExcelProperty("镇/乡") + private String town; + + @Schema(description = "物流公司名称") + @ExcelProperty("物流公司名称") + private String trackingCompany; + + @Schema(description = "订单状态名称", example = "王五") + @ExcelProperty("订单状态名称") + private String statusName; + + @Schema(description = "加密收货电话") + @ExcelProperty("加密收货电话") + private String encryptAddressMobile; + + @Schema(description = "加密收货人姓名", example = "赵六") + @ExcelProperty("加密收货人姓名") + private String encryptAddressName; + + @Schema(description = "加密证件姓名", example = "李四") + @ExcelProperty("加密证件姓名") + private String encryptIdCardName; + + @Schema(description = "加密证件号码") + @ExcelProperty("加密证件号码") + private String encryptIdCardNum; + + @Schema(description = "加密详细地址") + @ExcelProperty("加密详细地址") + private String encryptAddress; + +} \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersSaveReqVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersSaveReqVO.java new file mode 100644 index 0000000000..02cbce12ad --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/orders/vo/OrdersSaveReqVO.java @@ -0,0 +1,191 @@ +package cn.iocoder.yudao.module.haoka.controller.admin.orders.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 订单新增/修改 Request VO") +@Data +public class OrdersSaveReqVO { + + @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12955") + private Long id; + + @Schema(description = "生产商ID", example = "15873") + private Long producerId; + + @Schema(description = "产品ID", example = "14115") + private Long productId; + + @Schema(description = "供应商-商品名称", example = "芋艿") + private String supplierProductName; + + @Schema(description = "供应商-商品编码SKU") + private String supplierProductSku; + + @Schema(description = "外部订单编号", example = "1396") + private String sourceId; + + @Schema(description = "分享ID", example = "26263") + private Long shareId; + + @Schema(description = "用户ID", example = "31769") + private Long userId; + + @Schema(description = "产品SKU") + private String productSku; + + @Schema(description = "外部SKU") + private String sourceSku; + + @Schema(description = "计划手机号") + private String planMobile; + + @Schema(description = "生产手机号") + private String planMobileProduced; + + @Schema(description = "证件姓名", example = "李四") + private String idCardName; + + @Schema(description = "证件号码") + private String idCardNum; + + @Schema(description = "地址省编码") + private String addressProvinceCode; + + @Schema(description = "地址市编码") + private String addressCityCode; + + @Schema(description = "地址区编码") + private String addressDistrictCode; + + @Schema(description = "地址省") + private String addressProvince; + + @Schema(description = "地址市") + private String addressCity; + + @Schema(description = "地址区") + private String addressDistrict; + + @Schema(description = "详细地址") + private String address; + + @Schema(description = "收件人电话") + private String addressMobile; + + @Schema(description = "收件人姓名", example = "李四") + private String addressName; + + @Schema(description = "物流公司ID", example = "29667") + private Long trackingCompanyId; + + @Schema(description = "物流单号") + private String trackingNumber; + + @Schema(description = "买家备注", example = "你说的对") + private String buyerMemo; + + @Schema(description = "卖家备注", example = "随便") + private String sellerMemo; + + @Schema(description = "生产备注", example = "你猜") + private String producerMemo; + + @Schema(description = "订单状态码", example = "1") + private Long status; + + @Schema(description = "标志") + private Long flag; + + @Schema(description = "预警区域") + private String warnArea; + + @Schema(description = "原因", example = "不对") + private String reason; + + @Schema(description = "订单来源") + private String source; + + @Schema(description = "用户下单时间") + private LocalDateTime orderedAt; + + @Schema(description = "生产时间") + private LocalDateTime producedAt; + + @Schema(description = "发货时间") + private LocalDateTime deliveredAt; + + @Schema(description = "激活时间") + private LocalDateTime activatedAt; + + @Schema(description = "充值时间") + private LocalDateTime rechargedAt; + + @Schema(description = "卖家备注", example = "你猜") + private String memo; + + @Schema(description = "数量") + private String amount; + + @Schema(description = "状态变更时间") + private LocalDateTime statusUpdatedAt; + + @Schema(description = "退款状态", example = "1") + private String refundStatus; + + @Schema(description = "激活状态", example = "1") + private String activeStatus; + + @Schema(description = "ICCID", example = "2781") + private String iccid; + + @Schema(description = "真实外部订单编号", example = "25683") + private String realSourceId; + + @Schema(description = "图片大小") + private Long picSize; + + @Schema(description = "归属地省") + private String regionP; + + @Schema(description = "归属地市") + private String regionC; + + @Schema(description = "分销商名称", example = "王五") + private String merchantName; + + @Schema(description = "上游状态", example = "2") + private String upStatus; + + @Schema(description = "上游订单号", example = "21235") + private String upstreamOrderId; + + @Schema(description = "镇/乡") + private String town; + + @Schema(description = "物流公司名称") + private String trackingCompany; + + @Schema(description = "订单状态名称", example = "王五") + private String statusName; + + @Schema(description = "加密收货电话") + private String encryptAddressMobile; + + @Schema(description = "加密收货人姓名", example = "赵六") + private String encryptAddressName; + + @Schema(description = "加密证件姓名", example = "李四") + private String encryptIdCardName; + + @Schema(description = "加密证件号码") + private String encryptIdCardNum; + + @Schema(description = "加密详细地址") + private String encryptAddress; + +} \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/orders/OrdersDO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/orders/OrdersDO.java new file mode 100644 index 0000000000..1156e58aba --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/orders/OrdersDO.java @@ -0,0 +1,267 @@ +package cn.iocoder.yudao.module.haoka.dal.dataobject.orders; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 订单 DO + * + * @author xiongxiong + */ +@TableName("haoka_orders") +@KeySequence("haoka_orders_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrdersDO extends BaseDO { + + /** + * 订单ID + */ + @TableId + private Long id; + /** + * 生产商ID + */ + private Long producerId; + /** + * 产品ID + */ + private Long productId; + /** + * 供应商-商品名称 + */ + private String supplierProductName; + /** + * 供应商-商品编码SKU + */ + private String supplierProductSku; + /** + * 外部订单编号 + */ + private String sourceId; + /** + * 分享ID + */ + private Long shareId; + /** + * 用户ID + */ + private Long userId; + /** + * 产品SKU + */ + private String productSku; + /** + * 外部SKU + */ + private String sourceSku; + /** + * 计划手机号 + */ + private String planMobile; + /** + * 生产手机号 + */ + private String planMobileProduced; + /** + * 证件姓名 + */ + private String idCardName; + /** + * 证件号码 + */ + private String idCardNum; + /** + * 地址省编码 + */ + private String addressProvinceCode; + /** + * 地址市编码 + */ + private String addressCityCode; + /** + * 地址区编码 + */ + private String addressDistrictCode; + /** + * 地址省 + */ + private String addressProvince; + /** + * 地址市 + */ + private String addressCity; + /** + * 地址区 + */ + private String addressDistrict; + /** + * 详细地址 + */ + private String address; + /** + * 收件人电话 + */ + private String addressMobile; + /** + * 收件人姓名 + */ + private String addressName; + /** + * 物流公司ID + */ + private Long trackingCompanyId; + /** + * 物流单号 + */ + private String trackingNumber; + /** + * 买家备注 + */ + private String buyerMemo; + /** + * 卖家备注 + */ + private String sellerMemo; + /** + * 生产备注 + */ + private String producerMemo; + /** + * 订单状态码 + */ + private Long status; + /** + * 标志 + */ + private Long flag; + /** + * 预警区域 + */ + private String warnArea; + /** + * 原因 + */ + private String reason; + /** + * 订单来源 + */ + private String source; + /** + * 用户下单时间 + */ + private LocalDateTime orderedAt; + /** + * 生产时间 + */ + private LocalDateTime producedAt; + /** + * 发货时间 + */ + private LocalDateTime deliveredAt; + /** + * 激活时间 + */ + private LocalDateTime activatedAt; + /** + * 充值时间 + */ + private LocalDateTime rechargedAt; + /** + * 卖家备注 + */ + private String memo; + /** + * 数量 + */ + private String amount; + /** + * 状态变更时间 + */ + private LocalDateTime statusUpdatedAt; + /** + * 退款状态 + */ + private String refundStatus; + /** + * 激活状态 + */ + private String activeStatus; + /** + * ICCID + */ + private String iccid; + /** + * 真实外部订单编号 + */ + private String realSourceId; + /** + * 图片大小 + */ + private Long picSize; + /** + * 归属地省 + */ + private String regionP; + /** + * 归属地市 + */ + private String regionC; + /** + * 分销商名称 + */ + private String merchantName; + /** + * 上游状态 + */ + private String upStatus; + /** + * 上游订单号 + */ + private String upstreamOrderId; + /** + * 镇/乡 + */ + private String town; + /** + * 物流公司名称 + */ + private String trackingCompany; + /** + * 订单状态名称 + */ + private String statusName; + /** + * 加密收货电话 + */ + private String encryptAddressMobile; + /** + * 加密收货人姓名 + */ + private String encryptAddressName; + /** + * 加密证件姓名 + */ + private String encryptIdCardName; + /** + * 加密证件号码 + */ + private String encryptIdCardNum; + /** + * 加密详细地址 + */ + private String encryptAddress; + +} \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/orders/OrdersMapper.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/orders/OrdersMapper.java new file mode 100644 index 0000000000..127ec5b694 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/orders/OrdersMapper.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.haoka.dal.mysql.orders; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.haoka.dal.dataobject.orders.OrdersDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.haoka.controller.admin.orders.vo.*; + +/** + * 订单 Mapper + * + * @author xiongxiong + */ +@Mapper +public interface OrdersMapper extends BaseMapperX { + + default PageResult selectPage(OrdersPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(OrdersDO::getSupplierProductName, reqVO.getSupplierProductName()) + .eqIfPresent(OrdersDO::getSupplierProductSku, reqVO.getSupplierProductSku()) + .eqIfPresent(OrdersDO::getSourceId, reqVO.getSourceId()) + .eqIfPresent(OrdersDO::getProductSku, reqVO.getProductSku()) + .eqIfPresent(OrdersDO::getSourceSku, reqVO.getSourceSku()) + .eqIfPresent(OrdersDO::getIdCardNum, reqVO.getIdCardNum()) + .eqIfPresent(OrdersDO::getAddressMobile, reqVO.getAddressMobile()) + .eqIfPresent(OrdersDO::getTrackingNumber, reqVO.getTrackingNumber()) + .eqIfPresent(OrdersDO::getStatus, reqVO.getStatus()) + .eqIfPresent(OrdersDO::getFlag, reqVO.getFlag()) + .eqIfPresent(OrdersDO::getSource, reqVO.getSource()) + .eqIfPresent(OrdersDO::getOrderedAt, reqVO.getOrderedAt()) + .eqIfPresent(OrdersDO::getProducedAt, reqVO.getProducedAt()) + .eqIfPresent(OrdersDO::getDeliveredAt, reqVO.getDeliveredAt()) + .eqIfPresent(OrdersDO::getActivatedAt, reqVO.getActivatedAt()) + .eqIfPresent(OrdersDO::getRechargedAt, reqVO.getRechargedAt()) + .eqIfPresent(OrdersDO::getStatusUpdatedAt, reqVO.getStatusUpdatedAt()) + .eqIfPresent(OrdersDO::getRefundStatus, reqVO.getRefundStatus()) + .eqIfPresent(OrdersDO::getActiveStatus, reqVO.getActiveStatus()) + .eqIfPresent(OrdersDO::getIccid, reqVO.getIccid()) + .eqIfPresent(OrdersDO::getRealSourceId, reqVO.getRealSourceId()) + .likeIfPresent(OrdersDO::getMerchantName, reqVO.getMerchantName()) + .eqIfPresent(OrdersDO::getUpStatus, reqVO.getUpStatus()) + .eqIfPresent(OrdersDO::getUpstreamOrderId, reqVO.getUpstreamOrderId()) + .likeIfPresent(OrdersDO::getStatusName, reqVO.getStatusName()) + .orderByDesc(OrdersDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersService.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersService.java new file mode 100644 index 0000000000..26596e7366 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.haoka.service.orders; + +import java.util.*; +import jakarta.validation.*; +import cn.iocoder.yudao.module.haoka.controller.admin.orders.vo.*; +import cn.iocoder.yudao.module.haoka.dal.dataobject.orders.OrdersDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 订单 Service 接口 + * + * @author xiongxiong + */ +public interface OrdersService { + + /** + * 创建订单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createOrders(@Valid OrdersSaveReqVO createReqVO); + + /** + * 更新订单 + * + * @param updateReqVO 更新信息 + */ + void updateOrders(@Valid OrdersSaveReqVO updateReqVO); + + /** + * 删除订单 + * + * @param id 编号 + */ + void deleteOrders(Long id); + + /** + * 获得订单 + * + * @param id 编号 + * @return 订单 + */ + OrdersDO getOrders(Long id); + + /** + * 获得订单分页 + * + * @param pageReqVO 分页查询 + * @return 订单分页 + */ + PageResult getOrdersPage(OrdersPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImpl.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImpl.java new file mode 100644 index 0000000000..5ae6d873f3 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImpl.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.haoka.service.orders; + +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.haoka.controller.admin.orders.vo.*; +import cn.iocoder.yudao.module.haoka.dal.dataobject.orders.OrdersDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.haoka.dal.mysql.orders.OrdersMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.haoka.enums.ErrorCodeConstants.*; + +/** + * 订单 Service 实现类 + * + * @author xiongxiong + */ +@Service +@Validated +public class OrdersServiceImpl implements OrdersService { + + @Resource + private OrdersMapper ordersMapper; + + @Override + public Long createOrders(OrdersSaveReqVO createReqVO) { + // 插入 + OrdersDO orders = BeanUtils.toBean(createReqVO, OrdersDO.class); + ordersMapper.insert(orders); + // 返回 + return orders.getId(); + } + + @Override + public void updateOrders(OrdersSaveReqVO updateReqVO) { + // 校验存在 + validateOrdersExists(updateReqVO.getId()); + // 更新 + OrdersDO updateObj = BeanUtils.toBean(updateReqVO, OrdersDO.class); + ordersMapper.updateById(updateObj); + } + + @Override + public void deleteOrders(Long id) { + // 校验存在 + validateOrdersExists(id); + // 删除 + ordersMapper.deleteById(id); + } + + private void validateOrdersExists(Long id) { + if (ordersMapper.selectById(id) == null) { + throw exception(ORDERS_NOT_EXISTS); + } + } + + @Override + public OrdersDO getOrders(Long id) { + return ordersMapper.selectById(id); + } + + @Override + public PageResult getOrdersPage(OrdersPageReqVO pageReqVO) { + return ordersMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/orders/OrdersMapper.xml b/yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/orders/OrdersMapper.xml new file mode 100644 index 0000000000..d81820b0a2 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/orders/OrdersMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImplTest.java b/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImplTest.java new file mode 100644 index 0000000000..7f317fb17c --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/orders/OrdersServiceImplTest.java @@ -0,0 +1,226 @@ +package cn.iocoder.yudao.module.haoka.service.orders; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import jakarta.annotation.Resource; + +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; + +import cn.iocoder.yudao.module.haoka.controller.admin.orders.vo.*; +import cn.iocoder.yudao.module.haoka.dal.dataobject.orders.OrdersDO; +import cn.iocoder.yudao.module.haoka.dal.mysql.orders.OrdersMapper; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import jakarta.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static cn.iocoder.yudao.module.haoka.enums.ErrorCodeConstants.*; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.*; +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.*; +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.*; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link OrdersServiceImpl} 的单元测试类 + * + * @author xiongxiong + */ +@Import(OrdersServiceImpl.class) +public class OrdersServiceImplTest extends BaseDbUnitTest { + + @Resource + private OrdersServiceImpl ordersService; + + @Resource + private OrdersMapper ordersMapper; + + @Test + public void testCreateOrders_success() { + // 准备参数 + OrdersSaveReqVO createReqVO = randomPojo(OrdersSaveReqVO.class).setId(null); + + // 调用 + Long ordersId = ordersService.createOrders(createReqVO); + // 断言 + assertNotNull(ordersId); + // 校验记录的属性是否正确 + OrdersDO orders = ordersMapper.selectById(ordersId); + assertPojoEquals(createReqVO, orders, "id"); + } + + @Test + public void testUpdateOrders_success() { + // mock 数据 + OrdersDO dbOrders = randomPojo(OrdersDO.class); + ordersMapper.insert(dbOrders);// @Sql: 先插入出一条存在的数据 + // 准备参数 + OrdersSaveReqVO updateReqVO = randomPojo(OrdersSaveReqVO.class, o -> { + o.setId(dbOrders.getId()); // 设置更新的 ID + }); + + // 调用 + ordersService.updateOrders(updateReqVO); + // 校验是否更新正确 + OrdersDO orders = ordersMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, orders); + } + + @Test + public void testUpdateOrders_notExists() { + // 准备参数 + OrdersSaveReqVO updateReqVO = randomPojo(OrdersSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> ordersService.updateOrders(updateReqVO), ORDERS_NOT_EXISTS); + } + + @Test + public void testDeleteOrders_success() { + // mock 数据 + OrdersDO dbOrders = randomPojo(OrdersDO.class); + ordersMapper.insert(dbOrders);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbOrders.getId(); + + // 调用 + ordersService.deleteOrders(id); + // 校验数据不存在了 + assertNull(ordersMapper.selectById(id)); + } + + @Test + public void testDeleteOrders_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> ordersService.deleteOrders(id), ORDERS_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetOrdersPage() { + // mock 数据 + OrdersDO dbOrders = randomPojo(OrdersDO.class, o -> { // 等会查询到 + o.setSupplierProductName(null); + o.setSupplierProductSku(null); + o.setSourceId(null); + o.setProductSku(null); + o.setSourceSku(null); + o.setIdCardNum(null); + o.setAddressMobile(null); + o.setTrackingNumber(null); + o.setStatus(null); + o.setFlag(null); + o.setSource(null); + o.setOrderedAt(null); + o.setProducedAt(null); + o.setDeliveredAt(null); + o.setActivatedAt(null); + o.setRechargedAt(null); + o.setStatusUpdatedAt(null); + o.setRefundStatus(null); + o.setActiveStatus(null); + o.setIccid(null); + o.setRealSourceId(null); + o.setMerchantName(null); + o.setUpStatus(null); + o.setUpstreamOrderId(null); + o.setStatusName(null); + }); + ordersMapper.insert(dbOrders); + // 测试 supplierProductName 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setSupplierProductName(null))); + // 测试 supplierProductSku 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setSupplierProductSku(null))); + // 测试 sourceId 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setSourceId(null))); + // 测试 productSku 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setProductSku(null))); + // 测试 sourceSku 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setSourceSku(null))); + // 测试 idCardNum 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setIdCardNum(null))); + // 测试 addressMobile 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setAddressMobile(null))); + // 测试 trackingNumber 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setTrackingNumber(null))); + // 测试 status 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setStatus(null))); + // 测试 flag 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setFlag(null))); + // 测试 source 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setSource(null))); + // 测试 orderedAt 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setOrderedAt(null))); + // 测试 producedAt 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setProducedAt(null))); + // 测试 deliveredAt 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setDeliveredAt(null))); + // 测试 activatedAt 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setActivatedAt(null))); + // 测试 rechargedAt 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setRechargedAt(null))); + // 测试 statusUpdatedAt 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setStatusUpdatedAt(null))); + // 测试 refundStatus 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setRefundStatus(null))); + // 测试 activeStatus 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setActiveStatus(null))); + // 测试 iccid 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setIccid(null))); + // 测试 realSourceId 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setRealSourceId(null))); + // 测试 merchantName 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setMerchantName(null))); + // 测试 upStatus 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setUpStatus(null))); + // 测试 upstreamOrderId 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setUpstreamOrderId(null))); + // 测试 statusName 不匹配 + ordersMapper.insert(cloneIgnoreId(dbOrders, o -> o.setStatusName(null))); + // 准备参数 + OrdersPageReqVO reqVO = new OrdersPageReqVO(); + reqVO.setSupplierProductName(null); + reqVO.setSupplierProductSku(null); + reqVO.setSourceId(null); + reqVO.setProductSku(null); + reqVO.setSourceSku(null); + reqVO.setIdCardNum(null); + reqVO.setAddressMobile(null); + reqVO.setTrackingNumber(null); + reqVO.setStatus(null); + reqVO.setFlag(null); + reqVO.setSource(null); + reqVO.setOrderedAt(null); + reqVO.setProducedAt(null); + reqVO.setDeliveredAt(null); + reqVO.setActivatedAt(null); + reqVO.setRechargedAt(null); + reqVO.setStatusUpdatedAt(null); + reqVO.setRefundStatus(null); + reqVO.setActiveStatus(null); + reqVO.setIccid(null); + reqVO.setRealSourceId(null); + reqVO.setMerchantName(null); + reqVO.setUpStatus(null); + reqVO.setUpstreamOrderId(null); + reqVO.setStatusName(null); + + // 调用 + PageResult pageResult = ordersService.getOrdersPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbOrders, pageResult.getList().get(0)); + } + +} \ No newline at end of file diff --git a/yudao-server/src/main/resources/db/migration/V5.0.1_order_create_table.sql b/yudao-server/src/main/resources/db/migration/V5.0.1_order_create_table.sql new file mode 100644 index 0000000000..2f12555cca --- /dev/null +++ b/yudao-server/src/main/resources/db/migration/V5.0.1_order_create_table.sql @@ -0,0 +1,66 @@ +-- 将该建表 SQL 语句,添加到 yudao-module-haoka-biz 模块的 test/resources/sql/create_tables.sql 文件里 +CREATE TABLE IF NOT EXISTS "haoka_orders" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "producer_id" bigint, + "product_id" bigint, + "supplier_product_name" varchar, + "supplier_product_sku" varchar, + "source_id" varchar, + "share_id" bigint, + "user_id" bigint, + "product_sku" varchar, + "source_sku" varchar, + "plan_mobile" varchar, + "plan_mobile_produced" varchar, + "id_card_name" varchar, + "id_card_num" varchar, + "address_province_code" varchar, + "address_city_code" varchar, + "address_district_code" varchar, + "address_province" varchar, + "address_city" varchar, + "address_district" varchar, + "address" varchar, + "address_mobile" varchar, + "address_name" varchar, + "tracking_company_id" bigint, + "tracking_number" varchar, + "buyer_memo" varchar, + "seller_memo" varchar, + "producer_memo" varchar, + "status" bigint, + "flag" bigint, + "warn_area" varchar, + "reason" varchar, + "source" varchar, + "ordered_at" varchar, + "produced_at" varchar, + "delivered_at" varchar, + "activated_at" varchar, + "recharged_at" varchar, + "memo" varchar, + "amount" varchar, + "status_updated_at" varchar, + "refund_status" varchar, + "active_status" varchar, + "iccid" varchar, + "real_source_id" varchar, + "pic_size" bigint, + "region_p" varchar, + "region_c" varchar, + "merchant_name" varchar, + "up_status" varchar, + "upstream_order_id" varchar, + "town" varchar, + "tracking_company" varchar, + "status_name" varchar, + "encrypt_address_mobile" varchar, + "encrypt_address_name" varchar, + "encrypt_id_card_name" varchar, + "encrypt_id_card_num" varchar, + "encrypt_address" varchar, + PRIMARY KEY ("id") +) COMMENT '订单表'; + +-- 将该删表 SQL 语句,添加到 yudao-module-haoka-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "haoka_orders"; \ No newline at end of file diff --git a/yudao-server/src/main/resources/db/migration/V5.0.1_order_insert_api_menu.sql b/yudao-server/src/main/resources/db/migration/V5.0.1_order_insert_api_menu.sql new file mode 100644 index 0000000000..942a4d250f --- /dev/null +++ b/yudao-server/src/main/resources/db/migration/V5.0.1_order_insert_api_menu.sql @@ -0,0 +1,55 @@ +-- 菜单 SQL +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status, component_name +) +VALUES ( + '订单管理', '', 2, 0, 2912, + 'orders', '', 'haoka/orders/index', 0, 'Orders' +); + +-- 按钮父菜单ID +-- 暂时只支持 MySQL。如果你是 Oracle、PostgreSQL、SQLServer 的话,需要手动修改 @parentId 的部分的代码 +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '订单查询', 'haoka:orders:query', 3, 1, @parentId, + '', '', '', 0 +); +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '订单创建', 'haoka:orders:create', 3, 2, @parentId, + '', '', '', 0 +); +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '订单更新', 'haoka:orders:update', 3, 3, @parentId, + '', '', '', 0 +); +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '订单删除', 'haoka:orders:delete', 3, 4, @parentId, + '', '', '', 0 +); +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '订单导出', 'haoka:orders:export', 3, 5, @parentId, + '', '', '', 0 +); \ No newline at end of file