Compare commits
435 Commits
Author | SHA1 | Date | |
---|---|---|---|
7995e5c2cd | |||
![]() |
7db0e97a45 | ||
![]() |
8cff58e360 | ||
![]() |
093758afe9 | ||
e1d24e1ae7 | |||
![]() |
841074baeb | ||
85dbab8f22 | |||
312598220c | |||
0be20584cf | |||
cfc27f9f1e | |||
5d0862f5dd | |||
12a03f595d | |||
c48e9dd1f2 | |||
1cb41a326c | |||
d0f77f301f | |||
3f77f37000 | |||
62c330fcec | |||
25c5f3466b | |||
485834b2cd | |||
d60ed900bc | |||
400196b480 | |||
f9cf42b9a8 | |||
50767ad7b3 | |||
e18f4ced63 | |||
b7043ebe17 | |||
0eadf32334 | |||
71db25b6fe | |||
8e3dd9899e | |||
6ed0f56462 | |||
ddcb00102c | |||
4ee40f0bdb | |||
49e52a9a55 | |||
ec715206ef | |||
1cee8788f2 | |||
e9a8be0e1b | |||
7856c2b6e8 | |||
4c1e123214 | |||
eeab201625 | |||
887ab084e9 | |||
ee76a4cfda | |||
5b7c78e024 | |||
![]() |
8634a3e357 | ||
266ad175b7 | |||
16b9f183f3 | |||
![]() |
ee92264adf | ||
a6a7af49c8 | |||
606ffbefdf | |||
![]() |
1305061781 | ||
4a912fe4e7 | |||
![]() |
913aebcb3d | ||
d4079a5f28 | |||
8ba2a94e97 | |||
![]() |
22d6ca9897 | ||
![]() |
10e0a359e8 | ||
e1d7e4011a | |||
8d148bd76c | |||
86b14817fd | |||
9190b6e6b2 | |||
723521a7bb | |||
ea7b64c9f6 | |||
bc2f5d4fce | |||
4ee568bf5c | |||
![]() |
0d08db4d7d | ||
b2a9624aac | |||
462ccbb250 | |||
4d6065d4da | |||
71b3bd9762 | |||
d3f7145610 | |||
![]() |
bdcf098da8 | ||
![]() |
81d6b0727f | ||
40d8105e55 | |||
![]() |
e0ac519d55 | ||
![]() |
36f3208daa | ||
ab30f6c9cc | |||
8b9a963bc6 | |||
![]() |
773a93b5ff | ||
![]() |
c7d71811b6 | ||
9a864d155d | |||
![]() |
ea555fbe34 | ||
![]() |
dfc5ae4a06 | ||
22bee9888b | |||
![]() |
a379e4b52f | ||
![]() |
d880c3fe6d | ||
956e4e4001 | |||
![]() |
a288e3ec5c | ||
![]() |
0966105bc5 | ||
![]() |
a8fe4bb1a6 | ||
![]() |
94e891a510 | ||
![]() |
28ea7a5c3b | ||
![]() |
6129490adf | ||
![]() |
99c1b97e42 | ||
![]() |
ec58264e48 | ||
![]() |
2ec245bc2f | ||
![]() |
e954b29559 | ||
![]() |
8477024657 | ||
![]() |
028ea76870 | ||
![]() |
cdc99c7651 | ||
3a973e9fe3 | |||
296c852bdd | |||
780cabad0a | |||
0400f2d8d7 | |||
![]() |
efb510e448 | ||
f33323af44 | |||
0513fbff94 | |||
![]() |
01bdbbb102 | ||
![]() |
362d57869b | ||
![]() |
eafb814e13 | ||
![]() |
17cec18869 | ||
![]() |
15d36d3ec4 | ||
![]() |
9ad1de7d1c | ||
![]() |
1238837d62 | ||
![]() |
2692cd66b8 | ||
![]() |
3c770192fa | ||
eeb50d18b1 | |||
![]() |
a74ed5dde0 | ||
2e5cc3afbb | |||
08af9c4f8f | |||
d99ac96aac | |||
2214b17a32 | |||
![]() |
43b4714db5 | ||
![]() |
321584d5b1 | ||
![]() |
251fb9b0dc | ||
![]() |
4b518e023c | ||
568cf4a9be | |||
fa81755e25 | |||
e8685c3eba | |||
b5b588eb2c | |||
4a369920df | |||
ab403a98e1 | |||
8fd339c525 | |||
d344925286 | |||
8d76107c27 | |||
bb082bc1d1 | |||
22efde0bb0 | |||
1ee5c31022 | |||
1a859a9337 | |||
765efb0cd5 | |||
dbe4a36ba7 | |||
![]() |
895421fa8b | ||
![]() |
fd5f3fc527 | ||
![]() |
1c2e84eaf1 | ||
8795b1fb37 | |||
b974273aa1 | |||
f7000dc1fd | |||
5c0907bfb9 | |||
7570141837 | |||
![]() |
1c3c5089f6 | ||
![]() |
5d02397509 | ||
![]() |
0ed7eca256 | ||
![]() |
ad135c2421 | ||
![]() |
418e1b52af | ||
1bb2c72e8b | |||
![]() |
638851a00d | ||
![]() |
09d3576111 | ||
![]() |
845cd85dc6 | ||
![]() |
78050724a6 | ||
d751de05c2 | |||
9c6f5f3add | |||
![]() |
910da9cdff | ||
52494134ee | |||
![]() |
b1a2811885 | ||
![]() |
4ec050cbba | ||
841c35106d | |||
6586373a89 | |||
![]() |
794751beef | ||
![]() |
3fad44f28b | ||
9a6f0e14d7 | |||
![]() |
4479995b17 | ||
![]() |
4c580e3ec5 | ||
![]() |
7a9765d1be | ||
e74226d2d4 | |||
e54ff633d8 | |||
f700b77fb5 | |||
![]() |
59576b6129 | ||
4b738e47ea | |||
![]() |
ccf2c6b02e | ||
![]() |
ab75ebf27c | ||
![]() |
9fbe5561cc | ||
c9ff830a56 | |||
cb05c45909 | |||
![]() |
76342416ad | ||
![]() |
0a50a160eb | ||
![]() |
ebc18ac990 | ||
![]() |
83084e2f78 | ||
![]() |
cfa44d714e | ||
![]() |
bfd6bc390d | ||
![]() |
f73503c240 | ||
7db59f91a9 | |||
83ffa453f6 | |||
cc5a87ab76 | |||
![]() |
65f99d7a44 | ||
91655571fe | |||
![]() |
b382c09dda | ||
![]() |
342fbc4de8 | ||
![]() |
8e3403e708 | ||
df6e2fe083 | |||
16ab858284 | |||
1aef69bb78 | |||
2e468d0ebc | |||
e3dfb9b98f | |||
cba7f368a7 | |||
8af8137fec | |||
46a6f340fd | |||
e57128401e | |||
4749f2b413 | |||
3354e5e410 | |||
800ee8e8d5 | |||
2dd6ac0631 | |||
![]() |
bf728cee9b | ||
![]() |
2616b5fff8 | ||
bb9e2a9c7a | |||
a210e4b0aa | |||
17648ceb5c | |||
07df3682ea | |||
![]() |
a3fc224f0e | ||
4a44c85177 | |||
2fe6800ac3 | |||
15690ac810 | |||
![]() |
793c34a96a | ||
8e6911c155 | |||
b03006bbc2 | |||
![]() |
82c06e75a8 | ||
5e6f6c9c3d | |||
886a9cb4de | |||
80b80b9578 | |||
![]() |
4ff73cb5ec | ||
e1937355dc | |||
55e1fcb553 | |||
83b4744fbd | |||
dd588457e0 | |||
ee1e05a5d0 | |||
![]() |
0a011ecf6c | ||
![]() |
8fd4393ec1 | ||
0a954f060d | |||
4ded3b177b | |||
![]() |
b5cffc9370 | ||
![]() |
4e543a22d2 | ||
81b8b959aa | |||
![]() |
b9b7d66549 | ||
![]() |
dd8796ba79 | ||
![]() |
76f1afc0fe | ||
![]() |
4d02d61b64 | ||
![]() |
be04c3785c | ||
![]() |
72febf46dd | ||
![]() |
1aebe07488 | ||
![]() |
214d1cf82e | ||
![]() |
f27e96ffed | ||
b82f640919 | |||
a543a8805f | |||
510cf76e4a | |||
![]() |
5586e8cee3 | ||
![]() |
832689d040 | ||
![]() |
e48622f44d | ||
![]() |
f26a2a46b0 | ||
![]() |
50c6f60b25 | ||
![]() |
6c4ffb26e9 | ||
![]() |
53c12bcf1b | ||
![]() |
e7c0d39162 | ||
![]() |
a47bc23853 | ||
![]() |
e23afb299b | ||
![]() |
03a9967da4 | ||
8859977761 | |||
![]() |
7bb559d294 | ||
329d25d4da | |||
![]() |
1869dbb3a4 | ||
![]() |
983375f2c7 | ||
![]() |
c21d61f4f0 | ||
![]() |
b450526775 | ||
![]() |
b8702f827c | ||
![]() |
99b07e32fb | ||
![]() |
93e7bd66d9 | ||
![]() |
c6fb827116 | ||
![]() |
621ec391ed | ||
![]() |
5957a113c4 | ||
![]() |
106d64be05 | ||
![]() |
ea92f61773 | ||
![]() |
fd06e105bb | ||
![]() |
311727a874 | ||
![]() |
44e84bce11 | ||
![]() |
65da753e66 | ||
![]() |
adb23bb268 | ||
![]() |
90be00a277 | ||
![]() |
ccadf33e19 | ||
![]() |
e0f6ccace8 | ||
![]() |
af2e269e71 | ||
![]() |
593fac4044 | ||
![]() |
1369cf324b | ||
![]() |
e2ce1e1211 | ||
![]() |
2c4ea0c22c | ||
![]() |
f6357bb922 | ||
![]() |
b6c6855842 | ||
![]() |
580739f2f7 | ||
![]() |
777992a096 | ||
![]() |
584958eb9c | ||
![]() |
f2dfb8412a | ||
![]() |
7429692522 | ||
![]() |
cc68b15b40 | ||
![]() |
9d5b1e109d | ||
![]() |
9d4e42de60 | ||
![]() |
02eb7ceeeb | ||
![]() |
d71994cdaa | ||
![]() |
3fb0972dd0 | ||
![]() |
7d9505bf21 | ||
![]() |
48f9d66f1d | ||
![]() |
2b0acc4d01 | ||
![]() |
68dd5db747 | ||
![]() |
a3e8881ba5 | ||
![]() |
ad580e3f99 | ||
![]() |
f727f28b46 | ||
![]() |
4c0efb69bf | ||
![]() |
675272f04c | ||
![]() |
32229ab3ef | ||
![]() |
f640fed356 | ||
![]() |
f76af44a0a | ||
![]() |
668787f053 | ||
![]() |
fccce9f4c2 | ||
![]() |
701efaadea | ||
![]() |
28977e5313 | ||
![]() |
71139a21c3 | ||
![]() |
dfbd80dad7 | ||
![]() |
824c68e08b | ||
![]() |
65198b9cbb | ||
![]() |
5c603c6151 | ||
![]() |
f058de3736 | ||
![]() |
79cb33cf13 | ||
![]() |
525ad3d6db | ||
![]() |
9d0e0eb33e | ||
![]() |
83ed8e4150 | ||
![]() |
5e239c99a4 | ||
![]() |
2e4047005f | ||
![]() |
dd68c8fe29 | ||
![]() |
bb812c2bbe | ||
![]() |
b09b6f7ece | ||
![]() |
19581d153a | ||
![]() |
96b611f014 | ||
![]() |
5eec4e9255 | ||
![]() |
d2d8c6ee40 | ||
![]() |
9b33dbde98 | ||
![]() |
7e027b493d | ||
![]() |
029c4c1f2a | ||
![]() |
0c53738935 | ||
![]() |
74bdae2928 | ||
![]() |
06e1f6d7ed | ||
![]() |
9a39b48734 | ||
![]() |
b14a8ecfae | ||
![]() |
a46369f8c8 | ||
![]() |
8f1ccba127 | ||
![]() |
1d578cbf8e | ||
0210b25c70 | |||
05fa2956e5 | |||
![]() |
ee14312dcd | ||
![]() |
5c14799691 | ||
53fcafde65 | |||
![]() |
9e2fa2ed16 | ||
![]() |
297b0332da | ||
e01d3c4f74 | |||
09e66734ce | |||
93c6b3567b | |||
![]() |
3a66394bbe | ||
e2ef255d8f | |||
ca99f31ebd | |||
5d5702e202 | |||
![]() |
24544a18a8 | ||
![]() |
52b3be7310 | ||
![]() |
bcc01a2522 | ||
ce4bd54049 | |||
f7a7610a7c | |||
e3ae60b5f8 | |||
04b5460cb4 | |||
![]() |
c014f65f13 | ||
360caa64f6 | |||
d8d68c59dd | |||
bfcb239df2 | |||
![]() |
409a8446c0 | ||
![]() |
be202b164b | ||
![]() |
e815bc6e05 | ||
049e4874a6 | |||
9683642563 | |||
12e888152d | |||
3757b5562a | |||
64cabd4de5 | |||
00052cc93e | |||
2f54aee220 | |||
![]() |
3b9712b361 | ||
![]() |
f9d822bb11 | ||
f5fd633f8b | |||
c0484c2c71 | |||
05d3c17acd | |||
![]() |
eacad6e370 | ||
![]() |
e78c6d2b0d | ||
![]() |
3c3f3d03ea | ||
b075011ce8 | |||
7212f67023 | |||
![]() |
983617947a | ||
![]() |
ff26d17d11 | ||
3ec075544d | |||
![]() |
847f8b0372 | ||
12de7c2abf | |||
8a5397e5f6 | |||
86750e61ea | |||
8a9dfeb883 | |||
729ac67fea | |||
dfb6459df0 | |||
bc3b62dd96 | |||
![]() |
95d5aa165e | ||
![]() |
114840f26d | ||
![]() |
d8c32b0d55 | ||
f98db5fe4b | |||
![]() |
4d0b6cb113 | ||
![]() |
f7a100b025 | ||
![]() |
62ce570195 | ||
2d0e662109 | |||
061081fc46 | |||
13453dfd3b | |||
fe3e8cbb9f | |||
2676081cd3 | |||
672856ddfc | |||
581aaaf32b | |||
c4ceacb53b | |||
d54c855e8a | |||
b50544ac90 | |||
62971bb035 | |||
6aaa98f243 | |||
169ab1ca0f | |||
57f2ec0a0f | |||
0e4d4a31c6 | |||
![]() |
378aa9df54 | ||
00104f0580 | |||
![]() |
daf3886672 | ||
![]() |
3bc7d53106 | ||
81e5b80f64 | |||
cc03351620 | |||
ae61377c73 | |||
4957cd8023 | |||
90b3286aeb |
2
.feisuan/.ymlignore
Normal file
2
.feisuan/.ymlignore
Normal file
@ -0,0 +1,2 @@
|
||||
spring.datasource.username
|
||||
spring.datasource.password
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -46,3 +46,4 @@ nbdist/
|
||||
!*/build/*.xml
|
||||
|
||||
.flattened-pom.xml
|
||||
/.run/
|
||||
|
@ -3,7 +3,7 @@
|
||||
<deployment type="dockerfile">
|
||||
<settings>
|
||||
<option name="imageTag" value="ruoyi/ruoyi-server:5.3.1" />
|
||||
<option name="buildOnly" value="true" />
|
||||
<option name="containerName" value="" />
|
||||
<option name="sourceFilePath" value="ruoyi-admin/Dockerfile" />
|
||||
</settings>
|
||||
</deployment>
|
||||
|
@ -3,7 +3,15 @@
|
||||
<deployment type="dockerfile">
|
||||
<settings>
|
||||
<option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.3.1" />
|
||||
<option name="buildOnly" value="true" />
|
||||
<option name="containerName" value="snail-job" />
|
||||
<option name="portBindings">
|
||||
<list>
|
||||
<DockerPortBindingImpl>
|
||||
<option name="containerPort" value="8800" />
|
||||
<option name="hostPort" value="8800" />
|
||||
</DockerPortBindingImpl>
|
||||
</list>
|
||||
</option>
|
||||
<option name="sourceFilePath" value="ruoyi-extend/ruoyi-snailjob-server/Dockerfile" />
|
||||
</settings>
|
||||
</deployment>
|
||||
|
BIN
null/download/0952cc1651f0458fab7c1b52eed45d1b_订单售后数据.xlsx
Normal file
BIN
null/download/0952cc1651f0458fab7c1b52eed45d1b_订单售后数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/0e2d25a8f9d149f3ab4c445324053c02_品牌管理数据.xlsx
Normal file
BIN
null/download/0e2d25a8f9d149f3ab4c445324053c02_品牌管理数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/1094464973f74e6fa672edd9334c0422_商品信息数据.xlsx
Normal file
BIN
null/download/1094464973f74e6fa672edd9334c0422_商品信息数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/1270f8e502594e65ad824f60a1143fec_订单发货记录数据.xlsx
Normal file
BIN
null/download/1270f8e502594e65ad824f60a1143fec_订单发货记录数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/1bd4d07992404cfeb22b56531008c55c_订单操作历史记录数据.xlsx
Normal file
BIN
null/download/1bd4d07992404cfeb22b56531008c55c_订单操作历史记录数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/4b42fe607ca640f19ff4f64892a29d2f_订单售后数据.xlsx
Normal file
BIN
null/download/4b42fe607ca640f19ff4f64892a29d2f_订单售后数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/5450a70ed0e242d097893399e35219f8_会员信息数据.xlsx
Normal file
BIN
null/download/5450a70ed0e242d097893399e35219f8_会员信息数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/58daf39a34a0464fbe04e2ce4ed6f64b_订单中所包含的商品数据.xlsx
Normal file
BIN
null/download/58daf39a34a0464fbe04e2ce4ed6f64b_订单中所包含的商品数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/62f9b95dc78e4096b1284da19117d9e5_订单售后数据.xlsx
Normal file
BIN
null/download/62f9b95dc78e4096b1284da19117d9e5_订单售后数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/65f1eb5e9b024c058352c617c95c4fc7_微信订单表数据.xlsx
Normal file
BIN
null/download/65f1eb5e9b024c058352c617c95c4fc7_微信订单表数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/6b5ae4bf0f974ac1b92e66c246a0dbce_订单售后数据.xlsx
Normal file
BIN
null/download/6b5ae4bf0f974ac1b92e66c246a0dbce_订单售后数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/6e97b755e28945a39ada2fe0b7754369_会员信息数据.xlsx
Normal file
BIN
null/download/6e97b755e28945a39ada2fe0b7754369_会员信息数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/6ec52049deea405ba618b7c04d5afc9f_商品信息数据.xlsx
Normal file
BIN
null/download/6ec52049deea405ba618b7c04d5afc9f_商品信息数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/7899d2d8a00f4f899a882eaaa8f4b8a2_订单售后数据.xlsx
Normal file
BIN
null/download/7899d2d8a00f4f899a882eaaa8f4b8a2_订单售后数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/b69ecabeb1974f959a6e55e84f7e8d4e_订单售后数据.xlsx
Normal file
BIN
null/download/b69ecabeb1974f959a6e55e84f7e8d4e_订单售后数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/df88302945b34951a404d615d8211ef2_订单售后数据.xlsx
Normal file
BIN
null/download/df88302945b34951a404d615d8211ef2_订单售后数据.xlsx
Normal file
Binary file not shown.
BIN
null/download/ee3cbbae3c454908810316c4dc7da48e_订单售后数据.xlsx
Normal file
BIN
null/download/ee3cbbae3c454908810316c4dc7da48e_订单售后数据.xlsx
Normal file
Binary file not shown.
145
pom.xml
145
pom.xml
@ -19,7 +19,6 @@
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>17</java.version>
|
||||
<mybatis.version>3.5.16</mybatis.version>
|
||||
<springdoc.version>2.8.5</springdoc.version>
|
||||
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
|
||||
<easyexcel.version>4.0.3</easyexcel.version>
|
||||
<velocity.version>2.3</velocity.version>
|
||||
@ -31,7 +30,7 @@
|
||||
<redisson.version>3.45.1</redisson.version>
|
||||
<lock4j.version>2.2.7</lock4j.version>
|
||||
<dynamic-ds.version>4.3.1</dynamic-ds.version>
|
||||
<snailjob.version>1.4.0</snailjob.version>
|
||||
<snailjob.version>1.5.0</snailjob.version>
|
||||
<mapstruct-plus.version>1.4.6</mapstruct-plus.version>
|
||||
<mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
|
||||
<lombok.version>1.18.36</lombok.version>
|
||||
@ -59,15 +58,17 @@
|
||||
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
|
||||
<!-- 打包默认跳过测试 -->
|
||||
<skipTests>true</skipTests>
|
||||
<knife4j-plus.version>4.6.0</knife4j-plus.version>
|
||||
<okhttp.version>4.12.0</okhttp.version>
|
||||
</properties>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>local</id>
|
||||
<id>test</id>
|
||||
<properties>
|
||||
<!-- 环境标识,需要与配置文件的名称相对应 -->
|
||||
<profiles.active>local</profiles.active>
|
||||
<logging.level>info</logging.level>
|
||||
<profiles.active>test</profiles.active>
|
||||
<logging.level>debug</logging.level>
|
||||
<monitor.username>ruoyi</monitor.username>
|
||||
<monitor.password>123456</monitor.password>
|
||||
</properties>
|
||||
@ -77,7 +78,7 @@
|
||||
<properties>
|
||||
<!-- 环境标识,需要与配置文件的名称相对应 -->
|
||||
<profiles.active>dev</profiles.active>
|
||||
<logging.level>info</logging.level>
|
||||
<logging.level>debug</logging.level>
|
||||
<monitor.username>ruoyi</monitor.username>
|
||||
<monitor.password>123456</monitor.password>
|
||||
</properties>
|
||||
@ -95,12 +96,27 @@
|
||||
<monitor.password>123456</monitor.password>
|
||||
</properties>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>local</id>
|
||||
<properties>
|
||||
<profiles.active>local</profiles.active>
|
||||
<logging.level>debug</logging.level>
|
||||
<monitor.username>ruoyi</monitor.username>
|
||||
<monitor.password>123456</monitor.password>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
<!-- 依赖声明 -->
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.github.xingfudeshi</groupId>
|
||||
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
|
||||
<version>${knife4j-plus.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringBoot的依赖配置-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
@ -147,12 +163,6 @@
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springdoc</groupId>
|
||||
<artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
|
||||
<version>${springdoc.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.github.therapi</groupId>
|
||||
<artifactId>therapi-runtime-javadoc</artifactId>
|
||||
@ -293,12 +303,12 @@
|
||||
<dependency>
|
||||
<groupId>com.aizuda</groupId>
|
||||
<artifactId>snail-job-client-starter</artifactId>
|
||||
<version>${snailjob.version}</version>
|
||||
<version>1.5.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.aizuda</groupId>
|
||||
<artifactId>snail-job-client-job-core</artifactId>
|
||||
<version>${snailjob.version}</version>
|
||||
<version>1.5.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 加密包引入 -->
|
||||
@ -357,12 +367,67 @@
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 交易模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-transaction</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<!-- 工作流模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-workflow</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-content</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-order</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-member</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-im</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-goods</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-mq</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-auth</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>okhttp</artifactId>
|
||||
<version>${okhttp.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-mongo</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
@ -377,6 +442,56 @@
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<!-- 依赖 JSch 库(用于 SSH/SCP 操作) -->
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.jcraft</groupId>
|
||||
<artifactId>jsch</artifactId>
|
||||
<version>0.1.55</version> <!-- 最新版本可更新 -->
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<executions>
|
||||
<execution>
|
||||
<!-- 绑定到 package 阶段之后执行 -->
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<!-- <target>-->
|
||||
<!-- <!– 1. 配置 SSH 连接信息 –>-->
|
||||
<!-- <property name="ssh.host" value="192.168.1.65" /> <!– 例如:192.168.1.100 –>-->
|
||||
<!-- <property name="ssh.port" value="22" /> <!– SSH 默认端口 –>-->
|
||||
<!-- <property name="ssh.username" value="wzj" /> <!– 例如:root –>-->
|
||||
<!-- <property name="ssh.password" value="123456" /> <!– 或使用密钥认证 –>-->
|
||||
<!-- <property name="local.jar.path" value="${project.build.directory}/${project.build.finalName}.jar" /> <!– 本地 JAR 路径 –>-->
|
||||
<!-- <property name="remote.jar.path" value="/var/local/docker/java/data" /> <!– 服务器存放 JAR 的目录,例如:/opt/app/ –>-->
|
||||
|
||||
<!-- <!– 2. 通过 SCP 上传 JAR 包到目标服务器 –>-->
|
||||
<!-- <scp-->
|
||||
<!-- file="${local.jar.path}"-->
|
||||
<!-- todir="${ssh.username}:${ssh.password}@${ssh.host}:${remote.jar.path}"-->
|
||||
<!-- port="${ssh.port}"-->
|
||||
<!-- trust="true" /> <!– 信任未知主机密钥 –>-->
|
||||
|
||||
<!-- <!– 3. 通过 SSH 执行远程命令:重启 docker java 容器 –>-->
|
||||
<!-- <sshexec-->
|
||||
<!-- host="${ssh.host}"-->
|
||||
<!-- port="${ssh.port}"-->
|
||||
<!-- username="${ssh.username}"-->
|
||||
<!-- password="${ssh.password}"-->
|
||||
<!-- command="docker restart java"-->
|
||||
<!-- trust="true"-->
|
||||
<!-- failonerror="true" /> <!– 命令执行失败时,Maven 构建终止 –>-->
|
||||
<!-- </target>-->
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
@ -425,7 +540,7 @@
|
||||
<configuration>
|
||||
<argLine>-Dfile.encoding=UTF-8</argLine>
|
||||
<!-- 根据打包环境执行对应的@Tag测试方法 -->
|
||||
<groups>${profiles.active}</groups>
|
||||
<groups>dev</groups>
|
||||
<!-- 排除标签 -->
|
||||
<excludedGroups>exclude</excludedGroups>
|
||||
</configuration>
|
||||
|
@ -22,28 +22,21 @@
|
||||
<groupId>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- <!– mp支持的数据库均支持 只需要增加对应的jdbc依赖即可 –>-->
|
||||
<!-- <!– Oracle –>-->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.oracle.database.jdbc</groupId>-->
|
||||
<!-- <artifactId>ojdbc8</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- <!– 兼容oracle低版本 –>-->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.oracle.database.nls</groupId>-->
|
||||
<!-- <artifactId>orai18n</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- <!– PostgreSql –>-->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.postgresql</groupId>-->
|
||||
<!-- <artifactId>postgresql</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- <!– SqlServer –>-->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.microsoft.sqlserver</groupId>-->
|
||||
<!-- <artifactId>mssql-jdbc</artifactId>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- Oracle -->
|
||||
<dependency>
|
||||
<groupId>com.oracle.database.jdbc</groupId>
|
||||
<artifactId>ojdbc8</artifactId>
|
||||
</dependency>
|
||||
<!-- PostgreSql -->
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
</dependency>
|
||||
<!-- SqlServer -->
|
||||
<dependency>
|
||||
<groupId>com.microsoft.sqlserver</groupId>
|
||||
<artifactId>mssql-jdbc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
@ -70,6 +63,27 @@
|
||||
<artifactId>ruoyi-system</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-im</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-goods</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-content</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-member</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-order</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-job</artifactId>
|
||||
@ -93,6 +107,13 @@
|
||||
<artifactId>ruoyi-workflow</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 交易模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-transaction</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>de.codecentric</groupId>
|
||||
<artifactId>spring-boot-admin-starter-client</artifactId>
|
||||
@ -105,16 +126,16 @@
|
||||
</dependency>
|
||||
|
||||
<!-- skywalking 整合 logback -->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.apache.skywalking</groupId>-->
|
||||
<!-- <artifactId>apm-toolkit-logback-1.x</artifactId>-->
|
||||
<!-- <version>${与你的agent探针版本保持一致}</version>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.apache.skywalking</groupId>-->
|
||||
<!-- <artifactId>apm-toolkit-trace</artifactId>-->
|
||||
<!-- <version>${与你的agent探针版本保持一致}</version>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.apache.skywalking</groupId>-->
|
||||
<!-- <artifactId>apm-toolkit-logback-1.x</artifactId>-->
|
||||
<!-- <version>${与你的agent探针版本保持一致}</version>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.apache.skywalking</groupId>-->
|
||||
<!-- <artifactId>apm-toolkit-trace</artifactId>-->
|
||||
<!-- <version>${与你的agent探针版本保持一致}</version>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
@ -3,6 +3,8 @@ package org.dromara;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
/**
|
||||
* 启动程序
|
||||
@ -11,6 +13,8 @@ import org.springframework.boot.context.metrics.buffering.BufferingApplicationSt
|
||||
*/
|
||||
|
||||
@SpringBootApplication
|
||||
@EnableScheduling
|
||||
@ComponentScan(basePackages = {"org.dromara", "com.wzj.soopin"})
|
||||
public class DromaraApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
@ -0,0 +1,32 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.wzj.soopin.content.domain.bo.ArticleBO;
|
||||
import com.wzj.soopin.content.domain.vo.ArticleVO;
|
||||
import com.wzj.soopin.content.service.IArticleService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/app/article")
|
||||
@Tag(name = "内容管理")
|
||||
@RequiredArgsConstructor
|
||||
public class AppArticleController {
|
||||
|
||||
private final IArticleService service;
|
||||
@Operation(summary = "轮播列表")
|
||||
@PostMapping("/carousel")
|
||||
public R<List<ArticleVO>> carousel(@RequestBody ArticleBO bo) {
|
||||
bo.setType(1);//轮播图
|
||||
bo.setCategoryId(1l);
|
||||
List<ArticleVO> articleList = service.selectVoList( bo.toWrapper());
|
||||
return R.ok(articleList);
|
||||
}
|
||||
}
|
@ -0,0 +1,88 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.content.domain.bo.CommentBO;
|
||||
import com.wzj.soopin.content.domain.po.Comment;
|
||||
import com.wzj.soopin.content.domain.vo.CommentVO;
|
||||
import com.wzj.soopin.content.service.CommentService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@Slf4j
|
||||
@Tag(name = "管理端-评论管理接口")
|
||||
@RequestMapping("/app/comment")
|
||||
@RestController
|
||||
public class AppCommentController {
|
||||
@Autowired
|
||||
private CommentService commentService;
|
||||
|
||||
@Operation(summary = "查询视频评论列表")
|
||||
@PostMapping("/page")
|
||||
public R<Page<CommentVO>> queryVlogComments(
|
||||
@RequestBody CommentBO bo,
|
||||
@RequestBody Page<Comment> page) {
|
||||
try {
|
||||
Page<CommentVO> commentPage = commentService.pageComment(page, bo);
|
||||
return R.ok(commentPage);
|
||||
} catch (Exception e) {
|
||||
log.error("查询视频评论列表失败", e);
|
||||
return R.fail("查询视频评论列表失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "发布评论")
|
||||
@PostMapping("/publish")
|
||||
public R<Void> publishComment(@RequestBody CommentBO bo) {
|
||||
try {
|
||||
commentService.publishComment(bo);
|
||||
return R.ok();
|
||||
} catch (Exception e) {
|
||||
log.error("发布评论失败", e);
|
||||
return R.fail("发布评论失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "删除评论")
|
||||
@PostMapping("/delete")
|
||||
public R<Void> deleteComment(@RequestParam String commentId) {
|
||||
try {
|
||||
String username = LoginHelper.getUsername();
|
||||
commentService.deleteComment(commentId, username);
|
||||
return R.ok();
|
||||
} catch (Exception e) {
|
||||
log.error("删除评论失败", e);
|
||||
return R.fail("删除评论失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "获取评论详情")
|
||||
@GetMapping("/detail")
|
||||
public R<Map<String, Object>> getCommentDetail(@RequestParam String commentId) {
|
||||
try {
|
||||
Comment comment = commentService.getCommentDetail(commentId);
|
||||
if (comment == null) {
|
||||
return R.fail("评论不存在");
|
||||
}
|
||||
|
||||
// 获取子评论
|
||||
List<Comment> childComments = commentService.getChildComments(commentId);
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("comment", comment);
|
||||
result.put("childComments", childComments);
|
||||
|
||||
return R.ok(result);
|
||||
} catch (Exception e) {
|
||||
log.error("获取评论详情失败", e);
|
||||
return R.fail("获取评论详情失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.system.domain.vo.SysDictDataVo;
|
||||
import org.dromara.system.service.ISysDictDataService;
|
||||
import org.dromara.system.service.ISysDictTypeService;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Tag(name = "字典数据接口")
|
||||
@RequestMapping("/app/sys/dict")
|
||||
@RestController
|
||||
@AllArgsConstructor
|
||||
public class AppDictController {
|
||||
private final ISysDictDataService dictDataService;
|
||||
private final ISysDictTypeService dictTypeService;
|
||||
|
||||
/**
|
||||
* 根据字典类型查询字典数据信息
|
||||
*
|
||||
* @param dictType 字典类型
|
||||
*/
|
||||
@Operation(summary = "根据字典类型查询字典数据信息")
|
||||
@GetMapping(value = "/type/{dictType}")
|
||||
public R<List<SysDictDataVo>> dictType(@PathVariable String dictType) {
|
||||
List<SysDictDataVo> data = dictTypeService.selectDictDataByTypeWithDefaultTenantID(dictType);
|
||||
if (ObjectUtil.isNull(data)) {
|
||||
data = new ArrayList<>();
|
||||
}
|
||||
return R.ok(data);
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.wzj.soopin.member.convert.FeedbackConvert;
|
||||
import com.wzj.soopin.member.domain.bo.FeedbackBO;
|
||||
import com.wzj.soopin.member.service.IFeedbackService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Tag(name = "意见反馈")
|
||||
@RequestMapping("/app/feedback")
|
||||
@RestController
|
||||
@AllArgsConstructor
|
||||
public class AppFeedbackController {
|
||||
private final IFeedbackService service;
|
||||
private final FeedbackConvert convert;
|
||||
|
||||
@Operation(summary = "修改意见反馈备注信息")
|
||||
@Log(title = "新增意见反馈", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/add")
|
||||
public R add(@RequestBody FeedbackBO feedback) {
|
||||
return R.ok(service.save(convert.toPo(feedback)));
|
||||
}
|
||||
}
|
@ -0,0 +1,266 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.member.business.IMemberBusiness;
|
||||
import com.wzj.soopin.member.convert.AccountBillConvert;
|
||||
import com.wzj.soopin.member.convert.MemberAccountConvert;
|
||||
import com.wzj.soopin.member.convert.MemberBankConvert;
|
||||
import com.wzj.soopin.member.convert.MemberConvert;
|
||||
import com.wzj.soopin.member.domain.bo.AccountBillBO;
|
||||
import com.wzj.soopin.member.domain.bo.MemberBO;
|
||||
import com.wzj.soopin.member.domain.bo.MemberBankBO;
|
||||
import com.wzj.soopin.member.domain.po.AccountBill;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
import com.wzj.soopin.member.domain.po.MemberAccount;
|
||||
import com.wzj.soopin.member.domain.po.MemberBank;
|
||||
import com.wzj.soopin.member.domain.vo.AccountBillVO;
|
||||
import com.wzj.soopin.member.domain.vo.MemberAccountVO;
|
||||
import com.wzj.soopin.member.domain.vo.MemberBankVO;
|
||||
import com.wzj.soopin.member.domain.vo.MemberVO;
|
||||
import com.wzj.soopin.member.service.IFansService;
|
||||
import com.wzj.soopin.member.service.IMemberAccountService;
|
||||
import com.wzj.soopin.member.service.IMemberBankService;
|
||||
import com.wzj.soopin.member.service.IMemberService;
|
||||
import com.wzj.soopin.transaction.convert.ChargeConvert;
|
||||
import com.wzj.soopin.transaction.convert.WithdrawConvert;
|
||||
import com.wzj.soopin.transaction.domain.bo.ChargeBO;
|
||||
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
|
||||
import com.wzj.soopin.transaction.domain.entity.InitiateBatchTransferResponseNew;
|
||||
import com.wzj.soopin.transaction.domain.po.Withdraw;
|
||||
import com.wzj.soopin.transaction.enums.WithdrawType;
|
||||
import com.wzj.soopin.transaction.service.IAccountBillService;
|
||||
import com.wzj.soopin.transaction.service.IChargeService;
|
||||
import com.wzj.soopin.transaction.service.IWithdrawService;
|
||||
import com.wzj.soopin.transaction.service.impl.WxAuthService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import me.zhyd.oauth.model.AuthResponse;
|
||||
import me.zhyd.oauth.model.AuthToken;
|
||||
import me.zhyd.oauth.model.AuthUser;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.domain.model.SocialLoginBody;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.ValidatorUtils;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.ratelimiter.annotation.RateLimiter;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.common.social.config.properties.SocialProperties;
|
||||
import org.dromara.common.social.utils.SocialUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/app/member")
|
||||
@Tag(name = "会员管理")
|
||||
@RequiredArgsConstructor
|
||||
public class AppMemberController {
|
||||
private final IMemberBusiness memberBusiness;
|
||||
|
||||
private final IMemberService service;
|
||||
|
||||
private final MemberConvert convert;
|
||||
|
||||
private final MemberAccountConvert accountConvert;
|
||||
|
||||
private final IMemberAccountService accountService;
|
||||
|
||||
private final IAccountBillService accountBillService;
|
||||
|
||||
private final AccountBillConvert accountBillConvert;
|
||||
private final SocialProperties socialProperties;
|
||||
|
||||
private final IMemberBankService memberBankService;
|
||||
private final MemberBankConvert memberBankConvert;
|
||||
private final IChargeService chargeService;
|
||||
private final ChargeConvert chargeConvert;
|
||||
|
||||
private final IWithdrawService withdrawService;
|
||||
private final WithdrawConvert withdrawConvert;
|
||||
|
||||
private final WxAuthService wxAuthService;
|
||||
|
||||
private final IFansService fansService;
|
||||
|
||||
@Operation(summary = "获取会员账户信息详细信息")
|
||||
@GetMapping(value = "/info")
|
||||
public R<MemberVO> getInfo(Long memberId) {
|
||||
//获取用户信息
|
||||
if(memberId==null){
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
memberId = loginUser.getUserId();
|
||||
}
|
||||
return R.ok(memberBusiness.info(memberId));
|
||||
}
|
||||
|
||||
@Operation(summary = "获取会员账户表详细信息")
|
||||
@GetMapping(value = "/account")
|
||||
public R<MemberAccountVO> accountInfo() {
|
||||
//获取用户信息
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
return R.ok(accountConvert.toVO(accountService.getMemberAccount(loginUser.getUserId())));
|
||||
}
|
||||
|
||||
@Operation(summary = "查询账单")
|
||||
@PostMapping("/bank")
|
||||
public R<Page<MemberBankVO>> list(@RequestBody MemberBankBO bo,
|
||||
@RequestBody Page<MemberBank> page) {
|
||||
//获取用户信息
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
Long memberId = loginUser.getUserId();
|
||||
bo.setMemberId(memberId);
|
||||
Page<MemberBank> memberPage = memberBankService.page(page, bo.toWrapper());
|
||||
return R.ok(memberBankConvert.toVO(memberPage));
|
||||
}
|
||||
|
||||
@Operation(summary = "查询账单")
|
||||
@PostMapping("/bills")
|
||||
public R<Page<AccountBillVO>> list(@RequestBody AccountBillBO bo,
|
||||
@RequestBody Page<AccountBill> page) {
|
||||
//获取用户信息
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
Long memberId = loginUser.getUserId();
|
||||
//根据会员获取账户信息
|
||||
MemberAccount memberAccount = accountService.getMemberAccount(memberId);
|
||||
if (memberAccount == null) {
|
||||
throw new ServiceException("用户未绑定账户");
|
||||
}
|
||||
LambdaQueryWrapper<AccountBill> queryWrapper = bo.toWrapper();
|
||||
queryWrapper.eq(AccountBill::getAccountId, memberAccount.getId());
|
||||
queryWrapper.orderByDesc(AccountBill::getCreateTime);
|
||||
Page<AccountBill> memberPage = accountBillService.page(page, queryWrapper);
|
||||
return R.ok(accountBillConvert.toVO(memberPage));
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "绑定推广人")
|
||||
@PostMapping("/bind/spread")
|
||||
public R<AuthToken> bindSpread(@RequestBody MemberBO bo) {
|
||||
|
||||
memberBusiness.bindSpread(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Operation(summary = "绑定微信")
|
||||
@PostMapping("/bind/wechat")
|
||||
public R<AuthToken> bindWechat(@RequestBody SocialLoginBody loginBody) {
|
||||
|
||||
//获取用户信息
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
Long memberId = loginUser.getUserId();
|
||||
//
|
||||
ValidatorUtils.validate(loginBody);
|
||||
AuthResponse<AuthUser> response = SocialUtils.loginAuth(
|
||||
loginBody.getSource(), loginBody.getSocialCode(),
|
||||
loginBody.getSocialState(), socialProperties);
|
||||
if (!response.ok()) {
|
||||
throw new ServiceException(response.getMsg());
|
||||
}
|
||||
|
||||
AuthUser authUserData = response.getData();
|
||||
|
||||
// WxAuthResponse response1 = wxAuthService.getAccessTokenByCode(loginBody.getSocialCode());
|
||||
// String OpenId=response1.getOpenid();
|
||||
Member member = Member.builder().id(memberId).openId(authUserData.getUuid()).build();
|
||||
service.updateById(member);
|
||||
// 更新用户的微信信息
|
||||
// 返回给前端
|
||||
return R.ok(authUserData.getToken());
|
||||
}
|
||||
|
||||
@Operation(summary = "充值")
|
||||
@Log(title = "新增 ", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/charge")
|
||||
public R charge(@RequestBody ChargeBO bo) {
|
||||
|
||||
//获取用户信息
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
Long memberId = loginUser.getUserId();
|
||||
bo.setMemberId(memberId);
|
||||
|
||||
return R.ok(chargeService.charge(chargeConvert.toPo(bo)));
|
||||
}
|
||||
@Operation(summary = "提现")
|
||||
@Log(title = "提现 ", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/withdraw")
|
||||
public R withdraw(@RequestBody WithdrawBO bo) {
|
||||
//获取用户信息
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
Long memberId = loginUser.getUserId();
|
||||
bo.setMemberId(memberId);
|
||||
bo.setType(WithdrawType.WALLET.getCode());
|
||||
Withdraw withdraw=withdrawConvert.toPo(bo);
|
||||
InitiateBatchTransferResponseNew responseNew= withdrawService.withdraw(withdraw);
|
||||
return R.ok(responseNew);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@RateLimiter(key = "#phonenumber", time = 60, count = 1)
|
||||
@GetMapping("/sms/code")
|
||||
@Operation(summary = "给当前登录会员的手机号发送短信验证码")
|
||||
public R smsCode(@RequestParam String templateId) {
|
||||
service.smsCode(templateId);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Operation(summary = "用户注销")
|
||||
@Log(title = "用户注销 ", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/revoked")
|
||||
public R revoked(@RequestParam String smsCode) {
|
||||
service.revoked(smsCode);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Operation(summary = "关注用户")
|
||||
@Log(title = "关注用户 ", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/follow")
|
||||
public R follow(@RequestParam Long vloggerId) {
|
||||
LoginUser loginUser= LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
fansService.doFollow(loginUser.getUserId(), vloggerId);
|
||||
return R.ok();
|
||||
}
|
||||
@Operation(summary = "取消关注")
|
||||
@Log(title = "取消关注 ", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/cancel")
|
||||
public R cancelFollow(@RequestParam Long vloggerId) {
|
||||
LoginUser loginUser= LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
fansService.doCancel(loginUser.getUserId(), vloggerId);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
}
|
122
ruoyi-admin/src/main/java/org/dromara/app/AppPayController.java
Normal file
122
ruoyi-admin/src/main/java/org/dromara/app/AppPayController.java
Normal file
@ -0,0 +1,122 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.wzj.soopin.transaction.business.IChargeBusiness;
|
||||
import com.wzj.soopin.transaction.domain.bo.ChargeBO;
|
||||
import com.wzj.soopin.transaction.enums.PaymentClientEnum;
|
||||
import com.wzj.soopin.transaction.enums.PaymentMethodEnum;
|
||||
import com.wzj.soopin.transaction.kit.CashierSupport;
|
||||
import com.wzj.soopin.transaction.kit.dto.PayParam;
|
||||
import com.wzj.soopin.transaction.kit.params.dto.CashierParam;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.constant.ResultCode;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
|
||||
/**
|
||||
* 买家端,收银台接口
|
||||
*
|
||||
* @author Chopper
|
||||
* @since 2020-12-18 16:59
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@Tag(name = "收银台接口")
|
||||
@RequestMapping("/app/payment")
|
||||
@RequiredArgsConstructor
|
||||
public class AppPayController {
|
||||
|
||||
private final IChargeBusiness chargeBusiness;
|
||||
private final CashierSupport cashierSupport;
|
||||
|
||||
|
||||
// @ApiImplicitParams({
|
||||
// @ApiImplicitParam(name = "client", value = "客户端类型", paramType = "path", allowableValues = "PC,H5,WECHAT_MP,APP")
|
||||
// })
|
||||
@PostMapping(value = "/tradeDetail")
|
||||
@Operation(summary = "获取支付详情")
|
||||
public R paymentParams(@RequestBody @Validated PayParam payParam) {
|
||||
|
||||
CashierParam cashierParam = cashierSupport.cashierParam(payParam);
|
||||
return R.ok( cashierParam);
|
||||
}
|
||||
|
||||
|
||||
@Parameters({
|
||||
@Parameter(name = "paymentMethod", description = "支付方式", allowReserved = true, schema = @Schema(allowableValues = {"WECHAT", "ALIPAY"})),
|
||||
@Parameter(name = "paymentClient", description = "调起方式", allowReserved = true, schema = @Schema(allowableValues = {"APP", "NATIVE", "JSAPI", "H5", "MP"}))
|
||||
})
|
||||
@PostMapping(value = "/pay")
|
||||
@Operation(summary = "支付")
|
||||
public R payment(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response,
|
||||
@RequestBody @Validated PayParam payParam, @RequestBody ChargeBO chargeBO) {
|
||||
PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.valueOf(payParam.getPaymentMethod());
|
||||
PaymentClientEnum paymentClientEnum = PaymentClientEnum.valueOf(payParam.getPaymentClient());
|
||||
|
||||
try {
|
||||
|
||||
LoginUser user = LoginHelper.getLoginUser();
|
||||
if (user == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
if(payParam.getOrderType().equals("RECHARGE")){
|
||||
//先生成充值订单
|
||||
chargeBO.setMemberId(user.getUserId());
|
||||
chargeBO.setMethod(paymentMethodEnum.getCode());
|
||||
chargeBusiness.charge(chargeBO);
|
||||
payParam.setSn(chargeBO.getCode());
|
||||
}
|
||||
|
||||
return cashierSupport.payment(paymentMethodEnum, paymentClientEnum, request, response, payParam);
|
||||
} catch (ServiceException se) {
|
||||
log.info("支付异常", se);
|
||||
throw se;
|
||||
} catch (Exception e) {
|
||||
log.error("收银台支付错误", e);
|
||||
}
|
||||
return null;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Operation(summary = "支付回调")
|
||||
@RequestMapping(value = "/callback/{paymentMethod}", method = {RequestMethod.GET, RequestMethod.POST})
|
||||
public R<Object> callback(HttpServletRequest request, @PathVariable String paymentMethod) {
|
||||
|
||||
PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.valueOf(paymentMethod);
|
||||
|
||||
cashierSupport.callback(paymentMethodEnum, request);
|
||||
|
||||
return R.ok(ResultCode.PAY_SUCCESS);
|
||||
}
|
||||
|
||||
@Operation(summary = "支付异步通知")
|
||||
@RequestMapping(value = "/notify/{paymentMethod}", method = {RequestMethod.GET, RequestMethod.POST})
|
||||
public void notify(HttpServletRequest request, @PathVariable String paymentMethod) {
|
||||
|
||||
PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.valueOf(paymentMethod);
|
||||
|
||||
cashierSupport.notify(paymentMethodEnum, request);
|
||||
|
||||
}
|
||||
|
||||
@Operation(summary = "查询支付结果")
|
||||
@PostMapping(value = "/result")
|
||||
public R<Boolean> paymentResult(@RequestBody PayParam payParam) {
|
||||
return R.ok(cashierSupport.paymentResult(payParam));
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.goods.convert.ProductCategoryConvert;
|
||||
import com.wzj.soopin.goods.domain.bo.ProductCategoryBo;
|
||||
import com.wzj.soopin.goods.domain.entity.ProductCategory;
|
||||
import com.wzj.soopin.goods.domain.vo.ProductCategoryVO;
|
||||
import com.wzj.soopin.goods.service.impl.ProductCategoryServiceImpl;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Tag(name ="商品分类")
|
||||
@RestController
|
||||
@RequestMapping("/app/product/category")
|
||||
@RequiredArgsConstructor
|
||||
public class AppProductCategoryController {
|
||||
|
||||
|
||||
private final ProductCategoryServiceImpl service;
|
||||
private final ProductCategoryConvert convert;
|
||||
|
||||
@Operation(summary = "查询商品分类列表")
|
||||
@PostMapping("page")
|
||||
public R<Page<ProductCategoryVO>> page(@RequestBody ProductCategoryBo query, Page<ProductCategory> page) {
|
||||
query.setShowStatus(1);
|
||||
Page<ProductCategory> productCategoryPage = service.page(page,query.toWrapper());
|
||||
return R.ok(convert.toVO(productCategoryPage));
|
||||
}
|
||||
@Operation(summary = "查询列表")
|
||||
@PostMapping("/tree")
|
||||
public R<List<ProductCategoryVO>> tree(@RequestBody ProductCategoryBo bo ) {
|
||||
bo.setShowStatus(1);
|
||||
List<ProductCategoryVO> articleList = service.tree( bo.toWrapper());
|
||||
return R.ok( articleList);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.wzj.soopin.goods.convert.ProductConvert;
|
||||
import com.wzj.soopin.goods.domain.bo.ProductBo;
|
||||
import com.wzj.soopin.goods.domain.vo.ProductVO;
|
||||
import com.wzj.soopin.goods.service.ProductService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Tag(name ="商品")
|
||||
@RestController
|
||||
@RequestMapping("/app/product")
|
||||
@RequiredArgsConstructor
|
||||
public class AppProductController {
|
||||
|
||||
private final ProductService service;
|
||||
private final ProductConvert convert;
|
||||
private final ProductService productService;
|
||||
|
||||
@Operation(summary = "查询商品信息列表")
|
||||
@PostMapping("page")
|
||||
public R<IPage<ProductVO>> page(@RequestBody ProductBo query) {
|
||||
IPage<ProductVO> resultPage = service.getProduct(query.getPage(), query);
|
||||
return R.ok(resultPage);
|
||||
}
|
||||
|
||||
@Operation(summary = "获取商品信息详细信息")
|
||||
@GetMapping(value = "/{id}")
|
||||
public R<ProductVO> getInfo(@PathVariable("id") Long id) {
|
||||
return R.ok(service.selectById(id));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.content.domain.bo.SearchBO;
|
||||
import com.wzj.soopin.content.enums.SearchTypeEnum;
|
||||
import com.wzj.soopin.content.service.VlogService;
|
||||
import com.wzj.soopin.goods.domain.bo.ProductBo;
|
||||
import com.wzj.soopin.goods.service.ProductService;
|
||||
import com.wzj.soopin.member.domain.bo.MemberBO;
|
||||
import com.wzj.soopin.member.service.IMemberService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/app/common/search")
|
||||
@Tag(name = "公共检索")
|
||||
@RequiredArgsConstructor
|
||||
public class AppSearchController {
|
||||
|
||||
private final ProductService productService;
|
||||
private final IMemberService memberService;
|
||||
private final VlogService vlogService;
|
||||
|
||||
@Operation(summary = "视频、商品和用户检索")
|
||||
@PostMapping("")
|
||||
public R<IPage<?>> search(@RequestBody SearchBO searchBO, @RequestBody Page page) {
|
||||
try {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
searchBO.setUserId(String.valueOf(loginUser.getUserId()));
|
||||
} catch (Exception e) {
|
||||
log.error("用户没登陆", e);
|
||||
}
|
||||
if(searchBO.getTitle()==null || "".equals(searchBO.getTitle())){
|
||||
throw new ServiceException("请输入检索内容");
|
||||
}
|
||||
|
||||
IPage<?> pages = null;
|
||||
// 视频检索信息
|
||||
if (Objects.nonNull(searchBO) && Objects.nonNull(searchBO.getType()) && (SearchTypeEnum.VIDEO.type.intValue() == searchBO.getType().intValue())) {
|
||||
pages = vlogService.getIndexSearchVlogList(searchBO, page);
|
||||
// 商品检索信息
|
||||
} else if (Objects.nonNull(searchBO) && Objects.nonNull(searchBO.getType()) && (SearchTypeEnum.PRODUCT.type.intValue() == searchBO.getType().intValue())) {
|
||||
ProductBo productBo = new ProductBo();
|
||||
productBo.setNameLike(searchBO.getTitle());
|
||||
pages = productService.getProduct(page, productBo);
|
||||
// 用户检索信息
|
||||
} else if (Objects.nonNull(searchBO) && Objects.nonNull(searchBO.getType()) && (SearchTypeEnum.MEMBER.type.intValue() == searchBO.getType().intValue())) {
|
||||
MemberBO memberBO = new MemberBO();
|
||||
memberBO.setNickname(searchBO.getTitle());
|
||||
memberBO.setPhone(searchBO.getTitle());
|
||||
pages = memberService.getMemberPageList(memberBO, page);
|
||||
}
|
||||
return R.ok(pages);
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.wzj.soopin.transaction.convert.WithdrawConvert;
|
||||
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
|
||||
import com.wzj.soopin.transaction.enums.WithdrawType;
|
||||
import com.wzj.soopin.transaction.service.IWithdrawService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@Tag(name = "租户")
|
||||
@RestController
|
||||
@RequestMapping("/app/tenant")
|
||||
@RequiredArgsConstructor
|
||||
public class AppTenantController {
|
||||
|
||||
private final IWithdrawService withdrawService;
|
||||
private final WithdrawConvert withdrawConvert;
|
||||
@Operation(summary = "提现")
|
||||
@Log(title = "提现 ", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/withdraw")
|
||||
public R withdraw(@RequestBody WithdrawBO bo) {
|
||||
//获取用户信息
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
Long memberId = loginUser.getUserId();
|
||||
bo.setMemberId(memberId);
|
||||
bo.setType(WithdrawType.REVENUE.getCode());
|
||||
return R.ok(withdrawService.withdraw(withdrawConvert.toPo(bo)));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.system.domain.SysVersion;
|
||||
import org.dromara.system.domain.bo.SysVersionBo;
|
||||
import org.dromara.system.domain.vo.SysVersionVo;
|
||||
import org.dromara.system.service.ISysVerisonService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/app/version")
|
||||
public class AppVersionController {
|
||||
|
||||
|
||||
private final ISysVerisonService sysVerisonService;
|
||||
|
||||
@Operation(summary = "查询app版本管理")
|
||||
@PostMapping("/page")
|
||||
public R<IPage<SysVersionVo>> list(@RequestBody SysVersionBo query, Page<SysVersion> page){
|
||||
return R.ok(sysVerisonService.getList(page,query));
|
||||
}
|
||||
|
||||
}
|
190
ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java
Normal file
190
ruoyi-admin/src/main/java/org/dromara/app/AppVlogController.java
Normal file
@ -0,0 +1,190 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.content.domain.bo.*;
|
||||
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
|
||||
import com.wzj.soopin.content.enums.VlogStatusEnum;
|
||||
import com.wzj.soopin.content.enums.YesOrNo;
|
||||
import com.wzj.soopin.content.service.IVlogPullService;
|
||||
import com.wzj.soopin.content.service.VlogService;
|
||||
import com.wzj.soopin.content.service.VlogUploadService;
|
||||
import com.wzj.soopin.content.utils.QcCloud;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.redis.redis.RedisCache;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Tag(name = "VlogController 短视频相关业务功能的接口")
|
||||
@RequestMapping("/app/vlog")
|
||||
@RestController
|
||||
@AllArgsConstructor
|
||||
public class AppVlogController {
|
||||
private final VlogService vlogService;
|
||||
private final QcCloud qcCloud;
|
||||
private final VlogUploadService vlogUploadService;
|
||||
public final RedisCache cache;
|
||||
|
||||
private final IVlogPullService pullService;
|
||||
|
||||
@Operation(summary = "首页视频列表")
|
||||
@PostMapping("/indexList")
|
||||
@SaIgnore
|
||||
public R<Page<IndexVlogVO>> indexList(@RequestBody IndexListBO bo, @RequestBody Page page) {
|
||||
Page<IndexVlogVO> pages = pullService.pullFromMq(page);
|
||||
return R.ok(pages);
|
||||
}
|
||||
|
||||
@Operation(summary = "视频详情")
|
||||
@GetMapping("/detail/{vlogId}")
|
||||
public R<Object> detail(@PathVariable String vlogId) {
|
||||
|
||||
return R.ok(vlogService.getVlogDetailById(vlogId));
|
||||
}
|
||||
|
||||
@Operation(summary = "修改视频为私密")
|
||||
@PostMapping("/changeToPrivate")
|
||||
public R<Void> changeToPrivate(@RequestParam String vlogId) {
|
||||
vlogService.changeToPrivateOrPublic(vlogId, YesOrNo.YES.type);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Operation(summary = "修改视频为公开")
|
||||
@PostMapping("/changeToPublic")
|
||||
public R<Void> changeToPublic(@RequestParam String vlogId) {
|
||||
vlogService.changeToPrivateOrPublic(vlogId, YesOrNo.NO.type);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "我的私密视频列表")
|
||||
@PostMapping("/myPrivateList")
|
||||
public R<Page<IndexVlogVO>> myPrivateList(@RequestBody MyListBO bo, @RequestBody Page page) {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
bo.setUserId(String.valueOf(loginUser.getUserId()));
|
||||
Page<IndexVlogVO> pages = vlogService.queryMyVlogList(bo, page);
|
||||
return R.ok(pages);
|
||||
}
|
||||
|
||||
@Operation(summary = "我点赞的视频列表")
|
||||
@PostMapping("/myLikedList")
|
||||
public R<Page<IndexVlogVO>> myLikedList(@RequestBody MyLikedVlogBO bo, @RequestBody Page page) {
|
||||
|
||||
Page<IndexVlogVO> pages = vlogService.getMyLikedVlogList(page);
|
||||
return R.ok(pages);
|
||||
}
|
||||
|
||||
@Operation(summary = "我关注人的视频列表")
|
||||
@PostMapping("/followList")
|
||||
public R<Page<IndexVlogVO>> followList(@RequestBody SimpleListBO bo, @RequestBody Page page) {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
bo.setMyId(String.valueOf(loginUser.getUserId()));
|
||||
Page<IndexVlogVO> pages = vlogService.getMyFollowVlogList(page);
|
||||
return R.ok(pages);
|
||||
}
|
||||
|
||||
@Operation(summary = "好友视频列表")
|
||||
@PostMapping("/friendList")
|
||||
public R<Page<IndexVlogVO>> friendList(@RequestBody SimpleListBO bo, @RequestBody Page page) {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
bo.setMyId(String.valueOf(loginUser.getUserId()));
|
||||
Page<IndexVlogVO> pages = vlogService.getMyFriendVlogList(page);
|
||||
return R.ok(pages);
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "上传视频到云点播")
|
||||
@PostMapping("publish")
|
||||
public R<Void> publish(@RequestBody VlogBO vlogBO) throws Exception {
|
||||
vlogService.createVlog(vlogBO);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Operation(summary = "我的公开视频列表")
|
||||
@PostMapping("/myPublicList")
|
||||
public R<Page<IndexVlogVO>> myPublicList(@RequestBody MyListBO bo, @RequestBody Page page) {
|
||||
Page<IndexVlogVO> pages = vlogService.queryMyVlogList(bo, page);
|
||||
return R.ok(pages);
|
||||
}
|
||||
|
||||
@Operation(summary = "点赞")
|
||||
@PostMapping("/like")
|
||||
public R<Void> like(@RequestBody VlogBO vlogBO) {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
String userId = String.valueOf(loginUser.getUserId());
|
||||
String vlogId = vlogBO.getId();
|
||||
|
||||
vlogService.userLikeVlog(userId, vlogId);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "取消点赞")
|
||||
@PostMapping("/unlike")
|
||||
public R<Void> unlike(@RequestBody VlogBO vlogBO) {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
String userId = String.valueOf(loginUser.getUserId());
|
||||
String vlogId = vlogBO.getId();
|
||||
vlogService.userUnLikeVlog(userId, vlogId);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "删除视频")
|
||||
@GetMapping("/delete")
|
||||
public R<Void> delete(@RequestParam String id) {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
throw new ServiceException("用户未登录");
|
||||
}
|
||||
vlogService.removeById(id);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Operation(summary = "视频列表")
|
||||
@PostMapping("/page")
|
||||
public R<Page<IndexVlogVO>> page(@RequestBody VlogBO vlogBO) {
|
||||
if (vlogBO.getMemberId() == null) {
|
||||
throw new ServiceException("用户id不能为空");
|
||||
}
|
||||
vlogBO.setStatus(VlogStatusEnum.APPROVED.type);
|
||||
vlogBO.setIsPrivate(YesOrNo.NO.type);
|
||||
return R.ok(vlogService.getIndexVlogList(vlogBO, vlogBO.getPage()));
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "手动触发缓存点赞最多视频")
|
||||
@PostMapping("/cacheTopLikedVlogs")
|
||||
public R<Void> cacheTopLikedVlogs(@RequestParam(defaultValue = "100") int limit) {
|
||||
try {
|
||||
// vlogService.cacheTopLikedVlogs(limit);
|
||||
return R.ok();
|
||||
} catch (Exception e) {
|
||||
log.error("手动触发缓存点赞最多视频失败", e);
|
||||
return R.fail("缓存失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package org.dromara.app;
|
||||
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 买家端,退款回调
|
||||
*
|
||||
* @author Chopper
|
||||
* @since 2020-12-18 16:59
|
||||
*/
|
||||
@Tag(name = "买家端,退款回调")
|
||||
@RestController
|
||||
@RequestMapping("/buyer/payment/cashierRefund")
|
||||
@RequiredArgsConstructor
|
||||
public class CashierRefundController {
|
||||
|
||||
|
||||
// private final RefundSupport refundSupport;
|
||||
//
|
||||
//
|
||||
// @ApiOperation(value = "退款通知")
|
||||
// @RequestMapping(value = "/notify/{paymentMethod}", method = {RequestMethod.GET, RequestMethod.POST})
|
||||
// public void notify(HttpServletRequest request, @PathVariable String paymentMethod) {
|
||||
// PaymentMethodEnum paymentMethodEnum = PaymentMethodEnum.valueOf(paymentMethod);
|
||||
// refundSupport.notify(paymentMethodEnum, request);
|
||||
// }
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
package org.dromara.app.customer;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.wzj.soopin.content.utils.RedisOperator;
|
||||
import com.wzj.soopin.order.business.IOrderBusiness;
|
||||
import com.wzj.soopin.order.domain.bo.OrderBo;
|
||||
import com.wzj.soopin.order.domain.bo.SaveOrderBO;
|
||||
import com.wzj.soopin.order.domain.vo.OrderVO;
|
||||
import com.wzj.soopin.order.service.IMemberOrderService;
|
||||
import com.wzj.soopin.order.service.OrderService;
|
||||
import com.wzj.soopin.order.service.VerificationCodeService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Tag(name = "app-用户-订单接口")
|
||||
@RequestMapping("/app/order")
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class AppOrderController {
|
||||
|
||||
private final OrderService orderService;
|
||||
|
||||
private final IMemberOrderService memberOrderService;
|
||||
private final VerificationCodeService verificationCodeService;
|
||||
|
||||
private final IOrderBusiness orderBusiness;
|
||||
|
||||
public RedisOperator redis;
|
||||
|
||||
@Operation(summary = "查询订单列表")
|
||||
@PostMapping("/page")
|
||||
public R<IPage<OrderVO>> page(@RequestBody OrderBo bo){
|
||||
LoginUser loginUser= LoginHelper.getLoginUser();
|
||||
bo.setMemberId(loginUser.getUserId());
|
||||
return R.ok(memberOrderService.page(bo));
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "获取订单详细信息")
|
||||
@GetMapping(value = "/{id}")
|
||||
public R<OrderVO> getInfo(@PathVariable("id") Long id) {
|
||||
return R.ok(orderBusiness.info(id));
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "生成订单")
|
||||
@Log(title = "生成订单", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/add")
|
||||
public R<OrderVO> add(@RequestBody SaveOrderBO saveOrderBO) {
|
||||
return R.ok(orderService.saveOrder(saveOrderBO));
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "取消订单")
|
||||
@Log(title = "取消订单", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/cancel/{orderId}")
|
||||
public R<OrderVO> cancel(@PathVariable("orderId") Long orderId) {
|
||||
orderService.cancel(orderId);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
@Operation(summary = "发送消息")
|
||||
@Log(title = "发送消息", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/send/{orderId}")
|
||||
public R<OrderVO> send(@PathVariable("orderId") Long orderId) {
|
||||
orderService.sendMessage(orderId);
|
||||
//发出消息
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
|
||||
package org.dromara.app.customer;
|
||||
|
||||
import com.wzj.soopin.order.domain.query.GrabRedPacketRequest;
|
||||
import com.wzj.soopin.order.domain.query.SendRedPacketRequest;
|
||||
import com.wzj.soopin.transaction.service.RedPacketService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 红包功能控制器
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/app/customer/packet")
|
||||
@Tag(name = "红包功能接口")
|
||||
public class AppRedPacketController {
|
||||
|
||||
@Autowired
|
||||
private RedPacketService redPacketService;
|
||||
|
||||
/**
|
||||
* 发红包接口
|
||||
*
|
||||
* @param request 发红包请求参数
|
||||
* @return 红包创建结果
|
||||
*/
|
||||
@PostMapping("/send")
|
||||
@Operation(summary = "发红包")
|
||||
public R<Map<String, Object>> sendRedPacket(@RequestBody SendRedPacketRequest request) {
|
||||
LoginUser user = LoginHelper.getLoginUser();
|
||||
if (user == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
request.setSenderId(user.getUserId());
|
||||
Map<String, Object> result = redPacketService.sendRedPacket(request);
|
||||
return R.ok("红包发送成功", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 抢红包接口
|
||||
*
|
||||
* @return 抢红包结果
|
||||
*/
|
||||
@PostMapping("/grab")
|
||||
@Operation(summary = "抢红包")
|
||||
public R<Map<String, Object>> grabRedPacket(@RequestBody GrabRedPacketRequest request) {
|
||||
LoginUser user = LoginHelper.getLoginUser();
|
||||
if (user == null) {
|
||||
return R.notLogin();
|
||||
}
|
||||
request.setMemberId(user.getUserId());
|
||||
Map<String, Object> result = redPacketService.grabRedPacket(request);
|
||||
return R.ok("红包领取成功", result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询红包详情接口
|
||||
*
|
||||
* @return 红包详情
|
||||
*/
|
||||
@GetMapping("/refund")
|
||||
@Operation(summary = "退回红包")
|
||||
public R getRedPacketDetail() {
|
||||
redPacketService.checkAndRefundExpiredRedPackets();
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
package org.dromara.app.merchant;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.wzj.soopin.member.convert.AccountBillConvert;
|
||||
import com.wzj.soopin.member.domain.bo.AccountBillBO;
|
||||
import com.wzj.soopin.member.domain.vo.AccountBillVO;
|
||||
import com.wzj.soopin.member.domain.vo.AccountStatisticVO;
|
||||
import com.wzj.soopin.transaction.service.IAccountBillService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.system.domain.SysTenantAccount;
|
||||
import org.dromara.system.service.ISysTenantAccountService;
|
||||
import org.dromara.system.service.ISysTenantService;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 商户端,账单接口
|
||||
*
|
||||
* @author Chopper
|
||||
* @since 2020-12-18 16:59
|
||||
*/
|
||||
@Slf4j
|
||||
@Tag(name = "商户端,账单接口")
|
||||
@RequestMapping("/app/merchant/account/")
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class AppMerchantBillController {
|
||||
|
||||
private final IAccountBillService service;
|
||||
private final AccountBillConvert convert;
|
||||
|
||||
private final ISysTenantAccountService sysTenantAccountService;
|
||||
private final ISysTenantService sysTenantService;
|
||||
|
||||
private final IAccountBillService accountBillService;
|
||||
|
||||
@Tag(name = "分页列表")
|
||||
@PostMapping("/bill/page")
|
||||
public R<IPage<AccountBillVO>> page(@RequestBody AccountBillBO bo) {
|
||||
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
return R.fail("用户未登录");
|
||||
}
|
||||
if(loginUser.getTenantId() == null){
|
||||
return R.fail("用户不是商户");
|
||||
}
|
||||
//取member对应的商户
|
||||
SysTenantAccount sysTenantAccount = sysTenantAccountService.getByTenantId(loginUser.getTenantId());
|
||||
// bo.setSource(AccountTypeEnum.MERCHANT.getCode());
|
||||
bo.setAccountId(sysTenantAccount.getId());
|
||||
IPage<AccountBillVO> voPage = service.selectVoPage(bo);
|
||||
return R.ok(voPage);
|
||||
}
|
||||
|
||||
@Operation(summary = "账户统计")
|
||||
@PostMapping("/statistic")
|
||||
public R<AccountStatisticVO> statistic() {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
if (loginUser == null) {
|
||||
return R.fail("用户未登录");
|
||||
}
|
||||
if(loginUser.getTenantId() == null){
|
||||
return R.fail("用户不是商户");
|
||||
}
|
||||
//根据当前登录的member获取用户信息
|
||||
return R.ok(accountBillService.getStatistic(loginUser.getTenantId()));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package org.dromara.app.merchant;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.wzj.soopin.order.business.IOrderBusiness;
|
||||
import com.wzj.soopin.order.domain.bo.OrderItemBo;
|
||||
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
|
||||
import com.wzj.soopin.order.service.IMerchantOrderService;
|
||||
import com.wzj.soopin.order.service.VerificationCodeService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* 商户端,订单接口
|
||||
*
|
||||
* @author Chopper
|
||||
* @since 2020-12-18 16:59
|
||||
*/
|
||||
@Slf4j
|
||||
@Tag(name = "app-商户-订单接口")
|
||||
@RequestMapping("/app/merchant/order")
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class AppMerchantOrderController {
|
||||
|
||||
private final VerificationCodeService verificationCodeService;
|
||||
|
||||
private final IMerchantOrderService merchantOrderService;
|
||||
|
||||
private final IOrderBusiness orderBusiness;
|
||||
|
||||
|
||||
@Operation(summary = "获取该商家订单子项详细信息")
|
||||
@GetMapping(value = "/{orderItemId}")
|
||||
public R<MerchantOrderVO> getInfo(@PathVariable("orderItemId") Long orderItemId) {
|
||||
return R.ok(orderBusiness.itemInfo(orderItemId));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 扫码核销接口
|
||||
* @return 核销结果
|
||||
*/
|
||||
@GetMapping("/verify")
|
||||
@Operation(summary = "扫码核销接口")
|
||||
public R verifyCode(@RequestParam("code") String code) {
|
||||
verificationCodeService.verifyCode(code);
|
||||
return R.ok("核销成功");
|
||||
}
|
||||
/**
|
||||
* 查询核销码对应的订单
|
||||
* @return 核销结果
|
||||
*/
|
||||
@GetMapping("/scan")
|
||||
@Operation(summary = "查询核销码对应的订单")
|
||||
public R<MerchantOrderVO> scan(@RequestParam("code") String code) {
|
||||
return R.ok(orderBusiness.getItemInfoByVerificationCode(code));
|
||||
}
|
||||
|
||||
@PostMapping("/page")
|
||||
@Operation(summary = "查询当前商家订单列表")
|
||||
public R<IPage<MerchantOrderVO>> page(@RequestBody OrderItemBo bo){
|
||||
return R.ok(merchantOrderService.page(bo));
|
||||
}
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
package org.dromara.web.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import cn.dev33.satoken.exception.NotLoginException;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
@ -18,7 +17,10 @@ import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.model.LoginBody;
|
||||
import org.dromara.common.core.domain.model.RegisterBody;
|
||||
import org.dromara.common.core.domain.model.SocialLoginBody;
|
||||
import org.dromara.common.core.utils.*;
|
||||
import org.dromara.common.core.enums.TenantType;
|
||||
import org.dromara.common.core.utils.MessageUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.core.utils.ValidatorUtils;
|
||||
import org.dromara.common.encrypt.annotation.ApiEncrypt;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
@ -28,13 +30,9 @@ import org.dromara.common.social.utils.SocialUtils;
|
||||
import org.dromara.common.sse.dto.SseMessageDto;
|
||||
import org.dromara.common.sse.utils.SseMessageUtils;
|
||||
import org.dromara.common.tenant.helper.TenantHelper;
|
||||
import org.dromara.system.domain.bo.SysTenantBo;
|
||||
import org.dromara.system.domain.vo.SysClientVo;
|
||||
import org.dromara.system.domain.vo.SysTenantVo;
|
||||
import org.dromara.system.service.ISysClientService;
|
||||
import org.dromara.system.service.ISysConfigService;
|
||||
import org.dromara.system.service.ISysSocialService;
|
||||
import org.dromara.system.service.ISysTenantService;
|
||||
import org.dromara.system.service.*;
|
||||
import org.dromara.web.domain.vo.LoginTenantVo;
|
||||
import org.dromara.web.domain.vo.LoginVo;
|
||||
import org.dromara.web.domain.vo.TenantListVo;
|
||||
@ -44,8 +42,8 @@ import org.dromara.web.service.SysRegisterService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -72,6 +70,7 @@ public class AuthController {
|
||||
private final ISysSocialService socialUserService;
|
||||
private final ISysClientService clientService;
|
||||
private final ScheduledExecutorService scheduledExecutorService;
|
||||
private final ISysUserService userService;
|
||||
|
||||
|
||||
/**
|
||||
@ -80,7 +79,7 @@ public class AuthController {
|
||||
* @param body 登录信息
|
||||
* @return 结果
|
||||
*/
|
||||
@ApiEncrypt
|
||||
// @ApiEncrypt
|
||||
@PostMapping("/login")
|
||||
public R<LoginVo> login(@RequestBody String body) {
|
||||
LoginBody loginBody = JsonUtils.parseObject(body, LoginBody.class);
|
||||
@ -96,11 +95,8 @@ public class AuthController {
|
||||
} else if (!SystemConstants.NORMAL.equals(client.getStatus())) {
|
||||
return R.fail(MessageUtils.message("auth.grant.type.blocked"));
|
||||
}
|
||||
// 校验租户
|
||||
loginService.checkTenant(loginBody.getTenantId());
|
||||
// 登录
|
||||
LoginVo loginVo = IAuthStrategy.login(body, client, grantType);
|
||||
|
||||
Long userId = LoginHelper.getUserId();
|
||||
scheduledExecutorService.schedule(() -> {
|
||||
SseMessageDto dto = new SseMessageDto();
|
||||
@ -195,6 +191,9 @@ public class AuthController {
|
||||
|
||||
/**
|
||||
* 登录页面租户下拉框
|
||||
* 超级管理员可查看所有租户
|
||||
* 代理租户管理员可查自己租户和parentIds中包含自己的租户
|
||||
* 店铺租户和达人租户只可查看自己的租户
|
||||
*
|
||||
* @return 租户列表
|
||||
*/
|
||||
@ -209,31 +208,54 @@ public class AuthController {
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
List<SysTenantVo> tenantList = tenantService.queryList(new SysTenantBo());
|
||||
List<TenantListVo> voList = MapstructUtils.convert(tenantList, TenantListVo.class);
|
||||
try {
|
||||
// 如果只超管返回所有租户
|
||||
if (LoginHelper.isSuperAdmin()) {
|
||||
result.setVoList(voList);
|
||||
return R.ok(result);
|
||||
SysTenantVo currentTenant = tenantService.queryByTenantId(LoginHelper.getTenantId());
|
||||
String companyName = currentTenant.getCompanyName();
|
||||
if(currentTenant.getType().equals(TenantType.AGENT.getType())){
|
||||
companyName = currentTenant.getAgencyName();
|
||||
} else if (currentTenant.getType().equals(TenantType.MERCHANT.getType())) {
|
||||
companyName = currentTenant.getStoreName();
|
||||
} else if (currentTenant.getType().equals(TenantType.REFERENCE.getType())) {
|
||||
companyName = "团长:" + companyName;
|
||||
}
|
||||
} catch (NotLoginException ignored) {
|
||||
List<TenantListVo> voList = new ArrayList<>();
|
||||
voList.add(TenantListVo.builder().tenantId(currentTenant.getTenantId()).companyName(companyName).domain(currentTenant.getDomain()).build());
|
||||
List<SysTenantVo> sysTenantList = tenantService.getByParentId(currentTenant.getId());
|
||||
List<TenantListVo> childList = sysTenantList.stream().map(vo -> {
|
||||
String name = vo.getCompanyName();
|
||||
if (vo.getType().equals(TenantType.AGENT.getType())) {
|
||||
name = vo.getAgencyName();
|
||||
} else if (vo.getType().equals(TenantType.MERCHANT.getType())) {
|
||||
name = vo.getStoreName();
|
||||
} else if (vo.getType().equals(TenantType.REFERENCE.getType())) {
|
||||
name = "团长:" + name;
|
||||
}
|
||||
return TenantListVo.builder().tenantId(vo.getTenantId())
|
||||
.companyName(name)
|
||||
.domain(vo.getDomain())
|
||||
.build();
|
||||
}).toList();
|
||||
if (CollUtil.isNotEmpty(childList)) {
|
||||
voList.addAll(childList);
|
||||
}
|
||||
result.setVoList(voList);
|
||||
|
||||
// 获取域名 --- 暂时不需要
|
||||
// String host;
|
||||
// String referer = request.getHeader("referer");
|
||||
// if (StringUtils.isNotBlank(referer)) {
|
||||
// // 这里从referer中取值是为了本地使用hosts添加虚拟域名,方便本地环境调试
|
||||
// host = referer.split("//")[1].split("/")[0];
|
||||
// } else {
|
||||
// host = new URL(request.getRequestURL().toString()).getHost();
|
||||
// }
|
||||
// // 根据域名进行筛选
|
||||
// List<TenantListVo> list = StreamUtils.filter(voList, vo ->
|
||||
// StringUtils.equalsIgnoreCase(vo.getDomain(), host));
|
||||
// result.setVoList(CollUtil.isNotEmpty(list) ? list : voList);
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
// 获取域名
|
||||
String host;
|
||||
String referer = request.getHeader("referer");
|
||||
if (StringUtils.isNotBlank(referer)) {
|
||||
// 这里从referer中取值是为了本地使用hosts添加虚拟域名,方便本地环境调试
|
||||
host = referer.split("//")[1].split("/")[0];
|
||||
} else {
|
||||
host = new URL(request.getRequestURL().toString()).getHost();
|
||||
}
|
||||
// 根据域名进行筛选
|
||||
List<TenantListVo> list = StreamUtils.filter(voList, vo ->
|
||||
StringUtils.equalsIgnoreCase(vo.getDomain(), host));
|
||||
result.setVoList(CollUtil.isNotEmpty(list) ? list : voList);
|
||||
return R.ok(result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -56,23 +56,24 @@ public class CaptchaController {
|
||||
*
|
||||
* @param phonenumber 用户手机号
|
||||
*/
|
||||
@RateLimiter(key = "#phonenumber", time = 60, count = 1)
|
||||
// @RateLimiter(key = "#phonenumber", time = 60, count = 1)
|
||||
@GetMapping("/resource/sms/code")
|
||||
public R<Void> smsCode(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) {
|
||||
public R<String> smsCode(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) {
|
||||
String key = GlobalConstants.CAPTCHA_CODE_KEY + phonenumber;
|
||||
String code = RandomUtil.randomNumbers(4);
|
||||
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
|
||||
// 验证码模板id 自行处理 (查数据库或写死均可)
|
||||
String templateId = "";
|
||||
String templateId = "2375314";
|
||||
LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
|
||||
map.put("code", code);
|
||||
SmsBlend smsBlend = SmsFactory.getSmsBlend("config1");
|
||||
SmsBlend smsBlend = SmsFactory.getSmsBlend("config2");
|
||||
SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, templateId, map);
|
||||
if (!smsResponse.isSuccess()) {
|
||||
log.error("验证码短信发送异常 => {}", smsResponse);
|
||||
return R.fail(smsResponse.getData().toString());
|
||||
}
|
||||
return R.ok();
|
||||
log.info("{}:验证码发送成功,验证码为:{}", phonenumber, code);
|
||||
return R.ok(code);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,12 +1,18 @@
|
||||
package org.dromara.web.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.wzj.soopin.order.service.OrderService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.web.service.IndexService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 首页
|
||||
*
|
||||
@ -17,6 +23,9 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RestController
|
||||
public class IndexController {
|
||||
|
||||
|
||||
private final IndexService indexService;
|
||||
|
||||
/**
|
||||
* 访问首页,提示语
|
||||
*/
|
||||
@ -25,4 +34,25 @@ public class IndexController {
|
||||
return StringUtils.format("欢迎使用{}后台管理框架,请通过前端地址访问。", SpringUtils.getApplicationName());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取数量统计
|
||||
*/
|
||||
|
||||
@GetMapping("/count")
|
||||
public R getCount() {
|
||||
return R.ok(indexService.getCount());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取今日待办任务
|
||||
*/
|
||||
|
||||
/**
|
||||
* 获取流量概括
|
||||
*/
|
||||
/**
|
||||
* 获取今日概括
|
||||
*/
|
||||
|
||||
}
|
||||
|
@ -51,4 +51,11 @@ public class LoginVo {
|
||||
*/
|
||||
private String openid;
|
||||
|
||||
/**
|
||||
* 用户 sig
|
||||
*/
|
||||
private String userSig;
|
||||
|
||||
private Long userId;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,8 @@
|
||||
package org.dromara.web.domain.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.system.domain.vo.SysTenantVo;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
@ -11,6 +14,9 @@ import lombok.Data;
|
||||
*/
|
||||
@Data
|
||||
@AutoMapper(target = SysTenantVo.class)
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class TenantListVo {
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,9 @@
|
||||
package org.dromara.web.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface IndexService {
|
||||
|
||||
Map<String, Object> getCount();
|
||||
|
||||
}
|
@ -7,6 +7,7 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.Opt;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.lock.annotation.Lock4j;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhyd.oauth.model.AuthUser;
|
||||
@ -18,6 +19,7 @@ import org.dromara.common.core.domain.dto.PostDTO;
|
||||
import org.dromara.common.core.domain.dto.RoleDTO;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.enums.LoginType;
|
||||
import org.dromara.common.core.enums.UserType;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.exception.user.UserException;
|
||||
import org.dromara.common.core.utils.*;
|
||||
@ -36,7 +38,7 @@ import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.Date;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@ -50,6 +52,7 @@ import java.util.function.Supplier;
|
||||
@Service
|
||||
public class SysLoginService {
|
||||
|
||||
|
||||
@Value("${user.password.maxRetryCount}")
|
||||
private Integer maxRetryCount;
|
||||
|
||||
@ -63,7 +66,7 @@ public class SysLoginService {
|
||||
private final ISysDeptService deptService;
|
||||
private final ISysPostService postService;
|
||||
private final SysUserMapper userMapper;
|
||||
|
||||
private final ISysOssService ossService;
|
||||
|
||||
/**
|
||||
* 绑定第三方用户
|
||||
@ -72,6 +75,8 @@ public class SysLoginService {
|
||||
*/
|
||||
@Lock4j
|
||||
public void socialRegister(AuthUser authUserData) {
|
||||
|
||||
|
||||
String authId = authUserData.getSource() + authUserData.getUuid();
|
||||
// 第三方用户信息
|
||||
SysSocialBo bo = BeanUtil.toBean(authUserData, SysSocialBo.class);
|
||||
@ -155,10 +160,17 @@ public class SysLoginService {
|
||||
loginUser.setUserId(userId);
|
||||
loginUser.setDeptId(user.getDeptId());
|
||||
loginUser.setUsername(user.getUserName());
|
||||
if(user.getAvatar()!=null){
|
||||
SysOssVo oss=ossService.getById(user.getAvatar());
|
||||
if(oss!=null){
|
||||
loginUser.setAvatar(ossService.getById(user.getAvatar()).getUrl());
|
||||
}
|
||||
}
|
||||
loginUser.setNickname(user.getNickName());
|
||||
loginUser.setUserType(user.getUserType());
|
||||
loginUser.setMenuPermission(permissionService.getMenuPermission(userId));
|
||||
loginUser.setRolePermission(permissionService.getRolePermission(userId));
|
||||
loginUser.setUserSig(user.getUserSig());
|
||||
if (ObjectUtil.isNotNull(user.getDeptId())) {
|
||||
Opt<SysDeptVo> deptOpt = Opt.of(user.getDeptId()).map(deptService::selectDeptById);
|
||||
loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY));
|
||||
@ -171,6 +183,22 @@ public class SysLoginService {
|
||||
return loginUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建登录用户
|
||||
*/
|
||||
public LoginUser buildLoginUser(Member member) {
|
||||
LoginUser loginUser = new LoginUser();
|
||||
Long userId = member.getId();
|
||||
loginUser.setUserId(userId);
|
||||
loginUser.setAvatar(member.getAvatar());
|
||||
loginUser.setUsername(member.getUserName());
|
||||
loginUser.setNickname(member.getNickname());
|
||||
loginUser.setUserType(UserType.APP_USER.getUserType());
|
||||
loginUser.setUserSig(member.getUserSig());
|
||||
loginUser.setPhoneNumber(member.getPhoneHidden());
|
||||
return loginUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录登录信息
|
||||
*
|
||||
@ -241,8 +269,8 @@ public class SysLoginService {
|
||||
} else if (SystemConstants.DISABLE.equals(tenant.getStatus())) {
|
||||
log.info("登录租户:{} 已被停用.", tenantId);
|
||||
throw new TenantException("tenant.blocked");
|
||||
} else if (ObjectUtil.isNotNull(tenant.getExpireTime())
|
||||
&& new Date().after(tenant.getExpireTime())) {
|
||||
}else if (ObjectUtil.isNotNull(tenant.getExpireTime())
|
||||
&& LocalDateTime.now().isAfter(tenant.getExpireTime())) {
|
||||
log.info("登录租户:{} 已超过有效期.", tenantId);
|
||||
throw new TenantException("tenant.expired");
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package org.dromara.web.service.impl;
|
||||
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -47,9 +48,15 @@ public class EmailAuthStrategy implements IAuthStrategy {
|
||||
public LoginVo login(String body, SysClientVo client) {
|
||||
EmailLoginBody loginBody = JsonUtils.parseObject(body, EmailLoginBody.class);
|
||||
ValidatorUtils.validate(loginBody);
|
||||
String tenantId = loginBody.getTenantId();
|
||||
String email = loginBody.getEmail();
|
||||
String emailCode = loginBody.getEmailCode();
|
||||
// 多租户时页面不在选择租户,后端通过邮箱查询用户的默认租户
|
||||
String tenantId = userMapper.selectTenantIdByEmail(email);
|
||||
Assert.notBlank(tenantId, () -> new UserException("登录用户:" + email + " 不存在."));
|
||||
// 校验租户
|
||||
if(!"app".equals(client.getClientKey())){
|
||||
loginService.checkTenant(tenantId);
|
||||
}
|
||||
LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
|
||||
SysUserVo user = loadUserByEmail(email);
|
||||
loginService.checkLogin(LoginType.EMAIL, tenantId, user.getUserName(), () -> !validateEmailCode(tenantId, email, emailCode));
|
||||
|
@ -0,0 +1,112 @@
|
||||
package org.dromara.web.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.wzj.soopin.content.mapper.VlogMapper;
|
||||
import com.wzj.soopin.goods.mapper.ProductMapper;
|
||||
import com.wzj.soopin.member.domain.po.Feedback;
|
||||
import com.wzj.soopin.member.service.IFeedbackService;
|
||||
import com.wzj.soopin.member.service.IMemberAccountService;
|
||||
import com.wzj.soopin.order.mapper.OrderMapper;
|
||||
import com.wzj.soopin.transaction.domain.po.Withdraw;
|
||||
import com.wzj.soopin.transaction.service.IWithdrawService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.system.mapper.SysIntegralHistoryMapper;
|
||||
import org.dromara.system.mapper.SysTenantMapper;
|
||||
import org.dromara.system.mapper.SystemStatisticsMapper;
|
||||
import org.dromara.web.service.IndexService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author fxh
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class IndexServiceImpl implements IndexService {
|
||||
|
||||
|
||||
private final SysTenantMapper sysTenantMapper;
|
||||
private final VlogMapper vlogMapper;
|
||||
private final IMemberAccountService memberService;
|
||||
private final IFeedbackService feedbackService;
|
||||
private final IWithdrawService withdrawService;
|
||||
private final SystemStatisticsMapper systemStatisticsMapper;
|
||||
private final SysIntegralHistoryMapper sysIntegralHistoryMapper;
|
||||
private final ProductMapper productMapper;
|
||||
private final OrderMapper orderMapper;
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getCount() {
|
||||
Map<String, Object> result = new HashMap<>(16);
|
||||
|
||||
//(用户、视频、举报、提现)
|
||||
addBasicStatistics(result);
|
||||
|
||||
//(商品、店铺、订单)
|
||||
addCompositeStatistics(result);
|
||||
|
||||
// Top20排行榜
|
||||
addTop20Statistics(result);
|
||||
|
||||
// 月度趋势统计
|
||||
addMonthlyTrendStatistics(result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private void addBasicStatistics(Map<String, Object> result) {
|
||||
result.put("memberCount", memberService.getCount());
|
||||
|
||||
result.put("vlogCount", vlogMapper.countVlog());
|
||||
|
||||
// 待审核举报
|
||||
result.put("feedbackCount", feedbackService.count(
|
||||
new QueryWrapper<Feedback>().eq("status", 0)
|
||||
));
|
||||
|
||||
// 待审核提现
|
||||
result.put("WithdrawCount", withdrawService.count(
|
||||
new QueryWrapper<Withdraw>().eq("audit_status", 0)
|
||||
));
|
||||
}
|
||||
|
||||
private void addCompositeStatistics(Map<String, Object> result) {
|
||||
// 商品统计
|
||||
Map<String, Object> productCounts = productMapper.countProduct();
|
||||
if(productCounts!=null){
|
||||
result.put("productCount", productCounts.get("count2"));
|
||||
result.put("productAudit", productCounts.get("count1"));
|
||||
}
|
||||
|
||||
|
||||
// 店铺统计
|
||||
Map<String, Object> storeCounts = sysTenantMapper.countProduct();
|
||||
if(storeCounts!=null){
|
||||
result.put("storeCount", storeCounts.get("count1"));
|
||||
result.put("StoreAudit", storeCounts.get("count2"));
|
||||
}
|
||||
|
||||
// 订单统计
|
||||
Map<String, Object> orderCounts = orderMapper.countOrder();
|
||||
if(orderCounts!=null){
|
||||
result.put("orderCount", orderCounts.get("count1"));
|
||||
result.put("orderAudit", orderCounts.get("count2"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/** Top20排行榜 */
|
||||
private void addTop20Statistics(Map<String, Object> result) {
|
||||
result.put("top20Stores", sysTenantMapper.getTop20Stores());
|
||||
result.put("top20Product", productMapper.getTop20Product());
|
||||
}
|
||||
|
||||
/** 月度趋势统计 */
|
||||
private void addMonthlyTrendStatistics(Map<String, Object> result) {
|
||||
result.put("monthlyUserVolume", systemStatisticsMapper.getMonthlyUserVolume());
|
||||
result.put("monthlyVlog", vlogMapper.getMonthlyVlog());
|
||||
result.put("monthlyIncomeExpense", sysIntegralHistoryMapper.getIncomeExpense());
|
||||
}
|
||||
|
||||
}
|
@ -3,6 +3,7 @@ package org.dromara.web.service.impl;
|
||||
import cn.dev33.satoken.secure.BCrypt;
|
||||
import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -51,12 +52,17 @@ public class PasswordAuthStrategy implements IAuthStrategy {
|
||||
public LoginVo login(String body, SysClientVo client) {
|
||||
PasswordLoginBody loginBody = JsonUtils.parseObject(body, PasswordLoginBody.class);
|
||||
ValidatorUtils.validate(loginBody);
|
||||
String tenantId = loginBody.getTenantId();
|
||||
String username = loginBody.getUsername();
|
||||
String password = loginBody.getPassword();
|
||||
String code = loginBody.getCode();
|
||||
String uuid = loginBody.getUuid();
|
||||
|
||||
// 多租户时页面不在选择租户,后端通过用户名查询用户的默认租户
|
||||
String tenantId = userMapper.selectTenantIdByUserName(username);
|
||||
Assert.notBlank(tenantId, () -> new UserException("登录用户:" + username + " 不存在."));
|
||||
// 校验租户
|
||||
if (!"app".equals(client.getClientKey())) {
|
||||
loginService.checkTenant(tenantId);
|
||||
}
|
||||
boolean captchaEnabled = captchaProperties.getEnable();
|
||||
// 验证码开关
|
||||
if (captchaEnabled) {
|
||||
|
@ -4,14 +4,19 @@ import cn.dev33.satoken.stp.SaLoginModel;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
import com.wzj.soopin.member.mapper.MemberMapper;
|
||||
import com.wzj.soopin.member.service.MemberRegisterService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.constant.Constants;
|
||||
import org.dromara.common.core.constant.GlobalConstants;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.domain.model.RegisterBody;
|
||||
import org.dromara.common.core.domain.model.SmsLoginBody;
|
||||
import org.dromara.common.core.enums.LoginType;
|
||||
import org.dromara.common.core.enums.UserType;
|
||||
import org.dromara.common.core.exception.user.CaptchaExpireException;
|
||||
import org.dromara.common.core.exception.user.UserException;
|
||||
import org.dromara.common.core.utils.MessageUtils;
|
||||
@ -20,7 +25,6 @@ import org.dromara.common.core.utils.ValidatorUtils;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.common.redis.utils.RedisUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.common.tenant.helper.TenantHelper;
|
||||
import org.dromara.system.domain.SysUser;
|
||||
import org.dromara.system.domain.vo.SysClientVo;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
@ -42,6 +46,9 @@ public class SmsAuthStrategy implements IAuthStrategy {
|
||||
|
||||
private final SysLoginService loginService;
|
||||
private final SysUserMapper userMapper;
|
||||
private final MemberMapper memberMapper;
|
||||
private final MemberRegisterService memberRegisterService;
|
||||
|
||||
|
||||
@Override
|
||||
public LoginVo login(String body, SysClientVo client) {
|
||||
@ -50,12 +57,7 @@ public class SmsAuthStrategy implements IAuthStrategy {
|
||||
String tenantId = loginBody.getTenantId();
|
||||
String phonenumber = loginBody.getPhonenumber();
|
||||
String smsCode = loginBody.getSmsCode();
|
||||
LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
|
||||
SysUserVo user = loadUserByPhonenumber(phonenumber);
|
||||
loginService.checkLogin(LoginType.SMS, tenantId, user.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode));
|
||||
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
|
||||
return loginService.buildLoginUser(user);
|
||||
});
|
||||
LoginUser loginUser = checkUser(client, phonenumber, smsCode);
|
||||
loginUser.setClientKey(client.getClientKey());
|
||||
loginUser.setDeviceType(client.getDeviceType());
|
||||
SaLoginModel model = new SaLoginModel();
|
||||
@ -69,12 +71,63 @@ public class SmsAuthStrategy implements IAuthStrategy {
|
||||
LoginHelper.login(loginUser, model);
|
||||
|
||||
LoginVo loginVo = new LoginVo();
|
||||
loginVo.setUserId(loginUser.getUserId());
|
||||
loginVo.setAccessToken(StpUtil.getTokenValue());
|
||||
loginVo.setExpireIn(StpUtil.getTokenTimeout());
|
||||
loginVo.setClientId(client.getClientId());
|
||||
loginVo.setUserSig(loginUser.getUserSig());
|
||||
return loginVo;
|
||||
}
|
||||
|
||||
|
||||
private LoginUser checkUser(SysClientVo client, String phonenumber, String smsCode) {
|
||||
if("app".equals(client.getClientKey())){
|
||||
//会员登录
|
||||
Member member = loadMemberByPhonenumber(phonenumber);
|
||||
|
||||
//手机号登录,如果没有则创建一个
|
||||
if (member == null) {
|
||||
RegisterBody registerBody = new RegisterBody();
|
||||
registerBody.setPhoneNumber(phonenumber);
|
||||
registerBody.setCode(smsCode);
|
||||
registerBody.setUserType(UserType.APP_USER.getUserType());
|
||||
registerBody.setClientId(client.getClientId());
|
||||
registerBody.setUuid(phonenumber);
|
||||
member = memberRegisterService.register(registerBody);
|
||||
return loginService.buildLoginUser(member);
|
||||
} else {
|
||||
loginService.checkLogin(LoginType.SMS, "tenantId", member.getUserName(), () -> !validateSmsCode("tenantId", phonenumber, smsCode));
|
||||
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
|
||||
|
||||
|
||||
LoginUser user=loginService.buildLoginUser(member);
|
||||
//检查member是否绑定了用户,如果有则获取用户信息
|
||||
if(ObjectUtil.isNotEmpty(member.getUserId())){
|
||||
SysUserVo sysUser = userMapper.selectVoById(member.getUserId());
|
||||
if(ObjectUtil.isNotEmpty(sysUser)){
|
||||
user.setTenantId(sysUser.getTenantId());
|
||||
}
|
||||
}
|
||||
// 获取会员绑定团长的租户id
|
||||
if(member.getSpreadUid() != null){
|
||||
user.setReferenceTenantId(memberMapper.getReferenceTenantIdBySpreadUid(member.getSpreadUid()));
|
||||
}
|
||||
return user;
|
||||
}
|
||||
}else{
|
||||
//管理员登录
|
||||
SysUserVo user = loadUserByPhonenumber(phonenumber);
|
||||
loginService.checkLogin(LoginType.SMS, user.getTenantId(), user.getUserName(), () -> !validateSmsCode("tenantId", phonenumber, smsCode));
|
||||
|
||||
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
|
||||
return loginService.buildLoginUser(user);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkMemberLogin(){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验短信验证码
|
||||
*/
|
||||
@ -98,5 +151,19 @@ public class SmsAuthStrategy implements IAuthStrategy {
|
||||
}
|
||||
return user;
|
||||
}
|
||||
private Member loadMemberByPhonenumber(String phonenumber) {
|
||||
Member user = memberMapper.selectOne(new LambdaQueryWrapper<Member>().eq(Member::getPhoneHidden, phonenumber));
|
||||
if (ObjectUtil.isNull(user)) {
|
||||
log.info("登录用户:{} 不存在.", phonenumber);
|
||||
return null;
|
||||
} else if (org.dromara.common.core.domain.event.Constants.MEMBER_ACCOUNT_STATUS.FORBIDDEN.equals(user.getStatus())) {
|
||||
log.info("登录用户:{} 已被停用.", phonenumber);
|
||||
throw new UserException("user.blocked", phonenumber);
|
||||
} else if (org.dromara.common.core.domain.event.Constants.MEMBER_ACCOUNT_STATUS.REVOKED.equals(user.getStatus())) {
|
||||
log.warn("已注销的用户:{} 重新登录", phonenumber);
|
||||
memberMapper.updateById(Member.builder().id(user.getId()).status(org.dromara.common.core.domain.event.Constants.MEMBER_ACCOUNT_STATUS.NORMAL).build());
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -68,30 +68,22 @@ public class SocialAuthStrategy implements IAuthStrategy {
|
||||
throw new ServiceException(response.getMsg());
|
||||
}
|
||||
AuthUser authUserData = response.getData();
|
||||
if ("GITEE".equals(authUserData.getSource())) {
|
||||
// 如用户使用 gitee 登录顺手 star 给作者一点支持 拒绝白嫖
|
||||
HttpUtil.createRequest(Method.PUT, "https://gitee.com/api/v5/user/starred/dromara/RuoYi-Vue-Plus")
|
||||
.formStr(MapUtil.of("access_token", authUserData.getToken().getAccessToken()))
|
||||
.executeAsync();
|
||||
HttpUtil.createRequest(Method.PUT, "https://gitee.com/api/v5/user/starred/dromara/RuoYi-Cloud-Plus")
|
||||
.formStr(MapUtil.of("access_token", authUserData.getToken().getAccessToken()))
|
||||
.executeAsync();
|
||||
}
|
||||
// if ("GITEE".equals(authUserData.getSource())) {
|
||||
// // 如用户使用 gitee 登录顺手 star 给作者一点支持 拒绝白嫖
|
||||
// HttpUtil.createRequest(Method.PUT, "https://gitee.com/api/v5/user/starred/dromara/RuoYi-Vue-Plus")
|
||||
// .formStr(MapUtil.of("access_token", authUserData.getToken().getAccessToken()))
|
||||
// .executeAsync();
|
||||
// HttpUtil.createRequest(Method.PUT, "https://gitee.com/api/v5/user/starred/dromara/RuoYi-Cloud-Plus")
|
||||
// .formStr(MapUtil.of("access_token", authUserData.getToken().getAccessToken()))
|
||||
// .executeAsync();
|
||||
// }
|
||||
|
||||
List<SysSocialVo> list = sysSocialService.selectByAuthId(authUserData.getSource() + authUserData.getUuid());
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
throw new ServiceException("你还没有绑定第三方账号,绑定后才可以登录!");
|
||||
}
|
||||
SysSocialVo social;
|
||||
if (TenantHelper.isEnable()) {
|
||||
Optional<SysSocialVo> opt = StreamUtils.findAny(list, x -> x.getTenantId().equals(loginBody.getTenantId()));
|
||||
if (opt.isEmpty()) {
|
||||
throw new ServiceException("对不起,你没有权限登录当前租户!");
|
||||
}
|
||||
social = opt.get();
|
||||
} else {
|
||||
social = list.get(0);
|
||||
}
|
||||
SysSocialVo social = list.get(0);
|
||||
|
||||
LoginUser loginUser = TenantHelper.dynamic(social.getTenantId(), () -> {
|
||||
SysUserVo user = loadUser(social.getUserId());
|
||||
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
|
||||
|
@ -1,8 +1,8 @@
|
||||
--- # 监控中心配置
|
||||
spring.boot.admin.client:
|
||||
# 增加客户端开关
|
||||
enabled: true
|
||||
url: http://localhost:9090/admin
|
||||
enabled: false
|
||||
url: http://82.168.1.65:9090/admin
|
||||
instance:
|
||||
service-host-type: IP
|
||||
metadata:
|
||||
@ -13,13 +13,13 @@ spring.boot.admin.client:
|
||||
|
||||
--- # snail-job 配置
|
||||
snail-job:
|
||||
enabled: true
|
||||
enabled: false
|
||||
# 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务
|
||||
group: "ruoyi_group"
|
||||
# SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config` 表
|
||||
token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT"
|
||||
server:
|
||||
host: 127.0.0.1
|
||||
host: 192.168.1.65
|
||||
port: 17888
|
||||
# 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段
|
||||
namespace: ${spring.profiles.active}
|
||||
@ -49,9 +49,9 @@ spring:
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
|
||||
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
|
||||
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
username: root
|
||||
password: root
|
||||
url: jdbc:mysql://82.156.121.2:13306/soopin?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
username: wzj
|
||||
password: A085F27A43B0
|
||||
# # 从库数据源
|
||||
# slave:
|
||||
# lazy: true
|
||||
@ -92,19 +92,19 @@ spring:
|
||||
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
|
||||
maxLifetime: 1800000
|
||||
# 多久检查一次连接的活性
|
||||
keepaliveTime: 30000
|
||||
keepaliveTime: 300000
|
||||
|
||||
--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
|
||||
spring.data:
|
||||
redis:
|
||||
# 地址
|
||||
host: localhost
|
||||
host: 82.156.121.2
|
||||
# 端口,默认为6379
|
||||
port: 6379
|
||||
port: 26379
|
||||
# 数据库索引
|
||||
database: 0
|
||||
# redis 密码必须配置
|
||||
password: ruoyi123
|
||||
# 密码(如没有密码请注释掉)
|
||||
password: e4ea0caebfd2
|
||||
# 连接超时时间
|
||||
timeout: 10s
|
||||
# 是否开启ssl
|
||||
@ -133,6 +133,30 @@ redisson:
|
||||
# 发布和订阅连接池大小
|
||||
subscriptionConnectionPoolSize: 50
|
||||
|
||||
--- # RocketMQ 配置
|
||||
rocketmq:
|
||||
# RocketMQ 服务器地址
|
||||
name-server: 82.156.121.2:9876
|
||||
# 生产者配置
|
||||
producer:
|
||||
# 生产者组名
|
||||
group: wzj_dev
|
||||
# 发送消息超时时间
|
||||
send-message-timeout: 30000
|
||||
# 消息最大长度
|
||||
max-message-size: 4194304
|
||||
# 消息发送失败重试次数
|
||||
retry-times-when-send-failed: 3
|
||||
# 异步消息发送失败重试次数
|
||||
retry-times-when-send-async-failed: 3
|
||||
# 消费者配置
|
||||
consumer:
|
||||
# 拉取消息最大数量
|
||||
pull-batch-size: 10
|
||||
# 消费者组 (系统模块)
|
||||
group: wzj_dev
|
||||
# 是否启动消费者
|
||||
enabled: true
|
||||
--- # mail 邮件发送
|
||||
mail:
|
||||
enabled: false
|
||||
@ -182,84 +206,75 @@ sms:
|
||||
config2:
|
||||
# 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
|
||||
supplier: tencent
|
||||
access-key-id: 您的accessKey
|
||||
access-key-secret: 您的accessKeySecret
|
||||
signature: 您的短信签名
|
||||
sdk-app-id: 您的sdkAppId
|
||||
access-key-id: AKIDvhEVWHm0xe5JGxOZXGitnRovlKcfRzIN
|
||||
access-key-secret: qPhiTxA7oENFrCH5dvxiCQN4UdWAYgYA
|
||||
signature: 无终街天津科技
|
||||
sdk-app-id: 1400966042
|
||||
|
||||
|
||||
--- # 三方授权
|
||||
justauth:
|
||||
# 前端外网访问地址
|
||||
address: http://localhost:80
|
||||
address: http://82.156.121.2:8880/
|
||||
type:
|
||||
maxkey:
|
||||
# maxkey 服务器地址
|
||||
# 注意 如下均配置均不需要修改 maxkey 已经内置好了数据
|
||||
server-url: http://sso.maxkey.top
|
||||
client-id: 876892492581044224
|
||||
client-secret: x1Y5MTMwNzIwMjMxNTM4NDc3Mzche8
|
||||
redirect-uri: ${justauth.address}/social-callback?source=maxkey
|
||||
topiam:
|
||||
# topiam 服务器地址
|
||||
server-url: http://127.0.0.1:1898/api/v1/authorize/y0q************spq***********8ol
|
||||
client-id: 449c4*********937************759
|
||||
client-secret: ac7***********1e0************28d
|
||||
redirect-uri: ${justauth.address}/social-callback?source=topiam
|
||||
scopes: [openid, email, phone, profile]
|
||||
qq:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=qq
|
||||
union-id: false
|
||||
weibo:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=weibo
|
||||
gitee:
|
||||
client-id: 91436b7940090d09c72c7daf85b959cfd5f215d67eea73acbf61b6b590751a98
|
||||
client-secret: 02c6fcfd70342980cd8dd2f2c06c1a350645d76c754d7a264c4e125f9ba915ac
|
||||
redirect-uri: ${justauth.address}/social-callback?source=gitee
|
||||
dingtalk:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=dingtalk
|
||||
baidu:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=baidu
|
||||
csdn:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=csdn
|
||||
coding:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=coding
|
||||
coding-group-name: xx
|
||||
oschina:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=oschina
|
||||
alipay_wallet:
|
||||
alipay_wallet: # 支付宝钱包
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet
|
||||
alipay-public-key: MIIB**************DAQAB
|
||||
wechat_open:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
wechat_open: # 微信开放平台
|
||||
client-id: wxebcdaea31881caab
|
||||
client-secret: 71826d76bad096ec5407897c6ed1391f
|
||||
redirect-uri: ${justauth.address}/social-callback?source=wechat_open
|
||||
wechat_mp:
|
||||
wechat_mp: # 微信小程序
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=wechat_mp
|
||||
wechat_enterprise:
|
||||
wechat_enterprise: # 微信企业
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=wechat_enterprise
|
||||
agent-id: 1000002
|
||||
gitlab:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=gitlab
|
||||
|
||||
|
||||
# 腾讯云IM配置
|
||||
tencent:
|
||||
im:
|
||||
enabled: true # 启用腾讯云IM
|
||||
sdk-app-id: 1600080789 # 你的腾讯云 SDKAppID
|
||||
secret-key: "311b5309d714a20f7f5b54360ee21b1e24ec208ebcd25ce8f47d24753bccc091" # 你的密钥
|
||||
administrator: "administrator" # 管理员账号
|
||||
expire-time: 604800 # UserSig 过期时间(7天,单位:秒)
|
||||
# mongodb
|
||||
data:
|
||||
mongodb:
|
||||
uri: 82.156.121.2:37017
|
||||
database: wzj-shop
|
||||
username: admin
|
||||
password: A1969bf8
|
||||
authentication-database: admin
|
||||
# replica-set-name: mongoreplset
|
||||
|
||||
easypay:
|
||||
api-path-prefix: https://d-phoenix-gap.easypay.com.cn:24443/yqt
|
||||
req-id: D01X66666667068
|
||||
certificate-id: 20250917
|
||||
mcht-code: 631000000003325
|
||||
easypay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArgVerkGaSEQvZIOpLjeUoVpL0lSYLc04+txtPFtfm5r5XFbaNaf5Ahu0lziGEwWzrGONThSsnb3U9pqoY6BpqviN4h+Guw5oEdHr1T/eDkQD5urgQUaZA6lDoU9XC662r+0kpbKidvXIsK2CrShN+BF8HEJmRZuhglxh25OHWIWqQiUDjLZC+QJRZqUu9Uzy9RBBu7qa0f0xbqYl3hnYi+vH++SsyOavO2gUVQyKU5Kkt5ZJVpZFQvD3BXePgwJSpsvrjhj0hiYp2v6PScN9XHP1vXB4wtIYSFYwmVus1KkV/LfDzUm6zHjliHYTVl6lPMhveIVJlRIqInRZRHxg5QIDAQAB
|
||||
merRsaPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCc1mku1mtfTc1vZM9z3TkRMZ9SaKP+6MdoQhjDHB9vJUOuG2Jnegej4gtzcm8MVYomV1azJMtCbPq4PN9aHegH13JthvrUPR3nAKp8AUp9Fh47ded//snNyAf7C7o8xKN5e7n89ROwacCAL2QDno76ngXzQQVj1TxY9pBdekZ03ezuDk1sv/u4FBlW8kRyaVdqyl4FdvP+EEljDe8gGxRikLyb3cK1B6G7w2BXgM/svft5SOoiqStx2XvgHRrFRB5w96TdoKNH9yxHU2clMJiz+5cej1VL6OHZspuY3cnPyJtyS+weYjDT+COLLBUe9UwbOV15DXDNpBLd34W4GiqtAgMBAAECggEAYaVwmVOwSAblp7wJGScb16OggStbJ2MAe93jEt7Yh1eZGrY7/xbP2O3smTUfBHvhZlusRB7dWf8F3l0v5iiGhRNTT/PhCPEARAl7G3emS9jQe869kkgslq06ose7bQg0i3dH5cEkQAqnameXClXWyRxHshrCY1SonO7uFPUDFtD2Z9GHu6dOWkOHfX7UETHV5/NTSqvner5M2YNsV/5To87zrmaeeNyvu91JgJSYofTD8IcMyhxcswxB9F3ECP7nulLDdCV+9mvE9zO0i4mPBxYb++87J0pu35TN9OY+gpiCK3Ed0gDqvvkTiCQEFu6y7OiqsQwy03CE5hAwWZR2YQKBgQDdb6e7+FWJSr9fIknfvZPPtKmbEkMHP1RYnVo3pmuVm14Z3UmostiSBRPMfVjeOX0N82SONM9P+1v9SDgSK3pL8rlk9Hx6D5KI7uj2IMtTVt00pO31KtxDLmXfgapDbWHK1RGEn1PDrnKYy5yOKJ8n0Wgp4lVEPIBN6uIud0A9iQKBgQC1UXdhEXFETyqEYWb9OnWbBjiVIw3D2/qW5c+WQGsHYdMEImC/0oTWIH9fKd4Azf26JjZ9nQvs5VcijJP6BXbGPqir5NgGVkwCj33PoNg4dDgIVE4BYaSp//7B6jCi5QiRTzCSOmUSkZ5L1Kz4SNEDe9r0MpLhxrsAzmR9aEJ/BQKBgHI71Ks63F2cSwd39+ZNtYA0cj7Gd/+4IvooCs+kseGXKj9rkkFOKj2CEwmuLHdP7vyQcHKQOdbIFFegtxRgi5G8oPm8yq5pdC3iGhpHJr1SlYFACGYu+zxJJlLcYIqyVf2+V3A0hZDwYLwEZjpMKHbxJ6xbz6MJFyObJZ3U9TYJAoGANXoGjJF5Z501u/+CQZN5VjSagZnqGGcL3G+BLx5msrGua9y7zjeHyCOjjWyqtnAKsllM3vVvq/nkHiN6DVaJNmUKmFARSqUvG944TAFzZAsa75H1w8CJsT34ZDbvC0wjn7/MYoRohPZ/ynu6XCwVwUJJTJaR7ZcQVmeJCdezLQUCgYEAszix6V9oL80Clb1nMwIly6I78+pcFKyk82yXxvySb6XPJvgoasbz9xYIeKlPyy6r8Aj/ujz5GVtDtkE6n6bsjekCdnUKUY3uTvFAX+YGQkuZnaPoisELJFI2Hal22tNnJyCOYh//AGAiHYpHNUKD4hsKBb45MhK1xwvTHpuLkdc=
|
||||
trade-backUrl: http://82.156.121.2:8880/trans/easypay/trade/callback
|
||||
wechat:
|
||||
pay:
|
||||
v3:
|
||||
mch-id: 1658665710 # 商户号
|
||||
mch-serial-no: 6BA681D9B219034D6F7851F57D61BE9317AB48FD # 商户证书序列号
|
||||
api-v3-key: T9iE71aHSmjtM35z4bDLuU3gFX8s2I2h # APIv3密钥
|
||||
private-key-path: "classpath:cert/apiclient_key.pem" # 商户私钥文件路径
|
||||
transfer-notify-url: https://wuzhongjie.com.cn/prod-api/api/transfer/callback # 转账回调地址
|
||||
app-id: wxebcdaea31881caab # 应用ID
|
||||
secret: 86fbcab880e4066ac5c75af6f4f003c2 # 应用密钥
|
||||
mini-program:
|
||||
# app-id: wx87a5db19138da60d
|
||||
# secret: 856ca8bae38ccaecc1353c9abedf6b41
|
||||
app-id: wx2fb87f0f1f05d314
|
||||
secret: 86fbcab880e4066ac5c75af6f4f003c2
|
||||
|
281
ruoyi-admin/src/main/resources/application-local.yml
Normal file
281
ruoyi-admin/src/main/resources/application-local.yml
Normal file
@ -0,0 +1,281 @@
|
||||
--- # 监控中心配置
|
||||
spring.boot.admin.client:
|
||||
# 增加客户端开关
|
||||
enabled: false
|
||||
url: http://43.143.227.203:9090/admin
|
||||
instance:
|
||||
service-host-type: IP
|
||||
metadata:
|
||||
username: ${spring.boot.admin.client.username}
|
||||
userpassword: ${spring.boot.admin.client.password}
|
||||
username: @monitor.username@
|
||||
password: @monitor.password@
|
||||
|
||||
--- # snail-job 配置
|
||||
snail-job:
|
||||
enabled: false
|
||||
# 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务
|
||||
group: "ruoyi_group"
|
||||
# SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config` 表
|
||||
token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT"
|
||||
server:
|
||||
host: 43.143.227.203
|
||||
port: 17888
|
||||
# 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段
|
||||
namespace: ${spring.profiles.active}
|
||||
# 随主应用端口漂移
|
||||
port: 2${server.port}
|
||||
# 客户端ip指定
|
||||
host:
|
||||
# RPC类型: netty, grpc
|
||||
rpc-type: grpc
|
||||
|
||||
--- # 数据源配置
|
||||
spring:
|
||||
datasource:
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
# 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
|
||||
dynamic:
|
||||
# 性能分析插件(有性能损耗 不建议生产环境使用)
|
||||
p6spy: true
|
||||
# 设置默认的数据源或者数据源组,默认值即为 master
|
||||
primary: master
|
||||
# 严格模式 匹配不到数据源则报错
|
||||
strict: true
|
||||
datasource:
|
||||
# 主库数据源
|
||||
master:
|
||||
type: ${spring.datasource.type}
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
|
||||
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
|
||||
url: jdbc:mysql://43.143.227.203:13306/soopin?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
username: wzj
|
||||
password: A085F27A43B0
|
||||
# # 从库数据源
|
||||
# slave:
|
||||
# lazy: true
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
# username:
|
||||
# password:
|
||||
# oracle:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: oracle.jdbc.OracleDriver
|
||||
# url: jdbc:oracle:thin:@//localhost:1521/XE
|
||||
# username: ROOT
|
||||
# password: root
|
||||
# postgres:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: org.postgresql.Driver
|
||||
# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
|
||||
# username: root
|
||||
# password: root
|
||||
# sqlserver:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
|
||||
# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
|
||||
# username: SA
|
||||
# password: root
|
||||
hikari:
|
||||
# 最大连接池数量
|
||||
maxPoolSize: 20
|
||||
# 最小空闲线程数量
|
||||
minIdle: 10
|
||||
# 配置获取连接等待超时的时间
|
||||
connectionTimeout: 30000
|
||||
# 校验超时时间
|
||||
validationTimeout: 5000
|
||||
# 空闲连接存活最大时间,默认10分钟
|
||||
idleTimeout: 600000
|
||||
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
|
||||
maxLifetime: 1800000
|
||||
# 多久检查一次连接的活性
|
||||
keepaliveTime: 300000
|
||||
|
||||
--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
|
||||
spring.data:
|
||||
redis:
|
||||
# 地址
|
||||
host: 43.143.227.203
|
||||
# 端口,默认为6379
|
||||
port: 16379
|
||||
# 数据库索引
|
||||
database: 2
|
||||
# 密码(如没有密码请注释掉)
|
||||
password: e4ea0caebfd2
|
||||
# 连接超时时间
|
||||
timeout: 10s
|
||||
# 是否开启ssl
|
||||
ssl.enabled: false
|
||||
|
||||
# redisson 配置
|
||||
redisson:
|
||||
# redis key前缀
|
||||
keyPrefix:
|
||||
# 线程池数量
|
||||
threads: 4
|
||||
# Netty线程池数量
|
||||
nettyThreads: 8
|
||||
# 单节点配置
|
||||
singleServerConfig:
|
||||
# 客户端名称 不能用中文
|
||||
clientName: RuoYi-Vue-Plus
|
||||
# 最小空闲连接数
|
||||
connectionMinimumIdleSize: 8
|
||||
# 连接池大小
|
||||
connectionPoolSize: 32
|
||||
# 连接空闲超时,单位:毫秒
|
||||
idleConnectionTimeout: 10000
|
||||
# 命令等待超时,单位:毫秒
|
||||
timeout: 3000
|
||||
# 发布和订阅连接池大小
|
||||
subscriptionConnectionPoolSize: 50
|
||||
|
||||
--- # RocketMQ 配置
|
||||
rocketmq:
|
||||
# RocketMQ 服务器地址
|
||||
name-server: 43.143.227.203:9876
|
||||
# 生产者配置
|
||||
producer:
|
||||
# 生产者组名
|
||||
group: wzj_prod
|
||||
# 发送消息超时时间
|
||||
send-message-timeout: 30000
|
||||
# 消息最大长度
|
||||
max-message-size: 4194304
|
||||
# 消息发送失败重试次数
|
||||
retry-times-when-send-failed: 3
|
||||
# 异步消息发送失败重试次数
|
||||
retry-times-when-send-async-failed: 3
|
||||
# 消费者配置
|
||||
consumer:
|
||||
# 拉取消息最大数量
|
||||
pull-batch-size: 10
|
||||
# 消费者组 (系统模块)
|
||||
group: wzj_prod
|
||||
# 是否启动消费者
|
||||
enabled: false
|
||||
--- # mail 邮件发送
|
||||
mail:
|
||||
enabled: false
|
||||
host: smtp.163.com
|
||||
port: 465
|
||||
# 是否需要用户名密码验证
|
||||
auth: true
|
||||
# 发送方,遵循RFC-822标准
|
||||
from: xxx@163.com
|
||||
# 用户名(注意:如果使用foxmail邮箱,此处user为qq号)
|
||||
user: xxx@163.com
|
||||
# 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助)
|
||||
pass: xxxxxxxxxx
|
||||
# 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。
|
||||
starttlsEnable: true
|
||||
# 使用SSL安全连接
|
||||
sslEnable: true
|
||||
# SMTP超时时长,单位毫秒,缺省值不超时
|
||||
timeout: 0
|
||||
# Socket连接超时值,单位毫秒,缺省值不超时
|
||||
connectionTimeout: 0
|
||||
|
||||
--- # sms 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商
|
||||
# https://sms4j.com/doc3/ 差异配置文档地址 支持单厂商多配置,可以配置多个同时使用
|
||||
sms:
|
||||
# 配置源类型用于标定配置来源(interface,yaml)
|
||||
config-type: yaml
|
||||
# 用于标定yml中的配置是否开启短信拦截,接口配置不受此限制
|
||||
restricted: true
|
||||
# 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效
|
||||
minute-max: 1
|
||||
# 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效
|
||||
account-max: 30
|
||||
# 以下配置来自于 org.dromara.sms4j.provider.config.BaseConfig类中
|
||||
blends:
|
||||
# 唯一ID 用于发送短信寻找具体配置 随便定义别用中文即可
|
||||
# 可以同时存在两个相同厂商 例如: ali1 ali2 两个不同的阿里短信账号 也可用于区分租户
|
||||
config1:
|
||||
# 框架定义的厂商名称标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
|
||||
supplier: alibaba
|
||||
# 有些称为accessKey有些称之为apiKey,也有称为sdkKey或者appId。
|
||||
access-key-id: 您的accessKey
|
||||
# 称为accessSecret有些称之为apiSecret
|
||||
access-key-secret: 您的accessKeySecret
|
||||
signature: 您的短信签名
|
||||
sdk-app-id: 您的sdkAppId
|
||||
config2:
|
||||
# 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
|
||||
supplier: tencent
|
||||
access-key-id: AKIDvhEVWHm0xe5JGxOZXGitnRovlKcfRzIN
|
||||
access-key-secret: qPhiTxA7oENFrCH5dvxiCQN4UdWAYgYA
|
||||
signature: 无终街天津科技
|
||||
sdk-app-id: 1400966042
|
||||
|
||||
|
||||
--- # 三方授权
|
||||
justauth:
|
||||
# 前端外网访问地址
|
||||
address: http://82.156.121.2:8880/
|
||||
type:
|
||||
alipay_wallet: # 支付宝钱包
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet
|
||||
alipay-public-key: MIIB**************DAQAB
|
||||
wechat_open: # 微信开放平台
|
||||
client-id: wxebcdaea31881caab
|
||||
client-secret: 71826d76bad096ec5407897c6ed1391f
|
||||
redirect-uri: ${justauth.address}/social-callback?source=wechat_open
|
||||
wechat_mp: # 微信小程序
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=wechat_mp
|
||||
wechat_enterprise: # 微信企业
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=wechat_enterprise
|
||||
agent-id: 1000002
|
||||
|
||||
|
||||
# 腾讯云IM配置
|
||||
tencent:
|
||||
im:
|
||||
enabled: true # 启用腾讯云IM
|
||||
sdk-app-id: 1600080789 # 你的腾讯云 SDKAppID
|
||||
secret-key: "311b5309d714a20f7f5b54360ee21b1e24ec208ebcd25ce8f47d24753bccc091" # 你的密钥
|
||||
administrator: "administrator" # 管理员账号
|
||||
expire-time: 604800 # UserSig 过期时间(7天,单位:秒)
|
||||
# mongodb
|
||||
data:
|
||||
mongodb:
|
||||
uri: 82.156.121.2:37017
|
||||
database: wzj-shop
|
||||
username: admin
|
||||
password: A1969bf8
|
||||
authentication-database: admin
|
||||
# replica-set-name: mongoreplset
|
||||
|
||||
easypay:
|
||||
api-path-prefix: https://phoenix.eycard.cn/yqt
|
||||
req-id: D01X00000801861
|
||||
certificate-id: 20250917
|
||||
mcht-code: 531000022034161
|
||||
easypay-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLLVY70e67BcK4V08P+69dfBeMmMYDopf3HF9G6meqPTVxyGYlEb0XwT0UA6g8t2HzG8FaKgTFKgOvhr+EFbBcF+AYdrgFYZSjR4hWBkWiOyKC66wQ7kQhYzC4kwetcDp5TftJfSivbAC1Lm8/Gf2+ZpaDuHDPjLCFS2gQYI5dqwIDAQAB
|
||||
merRsaPrivateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDLgDEh0hsPTmHLdEYp6LCo3LMnXMLCV+wUxRn5lvcAa7gn8RZyLDGiT5WdR0SpJDbBhWL1WbnUd7dJulzjbb0N5NzrO3HntjzKIpzhfChw3BBtM3PR8xvS17Wt4vRN6JvY4w0sphKesxbHWiMHUTOzKrQBEdXasMujmxV0N9R2GzTLK0Pn4ROWCzeQQhiJ2oOc3Eqkus9/C+3LcxkU08nF/q0X/kzHGS+Gn+JL/Eo6vpQExg7rQs0mnrKvNuPPGKpyKNpRmKWtiA8GTBeFnwZlP8kYj9Z8NYxLsT6fJnqpZ8wZ++T2PS7CIIo6JSIKz0ElNrRRD2Ei7lyCZAjUBQLLAgMBAAECggEBAIRjGhOBhx8XA+IC+55KBZtlMJub6gvafPgqHbLUtk2sxjodylduTr/j/FY8RfuvVnvhFba9r3n8g93QApvmCUafq+TQYFK4qKVrjRnX1stNLtaL0X41JNWuhT/hVMPWXoTjeO+h/p0Frvzzs7QP7I1Ta5UCkFhcCa6etn9Lzskh0uXe4ylMmt5lAuvFAeIuE5icMxu4n75RXUVxaBSOKjQ0ujQWMh46ncrX0f9oGkDbWE37LF61sf2iuXpPwnIAwk/e/zOpnCi9EHOJtCJbVr+ncDRvlZsEf5hVnxYgT2bQrUrSD9An5e4zgJF6rigsDhmNfvp0W/bJnXPIIg1MYbECgYEA5MlizB9XmttiaAo9sMjAUE18cxgEq2pIU8l8WOj//XAsf64AlrlWJxpJdNYkfdRiinnRIxroo1cYx3RMWqdGbYVk+7DJBNut6R0bg0oGgJoeBFnCe/xNGsBk7MZwc4//5sfRC2rbtuYFPn8VkNB5HllhddD51L6lObAp4Uf14/MCgYEA47TX4AmgcAjhVCUvC4ZUuiqAku/suw0vkG6FNxuSYY5GezPvwWx0JviaohaIm5JkgjNNASFhx12XG+PZoPDNGi9vzotVkI69LnOdlf3imVaJR7u5H8730Thbdd5oKi66KYXJGv3hppwh7qAu8VkdMavvCT24jILNiGiA0OBOE8kCgYA5JoFSgiXNHi5X1O8SISPBK4oB6icIdtU4cOVqBFImCgZjoqCtBgEaZXuh/vhAonQ3KTTv8wHYA6LB+DA2mQCDzUWrhb7BQusPh2DfC/fR2i3TYmStuhm8rADKEMv4YilHifSTSI84Af+fW/mUIi+PQD6TQq+V0EXPwkzD5MjstwKBgQDZZ5SlBwvza8cXe9kK+9pxVJslr4UqolBDagIut1hvZFPO1auX1WCgxMN+9ly/jGoCFdDzv1eH7ceUjVr/2mk5EwmA/m9XcbEWZLSUvK5ZENJJduYthIH/c/t+8jYp8Cs18dIsvzFuzatoFfA75oWFI086V3+YSFrMXlp/E2n4YQKBgQCKiynvzcRA8GoK6ibGhwUc5lpVUOVqpIdmVG5bXbnKYoU7Jkf2pOUwzLQGKOj9KS1Z80jkZA9p22BLKD/VXF0PvGBhx1Ujpil1vd96I/KcGRsmCu3b3AxK7qzDt6Y0nVk5bN72RYq4F/iRU+ijoIAuLsyrn/e0eaJweiqzr/gK4g==
|
||||
trade-backUrl: http://43.143.227.203:8880/trans/easypay/trade/callback
|
||||
wechat:
|
||||
pay:
|
||||
v3:
|
||||
mch-id: 1658665710 # 商户号
|
||||
mch-serial-no: 6BA681D9B219034D6F7851F57D61BE9317AB48FD # 商户证书序列号
|
||||
api-v3-key: T9iE71aHSmjtM35z4bDLuU3gFX8s2I2h # APIv3密钥
|
||||
private-key-path: "classpath:cert/apiclient_key.pem" # 商户私钥文件路径
|
||||
transfer-notify-url: https://wuzhongjie.com.cn/prod-api/trans/withdraw/callback # 转账回调地址
|
||||
app-id: wxebcdaea31881caab # 应用ID
|
||||
secret: 71826d76bad096ec5407897c6ed1391f # 应用密钥
|
||||
callback-url: https://wuzhongjie.com.cn/prod-api/app/payment/callback/WECHAT
|
||||
mini-program:
|
||||
# app-id: wx87a5db19138da60d
|
||||
# secret: 856ca8bae38ccaecc1353c9abedf6b41
|
||||
app-id: wx2fb87f0f1f05d314
|
||||
secret: 86fbcab880e4066ac5c75af6f4f003c2
|
@ -1,11 +1,8 @@
|
||||
--- # 临时文件存储位置 避免临时文件被系统清理报错
|
||||
spring.servlet.multipart.location: /ruoyi/server/temp
|
||||
|
||||
--- # 监控中心配置
|
||||
spring.boot.admin.client:
|
||||
# 增加客户端开关
|
||||
enabled: true
|
||||
url: http://localhost:9090/admin
|
||||
enabled: false
|
||||
url: http://43.143.227.203:9090/admin
|
||||
instance:
|
||||
service-host-type: IP
|
||||
metadata:
|
||||
@ -16,13 +13,13 @@ spring.boot.admin.client:
|
||||
|
||||
--- # snail-job 配置
|
||||
snail-job:
|
||||
enabled: true
|
||||
enabled: false
|
||||
# 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务
|
||||
group: "ruoyi_group"
|
||||
# SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config`表
|
||||
# SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config` 表
|
||||
token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT"
|
||||
server:
|
||||
host: 127.0.0.1
|
||||
host: 43.143.227.203
|
||||
port: 17888
|
||||
# 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段
|
||||
namespace: ${spring.profiles.active}
|
||||
@ -40,7 +37,7 @@ spring:
|
||||
# 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
|
||||
dynamic:
|
||||
# 性能分析插件(有性能损耗 不建议生产环境使用)
|
||||
p6spy: false
|
||||
p6spy: true
|
||||
# 设置默认的数据源或者数据源组,默认值即为 master
|
||||
primary: master
|
||||
# 严格模式 匹配不到数据源则报错
|
||||
@ -52,35 +49,35 @@ spring:
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
|
||||
# rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题)
|
||||
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
username: root
|
||||
password: root
|
||||
# # 从库数据源
|
||||
# slave:
|
||||
# lazy: true
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
# username:
|
||||
# password:
|
||||
# oracle:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: oracle.jdbc.OracleDriver
|
||||
# url: jdbc:oracle:thin:@//localhost:1521/XE
|
||||
# username: ROOT
|
||||
# password: root
|
||||
# postgres:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: org.postgresql.Driver
|
||||
# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
|
||||
# username: root
|
||||
# password: root
|
||||
# sqlserver:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
|
||||
# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
|
||||
# username: SA
|
||||
# password: root
|
||||
url: jdbc:mysql://mysql:3306/soopin?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
username: wzj_prod
|
||||
password: Kp8$rT2*jQ6$sH4%
|
||||
# # 从库数据源
|
||||
# slave:
|
||||
# lazy: true
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
# username:
|
||||
# password:
|
||||
# oracle:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: oracle.jdbc.OracleDriver
|
||||
# url: jdbc:oracle:thin:@//localhost:1521/XE
|
||||
# username: ROOT
|
||||
# password: root
|
||||
# postgres:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: org.postgresql.Driver
|
||||
# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
|
||||
# username: root
|
||||
# password: root
|
||||
# sqlserver:
|
||||
# type: ${spring.datasource.type}
|
||||
# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
|
||||
# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
|
||||
# username: SA
|
||||
# password: root
|
||||
hikari:
|
||||
# 最大连接池数量
|
||||
maxPoolSize: 20
|
||||
@ -95,19 +92,19 @@ spring:
|
||||
# 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
|
||||
maxLifetime: 1800000
|
||||
# 多久检查一次连接的活性
|
||||
keepaliveTime: 30000
|
||||
keepaliveTime: 300000
|
||||
|
||||
--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉)
|
||||
spring.data:
|
||||
redis:
|
||||
# 地址
|
||||
host: localhost
|
||||
host: redis
|
||||
# 端口,默认为6379
|
||||
port: 6379
|
||||
# 数据库索引
|
||||
database: 0
|
||||
# redis 密码必须配置
|
||||
password: ruoyi123
|
||||
database: 2
|
||||
# 密码(如没有密码请注释掉)
|
||||
password: e4ea0caebfd2
|
||||
# 连接超时时间
|
||||
timeout: 10s
|
||||
# 是否开启ssl
|
||||
@ -118,17 +115,17 @@ redisson:
|
||||
# redis key前缀
|
||||
keyPrefix:
|
||||
# 线程池数量
|
||||
threads: 16
|
||||
threads: 4
|
||||
# Netty线程池数量
|
||||
nettyThreads: 32
|
||||
nettyThreads: 8
|
||||
# 单节点配置
|
||||
singleServerConfig:
|
||||
# 客户端名称 不能用中文
|
||||
clientName: RuoYi-Vue-Plus
|
||||
# 最小空闲连接数
|
||||
connectionMinimumIdleSize: 32
|
||||
connectionMinimumIdleSize: 8
|
||||
# 连接池大小
|
||||
connectionPoolSize: 64
|
||||
connectionPoolSize: 32
|
||||
# 连接空闲超时,单位:毫秒
|
||||
idleConnectionTimeout: 10000
|
||||
# 命令等待超时,单位:毫秒
|
||||
@ -136,6 +133,30 @@ redisson:
|
||||
# 发布和订阅连接池大小
|
||||
subscriptionConnectionPoolSize: 50
|
||||
|
||||
--- # RocketMQ 配置
|
||||
rocketmq:
|
||||
# RocketMQ 服务器地址
|
||||
name-server: rocketmq-namesrv:9876
|
||||
# 生产者配置
|
||||
producer:
|
||||
# 生产者组名
|
||||
group: wzj_prod
|
||||
# 发送消息超时时间
|
||||
send-message-timeout: 30000
|
||||
# 消息最大长度
|
||||
max-message-size: 4194304
|
||||
# 消息发送失败重试次数
|
||||
retry-times-when-send-failed: 3
|
||||
# 异步消息发送失败重试次数
|
||||
retry-times-when-send-async-failed: 3
|
||||
# 消费者配置
|
||||
consumer:
|
||||
# 拉取消息最大数量
|
||||
pull-batch-size: 10
|
||||
# 消费者组 (系统模块)
|
||||
group: wzj_prod
|
||||
# 是否启动消费者
|
||||
enabled: true
|
||||
--- # mail 邮件发送
|
||||
mail:
|
||||
enabled: false
|
||||
@ -185,83 +206,76 @@ sms:
|
||||
config2:
|
||||
# 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
|
||||
supplier: tencent
|
||||
access-key-id: 您的accessKey
|
||||
access-key-secret: 您的accessKeySecret
|
||||
signature: 您的短信签名
|
||||
sdk-app-id: 您的sdkAppId
|
||||
access-key-id: AKIDvhEVWHm0xe5JGxOZXGitnRovlKcfRzIN
|
||||
access-key-secret: qPhiTxA7oENFrCH5dvxiCQN4UdWAYgYA
|
||||
signature: 无终街天津科技
|
||||
sdk-app-id: 1400966042
|
||||
|
||||
|
||||
--- # 三方授权
|
||||
justauth:
|
||||
# 前端外网访问地址
|
||||
address: http://localhost:80
|
||||
address: http://82.156.121.2:8880/
|
||||
type:
|
||||
maxkey:
|
||||
# maxkey 服务器地址
|
||||
# 注意 如下均配置均不需要修改 maxkey 已经内置好了数据
|
||||
server-url: http://sso.maxkey.top
|
||||
client-id: 876892492581044224
|
||||
client-secret: x1Y5MTMwNzIwMjMxNTM4NDc3Mzche8
|
||||
redirect-uri: ${justauth.address}/social-callback?source=maxkey
|
||||
topiam:
|
||||
# topiam 服务器地址
|
||||
server-url: http://127.0.0.1:1989/api/v1/authorize/y0q************spq***********8ol
|
||||
client-id: 449c4*********937************759
|
||||
client-secret: ac7***********1e0************28d
|
||||
redirect-uri: ${justauth.address}/social-callback?source=topiam
|
||||
scopes: [ openid, email, phone, profile ]
|
||||
qq:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=qq
|
||||
union-id: false
|
||||
weibo:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=weibo
|
||||
gitee:
|
||||
client-id: 91436b7940090d09c72c7daf85b959cfd5f215d67eea73acbf61b6b590751a98
|
||||
client-secret: 02c6fcfd70342980cd8dd2f2c06c1a350645d76c754d7a264c4e125f9ba915ac
|
||||
redirect-uri: ${justauth.address}/social-callback?source=gitee
|
||||
dingtalk:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=dingtalk
|
||||
baidu:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=baidu
|
||||
csdn:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=csdn
|
||||
coding:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=coding
|
||||
coding-group-name: xx
|
||||
oschina:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=oschina
|
||||
alipay_wallet:
|
||||
alipay_wallet: # 支付宝钱包
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet
|
||||
alipay-public-key: MIIB**************DAQAB
|
||||
wechat_open:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
wechat_open: # 微信开放平台
|
||||
client-id: wxebcdaea31881caab
|
||||
client-secret: 71826d76bad096ec5407897c6ed1391f
|
||||
redirect-uri: ${justauth.address}/social-callback?source=wechat_open
|
||||
wechat_mp:
|
||||
wechat_mp: # 微信小程序
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=wechat_mp
|
||||
wechat_enterprise:
|
||||
wechat_enterprise: # 微信企业
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=wechat_enterprise
|
||||
agent-id: 1000002
|
||||
gitlab:
|
||||
client-id: 10**********6
|
||||
client-secret: 1f7d08**********5b7**********29e
|
||||
redirect-uri: ${justauth.address}/social-callback?source=gitlab
|
||||
|
||||
|
||||
# 腾讯云IM配置
|
||||
tencent:
|
||||
im:
|
||||
enabled: true # 启用腾讯云IM
|
||||
sdk-app-id: 1600080789 # 你的腾讯云 SDKAppID
|
||||
secret-key: "311b5309d714a20f7f5b54360ee21b1e24ec208ebcd25ce8f47d24753bccc091" # 你的密钥
|
||||
administrator: "administrator" # 管理员账号
|
||||
expire-time: 604800 # UserSig 过期时间(7天,单位:秒)
|
||||
# mongodb
|
||||
data:
|
||||
mongodb:
|
||||
uri: 82.156.121.2:37017
|
||||
database: wzj-shop
|
||||
username: admin
|
||||
password: A1969bf8
|
||||
authentication-database: admin
|
||||
# replica-set-name: mongoreplset
|
||||
|
||||
easypay:
|
||||
api-path-prefix: https://phoenix.eycard.cn/yqt
|
||||
req-id: D01X00000801861
|
||||
certificate-id: 20250917
|
||||
mcht-code: 531000022034161
|
||||
easypay-public-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLLVY70e67BcK4V08P+69dfBeMmMYDopf3HF9G6meqPTVxyGYlEb0XwT0UA6g8t2HzG8FaKgTFKgOvhr+EFbBcF+AYdrgFYZSjR4hWBkWiOyKC66wQ7kQhYzC4kwetcDp5TftJfSivbAC1Lm8/Gf2+ZpaDuHDPjLCFS2gQYI5dqwIDAQAB
|
||||
merRsaPrivateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDLgDEh0hsPTmHLdEYp6LCo3LMnXMLCV+wUxRn5lvcAa7gn8RZyLDGiT5WdR0SpJDbBhWL1WbnUd7dJulzjbb0N5NzrO3HntjzKIpzhfChw3BBtM3PR8xvS17Wt4vRN6JvY4w0sphKesxbHWiMHUTOzKrQBEdXasMujmxV0N9R2GzTLK0Pn4ROWCzeQQhiJ2oOc3Eqkus9/C+3LcxkU08nF/q0X/kzHGS+Gn+JL/Eo6vpQExg7rQs0mnrKvNuPPGKpyKNpRmKWtiA8GTBeFnwZlP8kYj9Z8NYxLsT6fJnqpZ8wZ++T2PS7CIIo6JSIKz0ElNrRRD2Ei7lyCZAjUBQLLAgMBAAECggEBAIRjGhOBhx8XA+IC+55KBZtlMJub6gvafPgqHbLUtk2sxjodylduTr/j/FY8RfuvVnvhFba9r3n8g93QApvmCUafq+TQYFK4qKVrjRnX1stNLtaL0X41JNWuhT/hVMPWXoTjeO+h/p0Frvzzs7QP7I1Ta5UCkFhcCa6etn9Lzskh0uXe4ylMmt5lAuvFAeIuE5icMxu4n75RXUVxaBSOKjQ0ujQWMh46ncrX0f9oGkDbWE37LF61sf2iuXpPwnIAwk/e/zOpnCi9EHOJtCJbVr+ncDRvlZsEf5hVnxYgT2bQrUrSD9An5e4zgJF6rigsDhmNfvp0W/bJnXPIIg1MYbECgYEA5MlizB9XmttiaAo9sMjAUE18cxgEq2pIU8l8WOj//XAsf64AlrlWJxpJdNYkfdRiinnRIxroo1cYx3RMWqdGbYVk+7DJBNut6R0bg0oGgJoeBFnCe/xNGsBk7MZwc4//5sfRC2rbtuYFPn8VkNB5HllhddD51L6lObAp4Uf14/MCgYEA47TX4AmgcAjhVCUvC4ZUuiqAku/suw0vkG6FNxuSYY5GezPvwWx0JviaohaIm5JkgjNNASFhx12XG+PZoPDNGi9vzotVkI69LnOdlf3imVaJR7u5H8730Thbdd5oKi66KYXJGv3hppwh7qAu8VkdMavvCT24jILNiGiA0OBOE8kCgYA5JoFSgiXNHi5X1O8SISPBK4oB6icIdtU4cOVqBFImCgZjoqCtBgEaZXuh/vhAonQ3KTTv8wHYA6LB+DA2mQCDzUWrhb7BQusPh2DfC/fR2i3TYmStuhm8rADKEMv4YilHifSTSI84Af+fW/mUIi+PQD6TQq+V0EXPwkzD5MjstwKBgQDZZ5SlBwvza8cXe9kK+9pxVJslr4UqolBDagIut1hvZFPO1auX1WCgxMN+9ly/jGoCFdDzv1eH7ceUjVr/2mk5EwmA/m9XcbEWZLSUvK5ZENJJduYthIH/c/t+8jYp8Cs18dIsvzFuzatoFfA75oWFI086V3+YSFrMXlp/E2n4YQKBgQCKiynvzcRA8GoK6ibGhwUc5lpVUOVqpIdmVG5bXbnKYoU7Jkf2pOUwzLQGKOj9KS1Z80jkZA9p22BLKD/VXF0PvGBhx1Ujpil1vd96I/KcGRsmCu3b3AxK7qzDt6Y0nVk5bN72RYq4F/iRU+ijoIAuLsyrn/e0eaJweiqzr/gK4g==
|
||||
trade-backUrl: http://43.143.227.203:8880/trans/easypay/trade/callback
|
||||
wechat:
|
||||
pay:
|
||||
v3:
|
||||
mch-id: 1658665710 # 商户号
|
||||
mch-serial-no: 6BA681D9B219034D6F7851F57D61BE9317AB48FD # 商户证书序列号
|
||||
api-v3-key: T9iE71aHSmjtM35z4bDLuU3gFX8s2I2h # APIv3密钥
|
||||
private-key-path: "/java/cert/apiclient_key.pem" # 商户私钥文件路径
|
||||
transfer-notify-url: https://wuzhongjie.com.cn/prod-api/trans/withdraw/callback # 转账回调地址
|
||||
app-id: wxebcdaea31881caab # 应用ID
|
||||
secret: 71826d76bad096ec5407897c6ed1391f # 应用密钥
|
||||
callback-url: https://wuzhongjie.com.cn/prod-api/app/payment/callback/WECHAT
|
||||
mini-program:
|
||||
# app-id: wx87a5db19138da60d
|
||||
# secret: 856ca8bae38ccaecc1353c9abedf6b41
|
||||
app-id: wx2fb87f0f1f05d314
|
||||
secret: 86fbcab880e4066ac5c75af6f4f003c2
|
||||
|
@ -32,13 +32,25 @@ captcha:
|
||||
# 字符验证码长度
|
||||
charLength: 4
|
||||
|
||||
pagehelper:
|
||||
helperDialect: mysql
|
||||
supportMethodsArguments: true
|
||||
params: count=countSql
|
||||
|
||||
# 日志配置
|
||||
logging:
|
||||
level:
|
||||
org.dromara: @logging.level@
|
||||
org.springframework: warn
|
||||
org.mybatis.spring.mapper: error
|
||||
org.apache.fury: warn
|
||||
com.wzj.soopin: @logging.level@
|
||||
org.apache.http.wire: @logging.level@
|
||||
org.springframework: @logging.level@
|
||||
org.mybatis.spring: @logging.level@
|
||||
com.baomidou: @logging.level@
|
||||
org.apache.fury: @logging.level@
|
||||
org.redisson: @logging.level@
|
||||
com.zaxxer.hikari.pool: @logging.level@
|
||||
software.amazon.awssdk.transfer: @logging.level@
|
||||
com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor: @logging.level@
|
||||
config: classpath:logback-plus.xml
|
||||
|
||||
# 用户配置
|
||||
@ -67,9 +79,9 @@ spring:
|
||||
servlet:
|
||||
multipart:
|
||||
# 单个文件大小
|
||||
max-file-size: 10MB
|
||||
max-file-size: 300MB
|
||||
# 设置总上传的文件大小
|
||||
max-request-size: 20MB
|
||||
max-request-size: 300MB
|
||||
mvc:
|
||||
# 设置静态资源路径 防止所有请求都去查静态资源
|
||||
static-path-pattern: /static/**
|
||||
@ -94,7 +106,7 @@ sa-token:
|
||||
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
|
||||
is-concurrent: true
|
||||
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
|
||||
is-share: false
|
||||
is-share: true
|
||||
# jwt秘钥
|
||||
jwt-secret-key: abcdefghijklmnopqrstuvwxyz
|
||||
|
||||
@ -108,9 +120,18 @@ security:
|
||||
- /**/*.js
|
||||
- /favicon.ico
|
||||
- /error
|
||||
- /webjars/**
|
||||
- /swagger-resources/**
|
||||
- /*/api-docs
|
||||
- /*/api-docs/**
|
||||
- /warm-flow-ui/token-name
|
||||
- /app/**
|
||||
- /resource/oss/**
|
||||
- /callback/api
|
||||
- /cms/vlog/vodCallBack
|
||||
- /api/transfer/callback
|
||||
- /trans/withdraw/callback
|
||||
- /app/payment/callback/*
|
||||
|
||||
# 多租户配置
|
||||
tenant:
|
||||
@ -119,14 +140,77 @@ tenant:
|
||||
# 排除表
|
||||
excludes:
|
||||
- sys_menu
|
||||
- cont_users
|
||||
- cont_vlog
|
||||
- cont_comment
|
||||
- cont_my_liked_vlog
|
||||
- ums_fans
|
||||
- sys_tenant
|
||||
- sys_tenant_package
|
||||
- aws_system_statistics
|
||||
- act_integral_history
|
||||
- sys_role_dept
|
||||
- sys_role_menu
|
||||
- sys_user_post
|
||||
- sys_user_role
|
||||
- sys_user_tenant
|
||||
- sys_message
|
||||
- sys_client
|
||||
- sys_oss_config
|
||||
- ums_member
|
||||
- ums_member_address
|
||||
- ums_member_login_info
|
||||
- ums_cart
|
||||
- ums_account
|
||||
- ums_account_change_record
|
||||
- sys_message_template
|
||||
- sys_message_user
|
||||
- ums_fans
|
||||
- ums_block
|
||||
- ums_forbidden
|
||||
- ums_member_bank
|
||||
- ums_tenant_forbidden
|
||||
|
||||
- oms_aftersale
|
||||
- oms_aftersale_item
|
||||
- oms_order
|
||||
- oms_order_delivery_history
|
||||
- oms_order_item
|
||||
- oms_order_operate_history
|
||||
- oms_wechat_payment_history
|
||||
- pms_brand
|
||||
- pms_product_category
|
||||
- pms_product_snapshot
|
||||
- pms_sku
|
||||
- pms_sku_snapshot
|
||||
- oms_verification_codes
|
||||
- oms_verification_logs
|
||||
- ums_feedback
|
||||
- trans_account_bill
|
||||
- trans_charge
|
||||
- trans_withdraw
|
||||
- trans_divide
|
||||
- trans_divide_detail
|
||||
- trans_divide_rule
|
||||
- trans_divide_rule_detail
|
||||
- trans_pay_order
|
||||
- cont_vlog_member
|
||||
- aws_system_statistics
|
||||
- act_integral_history
|
||||
- sys_version
|
||||
- ums_member_wechat
|
||||
- sys_tenant_extend
|
||||
- sys_commission_template
|
||||
- sys_commission_rate_range
|
||||
- oms_red_packet
|
||||
- oms_red_packet_receive
|
||||
- sys_commission_template
|
||||
- sys_commission_rate_range
|
||||
- cont_article
|
||||
- cont_article_category
|
||||
-
|
||||
|
||||
|
||||
|
||||
# MyBatisPlus配置
|
||||
# https://baomidou.com/config/
|
||||
@ -134,11 +218,11 @@ mybatis-plus:
|
||||
# 自定义配置 是否全局开启逻辑删除 关闭后 所有逻辑删除功能将失效
|
||||
enableLogicDelete: true
|
||||
# 多包名使用 例如 org.dromara.**.mapper,org.xxx.**.mapper
|
||||
mapperPackage: org.dromara.**.mapper
|
||||
mapperPackage: org.dromara.**.mapper,com.wzj.soopin.**.mapper
|
||||
# 对应的 XML 文件位置
|
||||
mapperLocations: classpath*:mapper/**/*Mapper.xml
|
||||
mapperLocations: classpath*:mapper/**/*Mapper.xml,classpath*:mapper/**/*.xml
|
||||
# 实体扫描,多个package用逗号或者分号分隔
|
||||
typeAliasesPackage: org.dromara.**.domain
|
||||
typeAliasesPackage: org.dromara.**.domain,com.wzj.soopin.**.domain
|
||||
global-config:
|
||||
dbConfig:
|
||||
# 主键类型
|
||||
@ -155,7 +239,7 @@ mybatis-encryptor:
|
||||
# 编码方式 BASE64/HEX。默认BASE64
|
||||
encode: BASE64
|
||||
# 安全秘钥 对称算法的秘钥 如:AES,SM4
|
||||
password:
|
||||
password: 123456
|
||||
# 公私钥 非对称算法的公私钥 如:SM2,RSA
|
||||
publicKey:
|
||||
privateKey:
|
||||
@ -177,9 +261,15 @@ springdoc:
|
||||
api-docs:
|
||||
# 是否开启接口文档
|
||||
enabled: true
|
||||
# swagger-ui:
|
||||
# # 持久化认证数据
|
||||
# persistAuthorization: true
|
||||
# 文档路径
|
||||
path: /v3/api-docs
|
||||
swagger-ui:
|
||||
# 文档路径
|
||||
path: /swagger-ui/index.html
|
||||
# 持久化认证数据
|
||||
persistAuthorization: true
|
||||
# 是否启用
|
||||
enabled: true
|
||||
info:
|
||||
# 标题
|
||||
title: '标题:RuoYi-Vue-Plus多租户管理系统_接口文档'
|
||||
@ -201,17 +291,27 @@ springdoc:
|
||||
name: ${sa-token.token-name}
|
||||
#这里定义了两个分组,可定义多个,也可以不定义
|
||||
group-configs:
|
||||
- group: 1.演示模块
|
||||
packages-to-scan: org.dromara.demo
|
||||
- group: 2.通用模块
|
||||
packages-to-scan: org.dromara.web
|
||||
- group: 3.系统模块
|
||||
- group: 1.会员模块
|
||||
packages-to-scan: com.wzj.soopin.member
|
||||
- group: 2.订单模块
|
||||
packages-to-scan: com.wzj.soopin.order
|
||||
- group: 3.商品模块
|
||||
packages-to-scan: com.wzj.soopin.goods
|
||||
- group: 4.内容模块
|
||||
packages-to-scan: com.wzj.soopin.content
|
||||
- group: 5.交易模块
|
||||
packages-to-scan: com.wzj.soopin.transaction
|
||||
- group: 6.IM模块
|
||||
packages-to-scan: com.wzj.soopin.im
|
||||
- group: 7.系统模块
|
||||
packages-to-scan: org.dromara.system
|
||||
- group: 4.代码生成模块
|
||||
packages-to-scan: org.dromara.generator
|
||||
- group: 5.工作流模块
|
||||
packages-to-scan: org.dromara.workflow
|
||||
|
||||
- group: 8.app会员模块
|
||||
packages-to-scan: org.dromara.app.customer
|
||||
- group: 9.app商户模块
|
||||
packages-to-scan: org.dromara.app.merchant
|
||||
legacy-mode: true
|
||||
knife4j:
|
||||
enable: true
|
||||
# 防止XSS攻击
|
||||
xss:
|
||||
# 过滤开关
|
||||
@ -219,6 +319,8 @@ xss:
|
||||
# 排除链接(多个用逗号分隔)
|
||||
excludeUrls:
|
||||
- /system/notice
|
||||
- /pms/product/add
|
||||
- /pms/product/update
|
||||
|
||||
# 全局线程池相关配置
|
||||
# 如使用JDK21请直接使用虚拟线程 不要开启此配置
|
||||
@ -279,3 +381,24 @@ warm-flow:
|
||||
- 255,205,23
|
||||
## 已办理
|
||||
- 157,255,0
|
||||
# 腾讯云配置
|
||||
tencent:
|
||||
cloud:
|
||||
secret-id: "AKIDvhEVWHm0xe5JGxOZXGitnRovlKcfRzIN"
|
||||
secret-key: "qPhiTxA7oENFrCH5dvxiCQN4UdWAYgYA"
|
||||
region: ap-guangzhou # 默认广州地区
|
||||
vod:
|
||||
app-id: 1323742234 # 点播应用ID
|
||||
|
||||
|
||||
|
||||
|
||||
http:
|
||||
client:
|
||||
connect-timeout: 10s
|
||||
read-timeout: 30s
|
||||
|
||||
vlog:
|
||||
storage-path: /data/vlogdata/
|
||||
prefix: vlog_
|
||||
suffix: .mp4
|
||||
|
BIN
ruoyi-admin/src/main/resources/cert/apiclient_cert.p12
Normal file
BIN
ruoyi-admin/src/main/resources/cert/apiclient_cert.p12
Normal file
Binary file not shown.
25
ruoyi-admin/src/main/resources/cert/apiclient_cert.pem
Normal file
25
ruoyi-admin/src/main/resources/cert/apiclient_cert.pem
Normal file
@ -0,0 +1,25 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEKzCCAxOgAwIBAgIUa6aB2bIZA01veFH1fWG+kxerSP0wDQYJKoZIhvcNAQEL
|
||||
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
|
||||
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
|
||||
Q0EwHhcNMjMxMTA2MDkwODIwWhcNMjgxMTA0MDkwODIwWjCBhDETMBEGA1UEAwwK
|
||||
MTY1ODY2NTcxMDEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTAwLgYDVQQL
|
||||
DCfml6Dnu4jooZfvvIjlpKnmtKXvvInnp5HmioDmnInpmZDlhazlj7gxCzAJBgNV
|
||||
BAYMAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
||||
ADCCAQoCggEBAPIJ7lvlud4KUXNjQb044xtoBWuF516f8h2mPrtIMkrKb4R9gKbE
|
||||
OaRFbeGOL5FAcRS0jWYtEoWgRrQ1EVim0Lhlqq5OAAiKtgTphW0ZSiK4dauhzFMI
|
||||
WByO/KalzzwKWFT0iFHP4UqiWZL1g9Dw9BUiJM3EnutQ7gP9d2wAm8h4Ltoo4Mfm
|
||||
RA5IqQzlItXrNMEr/iHpAsPEWuQOviVuut2xJHhm7blgWqg0IwtdljvSYGXE77Hv
|
||||
Cjr1RCVxTC8xtmKc8X5kaKEXH1d9fFH8sovyTF5pOiYZEkhOybtJE626etHbrVhk
|
||||
Nl0YDS1o9ypNrcYIQe/Um9JuCqxOl6H/Uh0CAwEAAaOBuTCBtjAJBgNVHRMEAjAA
|
||||
MAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0cDovL2V2
|
||||
Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJD
|
||||
MDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0MjJFMTJC
|
||||
MjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUAA4IBAQCv
|
||||
bdw6QwSePVI64eTddCW8pY9Dbi66IjUcqgvjwDzHIUQCMx0NHBGJRCmN0f/f5xpM
|
||||
nVg4I7RAkQ7WgFM78+MYUFJ5II368El8vTnhzRQ3Fv27v22G1EE/RAl7cQF9VB0X
|
||||
j1gaB09pPqfMD40Mg522CNh7NNVqCPr3mlTAj2PMalCT7VhDDqUxmqm9RtBd9ARN
|
||||
FMqx+FrUuFR5Y0N5o0OVcMbGcl8/krLqeUSZwy1Y42+KbViEqRxjTTOJEw/0B6TS
|
||||
6nUIBddt24ucWnOmlkhfs8Xf4YbLSP52H9EfSOgZ4vZ2OZ0kBngbZzZgLSFM2LNk
|
||||
UEBJbv+ElQBvKr2GP+EC
|
||||
-----END CERTIFICATE-----
|
28
ruoyi-admin/src/main/resources/cert/apiclient_key.pem
Normal file
28
ruoyi-admin/src/main/resources/cert/apiclient_key.pem
Normal file
@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDyCe5b5bneClFz
|
||||
Y0G9OOMbaAVrheden/Idpj67SDJKym+EfYCmxDmkRW3hji+RQHEUtI1mLRKFoEa0
|
||||
NRFYptC4ZaquTgAIirYE6YVtGUoiuHWrocxTCFgcjvympc88ClhU9IhRz+FKolmS
|
||||
9YPQ8PQVIiTNxJ7rUO4D/XdsAJvIeC7aKODH5kQOSKkM5SLV6zTBK/4h6QLDxFrk
|
||||
Dr4lbrrdsSR4Zu25YFqoNCMLXZY70mBlxO+x7wo69UQlcUwvMbZinPF+ZGihFx9X
|
||||
fXxR/LKL8kxeaTomGRJITsm7SROtunrR261YZDZdGA0taPcqTa3GCEHv1JvSbgqs
|
||||
Tpeh/1IdAgMBAAECggEBAOqp3kOS8yXn8xhgf3gqE2aa78ZTyQLhKCi+6ctCMCB7
|
||||
LKvT0kvdq9Usy2AILu4xAHIGq6EIyhBsWKCXYv4EnhBp4ZWlYjrl4ZvZnNct0cbf
|
||||
+JYzBJrsWCE4MJSR5d5cWU/k1dYcKl3mEdp91xNYyg1DUVN+8mVLzbhoosQ/wsoU
|
||||
eQUOld/ldLJeXHNv+yy3ow8osMvka0grDXQG4X6VFBDVQeBDt3+kheLkCD1caTQ3
|
||||
JRaABO9WBnir7wsTwaDQLgoPdxzhxSvi9NjKHkM+Vph+NujMIUt57i3xVlcfj+dG
|
||||
op+6rwcBP6F/8SQasU8Nbvjt5omc05/U6a8DesgkboECgYEA+zLWFhfwCZFZJGgs
|
||||
8iLFbiYsQL2Wew4wN854atN5qUeew+tYz91LPDX/VWcH9xI5iXmP+tU7x0hASFhM
|
||||
N0z0VqRWoKBANnAeQ6+0QRHIqJUujC7YEgv35ZdiwEBZ4K5A+gaW444SO/O8j4pL
|
||||
ou8vnYjh48T1YQ88VCoki2k3oukCgYEA9qpGMYdSBZi5Hafw4A2oq2QDRPS3IONO
|
||||
VTVRZFUjS1qRGeSfRdydPkLZp9g9rewMnEVCLHr+f8Ij6PdGxuWd5XaiPGIUAeru
|
||||
ozwi750bzzXWuLIoUJIM9WoQCeW58Lfcm5nqsIvOSPs1F5uOkbzvfyN1LSlDUesU
|
||||
Jn9nXHrsLRUCgYAjuBPXKmo4ghGB6spRV/5o7kamog7OyrKyjMp0rkODfaqmw0Vq
|
||||
sVXsZuU62J66VD4YPU/q4/1PFggGAYA88NVhqJak2oSm+QRkrYxdIFE/H49x4YtZ
|
||||
7Ze/bupc2gmtuDmHE/7Ktr4DBmKOqqScs5Q6u2cbgzs9JPR4J1Hw/PIrWQKBgEmq
|
||||
CFR6STCKr53/rZv7+EdXEvLg8l/MAnTH+4qvMl8qqPLGqBpBDGSvqjjKB4GNYSa6
|
||||
OEz4XlDhNcA5ONXldQY2K7VExRzdgG8XYoeUr91uArYd3pRRSbVw+2E5ThJplmSR
|
||||
ztjyp6R8ARsPxcAYYJ3jhPb7v7MTNW1Z1xBzVV0RAoGBAOyuU/VZh/8m3qW4DyHU
|
||||
FQWsBaTCy++XY2BZBItcrOqtMbUuDV70Uv01DIz0Lye/ne/IEUsHEEKuUJxhAHyV
|
||||
Ozm4GeWNA9PylIgisR57McnoFbpdHhkQ7HEtGL9j0C7MmupFSuRuVy8Fi5cdJYZa
|
||||
C0KwAgwpfhp35P+XWf+v4TRH
|
||||
-----END PRIVATE KEY-----
|
3
ruoyi-admin/src/main/resources/cert/pri.key
Normal file
3
ruoyi-admin/src/main/resources/cert/pri.key
Normal file
@ -0,0 +1,3 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDLgDEh0hsPTmHLdEYp6LCo3LMnXMLCV+wUxRn5lvcAa7gn8RZyLDGiT5WdR0SpJDbBhWL1WbnUd7dJulzjbb0N5NzrO3HntjzKIpzhfChw3BBtM3PR8xvS17Wt4vRN6JvY4w0sphKesxbHWiMHUTOzKrQBEdXasMujmxV0N9R2GzTLK0Pn4ROWCzeQQhiJ2oOc3Eqkus9/C+3LcxkU08nF/q0X/kzHGS+Gn+JL/Eo6vpQExg7rQs0mnrKvNuPPGKpyKNpRmKWtiA8GTBeFnwZlP8kYj9Z8NYxLsT6fJnqpZ8wZ++T2PS7CIIo6JSIKz0ElNrRRD2Ei7lyCZAjUBQLLAgMBAAECggEBAIRjGhOBhx8XA+IC+55KBZtlMJub6gvafPgqHbLUtk2sxjodylduTr/j/FY8RfuvVnvhFba9r3n8g93QApvmCUafq+TQYFK4qKVrjRnX1stNLtaL0X41JNWuhT/hVMPWXoTjeO+h/p0Frvzzs7QP7I1Ta5UCkFhcCa6etn9Lzskh0uXe4ylMmt5lAuvFAeIuE5icMxu4n75RXUVxaBSOKjQ0ujQWMh46ncrX0f9oGkDbWE37LF61sf2iuXpPwnIAwk/e/zOpnCi9EHOJtCJbVr+ncDRvlZsEf5hVnxYgT2bQrUrSD9An5e4zgJF6rigsDhmNfvp0W/bJnXPIIg1MYbECgYEA5MlizB9XmttiaAo9sMjAUE18cxgEq2pIU8l8WOj//XAsf64AlrlWJxpJdNYkfdRiinnRIxroo1cYx3RMWqdGbYVk+7DJBNut6R0bg0oGgJoeBFnCe/xNGsBk7MZwc4//5sfRC2rbtuYFPn8VkNB5HllhddD51L6lObAp4Uf14/MCgYEA47TX4AmgcAjhVCUvC4ZUuiqAku/suw0vkG6FNxuSYY5GezPvwWx0JviaohaIm5JkgjNNASFhx12XG+PZoPDNGi9vzotVkI69LnOdlf3imVaJR7u5H8730Thbdd5oKi66KYXJGv3hppwh7qAu8VkdMavvCT24jILNiGiA0OBOE8kCgYA5JoFSgiXNHi5X1O8SISPBK4oB6icIdtU4cOVqBFImCgZjoqCtBgEaZXuh/vhAonQ3KTTv8wHYA6LB+DA2mQCDzUWrhb7BQusPh2DfC/fR2i3TYmStuhm8rADKEMv4YilHifSTSI84Af+fW/mUIi+PQD6TQq+V0EXPwkzD5MjstwKBgQDZZ5SlBwvza8cXe9kK+9pxVJslr4UqolBDagIut1hvZFPO1auX1WCgxMN+9ly/jGoCFdDzv1eH7ceUjVr/2mk5EwmA/m9XcbEWZLSUvK5ZENJJduYthIH/c/t+8jYp8Cs18dIsvzFuzatoFfA75oWFI086V3+YSFrMXlp/E2n4YQKBgQCKiynvzcRA8GoK6ibGhwUc5lpVUOVqpIdmVG5bXbnKYoU7Jkf2pOUwzLQGKOj9KS1Z80jkZA9p22BLKD/VXF0PvGBhx1Ujpil1vd96I/KcGRsmCu3b3AxK7qzDt6Y0nVk5bN72RYq4F/iRU+ijoIAuLsyrn/e0eaJweiqzr/gK4g==
|
||||
-----END PRIVATE KEY-----
|
1
ruoyi-admin/src/main/resources/cert/pub.key
Normal file
1
ruoyi-admin/src/main/resources/cert/pub.key
Normal file
@ -0,0 +1 @@
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy4AxIdIbD05hy3RGKeiwqNyzJ1zCwlfsFMUZ+Zb3AGu4J/EWciwxok+VnUdEqSQ2wYVi9Vm51He3Sbpc4229DeTc6ztx57Y8yiKc4XwocNwQbTNz0fMb0te1reL0Teib2OMNLKYSnrMWx1ojB1Ezsyq0ARHV2rDLo5sVdDfUdhs0yytD5+ETlgs3kEIYidqDnNxKpLrPfwvty3MZFNPJxf6tF/5Mxxkvhp/iS/xKOr6UBMYO60LNJp6yrzbjzxiqcijaUZilrYgPBkwXhZ8GZT/JGI/WfDWMS7E+nyZ6qWfMGfvk9j0uwiCKOiUiCs9BJTa0UQ9hIu5cgmQI1AUCywIDAQAB
|
@ -16,11 +16,17 @@
|
||||
<!-- 控制台输出 -->
|
||||
<appender name="file_console" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/sys-console.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/sys-console.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<fileNamePattern>${log.path}/sys-console.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
|
||||
<!-- 日志最大 1天 -->
|
||||
<maxHistory>1</maxHistory>
|
||||
<maxHistory>7</maxHistory>
|
||||
<!-- 日志文件最大大小 -->
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
<!-- 启动时清理历史日志 -->
|
||||
<cleanHistoryOnStart>true</cleanHistoryOnStart>
|
||||
<!-- 总日志文件大小限制 -->
|
||||
<totalSizeCap>1GB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
@ -28,19 +34,25 @@
|
||||
</encoder>
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<!-- 过滤的级别 -->
|
||||
<level>INFO</level>
|
||||
<level>debug</level>
|
||||
</filter>
|
||||
</appender>
|
||||
|
||||
<!-- 系统日志输出 -->
|
||||
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/sys-info.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 循环政策:基于时间和大小创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
<!-- 日志文件最大大小 -->
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
<!-- 启动时清理历史日志 -->
|
||||
<cleanHistoryOnStart>true</cleanHistoryOnStart>
|
||||
<!-- 总日志文件大小限制 -->
|
||||
<totalSizeCap>5GB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
@ -57,12 +69,18 @@
|
||||
|
||||
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${log.path}/sys-error.log</file>
|
||||
<!-- 循环政策:基于时间创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<!-- 循环政策:基于时间和大小创建日志文件 -->
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||
<!-- 日志文件名格式 -->
|
||||
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
|
||||
<!-- 日志最大的历史 60天 -->
|
||||
<maxHistory>60</maxHistory>
|
||||
<!-- 日志文件最大大小 -->
|
||||
<maxFileSize>10MB</maxFileSize>
|
||||
<!-- 启动时清理历史日志 -->
|
||||
<cleanHistoryOnStart>true</cleanHistoryOnStart>
|
||||
<!-- 总日志文件大小限制 -->
|
||||
<totalSizeCap>5GB</totalSizeCap>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>${log.pattern}</pattern>
|
||||
@ -98,32 +116,32 @@
|
||||
</appender>
|
||||
|
||||
<!-- 整合 skywalking 控制台输出 tid -->
|
||||
<!-- <appender name="console" class="ch.qos.logback.core.ConsoleAppender">-->
|
||||
<!-- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
|
||||
<!-- <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">-->
|
||||
<!-- <pattern>[%tid] ${console.log.pattern}</pattern>-->
|
||||
<!-- </layout>-->
|
||||
<!-- <charset>utf-8</charset>-->
|
||||
<!-- </encoder>-->
|
||||
<!-- </appender>-->
|
||||
<!-- <appender name="console" class="ch.qos.logback.core.ConsoleAppender">-->
|
||||
<!-- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
|
||||
<!-- <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">-->
|
||||
<!-- <pattern>[%tid] ${console.log.pattern}</pattern>-->
|
||||
<!-- </layout>-->
|
||||
<!-- <charset>utf-8</charset>-->
|
||||
<!-- </encoder>-->
|
||||
<!-- </appender>-->
|
||||
|
||||
<!-- 整合 skywalking 推送采集日志 -->
|
||||
<!-- <appender name="sky_log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">-->
|
||||
<!-- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
|
||||
<!-- <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">-->
|
||||
<!-- <pattern>[%tid] ${console.log.pattern}</pattern>-->
|
||||
<!-- </layout>-->
|
||||
<!-- <charset>utf-8</charset>-->
|
||||
<!-- </encoder>-->
|
||||
<!-- </appender>-->
|
||||
<!-- <appender name="sky_log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">-->
|
||||
<!-- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
|
||||
<!-- <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">-->
|
||||
<!-- <pattern>[%tid] ${console.log.pattern}</pattern>-->
|
||||
<!-- </layout>-->
|
||||
<!-- <charset>utf-8</charset>-->
|
||||
<!-- </encoder>-->
|
||||
<!-- </appender>-->
|
||||
|
||||
<!--系统操作日志-->
|
||||
<root level="info">
|
||||
<root level="debug">
|
||||
<appender-ref ref="console" />
|
||||
<appender-ref ref="async_info" />
|
||||
<appender-ref ref="async_error" />
|
||||
<appender-ref ref="file_console" />
|
||||
<!-- <appender-ref ref="sky_log"/>-->
|
||||
<!-- <appender-ref ref="sky_log"/>-->
|
||||
</root>
|
||||
|
||||
</configuration>
|
||||
|
@ -34,6 +34,8 @@
|
||||
<module>ruoyi-common-tenant</module>
|
||||
<module>ruoyi-common-websocket</module>
|
||||
<module>ruoyi-common-sse</module>
|
||||
<module>ruoyi-common-mongo</module>
|
||||
<module>ruoyi-common-mq</module>
|
||||
</modules>
|
||||
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
|
@ -88,11 +88,24 @@
|
||||
<artifactId>mapstruct-plus-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 离线IP地址定位库 -->
|
||||
<dependency>
|
||||
<groupId>org.lionsoul</groupId>
|
||||
<artifactId>ip2region</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-crypto</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-core</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
@ -0,0 +1,124 @@
|
||||
package org.dromara.common.core.config;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 读取项目相关配置
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Component
|
||||
@ConfigurationProperties(prefix = "ruoyi")
|
||||
public class RuoYiConfig
|
||||
{
|
||||
/** 项目名称 */
|
||||
private String name;
|
||||
|
||||
/** 版本 */
|
||||
private String version;
|
||||
|
||||
/** 版权年份 */
|
||||
private String copyrightYear;
|
||||
|
||||
/** 实例演示开关 */
|
||||
private boolean demoEnabled;
|
||||
|
||||
/** 上传路径 */
|
||||
private static String profile;
|
||||
|
||||
/** 获取地址开关 */
|
||||
private static boolean addressEnabled;
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getVersion()
|
||||
{
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version)
|
||||
{
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String getCopyrightYear()
|
||||
{
|
||||
return copyrightYear;
|
||||
}
|
||||
|
||||
public void setCopyrightYear(String copyrightYear)
|
||||
{
|
||||
this.copyrightYear = copyrightYear;
|
||||
}
|
||||
|
||||
public boolean isDemoEnabled()
|
||||
{
|
||||
return demoEnabled;
|
||||
}
|
||||
|
||||
public void setDemoEnabled(boolean demoEnabled)
|
||||
{
|
||||
this.demoEnabled = demoEnabled;
|
||||
}
|
||||
|
||||
public static String getProfile()
|
||||
{
|
||||
return profile;
|
||||
}
|
||||
|
||||
public void setProfile(String profile)
|
||||
{
|
||||
RuoYiConfig.profile = profile;
|
||||
}
|
||||
|
||||
public static boolean isAddressEnabled()
|
||||
{
|
||||
return addressEnabled;
|
||||
}
|
||||
|
||||
public void setAddressEnabled(boolean addressEnabled)
|
||||
{
|
||||
RuoYiConfig.addressEnabled = addressEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取导入上传路径
|
||||
*/
|
||||
public static String getImportPath()
|
||||
{
|
||||
return getProfile() + "/import";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取头像上传路径
|
||||
*/
|
||||
public static String getAvatarPath()
|
||||
{
|
||||
return getProfile() + "/avatar";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下载路径
|
||||
*/
|
||||
public static String getDownloadPath()
|
||||
{
|
||||
return getProfile() + "/download/";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取上传路径
|
||||
*/
|
||||
public static String getUploadPath()
|
||||
{
|
||||
return getProfile() + "/upload";
|
||||
}
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package org.dromara.common.core.constant;
|
||||
|
||||
|
||||
public class BaseInfoProperties {
|
||||
|
||||
|
||||
public static final Integer COMMON_START_PAGE = 1;
|
||||
public static final Integer COMMON_START_PAGE_ZERO = 0;
|
||||
public static final Integer COMMON_PAGE_SIZE = 10;
|
||||
|
||||
public static final String MOBILE_SMSCODE = "mobile:smscode";
|
||||
public static final String REDIS_USER_TOKEN = "redis_user_token";
|
||||
public static final String REDIS_USER_INFO = "redis_user_info";
|
||||
|
||||
// 短视频的评论总数
|
||||
public static final String REDIS_VLOG_COMMENT_COUNTS = "redis_vlog_comment_counts";
|
||||
// 短视频的评论喜欢数量
|
||||
public static final String REDIS_VLOG_COMMENT_LIKED_COUNTS = "redis_vlog_comment_liked_counts";
|
||||
// 用户点赞评论
|
||||
public static final String REDIS_USER_LIKE_COMMENT = "redis_user_like_comment";
|
||||
|
||||
|
||||
//我的关注总数
|
||||
public static final String REDIS_MY_FOLLOWS_COUNTS = "redis_my_follows_counts";
|
||||
// 我的粉丝总数
|
||||
public static final String REDIS_MY_FANS_COUNTS = "redis_my_fans_counts";
|
||||
|
||||
// 视频和发布者获赞数
|
||||
public static final String REDIS_VLOG_BE_LIKED_COUNTS = "redis_vlog_be_liked_counts";
|
||||
public static final String REDIS_VLOGER_BE_LIKED_COUNTS = "redis_vloger_be_liked_counts";
|
||||
|
||||
// 博主和粉丝的关联关系,用于判断他们是否互粉
|
||||
public static final String REDIS_FANS_AND_VLOGGER_RELATIONSHIP = "redis_fans_and_vlogger_relationship";
|
||||
// 拉黑
|
||||
public static final String REDIS_USER_BLOCK = "redis_user_block";
|
||||
// 举报视频
|
||||
public static final String REDIS_VIDEO_BLOCK = "redis_video_block";
|
||||
|
||||
//已读视频
|
||||
public static final String REDIS_USER_READ_VLOG = "redis_user_read_vlog";
|
||||
// 已读评论
|
||||
public static final String REDIS_USER_READ_COMMENT = "redis_user_read_comment";
|
||||
|
||||
// 用户是否喜欢/点赞视频,取代数据库的关联关系,1:喜欢,0:不喜欢(默认) redis_user_like_vlog:{userId}:{vlogId}
|
||||
public static final String REDIS_USER_LIKE_VLOG = "redis_user_like_vlog";
|
||||
|
||||
|
||||
}
|
@ -27,4 +27,36 @@ public interface CacheConstants {
|
||||
*/
|
||||
String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
|
||||
|
||||
/**
|
||||
* 用户
|
||||
*/
|
||||
String MEMBER ="MEMBER:";
|
||||
|
||||
/**
|
||||
* 粉丝
|
||||
*/
|
||||
String MEMBER_FANS="MEMBER_FANS:";
|
||||
|
||||
/**
|
||||
* 关注
|
||||
*/
|
||||
String MEMBER_FOLLOW="MEMBER_FOLLOW:";
|
||||
|
||||
|
||||
String BLACK_LIST="BLACK_LIST:";
|
||||
|
||||
|
||||
String GROUP="GROUP:";
|
||||
|
||||
String GROUP_MEMBER="GROUP_MEMBER:";
|
||||
|
||||
String VLOG="VLOG:";
|
||||
|
||||
String COMMENT="COMMENT:";
|
||||
|
||||
String CHAT="CHAT:";
|
||||
|
||||
|
||||
String IM_MSG_RECEIVE="im:msg:receive:";
|
||||
|
||||
}
|
||||
|
@ -81,8 +81,14 @@ public interface CacheNames {
|
||||
String SYS_OSS_CONFIG = GlobalConstants.GLOBAL_REDIS_KEY + "sys_oss_config";
|
||||
|
||||
/**
|
||||
* 在线用户
|
||||
* 延时队列:订单未支付取消
|
||||
*/
|
||||
String ONLINE_TOKEN = "online_tokens";
|
||||
String DELAY_ORDER_UNPAY = GlobalConstants.GLOBAL_REDIS_KEY + "order_unpay";
|
||||
|
||||
|
||||
/**
|
||||
* 延时队列:订单支付未核销
|
||||
*/
|
||||
String DELAY_ORDER_TO_BE_USED = GlobalConstants.GLOBAL_REDIS_KEY + "order_tobe_used";
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,551 @@
|
||||
package org.dromara.common.core.constant;
|
||||
|
||||
|
||||
/**
|
||||
* 缓存前缀
|
||||
*
|
||||
* @author pikachu
|
||||
* @version 4.1
|
||||
* @since 1.0
|
||||
* 2018/3/19
|
||||
*/
|
||||
public enum CachePrefix {
|
||||
|
||||
|
||||
/**
|
||||
* nonce
|
||||
*/
|
||||
NONCE,
|
||||
|
||||
/**
|
||||
* 在线人数
|
||||
*/
|
||||
ONLINE_NUM,
|
||||
|
||||
|
||||
/**
|
||||
* 会员分布数据
|
||||
*/
|
||||
MEMBER_DISTRIBUTION,
|
||||
|
||||
/**
|
||||
* 在线会员统计
|
||||
*/
|
||||
ONLINE_MEMBER,
|
||||
|
||||
/**
|
||||
* token 信息
|
||||
*/
|
||||
ACCESS_TOKEN,
|
||||
/**
|
||||
* token 信息
|
||||
*/
|
||||
REFRESH_TOKEN,
|
||||
/**
|
||||
* 联合登录响应
|
||||
*/
|
||||
CONNECT_RESULT,
|
||||
/**
|
||||
* 微信联合登陆 session key
|
||||
*/
|
||||
SESSION_KEY,
|
||||
/**
|
||||
* 权限
|
||||
*/
|
||||
PERMISSION_LIST,
|
||||
/**
|
||||
* 部门id列表
|
||||
*/
|
||||
DEPARTMENT_IDS,
|
||||
|
||||
/**
|
||||
* 用户错误登录限制
|
||||
*/
|
||||
LOGIN_TIME_LIMIT,
|
||||
/**
|
||||
* 系统设置
|
||||
*/
|
||||
SETTING,
|
||||
|
||||
/**
|
||||
* 验证码滑块源
|
||||
*/
|
||||
VERIFICATION,
|
||||
|
||||
/**
|
||||
* 验证码滑块源
|
||||
*/
|
||||
VERIFICATION_IMAGE,
|
||||
|
||||
/**
|
||||
* 快递平台
|
||||
*/
|
||||
EXPRESS,
|
||||
|
||||
/**
|
||||
* 图片验证码
|
||||
*/
|
||||
CAPTCHA,
|
||||
|
||||
/**
|
||||
* 商品
|
||||
*/
|
||||
GOODS,
|
||||
|
||||
/**
|
||||
* 商品SKU
|
||||
*/
|
||||
GOODS_SKU,
|
||||
|
||||
/**
|
||||
* 运费模板脚本
|
||||
*/
|
||||
SHIP_SCRIPT,
|
||||
|
||||
/**
|
||||
* 商品sku
|
||||
*/
|
||||
SKU,
|
||||
|
||||
/**
|
||||
* sku库存
|
||||
*/
|
||||
SKU_STOCK,
|
||||
|
||||
/**
|
||||
* 促销商品sku库存
|
||||
*/
|
||||
PROMOTION_GOODS_STOCK,
|
||||
|
||||
/**
|
||||
* 商品库存
|
||||
*/
|
||||
GOODS_STOCK,
|
||||
|
||||
/**
|
||||
* 商品分类 树状结构
|
||||
*/
|
||||
CATEGORY,
|
||||
/**
|
||||
* 商品分类 集合
|
||||
*/
|
||||
CATEGORY_ARRAY,
|
||||
/**
|
||||
* 浏览次数
|
||||
*/
|
||||
VISIT_COUNT,
|
||||
/**
|
||||
* 存储方案
|
||||
*/
|
||||
UPLOADER,
|
||||
/**
|
||||
* 地区
|
||||
*/
|
||||
REGION,
|
||||
|
||||
/**
|
||||
* 短信网关
|
||||
*/
|
||||
SPlATFORM,
|
||||
/**
|
||||
* 短信验证码前缀
|
||||
*/
|
||||
_CODE_PREFIX,
|
||||
/**
|
||||
* smtp
|
||||
*/
|
||||
SMTP,
|
||||
/**
|
||||
* 系统设置
|
||||
*/
|
||||
SETTINGS,
|
||||
/**
|
||||
* 电子面单
|
||||
*/
|
||||
WAYBILL,
|
||||
/**
|
||||
* 短信验证码
|
||||
*/
|
||||
SMS_CODE,
|
||||
/**
|
||||
* 邮箱验证码
|
||||
*/
|
||||
EMAIL_CODE,
|
||||
/**
|
||||
* 管理员角色权限对照表
|
||||
*/
|
||||
ADMIN_URL_ROLE,
|
||||
|
||||
/**
|
||||
* 店铺管理员角色权限对照表
|
||||
*/
|
||||
STORE_URL_ROLE,
|
||||
|
||||
/**
|
||||
* 手机验证标识
|
||||
*/
|
||||
MOBILE_VALIDATE,
|
||||
|
||||
/**
|
||||
* 邮箱验证标识
|
||||
*/
|
||||
EMAIL_VALIDATE,
|
||||
|
||||
/**
|
||||
* 店铺运费模版列表
|
||||
*/
|
||||
SHIP_TEMPLATE,
|
||||
|
||||
/**
|
||||
* 店铺中某个运费模版
|
||||
*/
|
||||
SHIP_TEMPLATE_ONE,
|
||||
|
||||
//================促销=================
|
||||
/**
|
||||
* 促销活动
|
||||
*/
|
||||
PROMOTION,
|
||||
/**
|
||||
* 促销活动
|
||||
*/
|
||||
PROMOTION_GOODS,
|
||||
|
||||
/*** 单品立减 */
|
||||
STORE_ID_MINUS,
|
||||
|
||||
/*** 第二件半价 */
|
||||
STORE_ID_HALF_PRICE,
|
||||
|
||||
/*** 满优惠 */
|
||||
STORE_ID_FULL_DISCOUNT,
|
||||
|
||||
/**
|
||||
* 秒杀活动活动缓存key前缀
|
||||
*/
|
||||
STORE_ID_SECKILL,
|
||||
|
||||
/**
|
||||
* 团购活动缓存key前缀
|
||||
*/
|
||||
STORE_ID_GROUP_BUY,
|
||||
|
||||
/**
|
||||
* 积分商品缓存key前缀
|
||||
*/
|
||||
STORE_ID_EXCHANGE,
|
||||
|
||||
|
||||
//================交易=================
|
||||
|
||||
/**
|
||||
* 购物车原始数据
|
||||
*/
|
||||
CART_ORIGIN_DATA_PREFIX,
|
||||
|
||||
/**
|
||||
* 立即购买原始数据
|
||||
*/
|
||||
BUY_NOW_ORIGIN_DATA_PREFIX,
|
||||
|
||||
/**
|
||||
* 交易原始数据
|
||||
*/
|
||||
TRADE_ORIGIN_DATA_PREFIX,
|
||||
|
||||
/**
|
||||
* 立即购买sku
|
||||
*/
|
||||
CART_SKU_PREFIX,
|
||||
|
||||
/**
|
||||
* 购物车视图
|
||||
*/
|
||||
CART_MEMBER_ID_PREFIX,
|
||||
|
||||
/**
|
||||
* 购物车,用户选择的促销信息
|
||||
*/
|
||||
CART_PROMOTION_PREFIX,
|
||||
|
||||
|
||||
/**
|
||||
* 交易_交易价格的前缀
|
||||
*/
|
||||
PRICE_SESSION_ID_PREFIX,
|
||||
|
||||
/**
|
||||
* 交易_交易单
|
||||
*/
|
||||
TRADE_SESSION_ID_PREFIX,
|
||||
|
||||
|
||||
/**
|
||||
* 结算参数
|
||||
*/
|
||||
CHECKOUT_PARAM_ID_PREFIX,
|
||||
|
||||
/**
|
||||
* 交易单号前缀
|
||||
*/
|
||||
TRADE_SN_CACHE_PREFIX,
|
||||
|
||||
/**
|
||||
* 订单编号前缀
|
||||
*/
|
||||
ORDER_SN_CACHE_PREFIX,
|
||||
/**
|
||||
* 订单编号标记
|
||||
*/
|
||||
ORDER_SN_SIGN_CACHE_PREFIX,
|
||||
/**
|
||||
* 订单编号前缀
|
||||
*/
|
||||
PAY_LOG_SN_CACHE_PREFIX,
|
||||
|
||||
/**
|
||||
* 合同编号
|
||||
*/
|
||||
CONTRACT_SN_CACHE_PREFIX,
|
||||
|
||||
|
||||
/**
|
||||
* 零钱
|
||||
*/
|
||||
SMALL_CHANGE_CACHE_PREFIX,
|
||||
|
||||
/**
|
||||
* 售后服务单号前缀
|
||||
*/
|
||||
AFTER_SALE_SERVICE_PREFIX,
|
||||
|
||||
/**
|
||||
* 交易
|
||||
*/
|
||||
TRADE,
|
||||
|
||||
/**
|
||||
* 站点导航栏
|
||||
*/
|
||||
SITE_NAVIGATION,
|
||||
|
||||
/**
|
||||
* 支付参数
|
||||
*/
|
||||
PAYMENT_CONFIG,
|
||||
|
||||
/**
|
||||
* 流程控制
|
||||
*/
|
||||
FLOW,
|
||||
|
||||
/**
|
||||
* 热门搜索
|
||||
*/
|
||||
HOT_WORD,
|
||||
|
||||
/**
|
||||
* 会员积分
|
||||
*/
|
||||
MEMBER_POINT,
|
||||
|
||||
/**
|
||||
* 会员积分
|
||||
*/
|
||||
POINT_ORDER,
|
||||
|
||||
|
||||
/**
|
||||
* 微博登录
|
||||
*/
|
||||
WEIBO_STATE,
|
||||
/**
|
||||
* 微博登录
|
||||
*/
|
||||
QQ_STATE,
|
||||
/**
|
||||
* 微博登录
|
||||
*/
|
||||
GITHUB_STATE,
|
||||
/**
|
||||
* 验证码key
|
||||
*/
|
||||
VERIFICATION_KEY,
|
||||
/**
|
||||
* 验证码验证结果
|
||||
*/
|
||||
VERIFICATION_RESULT,
|
||||
/**
|
||||
* 微信CGItoken
|
||||
*/
|
||||
WECHAT_CGI_ACCESS_TOKEN,
|
||||
/**
|
||||
* 微信JSApitoken
|
||||
*/
|
||||
WECHAT_JS_API_TOKEN,
|
||||
/**
|
||||
* 微信会话信息
|
||||
*/
|
||||
WECHAT_SESSION_PARAMS,
|
||||
/**
|
||||
* 第三方用户权限
|
||||
*/
|
||||
ALIPAY_CONFIG,
|
||||
/**
|
||||
* 微信支付配置
|
||||
*/
|
||||
WECHAT_PAY_CONFIG,
|
||||
/**
|
||||
* 微信支付平台证书配置
|
||||
*/
|
||||
WECHAT_PLAT_FORM_CERT,
|
||||
/**
|
||||
* 第三方用户权限
|
||||
*/
|
||||
CONNECT_AUTH,
|
||||
/**
|
||||
* 平台PageView 统计
|
||||
*/
|
||||
PV,
|
||||
/**
|
||||
* 平台UserView 统计
|
||||
*/
|
||||
UV,
|
||||
/**
|
||||
* 平台 商品PV 统计
|
||||
*/
|
||||
GOODS_PV,
|
||||
/**
|
||||
* 平台 商品UV 统计
|
||||
*/
|
||||
GOODS_UV,
|
||||
/**
|
||||
* 店铺PageView 统计
|
||||
*/
|
||||
STORE_PV,
|
||||
/**
|
||||
* 店铺UserView 统计
|
||||
*/
|
||||
STORE_UV,
|
||||
/**
|
||||
* 店铺 商品PV 统计
|
||||
*/
|
||||
STORE_GOODS_PV,
|
||||
/**
|
||||
* 店铺 商品UV 统计
|
||||
*/
|
||||
STORE_GOODS_UV,
|
||||
/**
|
||||
* 分销员
|
||||
*/
|
||||
DISTRIBUTION,
|
||||
|
||||
/**
|
||||
* 找回手机
|
||||
*/
|
||||
FIND_MOBILE,
|
||||
/**
|
||||
* 文章分类
|
||||
*/
|
||||
ARTICLE_CATEGORY,
|
||||
/**
|
||||
* 文章
|
||||
*/
|
||||
ARTICLE_CACHE,
|
||||
|
||||
/**
|
||||
* 初始化索引
|
||||
*/
|
||||
INIT_INDEX_PROCESS,
|
||||
|
||||
/**
|
||||
* 初始化索引标示
|
||||
*/
|
||||
INIT_INDEX_FLAG,
|
||||
|
||||
/**
|
||||
* 店铺分类
|
||||
*/
|
||||
STORE_CATEGORY,
|
||||
/**
|
||||
* 用户菜单
|
||||
*/
|
||||
MENU_USER_ID,
|
||||
/**
|
||||
* 用户菜单
|
||||
*/
|
||||
USER_MENU,
|
||||
/**
|
||||
* 订单暂时缓存
|
||||
*/
|
||||
ORDER,
|
||||
/**
|
||||
* 敏感词
|
||||
*/
|
||||
SENSITIVE,
|
||||
/**
|
||||
* 用户 UserSig 缓存前缀
|
||||
*/
|
||||
USER_SIG("user:sig:"),
|
||||
/**
|
||||
* 页面
|
||||
*/
|
||||
PAGE,
|
||||
/**
|
||||
* 文章缓存
|
||||
*/
|
||||
ARTICLE("ARTICLE:"),
|
||||
|
||||
/**
|
||||
* 会员足迹
|
||||
*/
|
||||
FOOTPRINT;
|
||||
|
||||
private String prefix;
|
||||
|
||||
CachePrefix(String prefix) {
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
CachePrefix() {
|
||||
this.prefix = this.name() + "_";
|
||||
}
|
||||
|
||||
public String getPrefix1() {
|
||||
return prefix;
|
||||
}
|
||||
|
||||
public static String removePrefix(String str) {
|
||||
return str.substring(str.lastIndexOf("}_") + 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* 通用获取缓存key值
|
||||
*
|
||||
* @return 缓存key值
|
||||
*/
|
||||
public String getPrefix() {
|
||||
return "{" + this.name() + "}_";
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 通用获取缓存key值
|
||||
// *
|
||||
// * @param typeEnum 促销枚举
|
||||
// * @return 缓存key值
|
||||
// */
|
||||
// public String getPrefix(PromotionTypeEnum typeEnum) {
|
||||
// return "{" + this.name() + "_" + typeEnum.name() + "}_";
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 获取缓存key值 + 用户端
|
||||
// * 例如:三端都有用户体系,需要分别登录,如果用户名一致,则redis中的权限可能会冲突出错
|
||||
// *
|
||||
// * @param user 角色
|
||||
// * @return 缓存key值 + 用户端
|
||||
// */
|
||||
// public String getPrefix(UserEnums user) {
|
||||
// return "{" + this.name() + "_" + user.name() + "}_";
|
||||
// }
|
||||
}
|
@ -65,12 +65,22 @@ public interface Constants {
|
||||
/**
|
||||
* 验证码有效期(分钟)
|
||||
*/
|
||||
Integer CAPTCHA_EXPIRATION = 2;
|
||||
Integer CAPTCHA_EXPIRATION = 5;
|
||||
|
||||
/**
|
||||
* 顶级父级id
|
||||
*/
|
||||
Long TOP_PARENT_ID = 0L;
|
||||
|
||||
/**
|
||||
* 订单未支付自动取消时间(分钟)
|
||||
*/
|
||||
Long ORDER_CANCEL_TIME = 30L;
|
||||
|
||||
/**
|
||||
* 订单支付未核销自动退款时间(天)
|
||||
*/
|
||||
Long ORDER_REFUND_TIME = 14L;
|
||||
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,11 @@ public interface GlobalConstants {
|
||||
*/
|
||||
String GLOBAL_REDIS_KEY = "global:";
|
||||
|
||||
/**
|
||||
* 全局字典 redis key
|
||||
*/
|
||||
String GLOBAL_DICT_KEY = GLOBAL_REDIS_KEY + "sys_dict";
|
||||
|
||||
/**
|
||||
* 验证码 redis key
|
||||
*/
|
||||
@ -31,4 +36,62 @@ public interface GlobalConstants {
|
||||
* 三方认证 redis key
|
||||
*/
|
||||
String SOCIAL_AUTH_CODE_KEY = GLOBAL_REDIS_KEY + "social_auth_codes:";
|
||||
|
||||
/**
|
||||
* 会员 redis key
|
||||
*/
|
||||
String MEMBER_KEY = GLOBAL_REDIS_KEY + "member:";
|
||||
|
||||
/**
|
||||
* 视频 redis key
|
||||
*/
|
||||
String VLOG_KEY = GLOBAL_REDIS_KEY + "vlog:";
|
||||
|
||||
/**
|
||||
* 会员视频 redis key
|
||||
*/
|
||||
String GLOBAL_OFFSET = GLOBAL_REDIS_KEY + "offset:";
|
||||
|
||||
|
||||
/**
|
||||
* 热点视频 redis key
|
||||
*/
|
||||
String HOT_VLOG_TAG = "HOT";
|
||||
/**
|
||||
* 我喜欢的视频 redis key
|
||||
*/
|
||||
String GLOBAL_VLOG_DOILIKE = "global:vlog:doilike:";
|
||||
String GLOBAL_VLOG_MY_LIKED_LIST= "global:vlog:myliked:list:";
|
||||
/**
|
||||
* 我喜欢的视频数量 redis key
|
||||
*/
|
||||
String GLOBAL_VLOG_MY_LIKED_COUNT = "global:vlog:myliked:count:";
|
||||
/**
|
||||
* 视频被喜欢的数量 redis key
|
||||
*/
|
||||
String GLOBAL_VLOG_LIKED_COUNT = "global:vlog:myvlogliked:count:";
|
||||
|
||||
String GLOBAL_VLOG_ALL_LIKED_COUNT="global:vlog:myallliked:count:";
|
||||
|
||||
|
||||
String GLOBAL_MEMBER_FANS_COUNT="global:member:myfans:count:";
|
||||
|
||||
/**
|
||||
* 我关注的视频数量 redis key
|
||||
*/
|
||||
String GLOBAL_MEMBER_FOLLOW_COUNT="global:member:myfollow:count:";
|
||||
|
||||
|
||||
/**
|
||||
* 我关注的视频数量 redis key
|
||||
*/
|
||||
String GLOBAL_MEMBER_FRIENDS_COUNT="global:member:myfriends:count:";
|
||||
|
||||
String GLOBAL_MEMBER_DOIFOLLOW="global:member:doifollow:";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,661 @@
|
||||
package org.dromara.common.core.constant;
|
||||
|
||||
/**
|
||||
* 返回状态码
|
||||
* 第一位 1:商品;2:用户;3:交易,4:促销,5:店铺,6:页面,7:设置,8:其他
|
||||
*
|
||||
* @author Chopper
|
||||
* @since 2020/4/8 1:36 下午
|
||||
*/
|
||||
public enum ResultCode {
|
||||
REGION_ALREADY_HAS_AGENT(100,"区域为空"),
|
||||
|
||||
/**
|
||||
* 成功状态码
|
||||
*/
|
||||
SUCCESS(200, "成功"),
|
||||
|
||||
/**
|
||||
* 失败返回码
|
||||
*/
|
||||
ERROR(400, "服务器繁忙,请稍后重试"),
|
||||
|
||||
/**
|
||||
* 失败返回码
|
||||
*/
|
||||
DEMO_SITE_EXCEPTION(4001, "演示站点禁止使用"),
|
||||
/**
|
||||
* 参数异常
|
||||
*/
|
||||
PARAMS_ERROR(4002, "参数异常"),
|
||||
|
||||
|
||||
/**
|
||||
* 系统异常
|
||||
*/
|
||||
WECHAT_CONNECT_NOT_EXIST(1001, "微信联合登录未配置"),
|
||||
VERIFICATION_EXIST(1002, "验证码服务异常"),
|
||||
LIMIT_ERROR(1003, "访问过于频繁,请稍后再试"),
|
||||
ILLEGAL_REQUEST_ERROR(1004, "非法请求,请重新刷新页面操作"),
|
||||
IMAGE_FILE_EXT_ERROR(1005, "不支持图片格式"),
|
||||
FILE_NOT_EXIST_ERROR(1011, "上传文件不能为空"),
|
||||
FILE_TYPE_NOT_SUPPORT(1010, "不支持上传的文件类型!"),
|
||||
PLATFORM_NOT_SUPPORTED_IM(1006, "平台未开启IM"),
|
||||
STORE_NOT_SUPPORTED_IM(1007, "店铺未开启IM"),
|
||||
UNINITIALIZED_PASSWORD(1008, "非初始化密码,无法进行初始化设置"),
|
||||
FILE_DIRECTORY_NOT_EMPTY(1012, "文件夹下有文件,请删除所有文件后删除文件夹!"),
|
||||
/**
|
||||
* 分类
|
||||
*/
|
||||
CATEGORY_NOT_EXIST(10001, "商品分类不存在"),
|
||||
CATEGORY_NAME_IS_EXIST(10002, "该分类名称已存在"),
|
||||
CATEGORY_PARENT_NOT_EXIST(10003, "该分类名称已存在"),
|
||||
CATEGORY_BEYOND_THREE(10004, "最多为三级分类,添加失败"),
|
||||
CATEGORY_HAS_CHILDREN(10005, "此类别下存在子类别不能删除"),
|
||||
CATEGORY_HAS_GOODS(10006, "此类别下存在商品不能删除"),
|
||||
CATEGORY_SAVE_ERROR(10007, "此类别下存在商品不能删除"),
|
||||
CATEGORY_PARAMETER_NOT_EXIST(10012, "分类绑定参数组不存在"),
|
||||
CATEGORY_PARAMETER_SAVE_ERROR(10008, "分类绑定参数组添加失败"),
|
||||
CATEGORY_PARAMETER_UPDATE_ERROR(10009, "分类绑定参数组添加失败"),
|
||||
CATEGORY_DELETE_FLAG_ERROR(10010, "子类状态不能与父类不一致!"),
|
||||
CATEGORY_COMMISSION_RATE_ERROR(10011, "分类的佣金不正确!"),
|
||||
|
||||
/**
|
||||
* 商品
|
||||
*/
|
||||
GOODS_ERROR(11001, "商品异常,请稍后重试"),
|
||||
GOODS_NOT_EXIST(11001, "商品已下架"),
|
||||
GOODS_NAME_ERROR(11002, "商品名称不正确,名称应为2-50字符"),
|
||||
GOODS_UNDER_ERROR(11003, "商品下架失败"),
|
||||
GOODS_UPPER_ERROR(11004, "商品上架失败"),
|
||||
GOODS_AUTH_ERROR(11005, "商品审核失败"),
|
||||
POINT_GOODS_ERROR(11006, "积分商品业务异常,请稍后重试"),
|
||||
POINT_GOODS_NOT_EXIST(11020, "积分商品不存在"),
|
||||
POINT_GOODS_CATEGORY_EXIST(11021, "当前积分商品分类已存在"),
|
||||
GOODS_SKU_SN_ERROR(11007, "商品SKU货号不能为空"),
|
||||
GOODS_SKU_PRICE_ERROR(11008, "商品SKU价格不能小于等于0"),
|
||||
GOODS_SKU_COST_ERROR(11009, "商品SKU成本价不能小于等于0"),
|
||||
GOODS_SKU_WEIGHT_ERROR(11010, "商品重量不能为负数"),
|
||||
GOODS_SKU_QUANTITY_ERROR(11011, "商品库存数量不能为负数"),
|
||||
GOODS_SKU_QUANTITY_NOT_ENOUGH(11011, "商品库存不足"),
|
||||
MUST_HAVE_GOODS_SKU(11012, "规格必须要有一个!"),
|
||||
MUST_HAVE_SALES_MODEL(11022, "销售模式为批发时必须要有批发规则!"),
|
||||
|
||||
HAVE_INVALID_SALES_MODEL(11023, "批发规则存在小于等于0的无效数据!"),
|
||||
MUST_HAVE_GOODS_SKU_VALUE(11024, "规格值不能为空!"),
|
||||
DO_NOT_MATCH_WHOLESALE(11025, "批发商品购买数量不能低于起拍量!"),
|
||||
GOODS_NOT_ERROR(11026, "商品不存在"),
|
||||
|
||||
GOODS_PARAMS_ERROR(11013, "商品参数错误,刷新后重试"),
|
||||
PHYSICAL_GOODS_NEED_TEMP(11014, "实物商品需选择配送模板"),
|
||||
VIRTUAL_GOODS_NOT_NEED_TEMP(11015, "虚拟商品无需选择配送模板"),
|
||||
GOODS_NOT_EXIST_STORE(11017, "当前用户无权操作此商品"),
|
||||
GOODS_TYPE_ERROR(11016, "需选择商品类型"),
|
||||
GOODS_STOCK_IMPORT_ERROR(11018, "导入商品库存失败,请检查表格数据"),
|
||||
|
||||
/**
|
||||
* 参数
|
||||
*/
|
||||
PARAMETER_SAVE_ERROR(12001, "参数添加失败"),
|
||||
PARAMETER_UPDATE_ERROR(12002, "参数编辑失败"),
|
||||
|
||||
/**
|
||||
* 规格
|
||||
*/
|
||||
SPEC_SAVE_ERROR(13001, "规格修改失败"),
|
||||
SPEC_UPDATE_ERROR(13002, "规格修改失败"),
|
||||
SPEC_DELETE_ERROR(13003, "分类已经绑定此规格,请先解除关联"),
|
||||
|
||||
/**
|
||||
* 品牌
|
||||
*/
|
||||
BRAND_SAVE_ERROR(14001, "品牌添加失败"),
|
||||
BRAND_UPDATE_ERROR(14002, "品牌修改失败"),
|
||||
BRAND_DISABLE_ERROR(14003, "品牌禁用失败"),
|
||||
BRAND_DELETE_ERROR(14004, "品牌删除失败"),
|
||||
BRAND_NAME_EXIST_ERROR(20002, "品牌名称重复!"),
|
||||
BRAND_USE_DISABLE_ERROR(20003, "分类已经绑定品牌,请先解除关联"),
|
||||
BRAND_BIND_GOODS_ERROR(20005, "品牌已经绑定商品,请先解除关联"),
|
||||
BRAND_NOT_EXIST(20004, "品牌不存在"),
|
||||
|
||||
/**
|
||||
* 用户
|
||||
*/
|
||||
USER_EDIT_SUCCESS(20001, "用户修改成功"),
|
||||
USER_NOT_EXIST(20002, "用户不存在"),
|
||||
USER_NOT_LOGIN(20003, "用户未登录"),
|
||||
USER_AUTH_EXPIRED(20004, "用户已退出,请重新登录"),
|
||||
// USER_AUTH_EXPIRE(408, "账号已被其他设备登录"),
|
||||
USER_AUTHORITY_ERROR(20005, "权限不足"),
|
||||
USER_CONNECT_LOGIN_ERROR(20006, "未找到登录信息"),
|
||||
USER_EXIST(20008, "该用户名或手机号已被注册"),
|
||||
USER_PHONE_NOT_EXIST(20009, "手机号不存在"),
|
||||
USER_PASSWORD_ERROR(20010, "密码不正确"),
|
||||
USER_NOT_PHONE(20011, "非当前用户的手机号"),
|
||||
USER_CONNECT_ERROR(20012, "联合第三方登录,授权信息错误"),
|
||||
USER_RECEIPT_REPEAT_ERROR(20013, "会员发票信息重复"),
|
||||
USER_RECEIPT_NOT_EXIST(20014, "会员发票信息不存在"),
|
||||
USER_EDIT_ERROR(20015, "用户修改失败"),
|
||||
USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"),
|
||||
USER_COLLECTION_EXIST(20017, "无法重复收藏"),
|
||||
USER_GRADE_IS_DEFAULT(20018, "会员等级为默认会员等级"),
|
||||
USER_NOT_BINDING(20020, "未绑定用户"),
|
||||
USER_AUTO_REGISTER_ERROR(20021, "自动注册失败,请稍后重试"),
|
||||
USER_OVERDUE_CONNECT_ERROR(20022, "授权信息已过期,请重新授权/登录"),
|
||||
USER_CONNECT_BANDING_ERROR(20023, "当前联合登陆方式,已绑定其他账号,需进行解绑操作"),
|
||||
USER_CONNECT_NOT_EXIST_ERROR(20024, "暂无联合登陆信息,无法实现一键注册功能,请点击第三方登录进行授权"),
|
||||
USER_POINTS_ERROR(20024, "用户积分不足"),
|
||||
CLERK_SUPPER(20025, "店主无法操作"),
|
||||
CLERK_SAVE_ERROR(20026, "店员保存失败"),
|
||||
CLERK_NOT_FOUND_ERROR(20027, "店员不存在"),
|
||||
USER_STATUS_ERROR(20028, "用户已禁用"),
|
||||
CLERK_USER_ERROR(20029, "此账户已经绑定其他店铺"),
|
||||
CLERK_ALREADY_EXIT_ERROR(20030, "店员已经存在"),
|
||||
CLERK_DISABLED_ERROR(20031, "店员已禁用"),
|
||||
CLERK_CURRENT_SUPPER(20032, "无法删除当前登录店员"),
|
||||
CANT_EDIT_CLERK_SHOPKEEPER(20033, "无法在店员管理编辑店员信息"),
|
||||
USER_MOBILE_REPEATABLE_ERROR(20034, "该手机号已存在"),
|
||||
/**
|
||||
* 权限
|
||||
*/
|
||||
PERMISSION_DEPARTMENT_ROLE_ERROR(21001, "角色已绑定部门,请逐个删除"),
|
||||
PERMISSION_USER_ROLE_ERROR(21002, "角色已绑定管理员,请逐个删除"),
|
||||
PERMISSION_MENU_ROLE_ERROR(21003, "菜单已绑定角色,请先删除或编辑角色"),
|
||||
PERMISSION_DEPARTMENT_DELETE_ERROR(21004, "部门已经绑定管理员,请先删除或编辑管理员"),
|
||||
PERMISSION_BEYOND_TEN(21005, "最多可以设置10个角色"),
|
||||
PERMISSION_NOT_FOUND_ERROR(21006, "部门不存在"),
|
||||
PERMISSION_ROLE_NOT_FOUND_ERROR(21007, "角色不存在"),
|
||||
PERMISSION_CLERK_BAND_ERROR(21008, "此手机号码已绑定其他店铺 "),
|
||||
|
||||
|
||||
/**
|
||||
* 分销
|
||||
*/
|
||||
DISTRIBUTION_CLOSE(22000, "分销功能关闭"),
|
||||
DISTRIBUTION_NOT_EXIST(22001, "分销员不存在"),
|
||||
DISTRIBUTION_IS_APPLY(22002, "分销员已申请,无需重复提交"),
|
||||
DISTRIBUTION_AUDIT_ERROR(22003, "审核分销员失败"),
|
||||
DISTRIBUTION_RETREAT_ERROR(22004, "分销员清退失败"),
|
||||
DISTRIBUTION_CASH_NOT_EXIST(22005, "分销员提现记录不存在"),
|
||||
DISTRIBUTION_GOODS_DOUBLE(22006, "不能重复添加分销商品"),
|
||||
DISTRIBUTION_EDIT_ERROR(22007, "修改分销员失败"),
|
||||
|
||||
/**
|
||||
* 购物车
|
||||
*/
|
||||
CART_ERROR(30001, "读取结算页的购物车异常"),
|
||||
CART_NUM_ERROR(30010, "购买数量必须大于0"),
|
||||
CART_PINTUAN_NOT_EXIST_ERROR(30002, "拼团活动已关闭,请稍后重试"),
|
||||
CART_PINTUAN_LIMIT_ERROR(30003, "购买数量超过拼团活动限制数量"),
|
||||
SHIPPING_NOT_APPLY(30005, "购物商品不支持当前收货地址配送"),
|
||||
|
||||
/**
|
||||
* 订单
|
||||
*/
|
||||
ORDER_ERROR(31001, "创建订单异常,请稍后重试"),
|
||||
ORDER_NOT_EXIST(31002, "订单不存在"),
|
||||
ORDER_DELIVERED_ERROR(31003, "订单状态错误,无法进行确认收货"),
|
||||
ORDER_UPDATE_PRICE_ERROR(31004, "已支付的订单不能修改金额"),
|
||||
ORDER_LOGISTICS_ERROR(31005, "物流错误"),
|
||||
ORDER_DELIVER_ERROR(31006, "物流错误"),
|
||||
ORDER_NOT_USER(31007, "非当前会员的订单"),
|
||||
ORDER_TAKE_ERROR(31008, "当前订单无法核销"),
|
||||
MEMBER_ADDRESS_NOT_EXIST(31009, "订单无收货地址,请先配置收货地址"),
|
||||
STORE_ADDRESS_NOT_EXIST(31009, "订单没有自提地址,请先选择自提地址"),
|
||||
ORDER_DELIVER_NUM_ERROR(31010, "没有待发货的订单"),
|
||||
ORDER_NOT_SUPPORT_DISTRIBUTION(31011, "购物车中包含不支持配送的商品,请重新选择收货地址,或者重新选择商品"),
|
||||
ORDER_NOT_EXIST_VALID(31041, "购物车中无有效商品,请检查购物车内商品,或者重新选择商品"),
|
||||
ORDER_CAN_NOT_CANCEL(31012, "当前订单状态不可取消"),
|
||||
ORDER_BATCH_DELIVER_ERROR(31013, "批量发货,文件读取失败"),
|
||||
ORDER_ITEM_NOT_EXIST(31014, "当前订单项不存在!"),
|
||||
POINT_NOT_ENOUGH(31015, "当前会员积分不足购买当前积分商品!"),
|
||||
ORDER_LABEL_ORDER_ERROR(31016, "订单不能打印电子面单"),
|
||||
ORDER_PRICE_ERROR(31017,"订单金额不能小于等于0"),
|
||||
ORDER_PACKAGE_NOT_EXIST(31017, "当前订单包裹不存在!"),
|
||||
|
||||
|
||||
/**
|
||||
* 支付
|
||||
*/
|
||||
PAY_UN_WANTED(32000, "当前订单不需要付款,返回订单列表等待系统订单出库即可"),
|
||||
PAY_SUCCESS(32001, "支付成功"),
|
||||
PAY_INCONSISTENT_ERROR(32002, "付款金额和应付金额不一致"),
|
||||
PAY_DOUBLE_ERROR(32003, "订单已支付,不能再次进行支付"),
|
||||
PAY_CASHIER_ERROR(32004, "收银台信息获取错误"),
|
||||
PAY_ERROR(32005, "支付业务异常,请稍后重试"),
|
||||
PAY_BAN(32006, "当前订单不需要付款,请返回订单列表重新操作"),
|
||||
PAY_PARTIAL_ERROR(32007, "该订单已部分支付,请前往订单中心进行支付"),
|
||||
PAY_NOT_SUPPORT(32008, "支付暂不支持"),
|
||||
PAY_CLIENT_TYPE_ERROR(32009, "错误的客户端"),
|
||||
PAY_POINT_ENOUGH(32010, "积分不足,不能兑换"),
|
||||
PAY_NOT_EXIST_ORDER(32011, "支付订单不存在"),
|
||||
CAN_NOT_RECHARGE_WALLET(32012, "不能使用余额进行充值"),
|
||||
RECHARGE_PRICE_ERROR(32013, "充值金额错误"),
|
||||
|
||||
|
||||
WITHDRAW_ERROR(33000, "提现失败"),
|
||||
WITHDRAW_AUDIT_ERROR(33001, "提现审核失败"),
|
||||
WITHDRAW_WALLET_ERROR(33002, "提现到钱包失败"),
|
||||
|
||||
|
||||
|
||||
PACKET_SINGLE_COUNT_ERROR(35000, "单聊红包数量只能为1"),
|
||||
|
||||
|
||||
/**
|
||||
* 售后
|
||||
*/
|
||||
AFTER_SALES_NOT_PAY_ERROR(33001, "当前订单未支付,不能申请售后"),
|
||||
AFTER_SALES_CANCEL_ERROR(33002, "当前售后单无法取消"),
|
||||
AFTER_SALES_BAN(33003, "订单状态不允许申请售后,请联系平台或商家"),
|
||||
AFTER_SALES_DOUBLE_ERROR(33004, "售后已审核,无法重复操作"),
|
||||
AFTER_SALES_LOGISTICS_ERROR(33005, "物流公司错误,请重新选择"),
|
||||
AFTER_STATUS_ERROR(33006, "售后状态错误,请刷新页面"),
|
||||
RETURN_MONEY_OFFLINE_BANK_ERROR(33007, "当账号类型为银行转账时,银行信息不能为空"),
|
||||
AFTER_SALES_PRICE_ERROR(33004, "申请退款金额错误"),
|
||||
AFTER_GOODS_NUMBER_ERROR(33008, "申请售后商品数量错误"),
|
||||
|
||||
/**
|
||||
* 投诉
|
||||
*/
|
||||
COMPLAINT_ORDER_ITEM_EMPTY_ERROR(33100, "订单不存在"),
|
||||
COMPLAINT_SKU_EMPTY_ERROR(33101, "商品已下架,如需投诉请联系平台客服"),
|
||||
COMPLAINT_ERROR(33102, "投诉异常,请稍后重试"),
|
||||
COMPLAINT_NOT_EXIT(33103, "当前投诉记录不存在"),
|
||||
COMPLAINT_ARBITRATION_RESULT_ERROR(33104, "结束订单投诉时,仲裁结果不能为空"),
|
||||
COMPLAINT_APPEAL_CONTENT_ERROR(33105, "商家申诉时,申诉内容不能为空"),
|
||||
COMPLAINT_CANCEL_ERROR(33106, "申诉已完成,不需要进行取消申诉操作"),
|
||||
|
||||
|
||||
/**
|
||||
* 余额
|
||||
*/
|
||||
WALLET_NOT_EXIT_ERROR(34000, "钱包不存在,请联系管理员"),
|
||||
WALLET_INSUFFICIENT(34001, "余额不足以支付订单,请充值!"),
|
||||
WALLET_WITHDRAWAL_INSUFFICIENT(34002, "可提现金额不足!"),
|
||||
WALLET_WITHDRAWAL_FROZEN_AMOUNT_INSUFFICIENT(34006, "冻结金额不足,无法处理提现申请请求!"),
|
||||
WALLET_ERROR_INSUFFICIENT(34003, "零钱提现失败!"),
|
||||
WALLET_REMARK_ERROR(34004, "请填写审核备注!"),
|
||||
WALLET_EXIT_ERROR(34005, "钱包已存在,无法重复创建"),
|
||||
WALLET_APPLY_ERROR(34006, "提现申请异常!"),
|
||||
WALLET_APPLY_MIN_PRICE_ERROR(34007, "提现最低提现金额错误!"),
|
||||
WALLET_WITHDRAWAL_AMOUNT_ERROR(34008, "申请提现金额异常!"),
|
||||
/**
|
||||
* 评价
|
||||
*/
|
||||
EVALUATION_DOUBLE_ERROR(35001, "无法重复提交评价"),
|
||||
|
||||
/**
|
||||
* 活动
|
||||
*/
|
||||
PROMOTION_GOODS_NOT_EXIT(40000, "当前促销商品不存在!"),
|
||||
PROMOTION_GOODS_QUANTITY_NOT_EXIT(40020, "当前促销商品库存不足!"),
|
||||
PROMOTION_GOODS_DO_NOT_JOIN_WHOLESALE(40050, "批发商品无法参加促销"),
|
||||
PROMOTION_SAME_ACTIVE_EXIST(40001, "活动时间内已存在同类活动,请选择关闭、删除当前时段的活动"),
|
||||
PROMOTION_START_TIME_ERROR(40002, "活动起始时间不能小于当前时间"),
|
||||
PROMOTION_END_TIME_ERROR(40003, "活动结束时间不能小于当前时间"),
|
||||
PROMOTION_TIME_ERROR(40004, "活动起始时间必须大于结束时间"),
|
||||
PROMOTION_TIME_NOT_EXIST(40011, "活动起始时间和活动结束时间不能为空"),
|
||||
PROMOTION_SAME_ERROR(40005, "当前时间段已存在相同活动!"),
|
||||
PROMOTION_GOODS_ERROR(40006, "请选择要参与活动的商品"),
|
||||
PROMOTION_STATUS_END(40007, "当前活动已停止"),
|
||||
PROMOTION_UPDATE_ERROR(40008, "当前活动已开始/结束,无法编辑!"),
|
||||
PROMOTION_ACTIVITY_GOODS_ERROR(40009, "当前活动已经开始无法添加商品"),
|
||||
PROMOTION_ACTIVITY_ERROR(400010, "当前促销活动不存在"),
|
||||
PROMOTION_LOG_EXIST(40011, "活动已参加,已发重复参加"),
|
||||
APPLY_END_TIME_ERROR(40012, "参与截至时间不能小于当前时间,不能大于活动开始时间"),
|
||||
|
||||
/**
|
||||
* 优惠券
|
||||
*/
|
||||
COUPON_LIMIT_ERROR(41000, "超出领取限制"),
|
||||
COUPON_EDIT_STATUS_SUCCESS(41001, "修改状态成功!"),
|
||||
COUPON_CANCELLATION_SUCCESS(41002, "会员优惠券作废成功"),
|
||||
COUPON_EXPIRED(41003, "优惠券已使用/已过期,不能使用"),
|
||||
COUPON_EDIT_STATUS_ERROR(41004, "优惠券修改状态失败!"),
|
||||
COUPON_RECEIVE_ERROR(41005, "当前优惠券已经被领取完了,下次要早点来哦"),
|
||||
COUPON_NUM_INSUFFICIENT_ERROR(41006, "优惠券剩余领取数量不足"),
|
||||
COUPON_NOT_EXIST(41007, "当前优惠券不存在"),
|
||||
COUPON_LIMIT_NUM_LESS_THAN_0(41008, "领取限制数量不能为负数"),
|
||||
COUPON_LIMIT_GREATER_THAN_PUBLISH(41009, "领取限制数量超出发行数量"),
|
||||
COUPON_DISCOUNT_ERROR(41010, "优惠券折扣必须小于10且大于0"),
|
||||
COUPON_SCOPE_TYPE_GOODS_ERROR(41011, "当前关联范围类型为指定商品时,商品列表不能为空"),
|
||||
COUPON_SCOPE_TYPE_CATEGORY_ERROR(41012, "当前关联范围类型为部分商品分类时,范围关联的id不能为空"),
|
||||
COUPON_SCOPE_TYPE_STORE_ERROR(41013, "当前关联范围类型为部分店铺分类时,范围关联的id不能为空"),
|
||||
COUPON_SCOPE_ERROR(41014, "指定商品范围关联id无效!"),
|
||||
COUPON_MEMBER_NOT_EXIST(41015, "没有当前会员优惠券"),
|
||||
COUPON_MEMBER_STATUS_ERROR(41016, "当前会员优惠券已过期/作废无法变更状态!"),
|
||||
COUPON_RANGE_ERROR(41017, "优惠券使用时间范围错误"),
|
||||
|
||||
SPECIAL_CANT_USE(41019, "特殊商品不能使用优惠券,不能使用"),
|
||||
|
||||
COUPON_SAVE_ERROR(41020, "保存优惠券失败"),
|
||||
COUPON_DELETE_ERROR(41021, "删除优惠券失败"),
|
||||
COUPON_ACTIVITY_NOT_EXIST(41022, "当前优惠券活动不存在"),
|
||||
COUPON_ACTIVITY_SAVE_ERROR(41023, "保存优惠券活动失败"),
|
||||
COUPON_ACTIVITY_MAX_NUM(41024, "优惠券活动赠券数量最多为5"),
|
||||
|
||||
COUPON_DO_NOT_RECEIVER(41030, "当前优惠券不允许主动领取"),
|
||||
|
||||
/**
|
||||
* 拼团
|
||||
*/
|
||||
PINTUAN_MANUAL_OPEN_SUCCESS(42001, "手动开启拼团活动成功"),
|
||||
PINTUAN_MANUAL_CLOSE_SUCCESS(42002, "手动关闭拼团活动成功"),
|
||||
PINTUAN_ADD_SUCCESS(42003, "添加拼团活动成功"),
|
||||
PINTUAN_EDIT_SUCCESS(42004, "修改拼团活动成功"),
|
||||
PINTUAN_DELETE_SUCCESS(42005, "删除拼团活动成功"),
|
||||
PINTUAN_MANUAL_OPEN_ERROR(42006, "手动开启拼团活动失败"),
|
||||
PINTUAN_MANUAL_CLOSE_ERROR(42007, "手动关闭拼团活动失败"),
|
||||
PINTUAN_ADD_ERROR(42008, "添加拼团活动失败"),
|
||||
PINTUAN_EDIT_ERROR(42009, "修改拼团活动失败"),
|
||||
PINTUAN_EDIT_ERROR_ITS_OPEN(42019, "拼团活动已开启,无法修改拼团活动!"),
|
||||
PINTUAN_DELETE_ERROR(42010, "删除拼团活动失败"),
|
||||
PINTUAN_JOIN_ERROR(42011, "不能参与自己发起的拼团活动!"),
|
||||
PINTUAN_LIMIT_NUM_ERROR(42012, "购买数量超过拼团活动限制数量!"),
|
||||
PINTUAN_NOT_EXIST_ERROR(42013, "当前拼团活动不存在!"),
|
||||
PINTUAN_GOODS_NOT_EXIST_ERROR(42014, "当前拼团商品不存在!"),
|
||||
|
||||
/**
|
||||
* 满额活动
|
||||
*/
|
||||
FULL_DISCOUNT_EDIT_SUCCESS(43001, "修改满优惠活动成功"),
|
||||
FULL_DISCOUNT_EDIT_DELETE(43002, "删除满优惠活动成功"),
|
||||
FULL_DISCOUNT_MODIFY_ERROR(43003, "当前编辑的满优惠活动已经开始或者已经结束,无法修改"),
|
||||
FULL_DISCOUNT_NOT_EXIST_ERROR(43004, "当前要操作的满优惠活动不存在!"),
|
||||
FULL_DISCOUNT_WAY_ERROR(43005, "请选择一种优惠方式!"),
|
||||
FULL_DISCOUNT_GIFT_ERROR(43006, "请选择赠品!"),
|
||||
FULL_DISCOUNT_COUPON_TIME_ERROR(43007, "赠送的优惠券有效时间必须在活动时间之内"),
|
||||
FULL_DISCOUNT_MONEY_ERROR(43008, "请填写满减金额"),
|
||||
FULL_DISCOUNT_MONEY_GREATER_THAN_MINUS(43009, "满减金额不能大于优惠门槛"),
|
||||
FULL_RATE_NUM_ERROR(43010, "请填写打折数值"),
|
||||
|
||||
/**
|
||||
* 直播
|
||||
*/
|
||||
STODIO_GOODS_EXIST_ERROR(44001, "直播商品已存在"),
|
||||
COMMODITY_ERROR(44002, "添加直播商品失败"),
|
||||
|
||||
/**
|
||||
* 秒杀
|
||||
*/
|
||||
SECKILL_NOT_START_ERROR(45000, "今日没有限时抢购活动,请明天再来看看吧。"),
|
||||
SECKILL_NOT_EXIST_ERROR(45001, "当前参与的秒杀活动不存在!"),
|
||||
SECKILL_APPLY_NOT_EXIST_ERROR(45010, "当前参与的秒杀活动不存在!"),
|
||||
SECKILL_UPDATE_ERROR(45002, "当前秒杀活动活动已经开始,无法修改!"),
|
||||
SECKILL_PRICE_ERROR(45003, "活动价格不能大于商品原价"),
|
||||
SECKILL_TIME_ERROR(45004, "时刻参数异常"),
|
||||
SECKILL_DELETE_ERROR(45005, "该秒杀活动活动的状态不能删除"),
|
||||
SECKILL_OPEN_ERROR(45010, "该秒杀活动活动的状态不能删除"),
|
||||
SECKILL_CLOSE_ERROR(45006, "该秒杀活动活动的状态不能关闭"),
|
||||
|
||||
|
||||
/**
|
||||
* 优惠券活动
|
||||
*/
|
||||
COUPON_ACTIVITY_START_TIME_ERROR(46001, "活动时间小于当前时间,不能进行编辑删除操作"),
|
||||
COUPON_ACTIVITY_MEMBER_ERROR(46002, "指定精准发券则必须指定会员,会员不可以为空"),
|
||||
COUPON_ACTIVITY_ITEM_ERROR(46003, "优惠券活动必须指定优惠券,不能为空"),
|
||||
COUPON_ACTIVITY_ITEM_MUST_NUM_ERROR(46004, "优惠券活动最多指定10个优惠券"),
|
||||
COUPON_ACTIVITY_ITEM_NUM_ERROR(46005, "赠券数量必须大于0"),
|
||||
COUPON_ACTIVITY_ITEM_NUM_MAX_VALUE_2(46006, "赠券数量最大为2"),
|
||||
|
||||
/**
|
||||
* 其他促销
|
||||
*/
|
||||
MEMBER_SIGN_REPEAT(47001, "请勿重复签到"),
|
||||
POINT_GOODS_ACTIVE_STOCK_ERROR(47002, "活动库存数量不能高于商品库存"),
|
||||
POINT_GOODS_ACTIVE_STOCK_INSUFFICIENT(47003, "积分商品库存不足"),
|
||||
|
||||
/**
|
||||
* 砍价活动
|
||||
*/
|
||||
KANJIA_GOODS_ACTIVE_STOCK_ERROR(48001, "活动库存数量不能高于商品库存"),
|
||||
KANJIA_GOODS_ACTIVE_PRICE_ERROR(48002, "最低购买金额不能高于商品金额"),
|
||||
KANJIA_GOODS_ACTIVE_HIGHEST_PRICE_ERROR(48003, "最高砍价金额不能为0且不能超过商品金额"),
|
||||
KANJIA_GOODS_ACTIVE_LOWEST_PRICE_ERROR(48004, "最低砍价金额不能为0且不能超过商品金额"),
|
||||
KANJIA_GOODS_ACTIVE_HIGHEST_LOWEST_PRICE_ERROR(48005, "最低砍价金额不能高于最高砍价金额"),
|
||||
KANJIA_GOODS_ACTIVE_SETTLEMENT_PRICE_ERROR(48006, "结算金额不能高于商品金额"),
|
||||
KANJIA_GOODS_DELETE_ERROR(48007, "删除砍价商品异常"),
|
||||
KANJIA_GOODS_UPDATE_ERROR(48012, "更新砍价商品异常"),
|
||||
KANJIA_ACTIVITY_NOT_FOUND_ERROR(48008, "砍价记录不存在"),
|
||||
KANJIA_ACTIVITY_LOG_MEMBER_ERROR(48009, "当前会员已经帮砍"),
|
||||
KANJIA_ACTIVITY_MEMBER_ERROR(48010, "当前会员已经发起此砍价商品活动"),
|
||||
KANJIA_ACTIVITY_NOT_PASS_ERROR(48011, "当前砍价未满足条件,不能进行购买"),
|
||||
KANJIA_NUM_BUY_ERROR(48012, "砍价商品购买数量不正确"),
|
||||
/**
|
||||
* 店铺
|
||||
*/
|
||||
|
||||
STORE_NOT_EXIST(50001, "此店铺不存在"),
|
||||
STORE_NAME_EXIST_ERROR(50002, "店铺名称已存在!"),
|
||||
STORE_APPLY_DOUBLE_ERROR(50003, "已经拥有店铺!"),
|
||||
STORE_NOT_OPEN(50004, "该会员未开通店铺"),
|
||||
STORE_NOT_LOGIN_ERROR(50005, "未登录店铺"),
|
||||
STORE_CLOSE_ERROR(50006, "店铺关闭,请联系管理员"),
|
||||
STORE_DELIVER_GOODS_ADDRESS(50007,"请填写商家发货地址"),
|
||||
FREIGHT_TEMPLATE_NOT_EXIST(50010, "当前模版不存在"),
|
||||
STORE_STATUS_ERROR(50011, "店铺在申请中或审核中,请勿重复操作"),
|
||||
STORE_DELIVER_ADDRESS_EXIST(50012,"请填写发货地址"),
|
||||
|
||||
/**
|
||||
* 结算单
|
||||
*/
|
||||
BILL_CHECK_ERROR(51001, "只有已出账结算单可以核对"),
|
||||
BILL_COMPLETE_ERROR(51002, "只有已审核结算单可以支付"),
|
||||
|
||||
/**
|
||||
* 文章
|
||||
*/
|
||||
ARTICLE_CATEGORY_NAME_EXIST(60001, "文章分类名称已存在"),
|
||||
ARTICLE_CATEGORY_PARENT_NOT_EXIST(60002, "文章分类父分类不存在"),
|
||||
ARTICLE_CATEGORY_BEYOND_TWO(60003, "最多为二级分类,操作失败"),
|
||||
ARTICLE_CATEGORY_DELETE_ERROR(60004, "该文章分类下存在子分类,不能删除"),
|
||||
ARTICLE_CATEGORY_HAS_ARTICLE(60005, "该文章分类下存在文章,不能删除"),
|
||||
ARTICLE_CATEGORY_NO_DELETION(60007, "默认文章分类不能进行删除"),
|
||||
ARTICLE_NO_DELETION(60008, "默认文章不能进行删除"),
|
||||
|
||||
|
||||
/**
|
||||
* 页面
|
||||
*/
|
||||
PAGE_NOT_EXIST(61001, "页面不存在"),
|
||||
PAGE_OPEN_DELETE_ERROR(61002, "当前页面为开启状态,无法删除"),
|
||||
PAGE_DELETE_ERROR(61003, "当前页面为唯一页面,无法删除"),
|
||||
PAGE_RELEASE_ERROR(61004, "页面已发布,无需重复提交"),
|
||||
|
||||
/**
|
||||
* 设置
|
||||
*/
|
||||
SETTING_NOT_TO_SET(70001, "该参数不需要设置"),
|
||||
ALIPAY_NOT_SETTING(70002, "支付宝支付未配置"),
|
||||
ALIPAY_EXCEPTION(70003, "支付宝支付错误,请稍后重试"),
|
||||
ALIPAY_PARAMS_EXCEPTION(70004, "支付宝参数异常"),
|
||||
LOGISTICS_NOT_SETTING(70005, "您还未配置快递查询"),
|
||||
LOGISTICS_CHECK_SETTING(70005, "操作失败,请检查您的快递鸟配置"),
|
||||
ORDER_SETTING_ERROR(70006, "系统订单配置异常"),
|
||||
ALI_SMS_SETTING_ERROR(70007, "您还未配置阿里云短信"),
|
||||
SMS_SIGN_EXIST_ERROR(70008, "短信签名已存在"),
|
||||
|
||||
/**
|
||||
* 站内信
|
||||
*/
|
||||
NOTICE_NOT_EXIST(80001, "当前消息模板不存在"),
|
||||
NOTICE_ERROR(80002, "修改站内信异常,请稍后重试"),
|
||||
NOTICE_SEND_ERROR(80003, "发送站内信异常,请检查系统日志"),
|
||||
|
||||
|
||||
/**
|
||||
* OSS
|
||||
*/
|
||||
OSS_NOT_EXIST(80101, "OSS未配置"),
|
||||
OSS_EXCEPTION_ERROR(80102, "文件上传失败,请稍后重试"),
|
||||
OSS_DELETE_ERROR(80103, "图片删除失败"),
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
VERIFICATION_SEND_SUCCESS(80201, "短信验证码,发送成功"),
|
||||
VERIFICATION_ERROR(80202, "验证失败"),
|
||||
VERIFICATION_CODE_INVALID(80204, "验证码已失效,请重新校验"),
|
||||
VERIFICATION_SMS_CHECKED_ERROR(80210, "短信验证码错误,请重新校验"),
|
||||
|
||||
/**
|
||||
* 微信相关异常
|
||||
*/
|
||||
WECHAT_CONNECT_NOT_SETTING(80300, "微信联合登陆信息未配置"),
|
||||
WECHAT_PAYMENT_NOT_SETTING(80301, "微信支付信息未配置"),
|
||||
WECHAT_QRCODE_ERROR(80302, "微信二维码生成异常"),
|
||||
WECHAT_MP_MESSAGE_ERROR(80303, "微信小程序小消息订阅异常"),
|
||||
WECHAT_JSAPI_SIGN_ERROR(80304, "微信JsApi签名异常"),
|
||||
WECHAT_CERT_ERROR(80305, "证书获取失败"),
|
||||
WECHAT_MP_MESSAGE_TMPL_ERROR(80306, "未能获取到微信模版消息id"),
|
||||
WECHAT_ERROR(80307, "微信接口异常"),
|
||||
APP_VERSION_EXIST(80307, "APP版本已存在"),
|
||||
APP_VERSION_PARAM_ERROR(80308, "添加APP版本参数异常"),
|
||||
// 未选择APP类型
|
||||
APP_VERSION_TYPE_ERROR(80308, "请选择有效的APP类型"),
|
||||
|
||||
/**
|
||||
* IM
|
||||
*/
|
||||
IM_MESSAGE_ADD_ERROR(80400,"IM消息发送错误"),
|
||||
IM_MESSAGE_EDIT_ERROR(80400,"IM消息更新错误"),
|
||||
|
||||
/**
|
||||
* 其他
|
||||
*/
|
||||
CUSTOM_WORDS_EXIST_ERROR(90000, "当前自定义分词已存在!"),
|
||||
CUSTOM_WORDS_NOT_EXIST_ERROR(90001, "当前自定义分词不存在!"),
|
||||
CUSTOM_WORDS_SECRET_KEY_ERROR(90002, "秘钥验证失败!"),
|
||||
CONNECT_NOT_EXIST(90000, "登录方式不存在!"),
|
||||
ELASTICSEARCH_INDEX_INIT_ERROR(90003, "索引初始化失败!"),
|
||||
PURCHASE_ORDER_DEADLINE_ERROR(90004, "供求单,已超过报名截止时间"),
|
||||
USER_ADD_ERROR(90005, "用户添加失败"),
|
||||
INDEX_BUILDING(90005, "索引正在生成"),
|
||||
/**
|
||||
* 只有达人才能申生成分享吗
|
||||
*/
|
||||
SHARE_CODE_NOT_MA(30005,"只有达人才能生成分享吗"),
|
||||
/**
|
||||
* 分享码不存在
|
||||
*/
|
||||
SHARE_CODE_NOT_EXIST(30001, "分享码不存在"),
|
||||
|
||||
/**
|
||||
* 分享码已被使用
|
||||
*/
|
||||
SHARE_CODE_ALREADY_USED(30002, "分享码已被使用"),
|
||||
|
||||
/**
|
||||
* 分享码已存在
|
||||
*/
|
||||
SHARE_CODE_ALREADY_EXIST(30003, "分享码已存在"),
|
||||
|
||||
/**
|
||||
* 不能绑定自己的分享码
|
||||
*/
|
||||
CANNOT_BIND_OWN_CODE(30004, "不能绑定自己的分享码"),
|
||||
|
||||
/**
|
||||
* 已绑定过这个分享码
|
||||
*/
|
||||
ALREADY_BIND_THIS_CODE(30008, "已绑定过这个分享码"),
|
||||
|
||||
/**
|
||||
* 已绑定过其他达人
|
||||
*/
|
||||
ALREADY_BIND_SHARE_CODE(30009, "已绑定过其他达人,不能重复绑定"),
|
||||
|
||||
/**
|
||||
* 分享码无效
|
||||
*/
|
||||
SHARE_CODE_INVALID(30006, "分享码无效"),
|
||||
EXPERT_NOT_EXIST(30010,"达人不存在"),
|
||||
EXPERT_EXIST(3012,"达人已经存在"),
|
||||
INVALID_CODE_OR_PHONE(3011,"无效的分享码或手机号格式"),
|
||||
|
||||
/**
|
||||
* 分享码已被绑定
|
||||
*/
|
||||
SHARE_CODE_ALREADY_BIND(30007, "分享码已被绑定"),
|
||||
|
||||
/**
|
||||
* 分享码不能绑定自己
|
||||
*/
|
||||
SHARE_CODE_CANNOT_BIND_SELF(500, "分享码不能绑定自己"),
|
||||
|
||||
/**
|
||||
* 只有达人可以生成邀请码
|
||||
*/
|
||||
ONLY_EXPERT_CAN_GENERATE_CODE(500, "只有达人可以生成邀请码"),
|
||||
|
||||
/**
|
||||
* 达人不能绑定邀请码
|
||||
*/
|
||||
EXPERT_CANNOT_BIND_CODE(500, "达人不能绑定邀请码"),
|
||||
|
||||
/**
|
||||
* 核销码不存在
|
||||
*/
|
||||
VERIFICATION_CODE_NOT_EXIST(500, "核销码不存在"),
|
||||
|
||||
/**
|
||||
* 核销码已过期
|
||||
*/
|
||||
VERIFICATION_CODE_EXPIRED(500, "核销码已过期"),
|
||||
|
||||
/**
|
||||
* 核销码已被使用
|
||||
*/
|
||||
VERIFICATION_CODE_ALREADY_USED(500, "核销码已被使用"),
|
||||
|
||||
/**
|
||||
* 核销操作繁忙
|
||||
*/
|
||||
VERIFICATION_OPERATION_BUSY(500, "核销操作繁忙,请稍后重试"),
|
||||
|
||||
/**
|
||||
* 订单状态错误
|
||||
*/
|
||||
ORDER_STATUS_ERROR(500, "订单状态错误"),
|
||||
|
||||
/**
|
||||
* 订单类型错误
|
||||
*/
|
||||
ORDER_TYPE_ERROR(500, "订单类型错误"),
|
||||
|
||||
/**
|
||||
* 订单已核销
|
||||
*/
|
||||
ORDER_ALREADY_VERIFICATION(500, "订单已核销");
|
||||
|
||||
// /**
|
||||
// * 订单不存在
|
||||
// */
|
||||
// ORDER_NOT_EXIST(400, "订单不存在")
|
||||
|
||||
// /**
|
||||
// * 订单项不存在
|
||||
// */
|
||||
// ORDER_ITEM_NOT_EXIST(400, "订单项不存在");
|
||||
|
||||
|
||||
private final Integer code;
|
||||
private final String message;
|
||||
|
||||
|
||||
ResultCode(Integer code, String message) {
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public Integer code() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
public String message() {
|
||||
return this.message;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package org.dromara.common.core.domain;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class BaseBO <T> {
|
||||
|
||||
private Integer current=1;
|
||||
|
||||
private Integer size=10;
|
||||
|
||||
protected LocalDateTime beginTime;
|
||||
|
||||
protected LocalDateTime endTime;
|
||||
|
||||
/**
|
||||
* bo转换成queryWrapper
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public LambdaQueryWrapper<T> toWrapper() {
|
||||
return new LambdaQueryWrapper<T>();
|
||||
}
|
||||
|
||||
public Page<T> getPage() {
|
||||
return new Page<>(current, size);
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package org.dromara.common.core.domain;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface IQuery {
|
||||
/**
|
||||
* @return 搜索值
|
||||
*/
|
||||
String getSearchValue();
|
||||
|
||||
/**
|
||||
* @return 所有参数
|
||||
*/
|
||||
Map<String, Object> getParams();
|
||||
}
|
@ -3,6 +3,7 @@ package org.dromara.common.core.domain;
|
||||
import org.dromara.common.core.constant.HttpStatus;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.core.constant.ResultCode;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
@ -38,6 +39,9 @@ public class R<T> implements Serializable {
|
||||
public static <T> R<T> ok() {
|
||||
return restResult(null, SUCCESS, "操作成功");
|
||||
}
|
||||
public static <T> R<T> notLogin() {
|
||||
return restResult(null, ResultCode.USER_CONNECT_LOGIN_ERROR.code(),ResultCode.USER_CONNECT_LOGIN_ERROR.message());
|
||||
}
|
||||
|
||||
public static <T> R<T> ok(T data) {
|
||||
return restResult(data, SUCCESS, "操作成功");
|
||||
|
@ -0,0 +1,256 @@
|
||||
package org.dromara.common.core.domain.event;
|
||||
|
||||
/**
|
||||
* 通用常量信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class Constants
|
||||
{
|
||||
/**
|
||||
* UTF-8 字符集
|
||||
*/
|
||||
public static final String UTF8 = "UTF-8";
|
||||
|
||||
/**
|
||||
* GBK 字符集
|
||||
*/
|
||||
public static final String GBK = "GBK";
|
||||
|
||||
/**
|
||||
* http请求
|
||||
*/
|
||||
public static final String HTTP = "http://";
|
||||
|
||||
/**
|
||||
* https请求
|
||||
*/
|
||||
public static final String HTTPS = "https://";
|
||||
|
||||
/**
|
||||
* 通用成功标识
|
||||
*/
|
||||
public static final String SUCCESS = "0";
|
||||
|
||||
/**
|
||||
* 通用失败标识
|
||||
*/
|
||||
public static final String FAIL = "1";
|
||||
|
||||
/**
|
||||
* 登录成功
|
||||
*/
|
||||
public static final String LOGIN_SUCCESS = "Success";
|
||||
|
||||
/**
|
||||
* 注销
|
||||
*/
|
||||
public static final String LOGOUT = "Logout";
|
||||
|
||||
/**
|
||||
* 注册
|
||||
*/
|
||||
public static final String REGISTER = "Register";
|
||||
|
||||
/**
|
||||
* 登录失败
|
||||
*/
|
||||
public static final String LOGIN_FAIL = "Error";
|
||||
|
||||
/**
|
||||
* 验证码 redis key
|
||||
*/
|
||||
public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
|
||||
|
||||
/**
|
||||
* 登录用户 redis key
|
||||
*/
|
||||
public static final String LOGIN_TOKEN_KEY = "login_tokens:";
|
||||
public static final String LOGIN_MEMBER_TOKEN_KEY = "login_member_tokens:";
|
||||
public static final String MEMBER_INFO = "member_info";
|
||||
|
||||
/**
|
||||
* 防重提交 redis key
|
||||
*/
|
||||
public static final String REPEAT_SUBMIT_KEY = "repeat_submit:";
|
||||
|
||||
/**
|
||||
* 限流 redis key
|
||||
*/
|
||||
public static final String RATE_LIMIT_KEY = "rate_limit:";
|
||||
|
||||
/**
|
||||
* 验证码有效期(分钟)
|
||||
*/
|
||||
public static final Integer CAPTCHA_EXPIRATION = 5;
|
||||
|
||||
/**
|
||||
* 令牌
|
||||
*/
|
||||
public static final String TOKEN = "token";
|
||||
|
||||
/**
|
||||
* 令牌前缀
|
||||
*/
|
||||
public static final String TOKEN_PREFIX = "Bearer ";
|
||||
|
||||
/**
|
||||
* 令牌前缀
|
||||
*/
|
||||
public static final String LOGIN_USER_KEY = "login_user_key";
|
||||
public static final String LOGIN_MEMBER_KEY = "login_member_key";
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
public static final String JWT_USERID = "userid";
|
||||
|
||||
/**
|
||||
* 用户名称
|
||||
*/
|
||||
// public static final String JWT_USERNAME = Claims.SUBJECT;
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
public static final String JWT_AVATAR = "avatar";
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
public static final String JWT_CREATED = "created";
|
||||
|
||||
/**
|
||||
* 用户权限
|
||||
*/
|
||||
public static final String JWT_AUTHORITIES = "authorities";
|
||||
|
||||
/**
|
||||
* 参数管理 cache key
|
||||
*/
|
||||
public static final String SYS_CONFIG_KEY = "sys_config:";
|
||||
|
||||
public static final String INTEGRAL_RULE_KEY = "activity-integral-income-set-key";
|
||||
|
||||
/**
|
||||
* 字典管理 cache key
|
||||
*/
|
||||
public static final String SYS_DICT_KEY = "sys_dict:";
|
||||
|
||||
/**
|
||||
* 资源映射路径 前缀
|
||||
*/
|
||||
public static final String RESOURCE_PREFIX = "/profile";
|
||||
|
||||
/**
|
||||
* RMI 远程方法调用
|
||||
*/
|
||||
public static final String LOOKUP_RMI = "rmi://";
|
||||
|
||||
/**
|
||||
* LDAP 远程方法调用
|
||||
*/
|
||||
public static final String LOOKUP_LDAP = "ldap://";
|
||||
|
||||
public static final String SPAN_ID = "spanId";
|
||||
|
||||
/**
|
||||
* 会员账号状态
|
||||
*/
|
||||
public static class MEMBER_ACCOUNT_STATUS {
|
||||
public static final Integer FORBIDDEN = 0;
|
||||
public static final Integer NORMAL = 1;
|
||||
// 注销
|
||||
public static final Integer REVOKED = 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录提示信息
|
||||
*/
|
||||
public static class LOGIN_INFO {
|
||||
public static final String WRONG = "账号或密码错误";
|
||||
public static final String FORBIDDEN = "您的账号被禁用,请联系管理员";
|
||||
public static final String SUCCESS = "登录成功";
|
||||
public static final String TO_REGISTER = "请先注册";
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证码相关提示信息
|
||||
*/
|
||||
public static class VERIFY_CODE_INFO {
|
||||
public static final String EXPIRED = "验证码已过期";
|
||||
public static final String WRONG = "验证码错误";
|
||||
}
|
||||
|
||||
/**
|
||||
* 上架状态:0->下架;1->上架
|
||||
*/
|
||||
public static class PublishStatus {
|
||||
public static final Integer GROUNDING = 1;
|
||||
public static final Integer UNDERCARRIAGE = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 0->未支付;1->支付宝;2->微信
|
||||
*/
|
||||
public static class PayType {
|
||||
public static final Integer NO_PAY = 0;
|
||||
public static final Integer ALIPAY = 1;
|
||||
public static final Integer WECHAT = 2;
|
||||
public static final Integer UNION = 3;
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单来源 购物车:cart
|
||||
*/
|
||||
public static class OrderFrom {
|
||||
public static final String CART = "cart";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* H5订单查询状态
|
||||
* -1->全部 0->待付款;1->待发货;2->待收货;3->已完成;4->已关闭;5->无效订单 -2->售后单
|
||||
*/
|
||||
public static class H5OrderStatus{
|
||||
public static final Integer ALL = -1;
|
||||
public static final Integer UN_PAY = 0;
|
||||
public static final Integer NOT_DELIVERED = 1;
|
||||
public static final Integer DELIVERED = 2;
|
||||
public static final Integer COMPLETED = 3;
|
||||
public static final Integer CLOSED = 4;
|
||||
public static final Integer INVALID = 5;
|
||||
public static final Integer REFUND = -2;
|
||||
}
|
||||
|
||||
/**
|
||||
* 交易类型(1为支付 2为提现 3为退款)
|
||||
*/
|
||||
public static class PaymentOpType {
|
||||
public static final Integer PAY = 1;
|
||||
public static final Integer WITHDRAWAL = 2;
|
||||
public static final Integer REFUND = 3;
|
||||
}
|
||||
|
||||
/**
|
||||
* 状态(0:未完成交易 1:完成关键交易)
|
||||
*/
|
||||
public static class PaymentStatus {
|
||||
public static final Integer INCOMPLETE = 0;
|
||||
public static final Integer COMPLETE = 1;
|
||||
}
|
||||
|
||||
public static class OptType {
|
||||
public static final Integer AGREE = 1;
|
||||
public static final Integer REFUSE = 2;
|
||||
public static final Integer GIVING = 3;
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全)
|
||||
*/
|
||||
public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.ruoyi","com.cyl" };
|
||||
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package org.dromara.common.core.domain.event;
|
||||
|
||||
/**
|
||||
* 用户常量信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class UserConstants
|
||||
{
|
||||
/**
|
||||
* 平台内系统用户的唯一标志
|
||||
*/
|
||||
public static final String SYS_USER = "SYS_USER";
|
||||
|
||||
/** 正常状态 */
|
||||
public static final String NORMAL = "0";
|
||||
|
||||
/** 异常状态 */
|
||||
public static final String EXCEPTION = "1";
|
||||
|
||||
/** 用户封禁状态 */
|
||||
public static final String USER_DISABLE = "1";
|
||||
|
||||
/** 角色封禁状态 */
|
||||
public static final String ROLE_DISABLE = "1";
|
||||
|
||||
/** 部门正常状态 */
|
||||
public static final String DEPT_NORMAL = "0";
|
||||
|
||||
/** 部门停用状态 */
|
||||
public static final String DEPT_DISABLE = "1";
|
||||
|
||||
/** 字典正常状态 */
|
||||
public static final String DICT_NORMAL = "0";
|
||||
|
||||
/** 是否为系统默认(是) */
|
||||
public static final String YES = "Y";
|
||||
|
||||
/** 是否菜单外链(是) */
|
||||
public static final String YES_FRAME = "0";
|
||||
|
||||
/** 是否菜单外链(否) */
|
||||
public static final String NO_FRAME = "1";
|
||||
|
||||
/** 菜单类型(目录) */
|
||||
public static final String TYPE_DIR = "M";
|
||||
|
||||
/** 菜单类型(菜单) */
|
||||
public static final String TYPE_MENU = "C";
|
||||
|
||||
/** 菜单类型(按钮) */
|
||||
public static final String TYPE_BUTTON = "F";
|
||||
|
||||
/** Layout组件标识 */
|
||||
public final static String LAYOUT = "Layout";
|
||||
|
||||
/** ParentView组件标识 */
|
||||
public final static String PARENT_VIEW = "ParentView";
|
||||
|
||||
/** InnerLink组件标识 */
|
||||
public final static String INNER_LINK = "InnerLink";
|
||||
|
||||
/** 校验返回结果码 */
|
||||
public final static String UNIQUE = "0";
|
||||
public final static String NOT_UNIQUE = "1";
|
||||
|
||||
/**
|
||||
* 用户名长度限制
|
||||
*/
|
||||
public static final int USERNAME_MIN_LENGTH = 2;
|
||||
public static final int USERNAME_MAX_LENGTH = 20;
|
||||
|
||||
/**
|
||||
* 密码长度限制
|
||||
*/
|
||||
public static final int PASSWORD_MIN_LENGTH = 5;
|
||||
public static final int PASSWORD_MAX_LENGTH = 20;
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package org.dromara.common.core.domain.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class BaseAudit {
|
||||
/**
|
||||
* 创建者
|
||||
*/
|
||||
private Long createBy;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
/**
|
||||
* 创建部门
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
private Long updateBy;
|
||||
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime updateTime;
|
||||
}
|
@ -107,6 +107,11 @@ public class LoginUser implements Serializable {
|
||||
*/
|
||||
private String nickname;
|
||||
|
||||
/**
|
||||
* 用户手机号
|
||||
*/
|
||||
private String phoneNumber;
|
||||
|
||||
/**
|
||||
* 角色对象
|
||||
*/
|
||||
@ -132,6 +137,23 @@ public class LoginUser implements Serializable {
|
||||
*/
|
||||
private String deviceType;
|
||||
|
||||
|
||||
/**
|
||||
* 腾讯IM用户Sig
|
||||
*/
|
||||
private String userSig;
|
||||
|
||||
/**
|
||||
* 头像
|
||||
*/
|
||||
private String avatar;
|
||||
|
||||
/**
|
||||
* 所属团长的租户Id
|
||||
*/
|
||||
private String referenceTenantId;
|
||||
|
||||
|
||||
/**
|
||||
* 获取登录id
|
||||
*/
|
||||
@ -145,4 +167,6 @@ public class LoginUser implements Serializable {
|
||||
return userType + ":" + userId;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -30,4 +30,6 @@ public class RegisterBody extends LoginBody {
|
||||
|
||||
private String userType;
|
||||
|
||||
private String phoneNumber;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
package org.dromara.common.core.enums;
|
||||
|
||||
/**
|
||||
* 售后状态
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum AftersaleStatus
|
||||
{
|
||||
APPLY(0, "待处理"),
|
||||
WAIT(1, "退货中"),
|
||||
SUCCESS(2, "已完成"),
|
||||
REJECT(3, "已拒绝"),
|
||||
CANCEL(4,"用户取消");
|
||||
|
||||
private final Integer type;
|
||||
private final String msg;
|
||||
|
||||
private AftersaleStatus(Integer type, String msg) {
|
||||
this.type = type;
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public Integer getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public String getMsg() {
|
||||
return this.msg;
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package org.dromara.common.core.enums;
|
||||
|
||||
/**
|
||||
* 数字编码前缀,扫码用
|
||||
*/
|
||||
public enum CodePrefix {
|
||||
|
||||
/**
|
||||
* 订单
|
||||
*/
|
||||
DD,
|
||||
/**
|
||||
* 核销
|
||||
*/
|
||||
HXM,
|
||||
/**
|
||||
* 好友
|
||||
*/
|
||||
HYM,
|
||||
/**
|
||||
* 推广
|
||||
*/
|
||||
TGM;
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package org.dromara.common.core.enums;
|
||||
|
||||
/**
|
||||
* 用户状态
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public enum OrderRefundStatus
|
||||
{
|
||||
NO_REFUND(1, "无售后"),
|
||||
APPLY(2, "申请中"),
|
||||
WAIT(3, "退款中"),
|
||||
SUCCESS(4, "退款成功"),
|
||||
FAIL(5,"退款失败");
|
||||
|
||||
private final Integer type;
|
||||
private final String msg;
|
||||
|
||||
private OrderRefundStatus(Integer type, String msg) {
|
||||
this.type = type;
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public Integer getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public String getMsg() {
|
||||
return this.msg;
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package org.dromara.common.core.enums;
|
||||
|
||||
/**
|
||||
* @Desc: 性别 枚举
|
||||
*/
|
||||
public enum Sex {
|
||||
woman(0, "女"),
|
||||
man(1, "男"),
|
||||
secret(2, "保密");
|
||||
|
||||
public final Integer type;
|
||||
public final String value;
|
||||
|
||||
Sex(Integer type, String value) {
|
||||
this.type = type;
|
||||
this.value = value;
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package org.dromara.common.core.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 租户签约状态
|
||||
* 0->待提交
|
||||
* 1->待审核
|
||||
* 2->待确认
|
||||
* 3->有效
|
||||
* 4->无效
|
||||
* 5->过期
|
||||
*
|
||||
* @author huk
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum TenantSignStatus
|
||||
{
|
||||
TO_BE_SUBMITTED("0", "待提交"),
|
||||
TO_BE_REVIEWED("1", "待审核"),
|
||||
TO_BE_CONFIRMED("2", "待确认"),
|
||||
IN_EFFECT("3", "签约生效"),
|
||||
INVALID("4", "无效"),
|
||||
EXPIRED("5", "过期");
|
||||
|
||||
private final String status;
|
||||
private final String desc;
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package org.dromara.common.core.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 租户类型枚举 2->商家,3->代理,4->平台,5->团长
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum TenantType {
|
||||
|
||||
MERCHANT(2, "商家"),
|
||||
AGENT(3, "代理"),
|
||||
PLATFORM(4, "平台"),
|
||||
REFERENCE(5, "团长");
|
||||
|
||||
private final int type;
|
||||
|
||||
private final String desc;
|
||||
|
||||
|
||||
public static TenantType valueOf(int type) {
|
||||
for (TenantType tenantType : TenantType.values()) {
|
||||
if (tenantType.type == type) {
|
||||
return tenantType;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("No enum constant with type " + type);
|
||||
}
|
||||
|
||||
public static boolean allowCreateByType(Integer currentTenantType, Integer newTenantType) {
|
||||
boolean allow = false;
|
||||
if (currentTenantType == PLATFORM.type) {
|
||||
// 超级管理租户创建租户没有限制
|
||||
allow = true;
|
||||
} else if (currentTenantType == TenantType.AGENT.type) {
|
||||
// 代理商只能创建商铺或达人
|
||||
allow = newTenantType == TenantType.AGENT.type || newTenantType == TenantType.MERCHANT.type || newTenantType == TenantType.REFERENCE.type;
|
||||
}
|
||||
return allow;
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package org.dromara.common.core.enums;
|
||||
|
||||
/**
|
||||
* @Desc: 是否 枚举
|
||||
*/
|
||||
public enum YesOrNo {
|
||||
NO(0, "否"),
|
||||
YES(1, "是");
|
||||
|
||||
public final Integer type;
|
||||
public final String value;
|
||||
|
||||
YesOrNo(Integer type, String value) {
|
||||
this.type = type;
|
||||
this.value = value;
|
||||
}
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
package org.dromara.common.core.exception;
|
||||
|
||||
import lombok.*;
|
||||
import org.dromara.common.core.constant.ResultCode;
|
||||
import org.dromara.common.core.exception.base.BaseException;
|
||||
|
||||
import java.io.Serial;
|
||||
|
||||
@ -41,6 +43,10 @@ public final class ServiceException extends RuntimeException {
|
||||
this.message = message;
|
||||
this.code = code;
|
||||
}
|
||||
public ServiceException(ResultCode resultCode) {
|
||||
this.message = resultCode.message();
|
||||
this.code = resultCode.code();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
@ -56,4 +62,16 @@ public final class ServiceException extends RuntimeException {
|
||||
this.detailMessage = detailMessage;
|
||||
return this;
|
||||
}
|
||||
|
||||
public static ServiceException of(String message) {
|
||||
return new ServiceException(message);
|
||||
}
|
||||
|
||||
public static ServiceException of(Integer code, String message) {
|
||||
return new ServiceException(message, code);
|
||||
}
|
||||
|
||||
public static ServiceException of(ResultCode resultCode) {
|
||||
return new ServiceException(resultCode);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,104 @@
|
||||
package org.dromara.common.core.utils;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Created by yangyincong on 15/8/16.
|
||||
* ID生成器 workId (1~4)
|
||||
*/
|
||||
public class IDGenerator {
|
||||
private final static Logger logger = LoggerFactory.getLogger(IDGenerator.class);
|
||||
private final static long twepoch = 1361753741828L;
|
||||
private final static long workerIdBits = 4L;
|
||||
private final static long maxWorkerId = -1L ^ -1L << workerIdBits;
|
||||
private final static long sequenceBits = 10L;
|
||||
private long workerId;
|
||||
private long sequence = 0L;
|
||||
|
||||
private final static long workerIdShift = sequenceBits;
|
||||
private final static long timestampLeftShift = sequenceBits + workerIdBits;
|
||||
private final static long sequenceMask = -1L ^ -1L << sequenceBits;
|
||||
|
||||
private long lastTimestamp = -1L;
|
||||
|
||||
private IDGenerator(final long workerId) {
|
||||
super();
|
||||
this.workerId = workerId;
|
||||
}
|
||||
|
||||
public static long generateMinId(int wid, long time) {
|
||||
return (time - twepoch << timestampLeftShift) | (wid << workerIdShift);
|
||||
}
|
||||
|
||||
public synchronized long nextId() {
|
||||
long timestamp = this.timeGen();
|
||||
if (this.lastTimestamp == timestamp) {
|
||||
this.sequence = (this.sequence + 1) & sequenceMask;
|
||||
if (this.sequence == 0) {
|
||||
timestamp = this.tilNextMillis(this.lastTimestamp);
|
||||
}
|
||||
} else {
|
||||
this.sequence = 0;
|
||||
}
|
||||
if (timestamp < this.lastTimestamp) {
|
||||
try {
|
||||
throw new Exception(
|
||||
String.format(
|
||||
"Clock moved backwards. Refusing to generate id for %d milliseconds",
|
||||
this.lastTimestamp - timestamp));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
this.lastTimestamp = timestamp;
|
||||
long nextId = ((timestamp - twepoch << timestampLeftShift))
|
||||
| (this.workerId << workerIdShift) | (this.sequence);
|
||||
return nextId;
|
||||
}
|
||||
|
||||
public static long generateMaxId(long wid, long time) {
|
||||
return (time - twepoch << timestampLeftShift) | (wid << workerIdShift) | sequenceMask;
|
||||
}
|
||||
|
||||
private long tilNextMillis(final long lastTimestamp) {
|
||||
long timestamp = this.timeGen();
|
||||
while (timestamp <= lastTimestamp) {
|
||||
timestamp = this.timeGen();
|
||||
}
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
private long timeGen() {
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
|
||||
private static IDGenerator generator;
|
||||
|
||||
public static synchronized void init(Long workerId) throws Exception {
|
||||
workerId = workerId % maxWorkerId;
|
||||
logger.info("程序中init的workid为:{}", workerId);
|
||||
if (workerId > maxWorkerId || workerId < 0) {
|
||||
throw new IllegalArgumentException(String.format(
|
||||
"worker Id can't be greater than %d or less than 0",
|
||||
IDGenerator.maxWorkerId));
|
||||
}
|
||||
generator = new IDGenerator(workerId);
|
||||
}
|
||||
|
||||
public static Long generateId() {
|
||||
if (null == generator) {
|
||||
synchronized (IDGenerator.class) {
|
||||
if (null == generator) {
|
||||
try {
|
||||
init(2L);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return generator.nextId();
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package org.dromara.common.core.utils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class LocalDataUtil {
|
||||
|
||||
private static ThreadLocal<Map<String, Object>> LOCAL_VARS = new ThreadLocal<Map<String, Object>>();
|
||||
|
||||
public static void setVar(String key, Object obj) {
|
||||
Map<String, Object> stringObjectMap = LOCAL_VARS.get();
|
||||
if (null == stringObjectMap) {
|
||||
stringObjectMap = new HashMap<>();
|
||||
LOCAL_VARS.set(stringObjectMap);
|
||||
}
|
||||
stringObjectMap.put(key, obj);
|
||||
}
|
||||
|
||||
public static Object getVar(String key) {
|
||||
Map<String, Object> stringObjectMap = LOCAL_VARS.get();
|
||||
return null != stringObjectMap ? stringObjectMap.get(key) : null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package org.dromara.common.core.utils;
|
||||
|
||||
/**
|
||||
* 手机号工具类
|
||||
*/
|
||||
public class PhoneUtils {
|
||||
|
||||
public static String hidePhone(String phone){
|
||||
if (StringUtils.isEmpty(phone) || phone.length() < 11){
|
||||
throw new RuntimeException("手机号格式错误");
|
||||
}
|
||||
return phone.substring(0, 3) + "****" + phone.substring(7, 11);
|
||||
}
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
package org.dromara.common.core.utils;
|
||||
|
||||
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.dromara.common.core.constant.HttpStatus;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
|
||||
/**
|
||||
* 安全服务工具类
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class SecurityUtils
|
||||
{
|
||||
private static BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||
/**
|
||||
* 用户ID
|
||||
**/
|
||||
public static Long getUserId()
|
||||
{
|
||||
try
|
||||
{
|
||||
return getLoginUser().getUserId();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取部门ID
|
||||
**/
|
||||
public static Long getDeptId()
|
||||
{
|
||||
try
|
||||
{
|
||||
return getLoginUser().getDeptId();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户账户
|
||||
**/
|
||||
public static String getUsername()
|
||||
{
|
||||
try
|
||||
{
|
||||
return getLoginUser().getUsername();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户
|
||||
**/
|
||||
public static LoginUser getLoginUser()
|
||||
{
|
||||
try
|
||||
{
|
||||
return (LoginUser) getAuthentication().getPrincipal();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取Authentication
|
||||
*/
|
||||
public static Authentication getAuthentication()
|
||||
{
|
||||
return SecurityContextHolder.getContext().getAuthentication();
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成BCryptPasswordEncoder密码
|
||||
*
|
||||
* @param password 密码
|
||||
* @return 加密字符串
|
||||
*/
|
||||
public static String encryptPassword(String password) {
|
||||
return passwordEncoder.encode(password);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断密码是否相同
|
||||
*
|
||||
* @param rawPassword 真实密码
|
||||
* @param encodedPassword 加密后字符
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean matchesPassword(String rawPassword, String encodedPassword)
|
||||
{
|
||||
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||
return passwordEncoder.matches(rawPassword, encodedPassword);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否为管理员
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean isAdmin(Long userId)
|
||||
{
|
||||
return userId != null && 1L == userId;
|
||||
}
|
||||
}
|
@ -62,6 +62,40 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
||||
return StrUtil.trim(str);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* * 判断一个对象是否为空
|
||||
*
|
||||
* @param object Object
|
||||
* @return true:为空 false:非空
|
||||
*/
|
||||
public static boolean isNull(Object object)
|
||||
{
|
||||
return object == null;
|
||||
}
|
||||
|
||||
/**
|
||||
* * 判断一个对象是否非空
|
||||
*
|
||||
* @param object Object
|
||||
* @return true:非空 false:空
|
||||
*/
|
||||
public static boolean isNotNull(Object object)
|
||||
{
|
||||
return !isNull(object);
|
||||
}
|
||||
|
||||
/**
|
||||
* * 判断一个对象是否是数组类型(Java基本型别的数组)
|
||||
*
|
||||
* @param object 对象
|
||||
* @return true:是数组 false:不是数组
|
||||
*/
|
||||
public static boolean isArray(Object object)
|
||||
{
|
||||
return isNotNull(object) && object.getClass().isArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* 截取字符串
|
||||
*
|
||||
|
@ -0,0 +1,77 @@
|
||||
package org.dromara.common.core.utils.file;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* 文件类型工具类
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class FileTypeUtils
|
||||
{
|
||||
/**
|
||||
* 获取文件类型
|
||||
* <p>
|
||||
* 例如: ruoyi.txt, 返回: txt
|
||||
*
|
||||
* @param file 文件名
|
||||
* @return 后缀(不含".")
|
||||
*/
|
||||
public static String getFileType(File file)
|
||||
{
|
||||
if (null == file)
|
||||
{
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
return getFileType(file.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件类型
|
||||
* <p>
|
||||
* 例如: ruoyi.txt, 返回: txt
|
||||
*
|
||||
* @param fileName 文件名
|
||||
* @return 后缀(不含".")
|
||||
*/
|
||||
public static String getFileType(String fileName)
|
||||
{
|
||||
int separatorIndex = fileName.lastIndexOf(".");
|
||||
if (separatorIndex < 0)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return fileName.substring(separatorIndex + 1).toLowerCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件类型
|
||||
*
|
||||
* @param photoByte 文件字节码
|
||||
* @return 后缀(不含".")
|
||||
*/
|
||||
public static String getFileExtendName(byte[] photoByte)
|
||||
{
|
||||
String strFileExtendName = "JPG";
|
||||
if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56)
|
||||
&& ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97))
|
||||
{
|
||||
strFileExtendName = "GIF";
|
||||
}
|
||||
else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70))
|
||||
{
|
||||
strFileExtendName = "JPG";
|
||||
}
|
||||
else if ((photoByte[0] == 66) && (photoByte[1] == 77))
|
||||
{
|
||||
strFileExtendName = "BMP";
|
||||
}
|
||||
else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71))
|
||||
{
|
||||
strFileExtendName = "PNG";
|
||||
}
|
||||
return strFileExtendName;
|
||||
}
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package org.dromara.common.core.utils.file;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
|
||||
/**
|
||||
* 媒体类型工具类
|
||||
*
|
||||
@ -37,4 +39,29 @@ public class MimeTypeUtils {
|
||||
// pdf
|
||||
"pdf"};
|
||||
|
||||
|
||||
public static String getExtension(String prefix)
|
||||
{
|
||||
switch (prefix)
|
||||
{
|
||||
case IMAGE_PNG:
|
||||
return "png";
|
||||
case IMAGE_JPG:
|
||||
return "jpg";
|
||||
case IMAGE_JPEG:
|
||||
return "jpeg";
|
||||
case IMAGE_BMP:
|
||||
return "bmp";
|
||||
case IMAGE_GIF:
|
||||
return "gif";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isImg(String contentType) {
|
||||
String ext = MimeTypeUtils.getExtension(contentType);
|
||||
return StrUtil.isNotEmpty(ext);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,11 +21,6 @@
|
||||
<artifactId>ruoyi-common-core</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springdoc</groupId>
|
||||
<artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.github.therapi</groupId>
|
||||
<artifactId>therapi-runtime-javadoc</artifactId>
|
||||
@ -36,6 +31,12 @@
|
||||
<artifactId>jackson-module-kotlin</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.github.xingfudeshi</groupId>
|
||||
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
@ -310,4 +310,10 @@ public class EncryptUtils {
|
||||
return SmUtil.sm3(data);
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
String data = "123456";
|
||||
String password="1234567890123456";
|
||||
System.out.println(encryptByAes(data,password));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,178 @@
|
||||
package org.dromara.common.excel.annotation;
|
||||
|
||||
|
||||
import org.dromara.common.excel.utils.ExcelHandlerAdapter;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 自定义导出Excel数据注解
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.FIELD)
|
||||
public @interface Excel
|
||||
{
|
||||
/**
|
||||
* 导出时在excel中排序
|
||||
*/
|
||||
public int sort() default Integer.MAX_VALUE;
|
||||
|
||||
/**
|
||||
* 导出到Excel中的名字.
|
||||
*/
|
||||
public String name() default "";
|
||||
|
||||
/**
|
||||
* 日期格式, 如: yyyy-MM-dd
|
||||
*/
|
||||
public String dateFormat() default "";
|
||||
|
||||
/**
|
||||
* 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
|
||||
*/
|
||||
public String dictType() default "";
|
||||
|
||||
/**
|
||||
* 读取内容转表达式 (如: 0=男,1=女,2=未知)
|
||||
*/
|
||||
public String readConverterExp() default "";
|
||||
|
||||
/**
|
||||
* 分隔符,读取字符串组内容
|
||||
*/
|
||||
public String separator() default ",";
|
||||
|
||||
/**
|
||||
* BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
|
||||
*/
|
||||
public int scale() default -1;
|
||||
|
||||
/**
|
||||
* BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
|
||||
*/
|
||||
public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
|
||||
|
||||
/**
|
||||
* 导出类型(0数字 1字符串)
|
||||
*/
|
||||
public ColumnType cellType() default ColumnType.STRING;
|
||||
|
||||
/**
|
||||
* 导出时在excel中每个列的高度 单位为字符
|
||||
*/
|
||||
public double height() default 14;
|
||||
|
||||
/**
|
||||
* 导出时在excel中每个列的宽 单位为字符
|
||||
*/
|
||||
public double width() default 16;
|
||||
|
||||
/**
|
||||
* 文字后缀,如% 90 变成90%
|
||||
*/
|
||||
public String suffix() default "";
|
||||
|
||||
/**
|
||||
* 当值为空时,字段的默认值
|
||||
*/
|
||||
public String defaultValue() default "";
|
||||
|
||||
/**
|
||||
* 提示信息
|
||||
*/
|
||||
public String prompt() default "";
|
||||
|
||||
/**
|
||||
* 设置只能选择不能输入的列内容.
|
||||
*/
|
||||
public String[] combo() default {};
|
||||
|
||||
/**
|
||||
* 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
|
||||
*/
|
||||
public boolean isExport() default true;
|
||||
|
||||
/**
|
||||
* 另一个类中的属性名称,支持多级获取,以小数点隔开
|
||||
*/
|
||||
public String targetAttr() default "";
|
||||
|
||||
/**
|
||||
* 是否自动统计数据,在最后追加一行统计数据总和
|
||||
*/
|
||||
public boolean isStatistics() default false;
|
||||
|
||||
/**
|
||||
* 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右)
|
||||
*/
|
||||
public Align align() default Align.AUTO;
|
||||
|
||||
/**
|
||||
* 自定义数据处理器
|
||||
*/
|
||||
public Class<?> handler() default ExcelHandlerAdapter.class;
|
||||
|
||||
/**
|
||||
* 自定义数据处理器参数
|
||||
*/
|
||||
public String[] args() default {};
|
||||
|
||||
public enum Align
|
||||
{
|
||||
AUTO(0), LEFT(1), CENTER(2), RIGHT(3);
|
||||
private final int value;
|
||||
|
||||
Align(int value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int value()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 字段类型(0:导出导入;1:仅导出;2:仅导入)
|
||||
*/
|
||||
Type type() default Type.ALL;
|
||||
|
||||
public enum Type
|
||||
{
|
||||
ALL(0), EXPORT(1), IMPORT(2);
|
||||
private final int value;
|
||||
|
||||
Type(int value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int value()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
|
||||
public enum ColumnType
|
||||
{
|
||||
NUMERIC(0), STRING(1), IMAGE(2);
|
||||
private final int value;
|
||||
|
||||
ColumnType(int value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int value()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user