From 06fa269e6cd917d59d7b51564c868328aeb4b0f1 Mon Sep 17 00:00:00 2001 From: Damonny <826010988@qq.com> Date: Mon, 23 Dec 2024 02:43:17 +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=E6=9D=A5=E6=BA=90=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-OrderSource.zip | Bin 0 -> 39882 bytes .../haoka/enums/ErrorCodeConstants.java | 3 + .../ordersource/OrderSourceController.java | 139 ++++++++++++++++++ .../ordersource/vo/OrderSourcePageReqVO.java | 28 ++++ .../ordersource/vo/OrderSourceRespVO.java | 34 +++++ .../ordersource/vo/OrderSourceSaveReqVO.java | 23 +++ .../haoka/dal/dataobject/orders/OrdersDO.java | 2 +- .../dataobject/ordersource/OrderSourceDO.java | 54 +++++++ .../ordersource/OrderSourceLiveDO.java | 63 ++++++++ .../ordersource/OrderSourceLiveMapper.java | 30 ++++ .../mysql/ordersource/OrderSourceMapper.java | 28 ++++ .../ordersource/OrderSourceService.java | 97 ++++++++++++ .../ordersource/OrderSourceServiceImpl.java | 127 ++++++++++++++++ .../mapper/ordersource/OrderSourceMapper.xml | 12 ++ .../OrderSourceServiceImplTest.java | 138 +++++++++++++++++ .../V5.0.2_order_source_create_table.sql | 19 +++ .../V5.0.2_order_source_insert_api_menu.sql | 55 +++++++ .../V5.0.3_order_source_live_create_table.sql | 22 +++ 18 files changed, 873 insertions(+), 1 deletion(-) create mode 100644 code_gen_history/V5_Order_1/codegen-OrderSource.zip create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/OrderSourceController.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/vo/OrderSourcePageReqVO.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/vo/OrderSourceRespVO.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/vo/OrderSourceSaveReqVO.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/ordersource/OrderSourceDO.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/ordersource/OrderSourceLiveDO.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/ordersource/OrderSourceLiveMapper.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/ordersource/OrderSourceMapper.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/ordersource/OrderSourceService.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/ordersource/OrderSourceServiceImpl.java create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/ordersource/OrderSourceMapper.xml create mode 100644 yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/ordersource/OrderSourceServiceImplTest.java create mode 100644 yudao-server/src/main/resources/db/migration/V5.0.2_order_source_create_table.sql create mode 100644 yudao-server/src/main/resources/db/migration/V5.0.2_order_source_insert_api_menu.sql create mode 100644 yudao-server/src/main/resources/db/migration/V5.0.3_order_source_live_create_table.sql diff --git a/code_gen_history/V5_Order_1/codegen-OrderSource.zip b/code_gen_history/V5_Order_1/codegen-OrderSource.zip new file mode 100644 index 0000000000000000000000000000000000000000..66a370c04d7c290c9465967805b5c17fa9a82a91 GIT binary patch literal 39882 zcmd431yr6%vOW&M-6goYy9EpGZo%E%-QC?axD#B1yE_DTcMtGqCOdm)|8pmM?{DQU z9KOT(&Uvezx4WvIs_yER5eEWB2KeO%4LM2m*MI)<@yoY*R{91;2A0&)w)zIP@>UME zdIq#IfBFRapFCk_WB%8tzyXln^hDgLpmzZR0Js7H0O0)ODPsnjw};E+B*nL6kXOJi zacLG6bQm()N*7vTbz*DdTD$B~G}HQ-l1avfkG_t$8piWYMnL*z^LIwzQi7De_VqMh z(%vtnBAc%STirC?W!jywV<`q)Z?2uUX2Dhj36rjSGV3^drdr@pN zeaPxDWxaL7SL7tp#5bk9hglqyb**yhcm-pVbWWKhI<01r92$(O`eqn!eP}ZUX>uv6 zfVZsCf~n43W-%bw%ZDN4U1xygBMZ_J2`mJ{7R04T3FPs>IH zu!spunCzxX2OrH$=|jJCMMj4%$7KPE%$FS5`GBL!$~zMgc5JAnnE;P-~DDYKW6`IZS&^(ZT49~0RV7+GW%~+|I75x z#!6aE)1mjD#av>$4@aw89If*rAR-;*$f^1uS187-Q0cmK+Dy2bL59O}SnzLI9A!hZ zNMa$v8Y8+P;2PG&rQbuciE>hW7UPsOBjOyq`i{HYv3I5pD`1A*{D?YmHibn_VFFvYK>}Q4Wf!5p%fBBbTtaS|Il1J4N7b8G z87af`eZ9dY6B<%LkppQ7@7Auuf*zF ziFncX10U&n_l~Ar7HF%g0W#wGy*awf{1>iaSwvW=^PW0r#!=Dl>y6)xL6&+rgDo;}#zPrK~7y zzjkA#4(k#;Phs;yRp_3)3-6md4#=`sE*zO_Aj?Y`s+PwoOpyLn(7^eSQ#Vj zYiA>PJTdtSa|D^PTR0N!JLx^x4-IpP)6UW+H8|l`w0<*~KZYgJKQR~=2YnqYY6~lU z2Xg~zV;w6qoxjGMKMLXgp9}e;TxuO_lb^`u|A%GU+3Nj7zVJUqzJ-p7Nx&vDy09(n)H75TFU=?WhPd?kfiNT#!};7r}S6j{E2G)f3@l#{`M0DrvD}cf6wEs z|E)L-EFCQD{yHi@ST7G5nwtEL^=9Axq5(4g+uZ7p!G`vaU;P??eu)vk`tYyr^=9PIU}J9`~VdpoV6x%$eQ#rZp$UxYYVrvLyRZB<|W zcS+wLQT$7R?S_Qygcj|_MQpdF{|YWYYErCA8@c}sWNo9n)He_gUh{y)-?*xL-x8XI ztc1D%ab?sRf0iznVN_783%vflXrwxK_{mfIiD~78j7p5d?8dhYyO)l&K|?@s6fyu( z46e4QR>$@5_4OX7asIrZ<+}3{6gF7TqAp?VIV~LzfJlmWv`9}iGK)wd7MiO&5HH$b zcwe9*4Bg*}2*xC|QU$xHQY5$(tG~N}EZ#iixIpZb3h1^s5sqium)hutcMLpLj275x4OM!EiOR2^%TQQf0|?Gn z;5F2A?Cznik^Y=G|1r+fHF5o`J^ztU|1r+{MfSgv^L~^6FXgVGlk{m&8nJ=&#CWoLEMG5+Z1R|?EJf;XaIbF zU~nQ9WK=vNvhR{|&6{YAw?vFmMyV1w;mCv49#NI!P3^ZZ!CxdwklDEnzirTp1ynTvjRv3jtu4XR4QkKlIw&Vul+ryMD&sqbrj8`h0nLqqjvDY9f! z?M*fXF)VNl>*Dj)Y|@W)Js>Rx)Z=W4l%LfCPUhisq(0Z>_Jk@Bw~Lgx?2RLx1m+S{ z@)2iuF?DKlTCu>uN+|i#X^Cn#&W~J^(GeWtC_0N4XS=mZSr;WI9Re2`QSK-PfiAm? zgUL&9-K&)P00DM%`UF!j>r24tLC7Mynrcr^7kp@}&he&Q&5rCUB)g#P^hyB`p-zkg zBHaN_%n9jC2bRP821Lh4m^Ad*;YdOY0Fm5Z3fjrdMhfIObx+@4>SsP2nCGc->NiIo;#>&fXuHvuvIro{E!<)sh6Yavo|kuUu1 zYoQVX&V^koY+T;g^_d}u)~FCD zkZt+wB5)!tg93?LH_cBki6%vBs+UkeSjGuanj>h6-smA}(e}9H`eHEhxvR@V^h0kG z*x(JD?_l>OMoNLpC>}#ws0CMB9*LMgljIfj&AOU&vg6Hb`^J;u(asZ&M1N(#{ddL& zx)5~=?9P!30iM#k|L;#r9s*2snfkVap_aT8p8NRURgH{{>Kr#-P<@~ zn7(g5vuq#Bvn%ChKLznbb+CGM+*@%-5HyRK`WQjO9rHLle~trg4HdG|p}Nc_ZB%EE z^!C%aK4_+;uG6MeUFxK03J6=1Rk2yAw_70+vj9vBE1D5L1XvC1Hd%4EwmLd#cr6e2 zY&j*Ha!k;+O@C-^Sss)+W63zInNRk?1K*6{x=h*W{A|T9L7q~^SQ~Ax$dg+z;@2RJ z_}n_#nsounyKBQ0n;nA`l1qB*WE(>&t#O{`ZqRPKq1$ln06X*^K23Q`nOlRDuyLCc z3S^02q0EFOXE#rz7L)jMBCuA>0L4gIqlnDLMe(&RRBC7=Z1)xEczh-Gh$gibrxv?b z{Y|DG1By6KT(>|B&aAZ{rq>!baxuC|A~ewrjHXX$1}djphCo2=rt@qZ2)fCKrzzK3 z%?0{fU8QL)ig=wgKVbUfZI!;D)U3Ie*5`YtEuWK{8Iso8OwT3P3+Bt$v%YSLqhlmp z;lp^a-hP=u+KWypzYjF+#+{4dN3`$KGu|Hzz+`-se3%`}S#GZ5L)=>_JmT?Kxibr@ zy-z&(j(dL4(LEOn)B9D`0U)U@*J!|%G9-&08G=wjlUHbs0&usdGWoL+FHDW{YT#la zwD=bueH|91TVcw{J|f;s4(hNAA4>ls%_Dr#7GF$x7&>iiHYFY5(jD)W?>GFJuCM@L z>K+-0R=Nvjs`_6>T9@E^^F%20 zKZh+Gt^Qg({9rY-g@72ucK`qbZyNx4|4}%9M{F`WMh0>QHcHaJ@>+zPq?tS)@(S7` zZeW?*=k^I-b zq-3uR4+zO=V-q9Bk#BC}ANE#}e2hQJGay_7fILo}3s=JpFh5quwt_5x($Lw1CghUc zbAYpB4Ar7z;=6#^UA_JKL{6|3$XMy5tqnQF{bDFEJK{iA(ijx5S*Vg_BGJH;urLvIcwLI8X(H)KJJZvBgZmGuMna&zoE? zSh{@2rV3T7jw5IY%m#U`h@3q(U7)y(%>T`M!x)wuKfHPNz~G@qS#@|GBdymxzj`;p zEMEw}W0B0o!L=g(s7^OeP5p8xK(@R0LZPO;whLHREPX{Uh3`y%Vnw={HcnY<0sFS_ z4xin9+UvF0YYCg16D$2D*6(>^&`Bw#rMfoK!Z`)x9U&sGvJES!!BvjdyJa10Q=AS7!MwfT+SCXU+8EGdmW9F%|{|5EL8D%r^htrH}@{i4~`PL zsAeb-qm5(OKR3e?vOA}J=QzQAM#u5s>{o3)&Nl}h6OAiavtMNNr(r*P0U`-cuiuF4 z_|5fxnDl*W9hL2yNprs?YuW#)CM{=RXZ;s@E>{>fMSinquuC|>O2iP9U=dV4_;hfe zf&J}j7^f1-4BL{Y`q|kyU>k(<7{OdX+?ad3_OB6o0x`++^AgfVN-w^%D_1P|pvRJE zcdHzGGffRcU`p?TkalH#pe-u)ZH7x<8WbebX`QifP9KUq^NaR|KHw*T`KN4nxwJ1&}+CAbU?RcLzuk zW~cdu<5BypMkSE@>^}O_`Wy{^9>ZwjV&E`^F=R>^OM~>#>$&8G>PTVjmSyQ0ByxpC zxLx2G4CCf5@pv_Ns8)h&*s7Z^oUXsSk&`~q=M{}!)E7}aka*v+e3MYP=Ww8JVGxaf z2513|piHt#FT!+Uid66+4@k-NU~h_(yB~Fg&DsPecH?bNb$mzE;q_x{o7@NI_vLN( z9#tqOXV}UV{RxDOnv;i8*Eh{jI+UAg~<&vIk80pG*PrI*z}i zfCM>dGbBFb4zNq?zz@uF!bKu*eCN?Pkae9fw=WEgMAI274Pzq}q0aEKv_e2H?8P&= z*-0|zh(MjRaVr)b0bdrUNb>VfzJ5JlJ$rtErUgaim4-)^4S{Z&xHjnmGzsRC^}PiI z%7!K^l_j4C!5Iq9brkUnG4w51D4RcIe&1I_9V0TTw||4h)Fz1l9YDqprKGEGOx6gz zq~n3Wf2A*^v(W3k%2s~N56M(5M~wzFfocpXcFC?|GNJ;*P-6(_B8mY!qye?Cf-*v5 zV3Kq;_Pvc*e$sS2Z>1Ev(po1u(WY496tNQBgEp}8%SOxbGhmY_tnky~y8O$H5%+tX zHVoux*_Q{rC}7KnqhGjvEg(eebFE{u%EkNj%x?M zOaa>Ly+cb_Hyr*%yhJWSeeaR+r zms-Bc*IZ|YFqXBFDC^ld?)71Zx_Yd@t#_H$$b?f#Tv+|N;SAity12*rY`-_?h{PPr z&N6RBDqamDfZlQ%4Z>)vb7T0xoQvF3dMsl6(b6R#71R9%_cs&#;}WLjzcpm*>-<+s z#2>M^{M)hU>)7j9>6#ko+5a_B`y;G?|4UeZzCseB2p1ahM!esE0RWQzQy~5>jTHEi zKbFg{NWBG*cB?5Twhc(vYRN`o66865(9fn9sS-y0jt9qM42)q+{=mVZBub+9@&dZS z7`nCEM4wS_4E8M#5-QhClwYQDSuJb6*m>?fjjGPCC3cz-=tr@@Sph_5Qij4NN;_bLcrK_UN_2_zT}up zPeQgqGHL#<{56F)KyN$P+FblTP<{x(f->r92(N;YNv*5RzbNjzhbY!9@4%*NHD7>! zk}#bBG9#nK?VtbwjvsKklB3_H>;0~W$|n`qm%$AwDXUGp(OMAWspp0Mi^<)mj& zQLUni?GX>JzW=B<<9NmHAMweq2zNfl6MP=7%a*vPoTVOTuC#x&Zs_2$U)yOuUPySZgf{g!cAm*7p1!rGP*HN!TwdZJK+7Vn>Zo042~Sx2*_n z{1GS48mRVKRV%D|z%<0T88pZ}jga+QL|FVtsm=yPxGc3=JMtd3)cCkf+PfVA^6kjp z#as0e=qlAwb#Xo-w2`{&ckTqEYSQlrdZ%_%2;W-}XiO>TyG&(vnt|$(VJ*ykb+GVt z8s3<1yHZjPBbUbaLaVG!BBG{^>NT?zkK z^-5h-o|7Fx+kb^7!eR2Ad>?dUP^|Hp+}#7+63ahLcyzSe>{0#U)qB&SWlz;ujeI5F zLT1^#Vs2`8jknnMd`hWd^HNBL{ZW{HD}B(>g^T4C^S3zoBXu3!3EfS4^B~W+)HUrt z(1RpQ91Z^BMG5jNVwi7U1h;n%UTboRY8yY{p2um}bkM18i@UT8za z3dMww6hlUN+1vy=O1;q@WbTlZc3$XWdRR|ia?9vyeS(xK^CX)PvM&xwb8>nb!|y7z zB}Kz-(en+EsQaNM7*%3j7FN1Cwd)J?3_p>`r)tbr*ZPYmOjK>rL2&M>H&r#%3u7&B z({JqzYmaKDtCw3NLdB*WAty=Y$3n#O@0AxQuU+$a-Y!RQc86-2Sh^+>NjRQp=17fN;Fah2;8f}_MMX`xK z&xs1GiiN>4bHfz=O6Tv%rWmmDo9bqQxzl~SFa3!DFyfsq~Z>YD7574F$} z*sKx^H!}8AbudCASr+EM*ZvmH!% zfDy>P^K3P@OF@EdmkBkWT-ybmDbHmGG4hmP5aoS{sgcVdep-7_+*_*^UYX${Fl{LL zE;t(_QJ6VW{4KghzWgvRXfHqS34Holblew;Y)k_2ShfP*>hOKh&xF1RX73}AL(Rqw zXe-89`O)vaDh6AyFLlHmoV6I9retWV1h#c2w3lKVA z1f~T?Ybg{#v=E77gj;K!f7i<*M_yPs`!Mt&wD+kv_&c*0RP*HLtLr1f38zN|=EAL=$|5_#95D z?DIW+;I`vDbFO|YHi8HB6y0&n?df(DnXHhF0H0Z(ik%oJUpj`*=FrZU{t_9#7fZp! zh`kB|et1>nkSOAFOtEhS64E!}bDH5Cjb%+`YzzhauZEDZ3A!*K(&&zUeop!xryS!s zr@Cye$npt5_9-xsf!e!+@e?1JMJ_B9z35bs^|`q<#HfQO1jVgzW>h3u++khl@DC0z z_&ZAOP#tKO3o~Bi;zq&gYAq$A1u=`5TV$&1;i;(}s}?OuVJ1=cNIPC|z0zL4e|UY` z>0OMPewgP$Ta%{c#?5->L_ol`MresxjaUrs#$!?YUUD+}x!MDU>O0=}=Yd*6MgdXX zUeg{34*SpYl&00K>TWZX7sU(|U1BD|I-otaSf{?9hCa%n6u3;g>loj*ci_8rmIYt5 zNqtJF38n-{XKj{h&o$aX$O{C+j(=0eCwZXl0>o?Ouu~ih4#gKONjTP9VjT4&4 zCzWTLOxcYqSLH&%O|2K;0+FQCY+pF;teA-j^|RRYlOj4uvg+?*IV-~twa@JbGiweh z-{nPD3t4e!TK36f97g@>f8kNo~Gqeaol5k`Zqr=${O?dnu^pAJHJ0B zDs6w)k3-rXFe9o*KBvE%W!G-kclAldVv~cfq*$haA;Nm6sa&T3UE+&F?y>G%k64&> zP>FyJ7BID;U4lYrfUXY)>ef5vDnFD@G8*KHx^a>tAWB$e@-R?CBMXPr4+@5mWA@le z)rK;RnJP9aFT5CY8>Dp0mhg&1T{GV=4Cyq>saaMz918lsZ7kqPzqjJg4+PApR`Dap zw1$ro9iHn||HMj11=24^lMo7`!0&e@?{wC7SAC>`3#)Z@!^ zXdb4~H_6CW;Cg;pINa-NV0EM*ID_neroDhpX@`6ikcHGqc+~}juyPynbj2YK4@sai zd)X8-1c55^5?8L)cz2c+d3Q)KWkXGs%*exf9ylKN(J06eA&Ze369H0D zmX4MxBiqx?mxQOMd)TIa(zJ+}E^&2L1=7v2Xv?S3s;e!pBGif?Qap#%!qfFlCa{M1 z!u`CXXFS<~yti$BOZFEp0fdX5P^!EjB%JL`Y*>ypOV<;&Z_nKBiDzSh{Yi*d1$T~{ zr|#I{xzxEya>Q-+k{=m*mrM&5A0TQhq(9luJQ^$2dmR@d+_inx@AIcjaIZk4m+C;J z60N3#^Vin18=T1+OPvSbqc%1Cqz=$_-RH7zWG9Lzk}@IZT^)aP3C!UTnU zRGCsg+{hd5RJ~_AeUQ1`Q(%Oy)t#B0&M;|5eoC}DI^vm7hCl;O64?!mKw@`}m{6t1 z2c(-Kbe#Q&BkovCzp84z=`29&M!UD%^A0$`fVYZP0*aMk9fIRv1R-4&H65{=1zV90 ztLl&!w0fNo{F7>aGuhYLJO@(EGb=0FRX#@asFV9sIMTt-yaf_2XDZA z@=Un4(g#Ft5T1g=C|}<->^0|gd`j)CX41}fS#Z38CpFXUauuz z`^zK3=I6b<1Y$uUdAL7yT$nsxNz+M$qXpAS(MOKG%dq^8Vlh5z1~mnyq}n@YR?(p= z$VI*BA|fk^LAz8DAaS3|;?P3}WlxhEx~?jcCUS{1#N+Lh?K48a5`9zxz>vf~pdCo8 zz?q$%7U&-nYGdQ# zwTFvXkP)WnGYmx{pf548AH1qBUexY4`0lqgJmE*<5N(gj4j`oEv*p_Jd7q*>ZqGb0 zV*KMTh7PNcziyz)MLVCJ02Uro$MvX_Nw8C=%2Lujz|p~euhAq}<1XspqgI>YX&)@8 zR!jlRDKd3_c*RMXTleAE$Ol3x8%IzB7!5Pp6D#VB{n{v+6SEAqZ<^eb9PJCLr$sdx zl?o!gPY_P7<{Vc;8OWk_3}df^$29PZ^16tNCcSGljVt!dFoWncS5(#sXoj8xez8wq z9*$}_9vsU*_O88D*}R%D0I_;$yg&R925*fkPcPPD1H8EQSv??QknSRul8eEPeTq%T zv4Bl+S`|nC;ZvrE&7JQR7?OpabSzws z@<4bE-_wfOLsTAMsK zi!Kd6IYiARDkMCDL#W(K;=e6&wO6Ovp5N|F>>U(KuJHKd1vQpw41Va zHTL9>$^wnuDl;8vn4+@*n~vgbI+U23Qd|`+@eS<^66$JNJ||`0mgqv?00KSMqST}+ zRz3VfFaV#xzyMDILn=_YJ!FnC0pw=8KI|Al?X?U*mn(_hS_`!T!_cf|I+6#Oe$YEs zC@zUX8SGE7vsHL$GGA0aNyLv+#Dc(x4<1seCzTl?DiC2~xa>8JO-O92EY_BF8E95Y znRXD4WoEuJ4=@ynQS7uGhpKfKVre+PmA-S|vuzCPh_bE|XB9p*KAz=J=E>axT3Q8( z=^rHfDx78ABxu?pas{mHD)CY%(`*>~jC$aK=f`q#*V-rU?#y?nA>`{;}h3 zzcn%28`%A9XX_t3?)EoI{w=NlzrN0ICx8CDxctYCyZ!OCes|31&z1gjTL1s%4Szdt z@b78;|B32-x1$mmKA=fkrduy)~|Kaj>_UM%L^WrGhXNy z+X}trw7~!rObDUCz;z%Ofh4!^5?E2y{rTP$3HemM@A#3c&%^^}K&ny5&Kc|CxG$i- zU9eSeEihSZgoxN2UyP*Koqf0)laMG=uuj42jb<*9Nl>{Y7w%Q4kei(hafhCUOtjF2 zF@uaL2EjHzRDm3HbaHSqQH)cAmMx{ib%KuQoSi|})|QX6ON|icko_`zjY+^_cA}S- zXc!-*)+i<=S4xmXX29TQ`Bkj=9xX!F1^4?Y$wIIkdnDz8u1a4Z-+Mz0=54^KzQ&br zyZX8~0crw{$*q{nM9LiC@g9lzU0K+mTQG*Q8ha!qilf1#+Gk`p75 z0_wgZKRjo9Wl>fDSGo>y=M?gtbQg%0nUiM98P`F+Fdx`Z-~u4{5Kfl}tcs(Q?a>i_JV)Nqx8n*}b{Nr#KlCgEnE+r>Q2Rhe zrw5dHK}nxpLcK>FruIBhn1w+%qU}h^OMepJ?zkB39Db#W8Chk9!bZ@A)uXI4QfdYa zO{B5SQ%YYGfwh<58>jB-@7L5U7wDf)a({A>P@7X&*aCHv&FIl=s31e+1}c~XTz;5W zftA=tB>orKyR9Zklb>t<$M)*TEUHPNB&-3$=-Z9<&kc4Q&qyq9H4@?*SS~n9e9EHOjeS=kc(}rf@r=rqOvtobeucbURE6Y%m4F&V zR;f@rKh<12XQzTAc|9GZTaebQn&+<~rYTh1mj_?+8|Dug?N0ARX-1r)+NxPsS5)tI z&8!{;PZlK>S`2hT7+@cQHh`k`qdQupQD*MH+oXPLdO(7mJ1GiilO55lm6D%l4vcif zi|{L0%3*S*A&d@SjWI1%3*{;dC774_XsqL_#pJh4RmW>s^EJ=v+`k>BX)CD>v*Fu? z@@al$*p=RDp3&*G#@z;TkC3%`c^S66MsXQFu<`R)U`r|qM0JB2Uea^D1j&)O=dSR{ zQ~2GwpOX=6a2`L6Ke`4BAEIq%h_HNUa$J!yz7F3;B?LQz$;kRq)(WOmYmi>ox_tl` z{0XF1TD=ZyJnp1|( zAAQL}^BQw*=)i0D;tRXdO2Ubp)ympg_Nflgf|@r)<8ETDY)Q(ZS#f(0c)lt=#G#YGcVkR z{DYJB4y-z)5cJ;zM=@Eg4g}NOCP^AuPFbzqLPvtyZ1<~qeZ%&mls?NE5w7aciK-Q| zqwz(zSlJTTGNCqxRM$n|x))A{)fbNA4z!^r;63^iCWJgW7Txk(5upvIslGX8!)w;x z=;M!7A=yvq!@-35*Q00Djt&NlKdJJl{ufeyepZ(5e<|tbw^^|KKS=v~$qE1ev&`R< z=5I6dgV0AztbIh@YE>u*006OnihL7GeFJA2d%L=Xx9ewk;RDYSzvJ%CDKXvSkn<9= zDe#Md$c?KWOPbDVmCZ9LCIIp0Z^$TIDB=Ux%7(d`_zED%fZQ`K)JZ=>9WRkZ>h+UI z9xa<1t+^N)uGN)%BFW)B{|L5>eAqLivzthiCZu5@QdFFJ8%`GNOXRb5(zsmNb{DjI zAXU}mar*^oSW))ts0<%78HodtUJ)Wl+*83v{Z{n=7+CW-x z2PWA*rf))D;cu&W1IA9+$gfq2)eY6 zsX)D#ydnj2W1nG~&;9O~<%eh?Xi`zST(&T2KIDYB`9k;^h7EH68+6GQRs4hpAP;qL}1jnp8Kl2l?C;tZ!LqMU3Ryi3FM9#g~t-vU5!Ksvnh z^{)M!3Wc0Vh_e>9=v}5x^0t+C?k5pn_F%}`pI$AWiR0-W%5m@ZOhdc?f3w#=Mi7So zrM)_u7&!fGor>-MN#5V{T7iE+>Yw|qTo;+GDN(x+cKw>{Cm!+msL5Lg!Qh}ACXRie_Qr~@Y;SY8q3u>aC>Do9PN z-IhJ8R9bf?S3S!Uw?g#h#hEFKi=SG(T|^wmPB`txoW=|*{Ync+I2)~w zQ2lRV;Z+$aiuU1!yYs_`BJ-}J`S#pO14EhdKZu$$fZFbYSEw9OV=AFY9qVn_l79pt zY)nV!A_)7s15`sO3^_boh0Qk6FOxT@2mkO+HseChaDFUfS1`xdpXsAgh~|c;@IAf^ zn2BJ>4Pqk&j4;x9R{JgH)oSU{%U;8KeYHT3P@i2X$Jth1TXFl zzwBs899AZjPx%sVH)c=$zD_3&h^6qvO2J0AQSKe(_62BxpaK;`jb%qF;)N!9Fq9p` zj8$h+)pjO*9XC?`XcxJ`fd}v((d1;Eg2hb$WCVm!j-e060MY|fsxz?BIp|y+uV*eg zzvsMcbUzyf34?+PkKwS*cpWdS$EcIMFK6>1b*cL9qH1TOHcA1HUbR;Xc=agnpS_y9 zsT1)s7a&45wh^CgVbE<|m9RgTe8d(Qc}s~QOX4kj`qmK+*2(FYE{Y__Nc|2tWh6US z%=~?zkR(HW!Y4G%H-Pts8k*WegoAnI1;B`vcb$c~vya%v0|Vro0qIRw5y)#A&IxGcPz%FqUy zwu;TXf7rGj`NSfsqs~II?aN1fAIz6s{t0rqAy*CR%TT6l|GTY%9Hpv_+$6YgXw&&aMwhIjQ+Xm66)%28BB zvD#u7W#lCC5{NOM`L0m8?WS(-2~2iIA#R_0q(+Dy*K)r3kEIuuO9{bW|D zUD)W&&Pw*}*$69UWs#+0fnDXQE8|M@D+??ehl$W4agJJ6yW6-WV5F`N2V>iS*5iJg zJ7|uE{0<^4?YqzqD8T8tOvI)LO&nH5OCO0Z4ASO6plHY|c7S>BHFdyiHlweSI|U*O z3wiCvh*3ec`)zHcC+x)Vs`1j+c9)d1LnG!|0%w2>Kg)HZqEFDFK=*J=M}!S`w&@!1 ze-o9!*WkZe&;RhQQQVN%<~yYzv-A5`Yi+0KYVdroZ`_MFgi_R)RmL(F+C;P+t-X$WbrIjPcwX z_fZiEQ~x~IWZ^6Psy~Jq7Ip~ku=*x#`9l`k#uy#SXy1u5n4t0lFvv<|bLhqjz&ao_ z*732)pd$)MBS}UM@3rKFdK#Y(JTqoP>RN|@3Y6Vw1nEnJ%h|4-)e8&u$&S%Ulrk{y z^<&5YlCA%W-j3kjGnF*7Kv_M$yo>24h`RWI}bO`#xJC z*`!U;is<*3a1skvuR()YE%XP{u2n4$!y!n)_44y&5)O+qYk2?c!P6RkHsG5jYn*6)=4j#_@{4E!&8 z5&tDeY$v?HRoYkwUIJ#z2}Oko@VoSU085iMyB zvL|m_#U+hKZtoy7Yfxr=0HPc7ZUE@*I>8}rSyn|A5L_g*D{>09urP8OEJ!Z82iZx~ zEtqN9Din-~eq&(-sPzYon3EWH)3w#MK8JP?K=NiXr1G9)sT#pX>_8MS77;wf!${Ee z@iJ%W4oA(hbhcFfz+%jY`27XKW*2@#h~9buMl8%K#2h0+58#`)^Wchsg^|Lgu(jo* z@o#QtZg{pfY)z-mMb2S#oOhI`aRr~s8)y4pt~H#`d1x${`c^`E$42R$-%>5pSzNc- z`In)0(gK82JJY$LuPg`^9jXMc=sk(Wef;f_;K7b44l8|zp^pmZ~IArz^3v6KgDaS5u9gcnRPTDZAh<~)`_|iWkO^sb*ZM%O4huFsc4}l^ugx}@ zFfkE)Qp9P!AeBD+eAwR+yt4kZ5i>kzoIPk!XsGh4#y>lORs}@_4 zq;W~Wm|id*IS#V0%3Uhy$aCA$%P3@i?WV>vVO@WaC5)^<8`63?7~_72HP{oM^y#3gi{F#KQwe9eRyu}&Fc*2cGT_LjCC@5gh2}P(EBG|Fd@HHIOL zrRgFWvN5VD=lnp-dDT#14V6<51wZS!s^YvyKNp_JRSYhI&8ye=beF~~bnk5-7*Apw znD5>EshAc7SUOLg9zr_INs`D>7urC4;WRcKI8c^tH!s{fE;m;|>ggg60YmL8?z0aq z;dS*$tCtq=7B<-*`rpH@Y6IV-Q%&o0i6Sy)3BSX% z;V0qf;+gg?CQjkKV93F?dNo%WW3mtWTv}2Q(6`sMWJGYQz23{xNN4qm%Sw0JpYJv3 zc(!NC8y!NLk=D>00zjqB1Y!R!HlI)lkT;jS-U4C?Dt+KQ6{I|a$d-%wD-D5)*Av4* zRz=1rZRTiY<|qxWQoAN1?obUpgpz(3Vv~fH=K|FDxz%sQ&5s~Fq((@y^cIBAVg4OK zSi=@Mhe)AH+>Kz_KJKue zxz{G7ZTOMl?)c< zC^CZV`!w>Vk~-r#%ICC&JLcX?v9y&qNV!t7<|};n7q&6J6XKY`&<#BjA2tav%o&{7 z`1>$l3Q$Azu^A)l^Aus1z7Z&Jp1F*RSVp1NR0yr)t>o}#dS#WfFIrRBj8*3Pn|eJn z@pBEhD=E9@QXo2Uk^G<>KE7^{wjaR4Wq@>FOJi>Rq$fx3Ru-j8mpTDUIajT9PsVqf z(F(gT!#1uJ*gVQTUa{OwIv%TPt(jZ7=Rep%wAUJGHtbdkPQxu{WmaxZ1UjDeqCUvq zxA7wO>umAe>v5+(zbhvDVAa-Y5C;-XK2{W%-u29R4F1xo)39rrvqLhvEq_yO~mux+v0kp3!+zKa@tU z4Rr*FEQ9g)wDN@5U%asD7ltOe+e|xRZo4wZ#xWr*v@2dHm4TM?dOi`)a@51b9TSo0 z5WQ-NVrXw!i3Ua#uDH>@WNt^NF6Kj+0Pxe3=0ovYU1;ueKS77F;zzE_n(7Hn=PD+5 z)A7o<>!TL#@RFdQMe!d<0r#Y#cjDB4XDB>&NQ6k8$u)1<=5wXM&ato@Zz%{ztjAQs zrHez@5WUubF~PBR^OtYv4mdk$_#zH14#U|4G+W`Z6hE5A76CsEe1r%O6kZ7VvxlxqZP{rXx$kt1huL<)NJ}tw0 zp6?r{WY*(0BtIRy0~S+2;!-)DWx!RgihiadgRmDLI*9=z$M7%_Fxu1KaZ~C|yynAj zM5r4C=Yf&DBpFx_iYQ0X2b-hcgusl_6uO%3=1fAxux93?eE_k3(c3$gxc6i+_0&{r ztaThcFl~=cjye;u23Q%MuR1__@1(~v*Z#fsOXI@hZF?bLd3bLW)=5%?rB`r4YDl)X z3ssX1@A(KEIx4)hKBG1&hKiBQcB_a&Bp-+c#ijf^2R17z!y_3!AL=lDyyNbT#*^^n zXbT@S`IRcbI^1vIg=^(1Xr8T}XiLEJc_VD;PdH=a){jpn(MiQQFo#RbTgeAETuv|^ z(#Gn!~Ln#7&7)-*n=SkX( z0B+0Gmmn}z?a5B&bGZj90I$NY_&!#CCx-CBWiiE#<_S=g*dmw|C0)m>YfiQu&HY_G zg8*PXlMdqkIeQEdp~ZOvDl1(iIc9PX!vbz{9s=yEL>GvTm^YOTF;ybF;5kvnV~Q`Z zI`?7KtpsDF$y;T*!H*anqwtYCAh$HBnKkXwBYKYLlf}fig8oAZ=nKg@k--QW1NS59 z0R!p9T>Nybl+h*CdgQ~b8sE8dfPH9ifnAmWa(5|iB*au~n>-!>9wWx~DpT${hoTdr z!U1Ratpi?a`jRv*Lf4T5R!!j!e^T{L1_045Wh9UToF4;wOZb^04_ zz-g1&0COJ1xmdd_Yl$a3!~mv<6a@zZmI=>r9J#q)Zk`=&U%BKIt3xg7c0gdcCZlwY zbQTm8j0!nC>N}(n>_;yo%vlpw=wWXwr-4==rt1J2?zAtCf8ferT7yu-A&i)jndeRDOTojTX<-kB0r2_bS?(0(Sd(6*`l(U zq-o{3J%WcL_*~vn5HXLmV_Rzf@VV_UTy;8`@xBoM!_+{tK9;aYGmq=`Whnjz5fF0A z0?i|74+~456a3nT0xKc7EU_^zB-j2s@mC}}%>0B*T-8kR;wdRMMlu#^LjJ_CK%3gG zh`@CdY6IBPkCch#OVuVv&G|PwVe=L0t$HVcIr*55RI2UHqpA6&red0@pnSSrhi>+q zeZ2;UietPTXz%wcV*TBr1(D@DUgh;UNv#~(Jw+?L(A!>UA}qag?pak~X+Rf%n-4$r z(O`w+8juqYi${GtnaC@sLE%0;oIRX?S8G?d!=i?^`!?x``<-_Nw3#zK30cS$zPPF9 zz@77(i!Djh3tN*1ZGV^s<2d`}jjipTCY;o05A}z7LgpGQnYPhhw@LW@N~MB4lWC?$ z`C>^y)yMFZrDK^dVvNZ-UKZ$yO#JZUSY{O7;qj>+p#&Y|q^ddeU=oAdqe*C!?R>we9 zewqunMPE#Tl4^&7nK&!m;)8k+P`|IS(o%DS_b-O>Aitw%?!Tl@Vw z){G#hoxTnp2XstO*zQiL(cE_XtTPZuhbi$&^y~((c^neF2U+nSbM`hg=AGB2=jrLG{#d`?T5IpU?7iOK62^0-W%E6E$-iRyC{d%;Up8xvc*u15 zxo(L%dws*UbzBLTGvK=<)Gw{bXT+a*(s|L&O?ol{yHj`$J$|ew+lO14Ajxf#^>Vhw zo1@~F=2^X7P2#HX<2iKO)V);oO^p3#)8@=J!mc^H=9K+rb*$n+NqxVRmS}a*l~ZTK z$)*wE{rBXP1kGQ1R|iN$-QV)ICA7csevX8kVd_J!|1RY%&tGq6DtEixbyG@vNEi3# zD6ta))Sk#c`sx&x`C?7G61NvU{jzmG_1>TDH>!N~L%Lgf z+TR((wBcO;u9dN%{O7rhw!-^;&%@Nd%6!YzkUJ_uT^qIiB#&4DK5VLX`jxGuLBJanqJpdwGJe?>blC4NvDH+7EixzEW+z_uEV(DRjT8qgohEor7Mdj zM}%_)CpPM6wfM~xUU~W6kqm{9yx%`1oJr|8lUL;MWJhm}fu>;lm$vfrp%vMwk8+Lo z2{)aRCWn@ZC<-apmTz>^q-T@{wa#)#)te(M1qt7H($_BTzVO4 ze!Rd(MY%FZq1dG@Zhf-LMYDgIwm|><%^)jJn+m@w^=Bf>+sm^oD_2g# zi#qVG_)+I|L20qN`oOhtf8+E{XF;br!FfDy9F%e>UfZ3oTOY6Oy;E<|Ov#oMoE5hI zLwH@wt+HnGj7MoiUQgBd=Dj%gb@OH`-1La)ReSYyJH_ijoU+6T(cm0o53W5t-18Oj zIo3}MwW~u{(uYKJ3u-jG1+C6+v700{L>LzFp0#=(yjLJ#5Rm z)s^Fn*XNv|w(ZofbujPVo5FK8%XnjSoyO(Ue#8)gW}baPmH~Gcd0QsAM3f#Umn}>` ztJCo??4(Y&Ta?y0elh!>ZSXg?^*)x_+~p}soLwi}mJ*V_%U@Nl%lc_?MoA;T%1?gH z)oUoc$A9o5SY^osJ`RjOEnB%hM`ro9ZLjp6)!s`t)~MdFQ`>!piE32Uue|oeRu$E} z^AxWnKCv0QzqD7@Hs4C%!2&JXIr4OJJk8S^P zTM;Tmjf%=BGZK8M_SCk&-=bL8w88SKy1+BxG#;~##{{a9(0#swvxbefwn~;o{Uq&k zO&c6LXHwf%6>?wu6qj2c6;RL=IsIhVf(1H;5xI>r;*r;kq(%9}_$3sTRMhcLgY1Iw zE?FgVM(Yx$|625HFW2sLJE?b@-p0P@6Xd%)_iyBmlxvzUZnV)ma!6f6`$eGtF``)f z44m}f|8n8PaRdR!ren4ZNW(V#>w8wjaiEpa9wBMpl7p5$G&``cM85-oNBl4>#USu} zkl!O|%+oB<2mXNea0;O>zt4%2b|_4UW)I z2pVqM%F46MhDnfNngY&9Oh+)x{7;K%jUb%j(TDJ8B6mQX;h{bAa*D|W!jy&yra>ur z5ZFK}`@u7ZfPKLZ*kETkr|2vpbl%9UCeA}S=r%^*I;Q~15Wpwc17x(Fa|(0=1k?Fvgx!u5dQ-WhMWL*3DwqV|PQ8zc7v7^f@jWT>Z`Q|ti{_NocRP9F{fG6=lE zYAd6kxbQ%mTSJ8h?Sx;CG~rF0_s2Hg24px|O);fM;C!!?gUf(NGdXcT?Slr;S)UE; zSrmNCWeHpcs333g=+lAmfdz<(BF`#CnK8j-Kq4lXn96`f7s+fp3oZlx!VVZy8Nlz$ zekkEGz!`bb<2;n3mH}u0!eu}?_5c|hKbU}MfWl?KN+HZW$pFe+2B3ipmjPGC8}0~Y z02sFaiXE8V1LnB|h5a2P5~5*;Tw!3mW59V1g#e&I zpZLQmnRtjy=j4(Bo18&nagD5^M6cN3Swi3)$w5RbW)hNI zJ9GgJV^}C3WbB8`PM?xthGp~FBh6g7Z-&z^v1g2U~OTLYn#fH;)qSmP9=S*kkqX#S&k${tnb zRb~xk=t<;5Z;Z5?(XTmrl1s4H`n)N0{FI8bN zMljoFXpNtLLDay~9Xd1+X-1F=>xIjl&G3s%ybcyr1|`BkU}&C-;1`(=?0_-7$e=+7 zzsT6H#LR6YHD;gz2*1eO#vUN!0+`b{!!I(LB+Na@0LuI#gT}A$hIMhg;g0YkQ?!Qt zcUSmDMqPKDoeVt(fC+*IJ6zRXpHS>0Rkdh1z*Vh<-bDJJ!2vu<*oz7M0EFcl!2_^$ z()j>K<4{!#i8q3D(HxSBP(7uH$l;D&^1=EEpk*}u!77mD&1_g6-nDr*n*HwNWsvnN zY+4`Q%Zdhp284jmbnKp|@uwl6OA~={K!XErrg1`zW3)xslEo@I^hF3utbvQL5ED!c z!8OodXjTjnikt5m_Toktl>#xKSv#5#hC);rn6n2B5<>_H!5ob@m?gGA|D1IgTmHaO zUtsf0F^D_c1smM|e1AMPc)UonJ5A?uHBMU%na|)&``iBk Dpe41y 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 b415d29f4d..cc41165168 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 @@ -29,4 +29,7 @@ public interface ErrorCodeConstants { ErrorCode ON_SALE_PRODUCT_NOT_EXISTS = new ErrorCode(1_801_001_021, "在售产品不存在"); ErrorCode ORDERS_NOT_EXISTS = new ErrorCode(1_805_001_001, "订单不存在"); + ErrorCode ORDER_SOURCE_NOT_EXISTS = new ErrorCode(1_805_002_001, "订单来源配置不存在"); + ErrorCode ORDER_SOURCE_LIVE_NOT_EXISTS = new ErrorCode(1_805_003_001, "订单来源-直播间配置不存在"); + } diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/OrderSourceController.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/OrderSourceController.java new file mode 100644 index 0000000000..0c3c60b729 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/OrderSourceController.java @@ -0,0 +1,139 @@ +package cn.iocoder.yudao.module.haoka.controller.admin.ordersource; + +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.ordersource.vo.*; +import cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource.OrderSourceDO; +import cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource.OrderSourceLiveDO; +import cn.iocoder.yudao.module.haoka.service.ordersource.OrderSourceService; + +@Tag(name = "管理后台 - 订单来源配置") +@RestController +@RequestMapping("/haoka/order-source") +@Validated +public class OrderSourceController { + + @Resource + private OrderSourceService orderSourceService; + + @PostMapping("/create") + @Operation(summary = "创建订单来源配置") + @PreAuthorize("@ss.hasPermission('haoka:order-source:create')") + public CommonResult createOrderSource(@Valid @RequestBody OrderSourceSaveReqVO createReqVO) { + return success(orderSourceService.createOrderSource(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新订单来源配置") + @PreAuthorize("@ss.hasPermission('haoka:order-source:update')") + public CommonResult updateOrderSource(@Valid @RequestBody OrderSourceSaveReqVO updateReqVO) { + orderSourceService.updateOrderSource(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除订单来源配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('haoka:order-source:delete')") + public CommonResult deleteOrderSource(@RequestParam("id") Long id) { + orderSourceService.deleteOrderSource(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得订单来源配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('haoka:order-source:query')") + public CommonResult getOrderSource(@RequestParam("id") Long id) { + OrderSourceDO orderSource = orderSourceService.getOrderSource(id); + return success(BeanUtils.toBean(orderSource, OrderSourceRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得订单来源配置分页") + @PreAuthorize("@ss.hasPermission('haoka:order-source:query')") + public CommonResult> getOrderSourcePage(@Valid OrderSourcePageReqVO pageReqVO) { + PageResult pageResult = orderSourceService.getOrderSourcePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, OrderSourceRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出订单来源配置 Excel") + @PreAuthorize("@ss.hasPermission('haoka:order-source:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportOrderSourceExcel(@Valid OrderSourcePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = orderSourceService.getOrderSourcePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "订单来源配置.xls", "数据", OrderSourceRespVO.class, + BeanUtils.toBean(list, OrderSourceRespVO.class)); + } + + // ==================== 子表(订单来源-直播间配置) ==================== + + @GetMapping("/order-source-live/page") + @Operation(summary = "获得订单来源-直播间配置分页") + @Parameter(name = "sourceId", description = "来源ID") + @PreAuthorize("@ss.hasPermission('haoka:order-source:query')") + public CommonResult> getOrderSourceLivePage(PageParam pageReqVO, + @RequestParam("sourceId") Long sourceId) { + return success(orderSourceService.getOrderSourceLivePage(pageReqVO, sourceId)); + } + + @PostMapping("/order-source-live/create") + @Operation(summary = "创建订单来源-直播间配置") + @PreAuthorize("@ss.hasPermission('haoka:order-source:create')") + public CommonResult createOrderSourceLive(@Valid @RequestBody OrderSourceLiveDO orderSourceLive) { + return success(orderSourceService.createOrderSourceLive(orderSourceLive)); + } + + @PutMapping("/order-source-live/update") + @Operation(summary = "更新订单来源-直播间配置") + @PreAuthorize("@ss.hasPermission('haoka:order-source:update')") + public CommonResult updateOrderSourceLive(@Valid @RequestBody OrderSourceLiveDO orderSourceLive) { + orderSourceService.updateOrderSourceLive(orderSourceLive); + return success(true); + } + + @DeleteMapping("/order-source-live/delete") + @Parameter(name = "id", description = "编号", required = true) + @Operation(summary = "删除订单来源-直播间配置") + @PreAuthorize("@ss.hasPermission('haoka:order-source:delete')") + public CommonResult deleteOrderSourceLive(@RequestParam("id") Long id) { + orderSourceService.deleteOrderSourceLive(id); + return success(true); + } + + @GetMapping("/order-source-live/get") + @Operation(summary = "获得订单来源-直播间配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('haoka:order-source:query')") + public CommonResult getOrderSourceLive(@RequestParam("id") Long id) { + return success(orderSourceService.getOrderSourceLive(id)); + } + +} \ 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/ordersource/vo/OrderSourcePageReqVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/vo/OrderSourcePageReqVO.java new file mode 100644 index 0000000000..b6defe75d7 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/vo/OrderSourcePageReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.haoka.controller.admin.ordersource.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 OrderSourcePageReqVO extends PageParam { + + @Schema(description = "来源备注", example = "你猜") + private String sourceRemark; + + @Schema(description = "渠道ID") + private Long channel; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ 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/ordersource/vo/OrderSourceRespVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/vo/OrderSourceRespVO.java new file mode 100644 index 0000000000..9714e8b78f --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/vo/OrderSourceRespVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.haoka.controller.admin.ordersource.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.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 订单来源配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class OrderSourceRespVO { + + @Schema(description = "来源ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25277") + @ExcelProperty("来源ID") + private Long id; + + @Schema(description = "来源备注", example = "你猜") + @ExcelProperty("来源备注") + private String sourceRemark; + + @Schema(description = "渠道ID", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value = "渠道ID", converter = DictConvert.class) + @DictFormat("haoka_order_channel") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Long channel; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ 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/ordersource/vo/OrderSourceSaveReqVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/vo/OrderSourceSaveReqVO.java new file mode 100644 index 0000000000..aff5d430c1 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/ordersource/vo/OrderSourceSaveReqVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.haoka.controller.admin.ordersource.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource.OrderSourceLiveDO; + +@Schema(description = "管理后台 - 订单来源配置新增/修改 Request VO") +@Data +public class OrderSourceSaveReqVO { + + @Schema(description = "来源ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25277") + private Long id; + + @Schema(description = "来源备注", example = "你猜") + private String sourceRemark; + + @Schema(description = "渠道ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "渠道ID不能为空") + private Long channel; + +} \ 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 index 1156e58aba..e95b53fad2 100644 --- 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 @@ -29,7 +29,7 @@ public class OrdersDO extends BaseDO { /** * 订单ID */ - @TableId + @TableId(type = IdType.ASSIGN_ID) private Long id; /** * 生产商ID diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/ordersource/OrderSourceDO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/ordersource/OrderSourceDO.java new file mode 100644 index 0000000000..21a15307b9 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/ordersource/OrderSourceDO.java @@ -0,0 +1,54 @@ +package cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource; + +import lombok.*; +import java.util.*; +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_order_source") +@KeySequence("haoka_order_source_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderSourceDO extends BaseDO { + + /** + * 来源ID + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 来源备注 + */ + private String sourceRemark; + /** + * 渠道ID + * + * 枚举 {@link TODO haoka_order_channel 对应的类} + */ + private Long channel; + /** + * 成本更新时间 + */ + private LocalDateTime costUpdatedAt; + /** + * 店铺ID + */ + private Long shopId; + /** + * 卖家ID + */ + private Long sellerId; + +} \ 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/ordersource/OrderSourceLiveDO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/ordersource/OrderSourceLiveDO.java new file mode 100644 index 0000000000..1a8517e401 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/ordersource/OrderSourceLiveDO.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource; + +import lombok.*; +import java.util.*; +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_order_source_live") +@KeySequence("haoka_order_source_live_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class OrderSourceLiveDO extends BaseDO { + + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + private Long id; + /** + * 直播间ID + */ + private Long authorId; + /** + * 来源ID + */ + private Long sourceId; + /** + * 来源,可选 + */ + private String source; + /** + * 所属店铺ID + */ + private Long shopId; + /** + * 用户ID,可选 + */ + private Long userId; + /** + * 团队ID,可选 + */ + private Long deptId; + /** + * 团队名称,可选 + */ + private String teamName; + /** + * 重命名后的名称,可选,用于搜索 + */ + private String nickName; + +} \ 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/ordersource/OrderSourceLiveMapper.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/ordersource/OrderSourceLiveMapper.java new file mode 100644 index 0000000000..161c90f20c --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/ordersource/OrderSourceLiveMapper.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.haoka.dal.mysql.ordersource; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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.ordersource.OrderSourceLiveDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 订单来源-直播间配置 Mapper + * + * @author xiongxiong + */ +@Mapper +public interface OrderSourceLiveMapper extends BaseMapperX { + + default PageResult selectPage(PageParam reqVO, Long sourceId) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(OrderSourceLiveDO::getSourceId, sourceId) + .orderByDesc(OrderSourceLiveDO::getId)); + } + + default int deleteBySourceId(Long sourceId) { + return delete(OrderSourceLiveDO::getSourceId, sourceId); + } + +} \ 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/ordersource/OrderSourceMapper.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/ordersource/OrderSourceMapper.java new file mode 100644 index 0000000000..fef4857ca7 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/mysql/ordersource/OrderSourceMapper.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.haoka.dal.mysql.ordersource; + +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.ordersource.OrderSourceDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.haoka.controller.admin.ordersource.vo.*; + +/** + * 订单来源配置 Mapper + * + * @author xiongxiong + */ +@Mapper +public interface OrderSourceMapper extends BaseMapperX { + + default PageResult selectPage(OrderSourcePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(OrderSourceDO::getSourceRemark, reqVO.getSourceRemark()) + .eqIfPresent(OrderSourceDO::getChannel, reqVO.getChannel()) + .betweenIfPresent(OrderSourceDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(OrderSourceDO::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/ordersource/OrderSourceService.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/ordersource/OrderSourceService.java new file mode 100644 index 0000000000..de282721e4 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/ordersource/OrderSourceService.java @@ -0,0 +1,97 @@ +package cn.iocoder.yudao.module.haoka.service.ordersource; + +import java.util.*; +import jakarta.validation.*; +import cn.iocoder.yudao.module.haoka.controller.admin.ordersource.vo.*; +import cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource.OrderSourceDO; +import cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource.OrderSourceLiveDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 订单来源配置 Service 接口 + * + * @author xiongxiong + */ +public interface OrderSourceService { + + /** + * 创建订单来源配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createOrderSource(@Valid OrderSourceSaveReqVO createReqVO); + + /** + * 更新订单来源配置 + * + * @param updateReqVO 更新信息 + */ + void updateOrderSource(@Valid OrderSourceSaveReqVO updateReqVO); + + /** + * 删除订单来源配置 + * + * @param id 编号 + */ + void deleteOrderSource(Long id); + + /** + * 获得订单来源配置 + * + * @param id 编号 + * @return 订单来源配置 + */ + OrderSourceDO getOrderSource(Long id); + + /** + * 获得订单来源配置分页 + * + * @param pageReqVO 分页查询 + * @return 订单来源配置分页 + */ + PageResult getOrderSourcePage(OrderSourcePageReqVO pageReqVO); + + // ==================== 子表(订单来源-直播间配置) ==================== + + /** + * 获得订单来源-直播间配置分页 + * + * @param pageReqVO 分页查询 + * @param sourceId 来源ID + * @return 订单来源-直播间配置分页 + */ + PageResult getOrderSourceLivePage(PageParam pageReqVO, Long sourceId); + + /** + * 创建订单来源-直播间配置 + * + * @param orderSourceLive 创建信息 + * @return 编号 + */ + Long createOrderSourceLive(@Valid OrderSourceLiveDO orderSourceLive); + + /** + * 更新订单来源-直播间配置 + * + * @param orderSourceLive 更新信息 + */ + void updateOrderSourceLive(@Valid OrderSourceLiveDO orderSourceLive); + + /** + * 删除订单来源-直播间配置 + * + * @param id 编号 + */ + void deleteOrderSourceLive(Long id); + + /** + * 获得订单来源-直播间配置 + * + * @param id 编号 + * @return 订单来源-直播间配置 + */ + OrderSourceLiveDO getOrderSourceLive(Long id); + +} \ 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/ordersource/OrderSourceServiceImpl.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/ordersource/OrderSourceServiceImpl.java new file mode 100644 index 0000000000..b464fdd6c1 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/ordersource/OrderSourceServiceImpl.java @@ -0,0 +1,127 @@ +package cn.iocoder.yudao.module.haoka.service.ordersource; + +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.ordersource.vo.*; +import cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource.OrderSourceDO; +import cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource.OrderSourceLiveDO; +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.ordersource.OrderSourceMapper; +import cn.iocoder.yudao.module.haoka.dal.mysql.ordersource.OrderSourceLiveMapper; + +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 OrderSourceServiceImpl implements OrderSourceService { + + @Resource + private OrderSourceMapper orderSourceMapper; + @Resource + private OrderSourceLiveMapper orderSourceLiveMapper; + + @Override + public Long createOrderSource(OrderSourceSaveReqVO createReqVO) { + // 插入 + OrderSourceDO orderSource = BeanUtils.toBean(createReqVO, OrderSourceDO.class); + orderSourceMapper.insert(orderSource); + // 返回 + return orderSource.getId(); + } + + @Override + public void updateOrderSource(OrderSourceSaveReqVO updateReqVO) { + // 校验存在 + validateOrderSourceExists(updateReqVO.getId()); + // 更新 + OrderSourceDO updateObj = BeanUtils.toBean(updateReqVO, OrderSourceDO.class); + orderSourceMapper.updateById(updateObj); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteOrderSource(Long id) { + // 校验存在 + validateOrderSourceExists(id); + // 删除 + orderSourceMapper.deleteById(id); + + // 删除子表 + deleteOrderSourceLiveBySourceId(id); + } + + private void validateOrderSourceExists(Long id) { + if (orderSourceMapper.selectById(id) == null) { + throw exception(ORDER_SOURCE_NOT_EXISTS); + } + } + + @Override + public OrderSourceDO getOrderSource(Long id) { + return orderSourceMapper.selectById(id); + } + + @Override + public PageResult getOrderSourcePage(OrderSourcePageReqVO pageReqVO) { + return orderSourceMapper.selectPage(pageReqVO); + } + + // ==================== 子表(订单来源-直播间配置) ==================== + + @Override + public PageResult getOrderSourceLivePage(PageParam pageReqVO, Long sourceId) { + return orderSourceLiveMapper.selectPage(pageReqVO, sourceId); + } + + @Override + public Long createOrderSourceLive(OrderSourceLiveDO orderSourceLive) { + orderSourceLiveMapper.insert(orderSourceLive); + return orderSourceLive.getId(); + } + + @Override + public void updateOrderSourceLive(OrderSourceLiveDO orderSourceLive) { + // 校验存在 + validateOrderSourceLiveExists(orderSourceLive.getId()); + // 更新 + orderSourceLive.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 不更新 + orderSourceLiveMapper.updateById(orderSourceLive); + } + + @Override + public void deleteOrderSourceLive(Long id) { + // 校验存在 + validateOrderSourceLiveExists(id); + // 删除 + orderSourceLiveMapper.deleteById(id); + } + + @Override + public OrderSourceLiveDO getOrderSourceLive(Long id) { + return orderSourceLiveMapper.selectById(id); + } + + private void validateOrderSourceLiveExists(Long id) { + if (orderSourceLiveMapper.selectById(id) == null) { + throw exception(ORDER_SOURCE_LIVE_NOT_EXISTS); + } + } + + private void deleteOrderSourceLiveBySourceId(Long sourceId) { + orderSourceLiveMapper.deleteBySourceId(sourceId); + } + +} \ No newline at end of file diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/ordersource/OrderSourceMapper.xml b/yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/ordersource/OrderSourceMapper.xml new file mode 100644 index 0000000000..6cf518bebc --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/resources/mapper/ordersource/OrderSourceMapper.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/ordersource/OrderSourceServiceImplTest.java b/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/ordersource/OrderSourceServiceImplTest.java new file mode 100644 index 0000000000..2390071711 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/test/java/cn/iocoder/yudao/module/haoka/service/ordersource/OrderSourceServiceImplTest.java @@ -0,0 +1,138 @@ +package cn.iocoder.yudao.module.haoka.service.ordersource; + +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.ordersource.vo.*; +import cn.iocoder.yudao.module.haoka.dal.dataobject.ordersource.OrderSourceDO; +import cn.iocoder.yudao.module.haoka.dal.mysql.ordersource.OrderSourceMapper; +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 OrderSourceServiceImpl} 的单元测试类 + * + * @author xiongxiong + */ +@Import(OrderSourceServiceImpl.class) +public class OrderSourceServiceImplTest extends BaseDbUnitTest { + + @Resource + private OrderSourceServiceImpl orderSourceService; + + @Resource + private OrderSourceMapper orderSourceMapper; + + @Test + public void testCreateOrderSource_success() { + // 准备参数 + OrderSourceSaveReqVO createReqVO = randomPojo(OrderSourceSaveReqVO.class).setId(null); + + // 调用 + Long orderSourceId = orderSourceService.createOrderSource(createReqVO); + // 断言 + assertNotNull(orderSourceId); + // 校验记录的属性是否正确 + OrderSourceDO orderSource = orderSourceMapper.selectById(orderSourceId); + assertPojoEquals(createReqVO, orderSource, "id"); + } + + @Test + public void testUpdateOrderSource_success() { + // mock 数据 + OrderSourceDO dbOrderSource = randomPojo(OrderSourceDO.class); + orderSourceMapper.insert(dbOrderSource);// @Sql: 先插入出一条存在的数据 + // 准备参数 + OrderSourceSaveReqVO updateReqVO = randomPojo(OrderSourceSaveReqVO.class, o -> { + o.setId(dbOrderSource.getId()); // 设置更新的 ID + }); + + // 调用 + orderSourceService.updateOrderSource(updateReqVO); + // 校验是否更新正确 + OrderSourceDO orderSource = orderSourceMapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, orderSource); + } + + @Test + public void testUpdateOrderSource_notExists() { + // 准备参数 + OrderSourceSaveReqVO updateReqVO = randomPojo(OrderSourceSaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> orderSourceService.updateOrderSource(updateReqVO), ORDER_SOURCE_NOT_EXISTS); + } + + @Test + public void testDeleteOrderSource_success() { + // mock 数据 + OrderSourceDO dbOrderSource = randomPojo(OrderSourceDO.class); + orderSourceMapper.insert(dbOrderSource);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbOrderSource.getId(); + + // 调用 + orderSourceService.deleteOrderSource(id); + // 校验数据不存在了 + assertNull(orderSourceMapper.selectById(id)); + } + + @Test + public void testDeleteOrderSource_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> orderSourceService.deleteOrderSource(id), ORDER_SOURCE_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetOrderSourcePage() { + // mock 数据 + OrderSourceDO dbOrderSource = randomPojo(OrderSourceDO.class, o -> { // 等会查询到 + o.setSourceRemark(null); + o.setChannel(null); + o.setCreateTime(null); + }); + orderSourceMapper.insert(dbOrderSource); + // 测试 sourceRemark 不匹配 + orderSourceMapper.insert(cloneIgnoreId(dbOrderSource, o -> o.setSourceRemark(null))); + // 测试 channel 不匹配 + orderSourceMapper.insert(cloneIgnoreId(dbOrderSource, o -> o.setChannel(null))); + // 测试 createTime 不匹配 + orderSourceMapper.insert(cloneIgnoreId(dbOrderSource, o -> o.setCreateTime(null))); + // 准备参数 + OrderSourcePageReqVO reqVO = new OrderSourcePageReqVO(); + reqVO.setSourceRemark(null); + reqVO.setChannel(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = orderSourceService.getOrderSourcePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbOrderSource, pageResult.getList().get(0)); + } + +} \ No newline at end of file diff --git a/yudao-server/src/main/resources/db/migration/V5.0.2_order_source_create_table.sql b/yudao-server/src/main/resources/db/migration/V5.0.2_order_source_create_table.sql new file mode 100644 index 0000000000..0449ff84a2 --- /dev/null +++ b/yudao-server/src/main/resources/db/migration/V5.0.2_order_source_create_table.sql @@ -0,0 +1,19 @@ +-- 将该建表 SQL 语句,添加到 yudao-module-haoka-biz 模块的 test/resources/sql/create_tables.sql 文件里 +CREATE TABLE IF NOT EXISTS "haoka_order_source" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "source_remark" varchar, + "channel" bigint NOT NULL, + "cost_updated_at" varchar, + "shop_id" bigint, + "seller_id" bigint, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint NOT NULL DEFAULT 0, + PRIMARY KEY ("id") +) COMMENT '订单来源配置'; + +-- 将该删表 SQL 语句,添加到 yudao-module-haoka-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "haoka_order_source"; \ No newline at end of file diff --git a/yudao-server/src/main/resources/db/migration/V5.0.2_order_source_insert_api_menu.sql b/yudao-server/src/main/resources/db/migration/V5.0.2_order_source_insert_api_menu.sql new file mode 100644 index 0000000000..be8dcdf080 --- /dev/null +++ b/yudao-server/src/main/resources/db/migration/V5.0.2_order_source_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, + 'order-source', '', 'haoka/ordersource/index', 0, 'OrderSource' +); + +-- 按钮父菜单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:order-source:query', 3, 1, @parentId, + '', '', '', 0 +); +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '订单来源配置创建', 'haoka:order-source:create', 3, 2, @parentId, + '', '', '', 0 +); +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '订单来源配置更新', 'haoka:order-source:update', 3, 3, @parentId, + '', '', '', 0 +); +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '订单来源配置删除', 'haoka:order-source:delete', 3, 4, @parentId, + '', '', '', 0 +); +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '订单来源配置导出', 'haoka:order-source:export', 3, 5, @parentId, + '', '', '', 0 +); \ No newline at end of file diff --git a/yudao-server/src/main/resources/db/migration/V5.0.3_order_source_live_create_table.sql b/yudao-server/src/main/resources/db/migration/V5.0.3_order_source_live_create_table.sql new file mode 100644 index 0000000000..dce970d2d4 --- /dev/null +++ b/yudao-server/src/main/resources/db/migration/V5.0.3_order_source_live_create_table.sql @@ -0,0 +1,22 @@ +-- 将该建表 SQL 语句,添加到 yudao-module-haoka-biz 模块的 test/resources/sql/create_tables.sql 文件里 +CREATE TABLE IF NOT EXISTS "haoka_order_source_live" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "author_id" bigint NOT NULL, + "source_id" bigint NOT NULL, + "source" varchar, + "shop_id" bigint, + "user_id" bigint, + "dept_id" bigint, + "team_name" varchar, + "nick_name" varchar, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint NOT NULL DEFAULT 0, + PRIMARY KEY ("id") +) COMMENT '订单来源-直播间配置'; + +-- 将该删表 SQL 语句,添加到 yudao-module-haoka-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "haoka_order_source_live"; \ No newline at end of file