Compare commits
658 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3071bfd0f9 | ||
|
|
7bb938c145 | ||
|
|
75b21d3633 | ||
|
|
7ed9d8def4 | ||
|
|
63ed7ddb02 | ||
|
|
11696a016d | ||
|
|
1a10104751 | ||
|
|
f95cb17933 | ||
|
|
0687b49542 | ||
|
|
27ad00ac3a | ||
|
|
c84d6247b0 | ||
|
|
f582f38570 | ||
|
|
13800dc389 | ||
|
|
619d9b1e84 | ||
|
|
556cc93f14 | ||
|
|
a50375616e | ||
|
|
e33447d023 | ||
|
|
7be277b3e6 | ||
|
|
5fa385e90b | ||
|
|
0a78966737 | ||
|
|
0eb7f00867 | ||
|
|
00ce7f2d98 | ||
|
|
003c066361 | ||
|
|
a5e7c59fd4 | ||
|
|
accac603cf | ||
|
|
7c96c730e6 | ||
|
|
a2dbdb30ff | ||
|
|
772e4af9bf | ||
|
|
e601eb6db5 | ||
|
|
84dbc2cfbf | ||
|
|
f160ec714b | ||
|
|
a8bd4b47a0 | ||
|
|
6c4c661516 | ||
|
|
b85c17a126 | ||
|
|
a59ddf6070 | ||
|
|
797ecbb054 | ||
|
|
b6b78afea9 | ||
|
|
0690156362 | ||
|
|
02240f3fd0 | ||
|
|
dc1e84bc52 | ||
|
|
4977df0ba8 | ||
|
|
27211b67f9 | ||
|
|
1600ab384e | ||
|
|
418805a1ef | ||
|
|
4c4b52bca7 | ||
|
|
7245259bc4 | ||
|
|
6690c8204c | ||
|
|
d8fc597f85 | ||
|
|
7f1146ecae | ||
|
|
0130028952 | ||
|
|
5a716da5a6 | ||
|
|
2470ec7573 | ||
|
|
e3fb25fba6 | ||
|
|
a916f14efc | ||
|
|
523628ade6 | ||
|
|
2259a2f717 | ||
|
|
8df37274da | ||
|
|
393057ab24 | ||
|
|
2aa7e0f4f1 | ||
|
|
b2d2fb34b8 | ||
|
|
c1e2a03178 | ||
|
|
fd38d2030e | ||
|
|
a42f881b67 | ||
|
|
20d531c0db | ||
|
|
1e6046cf52 | ||
|
|
495f2de6ef | ||
|
|
e97bd4e201 | ||
|
|
70e5e393ef | ||
|
|
8954f59cd7 | ||
|
|
c78b1a14a9 | ||
|
|
e768c4b356 | ||
|
|
d059f50ba6 | ||
|
|
26bcfbba8a | ||
|
|
d6e4a50d6e | ||
|
|
0a115f289e | ||
|
|
31e8df8bc0 | ||
|
|
ee477213e0 | ||
|
|
1e6e236d3c | ||
|
|
593a0d0049 | ||
|
|
d4f8f91893 | ||
|
|
f25ebdf9ec | ||
|
|
32b8144b56 | ||
|
|
b40805cb57 | ||
|
|
008f64617f | ||
|
|
3539e222d2 | ||
|
|
c4d1ea974d | ||
|
|
ace7e961a4 | ||
|
|
5dc21653c0 | ||
|
|
d0d4b2229f | ||
|
|
07c9727345 | ||
|
|
689adf079d | ||
|
|
1d1b72c6e2 | ||
|
|
d9bdce1d8a | ||
|
|
885d46a4aa | ||
|
|
420e05ecf3 | ||
|
|
afa3c78180 | ||
|
|
ee8c882b6f | ||
|
|
69ec2a33a4 | ||
|
|
1cd8ae1cd9 | ||
|
|
91a44e1ba8 | ||
|
|
4a36aaa780 | ||
|
|
c78b456dbf | ||
|
|
e8c187125f | ||
|
|
7b8cfe02a1 | ||
|
|
eb2e8f3ff8 | ||
|
|
2f7bff0bf0 | ||
|
|
c89f9657f3 | ||
|
|
588c1730a6 | ||
|
|
3f1506b34b | ||
|
|
deea428bfa | ||
|
|
66f133f089 | ||
|
|
e5ed5d0ef6 | ||
|
|
f04842ae12 | ||
|
|
77aeabb4be | ||
|
|
f63ccbe7bd | ||
|
|
1087f86259 | ||
|
|
a041acfdbb | ||
|
|
b854885c99 | ||
|
|
777c899651 | ||
|
|
7c7d5838cd | ||
|
|
995507e757 | ||
|
|
f155bc284d | ||
|
|
c22c5eac7f | ||
|
|
9df246321e | ||
|
|
96c53390aa | ||
|
|
8a1ac2264e | ||
|
|
35194457e1 | ||
|
|
cf9eca34d3 | ||
|
|
f04db38d6c | ||
|
|
53c5076212 | ||
|
|
0acee56149 | ||
|
|
be12ebadbe | ||
|
|
a5fc55f50a | ||
|
|
7186afbbc4 | ||
|
|
1fba109cce | ||
|
|
d8382bfb44 | ||
|
|
2353b0adf6 | ||
|
|
dcacd8753f | ||
|
|
aca72a5892 | ||
|
|
362307e4ba | ||
|
|
cb26e452bb | ||
|
|
e402330692 | ||
|
|
f3e1aa6cdd | ||
|
|
c1d830bfd6 | ||
|
|
c06ae8271d | ||
|
|
e71d9faf8d | ||
|
|
f5e22d4c05 | ||
|
|
1aa5535769 | ||
|
|
0d403b6725 | ||
|
|
d9a9a7f0f0 | ||
|
|
a36d306f40 | ||
|
|
3164eb0bc9 | ||
|
|
adf04d9a60 | ||
|
|
73e588ac60 | ||
|
|
3235b43a0c | ||
|
|
ae6edadf4b | ||
|
|
0f866ec91b | ||
|
|
8f543380d7 | ||
|
|
ac570fd45c | ||
|
|
beef9e946a | ||
|
|
3610899f2b | ||
|
|
65d59f4acf | ||
|
|
cd4fc4b216 | ||
|
|
0ce0ce1262 | ||
|
|
6b5fea27e0 | ||
|
|
35c848b719 | ||
|
|
beaf384f79 | ||
|
|
117faeac10 | ||
|
|
95951efe7a | ||
|
|
da2000b4f4 | ||
|
|
3c21bf6fd3 | ||
|
|
63f6df8af0 | ||
|
|
e7d7de79fe | ||
|
|
34a71cfc55 | ||
|
|
e242a67c74 | ||
|
|
9d4a0e0b36 | ||
|
|
962c2b693c | ||
|
|
766f6ad266 | ||
|
|
c85deba6a6 | ||
|
|
9f6d363d55 | ||
|
|
77ddd169c7 | ||
|
|
f384601933 | ||
|
|
0b1925cc62 | ||
|
|
3c237f45ad | ||
|
|
9500304b77 | ||
|
|
dbdacdad5c | ||
|
|
ce52402e4c | ||
|
|
559661f498 | ||
|
|
4bacb4bf27 | ||
|
|
72337563ea | ||
|
|
77f7ac0af1 | ||
|
|
c995c94fca | ||
|
|
e12e4c4669 | ||
|
|
3cbbfdf771 | ||
|
|
fdddec2f14 | ||
|
|
57e23be82f | ||
|
|
89f4976b7c | ||
|
|
a0d93b1ca8 | ||
|
|
ca8ba6fe48 | ||
|
|
7994704c11 | ||
|
|
8d4fadc9a2 | ||
|
|
bd8dccf7b2 | ||
|
|
584cead6bf | ||
|
|
a52529eefd | ||
|
|
6e433237e0 | ||
|
|
abd4f01b69 | ||
|
|
5c430ee1d2 | ||
|
|
e23e295d68 | ||
|
|
3d6bbad616 | ||
|
|
5088c0e6d7 | ||
|
|
2995b6ddde | ||
|
|
5475776caa | ||
|
|
08d4977263 | ||
|
|
31602cb85e | ||
|
|
5adc5f0006 | ||
|
|
307d095cf1 | ||
|
|
2cef4e17dc | ||
|
|
b47da3f438 | ||
|
|
17c52e9048 | ||
|
|
f71cf85dc8 | ||
|
|
ef49429543 | ||
|
|
39fe2cc48f | ||
|
|
827ac48826 | ||
|
|
f906645708 | ||
|
|
c17e16dd0f | ||
|
|
837236f1cc | ||
|
|
60793b957a | ||
|
|
fa4dc87e76 | ||
|
|
4ac63c3268 | ||
|
|
54e7999fe3 | ||
|
|
32fd910584 | ||
|
|
25e659dffa | ||
|
|
aa1c771e72 | ||
|
|
585e5ff0f8 | ||
|
|
bd346f1e85 | ||
|
|
2caf9a47ed | ||
|
|
f10f44158c | ||
|
|
76acd4a40b | ||
|
|
6467af1d73 | ||
|
|
35146f3495 | ||
|
|
9e23587fb1 | ||
|
|
a61bd57e22 | ||
|
|
6bb7bc6eb5 | ||
|
|
3f9e83a767 | ||
|
|
0d711b1842 | ||
|
|
a33159f9a3 | ||
|
|
6462752fd6 | ||
|
|
afc1272ff5 | ||
|
|
fa5dc80a93 | ||
|
|
acc2d5d1a8 | ||
|
|
c22b9fdb9c | ||
|
|
2a45776aeb | ||
|
|
ff0a3d1016 | ||
|
|
b2a589ed9c | ||
|
|
2ac34e313a | ||
|
|
4baa970118 | ||
|
|
13da60e151 | ||
|
|
1f0c0ba0a9 | ||
|
|
ef3541fe77 | ||
|
|
2b5fd810a4 | ||
|
|
4a8d21a742 | ||
|
|
c62530176f | ||
|
|
c7554d7e35 | ||
|
|
1e4af3d01b | ||
|
|
1e3b49c9b8 | ||
|
|
9f7f00e50c | ||
|
|
1c721981db | ||
|
|
6e6ba84fd2 | ||
|
|
ef69778bb7 | ||
|
|
7a374d877b | ||
|
|
43426054ec | ||
|
|
ccdbb20935 | ||
|
|
4b37cfe97d | ||
|
|
c43d4784de | ||
|
|
359cee28d5 | ||
|
|
aa11c1f233 | ||
|
|
a0d029c142 | ||
|
|
6ce52befe2 | ||
|
|
330bdc3761 | ||
|
|
4f7ad59e46 | ||
|
|
b696fde881 | ||
|
|
00f9a1a55b | ||
|
|
a1c7b86e72 | ||
|
|
62676a54fb | ||
|
|
e51425a951 | ||
|
|
268be2d9ec | ||
|
|
f448a18e44 | ||
|
|
22e59fe5a1 | ||
|
|
0780e3b8c9 | ||
|
|
0cdba56a07 | ||
|
|
ebc13c06af | ||
|
|
416f011c73 | ||
|
|
bfeb389171 | ||
|
|
caf7f14781 | ||
|
|
a6eb98daab | ||
|
|
4834b615a6 | ||
|
|
42aabeed96 | ||
|
|
67303cf5be | ||
|
|
5bd95b496a | ||
|
|
8fcaa7c90c | ||
|
|
27398c1000 | ||
|
|
bd9ffb10a9 | ||
|
|
bb9c85ac3c | ||
|
|
70ca78d935 | ||
|
|
1af8c4ee50 | ||
|
|
b9276c5dcc | ||
|
|
d1e98a2001 | ||
|
|
baf065a294 | ||
|
|
842a39d6d2 | ||
|
|
9fba91c35f | ||
|
|
498135b7fd | ||
|
|
c3ab13ae67 | ||
|
|
1638b9dd75 | ||
|
|
4434d8346c | ||
|
|
119483df86 | ||
|
|
98f7e3ada2 | ||
|
|
50d9e0e843 | ||
|
|
2871cf7630 | ||
|
|
07cb351807 | ||
|
|
951ee6bd8a | ||
|
|
5b6605c345 | ||
|
|
5db116ec88 | ||
|
|
645c754dd0 | ||
|
|
8751bb5104 | ||
|
|
8d0c557bdb | ||
|
|
5ac785c570 | ||
|
|
60145f9291 | ||
|
|
d7b89cd1b3 | ||
|
|
5264b47c2f | ||
|
|
e9cd9e84d4 | ||
|
|
b52f7a7112 | ||
|
|
2abdf762c1 | ||
|
|
099c94e3cb | ||
|
|
affdc5e3a6 | ||
|
|
047044eb06 | ||
|
|
7108727395 | ||
|
|
5631fe92c6 | ||
|
|
43dc0f419f | ||
|
|
d3732a155d | ||
|
|
a0db91ebe6 | ||
|
|
e83d70e9c3 | ||
|
|
5eb166839a | ||
|
|
e27a6cb738 | ||
|
|
bc2eb8fdb9 | ||
|
|
d964e86b23 | ||
|
|
9891259452 | ||
|
|
86d7eab5b5 | ||
|
|
fa5ad8caf6 | ||
|
|
e5011e0dd9 | ||
|
|
5fe8bd7706 | ||
|
|
0f28e1f3f6 | ||
|
|
503f86644e | ||
|
|
579beb6833 | ||
|
|
22c0c733f6 | ||
|
|
9f4a2256b4 | ||
|
|
5a4d76ac09 | ||
|
|
5a2e08f87d | ||
|
|
838a393abc | ||
|
|
210a9d9b14 | ||
|
|
66518925c1 | ||
|
|
19d3f018b8 | ||
|
|
450ec6db44 | ||
|
|
0bb897de1f | ||
|
|
ab9ff52200 | ||
|
|
d94bcf250e | ||
|
|
10708b7625 | ||
|
|
5e032a68d5 | ||
|
|
bd41ff0f28 | ||
|
|
3ffba456f4 | ||
|
|
993346534e | ||
|
|
38169ba90d | ||
|
|
b003e1b3bb | ||
|
|
f36dda74a1 | ||
|
|
c609095c69 | ||
|
|
93e34b3f03 | ||
|
|
cc4ca69640 | ||
|
|
85930f4b12 | ||
|
|
3c19a2b7a4 | ||
|
|
21c390c4d6 | ||
|
|
cdef9e1c89 | ||
|
|
3c60f43daa | ||
|
|
a24fa7a2b4 | ||
|
|
21f8462ebb | ||
|
|
897222c41c | ||
|
|
227670df9d | ||
|
|
6b2cf1a3c3 | ||
|
|
37f832c31c | ||
|
|
25cf1f9744 | ||
|
|
a48178685c | ||
|
|
7e60cb357f | ||
|
|
915a393427 | ||
|
|
de323d8c45 | ||
|
|
ffe4867d40 | ||
|
|
8b3c0b4134 | ||
|
|
999282210e | ||
|
|
a99344813f | ||
|
|
63ec00cd71 | ||
|
|
7eebd87cc8 | ||
|
|
9a816bb0c7 | ||
|
|
bc6ed508b0 | ||
|
|
d64abaaed3 | ||
|
|
285aa2ae62 | ||
|
|
99114d3301 | ||
|
|
e857f0345b | ||
|
|
138fa5f0e9 | ||
|
|
241c6dc57a | ||
|
|
6005339ec8 | ||
|
|
db892d35fb | ||
|
|
605b223985 | ||
|
|
e117ec8e27 | ||
|
|
5e8db861ea | ||
|
|
fa2791e2e3 | ||
|
|
f1f7cb1084 | ||
|
|
acb1f27c37 | ||
|
|
e46245d97d | ||
|
|
0eff37fa51 | ||
|
|
c1a178c0be | ||
|
|
94d4446321 | ||
|
|
d7930ad713 | ||
|
|
48270add01 | ||
|
|
3786644a25 | ||
|
|
53532681d3 | ||
|
|
daa7b7315b | ||
|
|
df3b687be4 | ||
|
|
ecb5ef32fc | ||
|
|
e5116472ed | ||
|
|
e58aeb5361 | ||
|
|
b4306289f0 | ||
|
|
d9c47bd983 | ||
|
|
8ddbb43dde | ||
|
|
dfe8c7dc85 | ||
|
|
fd94a1772f | ||
|
|
c105d47d99 | ||
|
|
4e2ec2dc82 | ||
|
|
614280d8ea | ||
|
|
2fae8d0ad0 | ||
|
|
d7c2d1bcf3 | ||
|
|
122f63dfbd | ||
|
|
719e968192 | ||
|
|
bf790ceb51 | ||
|
|
de5488bd8c | ||
|
|
c77a245a4d | ||
|
|
6dcd8823cd | ||
|
|
8be480e06c | ||
|
|
11286de676 | ||
|
|
5aaf0a672c | ||
|
|
0089706336 | ||
|
|
cc129801b9 | ||
|
|
6a73e09ac7 | ||
|
|
e1dc22348c | ||
|
|
f37e4da669 | ||
|
|
3e097d9a68 | ||
|
|
97ae5a46cd | ||
|
|
baa664ac4f | ||
|
|
353fbf26b8 | ||
|
|
f79b4ec012 | ||
|
|
0a73cb4e17 | ||
|
|
cbe882af66 | ||
|
|
1d51a103d0 | ||
|
|
d635e30b4a | ||
|
|
ca50d1ddfb | ||
|
|
bd94a3eae8 | ||
|
|
fcdcf534f1 | ||
|
|
deefb6cc0b | ||
|
|
fa96c3d12f | ||
|
|
77069fdecd | ||
|
|
db4a264a52 | ||
|
|
70ae7ea8f1 | ||
|
|
6a93856d90 | ||
|
|
71cae94815 | ||
|
|
a2905d08f9 | ||
|
|
463ad6c583 | ||
|
|
abcde9e36e | ||
|
|
8e723f5b78 | ||
|
|
2021fb5071 | ||
|
|
ecbab7df7b | ||
|
|
d6fcaa0a11 | ||
|
|
58faded4ff | ||
|
|
7cc7af70f0 | ||
|
|
4312a729a2 | ||
|
|
5d972d66f4 | ||
|
|
1bff2791a6 | ||
|
|
a76769e540 | ||
|
|
bedffffd86 | ||
|
|
2884c37599 | ||
|
|
c25749c9ca | ||
|
|
147b3fd8f5 | ||
|
|
373424bd01 | ||
|
|
287a0b3d70 | ||
|
|
cd7e07bea6 | ||
|
|
7edfae09bc | ||
|
|
a1759ddf5a | ||
|
|
5517a5d19b | ||
|
|
8fb72ba4fe | ||
|
|
24511fac8f | ||
|
|
ce9f2a82da | ||
|
|
0f82711199 | ||
|
|
b81fb7cb3f | ||
|
|
676a63c0d6 | ||
|
|
427736271c | ||
|
|
c39dd7a917 | ||
|
|
ed85fef0de | ||
|
|
22d9d9ba85 | ||
|
|
86825eeb2e | ||
|
|
c491a98dc7 | ||
|
|
2a4978c668 | ||
|
|
5b4eeee756 | ||
|
|
53e3180658 | ||
|
|
e43e14454d | ||
|
|
93ddcd53b1 | ||
|
|
0ee47a5c00 | ||
|
|
3ceef41ab0 | ||
|
|
a4e995d46c | ||
|
|
57693059a1 | ||
|
|
d18e307e10 | ||
|
|
eed708c6d3 | ||
|
|
1093888889 | ||
|
|
e58a420f9f | ||
|
|
4a0c3d132a | ||
|
|
0d81aa640e | ||
|
|
951524bff7 | ||
|
|
c7d0e9337a | ||
|
|
6955f3c7dc | ||
|
|
a52b017e1a | ||
|
|
158a0190b5 | ||
|
|
096fc11313 | ||
|
|
e9ac795d23 | ||
|
|
32f1a6bab1 | ||
|
|
052069a2df | ||
|
|
e1c997883f | ||
|
|
031b7da198 | ||
|
|
931af963b1 | ||
|
|
f5fa7d5da8 | ||
|
|
c6ffbcb3cf | ||
|
|
05ae200ff5 | ||
|
|
e745f772ef | ||
|
|
584212c569 | ||
|
|
dc9bf3e25d | ||
|
|
da84a26c47 | ||
|
|
7d3282c347 | ||
|
|
4454be44c3 | ||
|
|
52e0feda01 | ||
|
|
c89f5d07fb | ||
|
|
778a7bc21b | ||
|
|
50f5f38996 | ||
|
|
32da85daab | ||
|
|
3666157d14 | ||
|
|
1a178d0ef8 | ||
|
|
b64b758263 | ||
|
|
a68c6481ba | ||
|
|
3cbacb5ed9 | ||
|
|
38667797d3 | ||
|
|
9a6acb84a4 | ||
|
|
e3c8a84849 | ||
|
|
cc349f5954 | ||
|
|
e4b78e0510 | ||
|
|
15c6cd272e | ||
|
|
1614eff008 | ||
|
|
c86e88ebd1 | ||
|
|
39ebd85f58 | ||
|
|
bde82fe516 | ||
|
|
2ca650db76 | ||
|
|
e3da640737 | ||
|
|
e1dea1d9e2 | ||
|
|
84b8d6f675 | ||
|
|
8563428bf9 | ||
|
|
7b3b727c0e | ||
|
|
08098ff3f3 | ||
|
|
fb492d41f3 | ||
|
|
9c2586ab43 | ||
|
|
1bddf5df3b | ||
|
|
57b2f833f8 | ||
|
|
7907cbeb7f | ||
|
|
9cfcdd2b9b | ||
|
|
980df20752 | ||
|
|
aa92d232bb | ||
|
|
81c0bb5738 | ||
|
|
1a645c6e10 | ||
|
|
731f6ceb6e | ||
|
|
8e21245348 | ||
|
|
936e157e4a | ||
|
|
256f72c487 | ||
|
|
009aa5f1a5 | ||
|
|
d22d2cb708 | ||
|
|
59104028b6 | ||
|
|
c2f6a8321a | ||
|
|
5476a4b0b7 | ||
|
|
cd490aa0e5 | ||
|
|
b1ff44df4b | ||
|
|
dc6d00f0fc | ||
|
|
990da8da6f | ||
|
|
8fc7ad0359 | ||
|
|
8a89d9eb9c | ||
|
|
abfa9ae97b | ||
|
|
bde2e8ff8e | ||
|
|
4d8eb1850f | ||
|
|
5aaa3a5662 | ||
|
|
8fec96f5b2 | ||
|
|
15c306eca2 | ||
|
|
620ea1fc76 | ||
|
|
c5c375dc6d | ||
|
|
1b793e822a | ||
|
|
6281840f36 | ||
|
|
f5daa7eb78 | ||
|
|
52cb563383 | ||
|
|
69efc3261e | ||
|
|
fb19fb29cc | ||
|
|
9f257cf712 | ||
|
|
4af26fe4b4 | ||
|
|
ab2a118ee9 | ||
|
|
9cd97a4dc5 | ||
|
|
788b372e32 | ||
|
|
744f9b6c7f | ||
|
|
761d954ef1 | ||
|
|
d1006f50ad | ||
|
|
f24ff5bbdd | ||
|
|
a4314dbbde | ||
|
|
188dc1e55e | ||
|
|
731352fd04 | ||
|
|
4b53939002 | ||
|
|
b50c15755d | ||
|
|
0dc6262b39 | ||
|
|
9b32e3b3b2 | ||
|
|
37a8b7dad3 | ||
|
|
efeb0bd6fb | ||
|
|
af33040117 | ||
|
|
ac4c037634 | ||
|
|
9734ec53f7 | ||
|
|
2b8a92c7d6 | ||
|
|
adb4538317 | ||
|
|
2509099146 | ||
|
|
3be9005f95 | ||
|
|
be6d027cad | ||
|
|
3d679f8749 | ||
|
|
5a5a48e153 | ||
|
|
e5da648941 | ||
|
|
d2755f00bc | ||
|
|
09abc0b5af | ||
|
|
00f362acf1 | ||
|
|
65d479458e | ||
|
|
57e17e0dda | ||
|
|
691d1735fc | ||
|
|
360984bc4b | ||
|
|
0153f004f4 | ||
|
|
cc23508527 | ||
|
|
c884f4f2d3 | ||
|
|
fab6de1f5c | ||
|
|
c02f66636d | ||
|
|
c1162148b1 | ||
|
|
f76fdbf3ad | ||
|
|
feca08b3ec | ||
|
|
72675b17c4 | ||
|
|
9ea5186f49 | ||
|
|
d0a2eadc38 | ||
|
|
ae141a6591 | ||
|
|
d3f4d7b8ca | ||
|
|
b8e7a406d3 | ||
|
|
412e8bdc10 |
32
.editorconfig
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# http://editorconfig.org
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# 所有文件 ([*]):
|
||||||
|
# 使用空格缩进,每级 4 个空格
|
||||||
|
# UTF-8 编码
|
||||||
|
# Unix 风格换行符 (LF)
|
||||||
|
# 自动删除行尾空格
|
||||||
|
# 文件末尾自动添加空行
|
||||||
|
# JSON/YAML 文件:
|
||||||
|
# 缩进改为 2 个空格
|
||||||
|
# Markdown 文件:
|
||||||
|
# 不在末尾添加空行
|
||||||
|
# 保留行尾空格(Markdown 语法需要)
|
||||||
|
# 作用:
|
||||||
|
# 支持此标准的编辑器(VS Code、IDEA、Sublime 等)会自动读取并应用这些规则,确保不同开发者使用不同编辑器时,代码格式保持一致。
|
||||||
|
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[*.{json,yml,yaml}]
|
||||||
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
insert_final_newline = false
|
||||||
|
trim_trailing_whitespace = false
|
||||||
41
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
---
|
||||||
|
name: 漏洞报告
|
||||||
|
about: 报告项目中的Bug或安全问题
|
||||||
|
title: '[Bug] '
|
||||||
|
labels: 'bug'
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
## 问题描述
|
||||||
|
|
||||||
|
简要描述遇到的问题:
|
||||||
|
|
||||||
|
## 复现步骤
|
||||||
|
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
|
||||||
|
## 期望行为
|
||||||
|
|
||||||
|
描述你期望发生的情况:
|
||||||
|
|
||||||
|
## 实际行为
|
||||||
|
|
||||||
|
描述实际发生的情况:
|
||||||
|
|
||||||
|
## 环境信息
|
||||||
|
|
||||||
|
| 项目 | 信息 |
|
||||||
|
|:---|:---|
|
||||||
|
| 操作系统 | |
|
||||||
|
| JDK版本 | |
|
||||||
|
| 项目版本 | |
|
||||||
|
|
||||||
|
## 截图/日志
|
||||||
|
|
||||||
|
如有相关信息,请在此粘贴:
|
||||||
|
|
||||||
|
## 补充说明
|
||||||
|
|
||||||
|
其他补充信息:
|
||||||
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
blank_issues_enabled: true
|
||||||
15
.github/ISSUE_TEMPLATE/custom.md
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
name: 自定义
|
||||||
|
about: 其他问题或讨论
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
## 描述
|
||||||
|
|
||||||
|
请详细描述你的问题或需求:
|
||||||
|
|
||||||
|
## 补充信息
|
||||||
|
|
||||||
|
如有其他补充,请在此填写:
|
||||||
57
.github/ISSUE_TEMPLATE/enterprise-collaboration.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
name: 企业AI应用合作登记
|
||||||
|
about: 登记企业信息与合作意向,获取免费技术支持
|
||||||
|
title: '[合作登记] 企业AI应用需求登记'
|
||||||
|
labels: '合作登记'
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
## 登记说明
|
||||||
|
|
||||||
|
感谢您关注 RuoYi AI!我们团队今年的重点是帮助企业落地AI应用,如果贵公司符合要求,我们可以提供**免费的技术支持**。
|
||||||
|
|
||||||
|
请在下方评论中填写登记信息,格式如下:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 登记格式预览
|
||||||
|
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|:---|:---|
|
||||||
|
| 公司名称 | (必填) |
|
||||||
|
| 公司Logo地址 | (可选) |
|
||||||
|
| 所属行业 | (必填) |
|
||||||
|
| 公司所在地 | (必填) |
|
||||||
|
| 项目名称 | (必填) |
|
||||||
|
| 项目Logo地址 | (可选) |
|
||||||
|
| 项目简介 | (必填) |
|
||||||
|
| 当前AI应用状态 | □ 尚未开始 □ 规划中 □ 已有初步应用 □ 已有成熟应用 |
|
||||||
|
| 计划落地时间 | □ 1个月内 □ 1-3个月 □ 3-6个月 □ 6个月以上 |
|
||||||
|
| 当前痛点或挑战 | (可选) |
|
||||||
|
| 公司简介 | (可选) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 可复制格式
|
||||||
|
|
||||||
|
复制下方内容并在评论中填写:
|
||||||
|
|
||||||
|
```
|
||||||
|
| 字段 | 内容 |
|
||||||
|
|:---|:---|
|
||||||
|
| 公司名称 | |
|
||||||
|
| 公司Logo地址 | |
|
||||||
|
| 所属行业 | |
|
||||||
|
| 公司所在地 | |
|
||||||
|
| 项目名称 | |
|
||||||
|
| 项目Logo地址 | |
|
||||||
|
| 项目简介 | |
|
||||||
|
| 当前AI应用状态 | |
|
||||||
|
| 计划落地时间 | |
|
||||||
|
| 当前痛点或挑战 | |
|
||||||
|
| 公司简介 | |
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> **温馨提示**:提交的信息仅用于合作沟通,不会对外公开。
|
||||||
31
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
name: 想法建议
|
||||||
|
about: 提出新功能建议或改进想法
|
||||||
|
title: '[Feature] '
|
||||||
|
labels: 'enhancement'
|
||||||
|
assignees: ''
|
||||||
|
---
|
||||||
|
|
||||||
|
## 建议类型
|
||||||
|
|
||||||
|
□ 新功能 □ 功能改进 □ 文档完善 □ 其他
|
||||||
|
|
||||||
|
## 建议描述
|
||||||
|
|
||||||
|
清晰描述你的建议内容:
|
||||||
|
|
||||||
|
## 使用场景
|
||||||
|
|
||||||
|
描述这个功能在什么场景下会用到:
|
||||||
|
|
||||||
|
## 期望效果
|
||||||
|
|
||||||
|
描述你期望的效果:
|
||||||
|
|
||||||
|
## 参考示例
|
||||||
|
|
||||||
|
如有类似的参考实现或产品,请提供链接:
|
||||||
|
|
||||||
|
## 补充说明
|
||||||
|
|
||||||
|
其他补充信息:
|
||||||
6
.gitignore
vendored
@@ -21,10 +21,13 @@ target/
|
|||||||
|
|
||||||
### IntelliJ IDEA ###
|
### IntelliJ IDEA ###
|
||||||
.idea
|
.idea
|
||||||
|
.claude
|
||||||
|
.github
|
||||||
*.iws
|
*.iws
|
||||||
*.iml
|
*.iml
|
||||||
*.ipr
|
*.ipr
|
||||||
|
|
||||||
|
|
||||||
### JRebel ###
|
### JRebel ###
|
||||||
rebel.xml
|
rebel.xml
|
||||||
|
|
||||||
@@ -38,11 +41,14 @@ nbdist/
|
|||||||
######################################################################
|
######################################################################
|
||||||
# Others
|
# Others
|
||||||
*.log
|
*.log
|
||||||
|
*.log.gz
|
||||||
*.xml.versionsBackup
|
*.xml.versionsBackup
|
||||||
*.swp
|
*.swp
|
||||||
|
data/
|
||||||
|
|
||||||
!*/build/*.java
|
!*/build/*.java
|
||||||
!*/build/*.html
|
!*/build/*.html
|
||||||
!*/build/*.xml
|
!*/build/*.xml
|
||||||
|
|
||||||
.flattened-pom.xml
|
.flattened-pom.xml
|
||||||
|
/.claude/settings.local.json
|
||||||
|
|||||||
2
LICENSE
@@ -1,6 +1,6 @@
|
|||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) 2023 ruoyi-ai
|
Copyright (c) 2026 ruoyi-ai
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
|||||||
407
README.md
@@ -1,10 +1,6 @@
|
|||||||
|
|
||||||
|
|
||||||
# RuoYi AI
|
# RuoYi AI
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
<!-- PROJECT SHIELDS -->
|
|
||||||
|
|
||||||
[![Contributors][contributors-shield]][contributors-url]
|
[![Contributors][contributors-shield]][contributors-url]
|
||||||
[![Forks][forks-shield]][forks-url]
|
[![Forks][forks-shield]][forks-url]
|
||||||
@@ -13,227 +9,274 @@
|
|||||||
[![MIT License][license-shield]][license-url]
|
[![MIT License][license-shield]][license-url]
|
||||||
|
|
||||||
|
|
||||||
<!-- PROJECT LOGO -->
|
<p align="center">
|
||||||
<br />
|
<a href="https://trendshift.io/repositories/13209">
|
||||||
|
<img src="https://trendshift.io/api/badge/repositories/13209" alt="GitHub Trending">
|
||||||
|
</a>
|
||||||
<img style="text-align: center;" src="image/00.png" alt="Logo" width="150" height="150">
|
|
||||||
|
|
||||||
<h3 style="text-align: center;">快速搭建属于自己的 AI 助手平台</h3>
|
|
||||||
|
|
||||||
<p style="text-align: center;">
|
|
||||||
全新升级,开箱即用,简单高效
|
|
||||||
<br />
|
|
||||||
<a href="https://doc.pandarobot.chat"><strong>探索本项目的文档 »</strong></a>
|
|
||||||
<br />
|
|
||||||
<br />
|
|
||||||
<a href="https://web.pandarobot.chat">项目预览</a>
|
|
||||||
·
|
|
||||||
<a href="https://github.com/ageerle/ruoyi-ai/issues">报告Bug</a>
|
|
||||||
·
|
|
||||||
<a href="https://github.com/ageerle/ruoyi-ai/issues">提出新特性</a>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## 目录
|
<img src="docs/image/logo.png" alt="RuoYi AI Logo" width="120" height="120">
|
||||||
|
|
||||||
- [源码地址](#源码地址)
|
### 企业级AI助手平台
|
||||||
- [特色功能](#特色功能)
|
|
||||||
- [项目演示](#项目演示)
|
|
||||||
- [后台管理](#后台管理)
|
|
||||||
- [用户端](#用户端)
|
|
||||||
- [小程序端](#小程序端)
|
|
||||||
- [开发前的配置要求](#开发前的配置要求)
|
|
||||||
- [文件目录说明](#文件目录说明)
|
|
||||||
- [使用到的框架](#使用到的框架)
|
|
||||||
- [贡献者](#贡献者)
|
|
||||||
- [如何参与开源项目](#如何参与开源项目)
|
|
||||||
- [版本控制](#版本控制)
|
|
||||||
- [作者](#作者)
|
|
||||||
- [鸣谢](#鸣谢)
|
|
||||||
|
|
||||||
### 源码地址
|
*开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力*
|
||||||
- 项目文档: https://doc.pandarobot.chat
|
|
||||||
- 前端-后台管理: https://github.com/ageerle/ruoyi-admin
|
|
||||||
- 前端-用户端: https://github.com/ageerle/ruoyi-web
|
|
||||||
- 小程序端: https://github.com/ageerle/ruoyi-uniapp
|
|
||||||
- 演示地址: https://web.pandarobot.chat
|
|
||||||
- 后台管理: https://admin.pandarobot.chat
|
|
||||||
- 用户名: admin 密码:admin123
|
|
||||||
-
|
|
||||||
### gitcode源码地址
|
|
||||||
- https://gitcode.com/ageerle/ruoyi-ai
|
|
||||||
- https://gitcode.com/ageerle/ruoyi-web
|
|
||||||
- https://gitcode.com/ageerle/ruoyi-admin
|
|
||||||
- https://gitcode.com/ageerle/ruoyi-uniapp
|
|
||||||
|
|
||||||
### 特色功能
|
**[English](README_EN.md)** | **[📖 使用文档](https://doc.pandarobot.chat)** |
|
||||||
1. 全套开源系统:提供完整的前端应用、后台管理以及小程序应用,基于MIT协议,开箱即用。
|
**[🚀 在线体验](https://web.pandarobot.chat)** | **[🐛 问题反馈](https://github.com/ageerle/ruoyi-ai/issues)** | **[💡 功能建议](https://github.com/ageerle/ruoyi-ai/issues)**
|
||||||
2. 本地RAG方案:集成Milvus/Weaviate向量库、本地向量化模型与Ollama,实现本地化RAG
|
|
||||||
3. 丰富插件功能:支持联网、SQL查询插件及Text2API插件,扩展系统能力与应用场景。
|
|
||||||
4. 内置SSE、websocket等网络协议,支持对接多种大语言模型,同时还集成了MidJourney和DALLE AI绘画功能
|
|
||||||
5. 强大的多媒体功能:支持AI翻译、PPT制作、语音克隆和翻唱等
|
|
||||||
6. 扩展功能:支持将大模型接入个人或企业微信
|
|
||||||
7. 支付功能:支持易支付、微信支付等多种支付方式
|
|
||||||
|
|
||||||
### 项目演示
|
|
||||||
|
|
||||||
#### 后台管理
|
|
||||||
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
|
|
||||||
<img src="image/02.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
<img src="image/03.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
<img src="image/04.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
<img src="image/05.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
#### 用户端
|
## ✨ 核心亮点
|
||||||
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: center;">
|
|
||||||
<img src="image/08.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
<img src="image/09.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
<img src="image/10.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
<img src="image/11.png" alt="drawing" style="width: 600px; height: 300px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
#### 小程序端
|
| 模块 | 现有能力
|
||||||
<div style="display: flex; flex-wrap: wrap; gap: 20px; justify-content: flex-start;">
|
|:----------:|---
|
||||||
<img src="image/06.png" alt="drawing" style="width: 320px; height: 600px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
| **模型管理** | 多模型接入(OpenAI/DeepSeek/通义/智谱)、多模态理解、Coze/DIFY/FastGPT平台集成
|
||||||
<img src="image/07.png" alt="drawing" style="width: 320px; height: 600px; border: 2px solid #ddd; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1);"/>
|
| **知识管理** | 本地RAG + 向量库(Milvus/Weaviate/Qdrant) + 文档解析
|
||||||
</div>
|
| **工具管理** | Mcp协议集成、Skills能力 + 可扩展工具生态
|
||||||
|
| **流程编排** | 可视化工作流设计器、节点拖拽编排、SSE流式执行,目前已经支持模型调用,邮件发送,人工审核等节点
|
||||||
|
| **多智能体** | 基于Langchain4j的Agent框架、Supervisor模式编排,支持多种决策模型
|
||||||
|
|
||||||
### 开发前的配置要求
|
## 🚀 快速体验
|
||||||
|
|
||||||
1. jdk 17
|
### 在线演示
|
||||||
2. mysql 5.7、8.0
|
|
||||||
3. redis 版本必须 >= 5.X
|
|
||||||
4. maven 3.8+
|
|
||||||
5. nodejs 20+ & pnpm
|
|
||||||
|
|
||||||
### 文件目录说明
|
| 平台 | 地址 | 账号 |
|
||||||
RuoYi-AI
|
|:------:|---|---|
|
||||||
|
| 用户端 | [web.pandarobot.chat](https://web.pandarobot.chat) | admin / admin123 |
|
||||||
|
| 管理后台 | [admin.pandarobot.chat](https://admin.pandarobot.chat) | admin / admin123 |
|
||||||
|
|
||||||
```
|
### 项目源码
|
||||||
├─ ruoyi-admin // 管理模块
|
|
||||||
│ └─ RuoYiApplication // 启动类
|
| 项目模块 | GitHub 仓库 | Gitee 仓库 | GitCode 仓库 |
|
||||||
│ └─ RuoYiServletInitializer // 容器部署初始化类
|
|----------|-------------------------------------------------------|------------------------------------------------------|--------------------------------------------------------|
|
||||||
│ └─ resources // 资源文件
|
| 🔧 后端服务 | [ruoyi-ai](https://github.com/ageerle/ruoyi-ai) | [ruoyi-ai](https://gitee.com/ageerle/ruoyi-ai) | [ruoyi-ai](https://gitcode.com/ageerle/ruoyi-ai) |
|
||||||
│ └─ i18n/messages.properties // 国际化配置文件
|
| 🎨 用户前端 | [ruoyi-web](https://github.com/ageerle/ruoyi-web) | [ruoyi-web](https://gitee.com/ageerle/ruoyi-web) | [ruoyi-web](https://gitcode.com/ageerle/ruoyi-web) |
|
||||||
│ └─ application.yml // 框架总配置文件
|
| 🛠️ 管理后台 | [ruoyi-admin](https://github.com/ageerle/ruoyi-admin) | [ruoyi-admin](https://gitee.com/ageerle/ruoyi-admin) | [ruoyi-admin](https://gitcode.com/ageerle/ruoyi-admin) |
|
||||||
│ └─ application-dev.yml // 开发环境配置文件
|
|
||||||
│ └─ application-prod.yml // 生产环境配置文件
|
### 合作项目
|
||||||
│ └─ banner.txt // 框架启动图标
|
| 项目名称 | GitHub 仓库 | Gitee 仓库
|
||||||
│ └─ logback-plus.xml // 日志配置文件
|
|----------------|-------------------------------------------------------|------------------------------------------------------|
|
||||||
│ └─ ip2region.xdb // IP区域地址库
|
| element-plus-x | [element-plus-x](https://github.com/element-plus-x/Element-Plus-X) | [element-plus-x](https://gitee.com/he-jiayue/element-plus-x) |
|
||||||
├─ ruoyi-common // 通用模块
|
|
||||||
│ └─ ruoyi-common-bom // common依赖包管理
|
## 🛠️ 技术架构
|
||||||
└─ ruoyi-common-chat // 聊天模块
|
|
||||||
│ └─ ruoyi-common-core // 核心模块
|
### 核心框架
|
||||||
│ └─ ruoyi-common-doc // 系统接口模块
|
- **后端架构**:Spring Boot 4.0 + Spring ai 2.0 + Langchain4j
|
||||||
│ └─ ruoyi-common-encrypt // 数据加解密模块
|
- **数据存储**:MySQL 8.0 + Redis + 向量数据库(Milvus/Weaviate/Qdrant)
|
||||||
│ └─ ruoyi-common-excel // excel模块
|
- **前端技术**:Vue 3 + Vben Admin + element-plus-x
|
||||||
│ └─ ruoyi-common-idempotent // 幂等功能模块
|
- **安全认证**:Sa-Token + JWT 双重保障
|
||||||
│ └─ ruoyi-common-json // 序列化模块
|
|
||||||
│ └─ ruoyi-common-log // 日志模块
|
|
||||||
│ └─ ruoyi-common-mail // 邮件模块
|
|
||||||
│ └─ ruoyi-common-mybatis // 数据库模块
|
|
||||||
│ └─ ruoyi-common-oss // oss服务模块
|
|
||||||
│ └─ ruoyi-common-pay // 支付模块
|
|
||||||
│ └─ ruoyi-common-ratelimiter // 限流功能模块
|
|
||||||
│ └─ ruoyi-common-redis // 缓存服务模块
|
|
||||||
│ └─ ruoyi-common-satoken // satoken模块
|
|
||||||
│ └─ ruoyi-common-security // 安全模块
|
|
||||||
│ └─ ruoyi-common-sensitive // 脱敏模块
|
|
||||||
│ └─ ruoyi-common-sms // 短信模块
|
|
||||||
│ └─ ruoyi-common-tenant // 租户模块
|
|
||||||
│ └─ ruoyi-common-translation // 通用翻译模块
|
|
||||||
│ └─ ruoyi-common-web // web模块
|
|
||||||
├─ ruoyi-modules // 模块组
|
|
||||||
│ └─ ruoyi-demo // 演示模块
|
|
||||||
│ └─ ruoyi-system // 业务模块
|
|
||||||
├─ .run // 执行脚本文件
|
|
||||||
├─ .editorconfig // 编辑器编码格式配置
|
|
||||||
├─ LICENSE // 开源协议
|
|
||||||
├─ pom.xml // 公共依赖
|
|
||||||
├─ README.md // 框架说明文件
|
|
||||||
|
|
||||||
|
|
||||||
|
- **文档处理**:PDF、Word、Excel 解析,图像智能分析
|
||||||
|
- **实时通信**:WebSocket 实时通信,SSE 流式响应
|
||||||
|
- **系统监控**:完善的日志体系、性能监控、服务健康检查
|
||||||
|
|
||||||
|
## 🐳 Docker 部署
|
||||||
|
|
||||||
|
本项目提供两种 Docker 部署方式:
|
||||||
|
|
||||||
|
### 方式一:一键启动所有服务(推荐)
|
||||||
|
|
||||||
|
使用 `docker-compose-all.yaml` 可以一键启动所有服务(包括后端、管理端、用户端及依赖服务):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 克隆仓库
|
||||||
|
git clone https://github.com/ageerle/ruoyi-ai.git
|
||||||
|
cd ruoyi-ai
|
||||||
|
|
||||||
|
# 启动所有服务(从镜像仓库拉取预构建镜像)
|
||||||
|
docker-compose -f docker-compose-all.yaml up -d
|
||||||
|
|
||||||
|
# 查看服务状态
|
||||||
|
docker-compose -f docker-compose-all.yaml ps
|
||||||
|
|
||||||
|
# 访问服务
|
||||||
|
# 管理端: http://localhost:25666 (admin / admin123)
|
||||||
|
# 用户端: http://localhost:25137
|
||||||
|
# 后端API: http://localhost:26039
|
||||||
```
|
```
|
||||||
|
|
||||||
### 版本控制
|
### 方式二:分步部署(源码编译)
|
||||||
|
|
||||||
该项目使用Git进行版本管理。您可以在repository参看当前可用版本。
|
如果您需要从源码构建后端服务,请按照以下步骤操作:
|
||||||
|
|
||||||
|
#### 第一步:部署后端服务
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 进入后端项目目录
|
||||||
|
cd ruoyi-ai
|
||||||
|
|
||||||
### 版权说明
|
# 启动后端服务(源码编译构建)
|
||||||
|
docker-compose up -d --build
|
||||||
|
|
||||||
该项目使用了MIT授权许可,详情请参阅 [LICENSE.txt](https://github.com/ageerle/ruoyi-ai/blob/main/LICENSE)
|
# 等待后端服务启动完成
|
||||||
|
docker-compose logs -f backend
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 第二步:部署管理端
|
||||||
|
|
||||||
### 作者寄语
|
```bash
|
||||||
|
# 进入管理端项目目录
|
||||||
|
cd ruoyi-admin
|
||||||
|
|
||||||
最近,我们的项目意外地受到了广泛关注,甚至被许多人误以为是一个已经成熟且能够快速落地的项目。然而,事实并非如此。这个项目是我个人在业余时间进行的研究,主要目的是学习和探索。它是一个以人工智能(AI)为核心的平台,旨在帮助企业通过配置的方式快速构建AI应用。
|
# 构建并启动管理端
|
||||||
|
docker-compose up -d --build
|
||||||
|
|
||||||
#### 项目现状
|
# 访问管理端
|
||||||
|
# 地址: http://localhost:5666
|
||||||
|
```
|
||||||
|
|
||||||
目前,项目还处于早期阶段,距离成熟还有很长的路要走。由于个人精力有限,项目的发展速度受到了一定的限制。为了加快项目的进度,我真诚地希望更多人能够参与到项目中来。无论是经验丰富的开发者,还是刚刚入门的小白,我都热烈欢迎你们提交Pull Request(PR)。即使代码修改得很少,或者存在一些错误,都没有关系。我会认真审核每一位贡献者的代码,并和大家一起完善项目。
|
#### 第三步:部署用户端(可选)
|
||||||
|
|
||||||
#### 开发计划
|
```bash
|
||||||
|
# 进入用户端项目目录
|
||||||
|
cd ruoyi-web
|
||||||
|
|
||||||
- 智能体管理
|
# 构建并启动用户端
|
||||||
|
docker-compose up -d --build
|
||||||
|
|
||||||
|
# 访问用户端
|
||||||
|
# 地址: http://localhost:5137
|
||||||
|
```
|
||||||
|
|
||||||
|
### 服务端口说明
|
||||||
|
|
||||||
|
| 服务 | 一键启动端口 | 分步部署端口 | 说明 |
|
||||||
|
|------|-------------|-------------|------|
|
||||||
|
| 管理端 | 25666 | 5666 | 管理后台访问地址 |
|
||||||
|
| 用户端 | 25137 | 5137 | 用户前端访问地址 |
|
||||||
|
| 后端服务 | 26039 | 6039 | 后端 API 服务 |
|
||||||
|
| MySQL | 23306 | 23306 | 数据库服务 |
|
||||||
|
| Redis | 26379 | 6379 | 缓存服务 |
|
||||||
|
| Weaviate | 28080 | 28080 | 向量数据库 |
|
||||||
|
| MinIO API | 29000 | 9000 | 对象存储 API |
|
||||||
|
| MinIO Console | 29090 | 9090 | 对象存储控制台 |
|
||||||
|
|
||||||
|
### 镜像仓库
|
||||||
|
|
||||||
|
所有镜像托管在阿里云容器镜像服务:
|
||||||
|
|
||||||
|
```
|
||||||
|
crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai
|
||||||
|
```
|
||||||
|
|
||||||
|
可用镜像:
|
||||||
|
- `mysql:v3` - MySQL 数据库(包含初始化 SQL)
|
||||||
|
- `redis:6.2` - Redis 缓存
|
||||||
|
- `weaviate:1.30.0` - 向量数据库
|
||||||
|
- `minio:latest` - 对象存储
|
||||||
|
- `ruoyi-ai-backend:latest` - 后端服务
|
||||||
|
- `ruoyi-ai-admin:latest` - 管理端前端
|
||||||
|
- `ruoyi-ai-web:latest` - 用户端前端
|
||||||
|
|
||||||
|
### 常用命令
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 停止所有服务
|
||||||
|
docker-compose -f docker-compose-all.yaml down
|
||||||
|
|
||||||
|
# 查看服务日志
|
||||||
|
docker-compose -f docker-compose-all.yaml logs -f [服务名]
|
||||||
|
|
||||||
|
# 重启某个服务
|
||||||
|
docker-compose -f docker-compose-all.yaml restart [服务名]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📚 使用文档
|
||||||
|
|
||||||
|
想要深入了解安装部署、功能配置和二次开发?
|
||||||
|
|
||||||
|
**👉 [完整使用文档](https://doc.pandarobot.chat)**
|
||||||
|
|
||||||
|
遇到知识库或 RAG 回答异常问题?
|
||||||
|
|
||||||
|
**👉 [RAG 回答异常排查手册](docs/troubleshooting/rag-failures.md)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤝 参与贡献
|
||||||
|
|
||||||
|
我们热烈欢迎社区贡献!无论您是资深开发者还是初学者,都可以为项目贡献力量 💪
|
||||||
|
|
||||||
|
### 贡献方式
|
||||||
|
|
||||||
|
1. **Fork** 项目到您的账户
|
||||||
|
2. **创建分支** (`git checkout -b feature/新功能名称`)
|
||||||
|
3. **提交代码** (`git commit -m '添加某某功能'`)
|
||||||
|
4. **推送分支** (`git push origin feature/新功能名称`)
|
||||||
|
5. **发起 Pull Request**
|
||||||
|
|
||||||
|
> 💡 **小贴士**:建议将 PR 提交到 GitHub,我们会自动同步到其他代码托管平台
|
||||||
|
|
||||||
|
## 📄 开源协议
|
||||||
|
|
||||||
|
本项目采用 **MIT 开源协议**,详情请查看 [LICENSE](LICENSE) 文件。
|
||||||
|
|
||||||
|
## 🙏 特别鸣谢
|
||||||
|
|
||||||
|
感谢以下优秀的开源项目为本项目提供支持:
|
||||||
|
- [Spring AI Alibaba Copilot](https://github.com/spring-ai-alibaba/copilot) - 基于spring-ai-alibaba
|
||||||
|
的智能编码助手
|
||||||
|
- [Langchain4j](https://github.com/langchain4j/langchain4j) - 强大的 Java LLM 开发框架
|
||||||
|
- [RuoYi-Vue-Plus](https://gitee.com/dromara/RuoYi-Vue-Plus) - 成熟的企业级快速开发框架
|
||||||
|
- [Vben Admin](https://github.com/vbenjs/vue-vben-admin) - 现代化的 Vue 后台管理模板
|
||||||
|
|
||||||
|
## 🌐 生态伙伴
|
||||||
|
|
||||||
|
- [PPIO 派欧云](https://ppinfra.com/user/register?invited_by=P8QTUY&utm_source=github_ruoyi-ai) - 提供高性价比的 GPU
|
||||||
|
算力和模型 API 服务
|
||||||
|
- [优云智算](https://www.compshare.cn/?ytag=GPU_YY-gh_ruoyi) - 万卡RTX40系GPU+海内外主流模型API服务,秒级响应,按量计费,新客免费用。
|
||||||
|
|
||||||
|
## 💬 社区交流
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<img src="docs/image/wx.png" alt="微信二维码" width="200" height="200"><br>
|
||||||
|
<strong>扫码添加作者微信</strong><br>
|
||||||
|
<em>邀请进群学习</em>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<img src="docs/image/qq.png" alt="QQ群二维码" width="200" height="200"><br>
|
||||||
|
<strong>QQ技术交流群</strong><br>
|
||||||
|
<em>技术讨论</em>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
通过设置提示词、插件、知识库等,用户可以快速构建一个AI应用。这将极大地简化AI应用的开发流程,降低开发门槛,使更多企业能够轻松地利用AI技术。
|
|
||||||
<div>
|
|
||||||
<img src="image/13.png" alt="drawing" width="600px" height="300px"/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
- 流程编排
|
---
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
通过流程编排功能,用户可以将不同的模型按照业务逻辑进行有序连接。这将解决单一模型能力不足的问题,充分发挥多个模型的协同作用,从而更好地满足企业的复杂业务需求。
|
**[⭐ 点个Star支持一下](https://github.com/ageerle/ruoyi-ai)** • **[ Fork 开始贡献](https://github.com/ageerle/ruoyi-ai/fork)** • **[📚 English](README_EN.md)** • **[📖 查看完整文档](https://doc.pandarobot.chat)**
|
||||||
|
|
||||||
- 感谢
|
*用 ❤️ 打造,由 RuoYi AI 开源社区维护*
|
||||||
|
|
||||||
最后,我要感谢RuoYi-Vue-Plus、chatgpt-java、chatgpt-web-midjourney-proxy等优秀框架。正是因为这些项目的开源和共享,我才能够在这个基础上进行开发,使我们的项目能够取得今天的成果。再次感谢这些项目及其背后的开发者们!
|
</div>
|
||||||
|
|
||||||
希望更多志同道合的朋友能够加入我们,共同推动这个项目的发展。让我们一起努力,将这个项目打造成一个真正成熟、实用的AI平台!
|
<!-- Badge Links -->
|
||||||
|
|
||||||
#### 如何参与开源项目
|
|
||||||
|
|
||||||
贡献使开源社区成为一个学习、激励和创造的绝佳场所。你所作的任何贡献都是**非常感谢**的。
|
|
||||||
|
|
||||||
1. Fork 这个项目
|
|
||||||
2. 创建你的功能分支 (`git checkout -b feature/dev`)
|
|
||||||
3. 提交你的更改 (`git commit -m 'Add some dev'`)
|
|
||||||
4. 推送到分支 (`git push origin feature/dev`)
|
|
||||||
5. 打开拉取请求
|
|
||||||
6. pr请提交到GitHub上,会定时同步到gitee
|
|
||||||
|
|
||||||
#### 项目文档
|
|
||||||
1. 项目文档基于vitepress构建
|
|
||||||
2. 按照[如何参与开源项目](#如何参与开源项目)拉取 https://github.com/ageerle/ruoyi-doc
|
|
||||||
3. 安装依赖:npm install
|
|
||||||
4. 启动项目:npm run docs:dev
|
|
||||||
5. 主页路径:docs/guide/introduction/index.md
|
|
||||||
|
|
||||||
### 鸣谢
|
|
||||||
- [chatgpt-java](https://github.com/Grt1228/chatgpt-java)
|
|
||||||
- [RuoYi-Vue-Plus](https://gitee.com/dromara/RuoYi-Vue-Plus)
|
|
||||||
- [chatgpt-web-midjourney-proxy](https://github.com/Dooy/chatgpt-web-midjourney-proxy)
|
|
||||||
- [Vben Admin](https://github.com/vbenjs/vue-vben-admin)
|
|
||||||
- [Naive UI](https://www.naiveui.com)
|
|
||||||
|
|
||||||
<!-- links -->
|
|
||||||
[your-project-path]:https://github.com/ageerle/ruoyi-ai
|
|
||||||
[contributors-shield]: https://img.shields.io/github/contributors/ageerle/ruoyi-ai.svg?style=flat-square
|
[contributors-shield]: https://img.shields.io/github/contributors/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
|
|
||||||
[contributors-url]: https://github.com/ageerle/ruoyi-ai/graphs/contributors
|
[contributors-url]: https://github.com/ageerle/ruoyi-ai/graphs/contributors
|
||||||
|
|
||||||
[forks-shield]: https://img.shields.io/github/forks/ageerle/ruoyi-ai.svg?style=flat-square
|
[forks-shield]: https://img.shields.io/github/forks/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
|
|
||||||
[forks-url]: https://github.com/ageerle/ruoyi-ai/network/members
|
[forks-url]: https://github.com/ageerle/ruoyi-ai/network/members
|
||||||
|
|
||||||
[stars-shield]: https://img.shields.io/github/stars/ageerle/ruoyi-ai.svg?style=flat-square
|
[stars-shield]: https://img.shields.io/github/stars/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
|
|
||||||
[stars-url]: https://github.com/ageerle/ruoyi-ai/stargazers
|
[stars-url]: https://github.com/ageerle/ruoyi-ai/stargazers
|
||||||
|
|
||||||
[issues-shield]: https://img.shields.io/github/issues/ageerle/ruoyi-ai.svg?style=flat-square
|
[issues-shield]: https://img.shields.io/github/issues/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
[issues-url]: https://img.shields.io/github/issues/ageerle/ruoyi-ai.svg
|
|
||||||
|
[issues-url]: https://github.com/ageerle/ruoyi-ai/issues
|
||||||
|
|
||||||
[license-shield]: https://img.shields.io/github/license/ageerle/ruoyi-ai.svg?style=flat-square
|
[license-shield]: https://img.shields.io/github/license/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
[license-url]: https://github.com/ageerle/ruoyi-ai/blob/master/LICENSE.txt
|
|
||||||
[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat-square&logo=linkedin&colorB=555
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[license-url]: https://github.com/ageerle/ruoyi-ai/blob/main/LICENSE
|
||||||
|
|||||||
272
README_EN.md
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
|
||||||
|
# RuoYi AI
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
[![Contributors][contributors-shield]][contributors-url]
|
||||||
|
[![Forks][forks-shield]][forks-url]
|
||||||
|
[![Stargazers][stars-shield]][stars-url]
|
||||||
|
[![Issues][issues-shield]][issues-url]
|
||||||
|
[![MIT License][license-shield]][license-url]
|
||||||
|
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://trendshift.io/repositories/13209">
|
||||||
|
<img src="https://trendshift.io/api/badge/repositories/13209" alt="GitHub Trending">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<img src="docs/image/logo.png" alt="RuoYi AI Logo" width="120" height="120">
|
||||||
|
|
||||||
|
### Enterprise-Grade AI Assistant Platform
|
||||||
|
|
||||||
|
*An out-of-the-box full-stack AI platform supporting multi-agent collaboration, Supervisor mode orchestration, and multiple decision models, with advanced RAG technology and visual workflow orchestration capabilities*
|
||||||
|
|
||||||
|
**[中文](README.md)** | **[📖 Documentation](https://doc.pandarobot.chat)** |
|
||||||
|
**[🚀 Live Demo](https://web.pandarobot.chat)** | **[🐛 Report Issues](https://github.com/ageerle/ruoyi-ai/issues)** | **[💡 Feature Requests](https://github.com/ageerle/ruoyi-ai/issues)**
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## ✨ Core Features
|
||||||
|
|
||||||
|
| Module | Current Capabilities |
|
||||||
|
|:---:|---|
|
||||||
|
| **Model Management** | Multi-model integration (OpenAI/DeepSeek/Tongyi/Zhipu), multi-modal understanding, Coze/DIFY/FastGPT platform integration |
|
||||||
|
| **Knowledge Base** | Local RAG + Vector DB (Milvus/Weaviate/Qdrant) + Document parsing |
|
||||||
|
| **Tool Management** | MCP protocol integration, Skills capability + Extensible tool ecosystem |
|
||||||
|
| **Workflow Orchestration** | Visual workflow designer, drag-and-drop node orchestration, SSE streaming execution, currently supports model calls, email sending, manual review nodes |
|
||||||
|
| **Multi-Agent** | Agent framework based on Langchain4j, Supervisor mode orchestration, supports multiple decision models |
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
### Live Demo
|
||||||
|
|
||||||
|
| Platform | URL | Account |
|
||||||
|
|:------:|---|---|
|
||||||
|
| User Frontend | [web.pandarobot.chat](https://web.pandarobot.chat) | admin / admin123 |
|
||||||
|
| Admin Panel | [admin.pandarobot.chat](https://admin.pandarobot.chat) | admin / admin123 |
|
||||||
|
|
||||||
|
### Project Repositories
|
||||||
|
|
||||||
|
| Module | GitHub Repository | Gitee Repository | GitCode Repository |
|
||||||
|
|----------|-------------------------------------------------------|------------------------------------------------------|--------------------------------------------------------|
|
||||||
|
| 🔧 Backend | [ruoyi-ai](https://github.com/ageerle/ruoyi-ai) | [ruoyi-ai](https://gitee.com/ageerle/ruoyi-ai) | [ruoyi-ai](https://gitcode.com/ageerle/ruoyi-ai) |
|
||||||
|
| 🎨 User Frontend | [ruoyi-web](https://github.com/ageerle/ruoyi-web) | [ruoyi-web](https://gitee.com/ageerle/ruoyi-web) | [ruoyi-web](https://gitcode.com/ageerle/ruoyi-web) |
|
||||||
|
| 🛠️ Admin Panel | [ruoyi-admin](https://github.com/ageerle/ruoyi-admin) | [ruoyi-admin](https://gitee.com/ageerle/ruoyi-admin) | [ruoyi-admin](https://gitcode.com/ageerle/ruoyi-admin) |
|
||||||
|
|
||||||
|
### Partner Projects
|
||||||
|
| Project Name | GitHub Repository | Gitee Repository |
|
||||||
|
|----------------|-------------------------------------------------------|------------------------------------------------------|
|
||||||
|
| element-plus-x | [element-plus-x](https://github.com/element-plus-x/Element-Plus-X) | [element-plus-x](https://gitee.com/he-jiayue/element-plus-x) |
|
||||||
|
|
||||||
|
## 🛠️ Technical Architecture
|
||||||
|
|
||||||
|
### Core Framework
|
||||||
|
- **Backend**: Spring Boot 4.0 + Spring AI 2.0 + Langchain4j
|
||||||
|
- **Data Storage**: MySQL 8.0 + Redis + Vector Databases (Milvus/Weaviate/Qdrant)
|
||||||
|
- **Frontend**: Vue 3 + Vben Admin + element-plus-x
|
||||||
|
- **Security**: Sa-Token + JWT dual-layer security
|
||||||
|
|
||||||
|
|
||||||
|
- **Document Processing**: PDF, Word, Excel parsing, intelligent image analysis
|
||||||
|
- **Real-time Communication**: WebSocket real-time communication, SSE streaming response
|
||||||
|
- **System Monitoring**: Comprehensive logging system, performance monitoring, service health checks
|
||||||
|
|
||||||
|
## 🐳 Docker Deployment
|
||||||
|
|
||||||
|
This project provides two Docker deployment methods:
|
||||||
|
|
||||||
|
### Method 1: One-click Start All Services (Recommended)
|
||||||
|
|
||||||
|
Use `docker-compose-all.yaml` to start all services at once (including backend, admin panel, user frontend, and dependencies):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone the repository
|
||||||
|
git clone https://github.com/ageerle/ruoyi-ai.git
|
||||||
|
cd ruoyi-ai
|
||||||
|
|
||||||
|
# Start all services (pull pre-built images from registry)
|
||||||
|
docker-compose -f docker-compose-all.yaml up -d
|
||||||
|
|
||||||
|
# Check service status
|
||||||
|
docker-compose -f docker-compose-all.yaml ps
|
||||||
|
|
||||||
|
# Access services
|
||||||
|
# Admin Panel: http://localhost:25666 (admin / admin123)
|
||||||
|
# User Frontend: http://localhost:25137
|
||||||
|
# Backend API: http://localhost:26039
|
||||||
|
```
|
||||||
|
|
||||||
|
### Method 2: Step-by-step Deployment (Source Build)
|
||||||
|
|
||||||
|
If you need to build backend services from source, follow these steps:
|
||||||
|
|
||||||
|
#### Step 1: Deploy Backend Service
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Enter backend project directory
|
||||||
|
cd ruoyi-ai
|
||||||
|
|
||||||
|
# Start backend service (build from source)
|
||||||
|
docker-compose up -d --build
|
||||||
|
|
||||||
|
# Wait for backend service to start
|
||||||
|
docker-compose logs -f backend
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Step 2: Deploy Admin Panel
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Enter admin panel project directory
|
||||||
|
cd ruoyi-admin
|
||||||
|
|
||||||
|
# Build and start admin panel
|
||||||
|
docker-compose up -d --build
|
||||||
|
|
||||||
|
# Access admin panel
|
||||||
|
# URL: http://localhost:5666
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Step 3: Deploy User Frontend (Optional)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Enter user frontend project directory
|
||||||
|
cd ruoyi-web
|
||||||
|
|
||||||
|
# Build and start user frontend
|
||||||
|
docker-compose up -d --build
|
||||||
|
|
||||||
|
# Access user frontend
|
||||||
|
# URL: http://localhost:5137
|
||||||
|
```
|
||||||
|
|
||||||
|
### Service Ports
|
||||||
|
|
||||||
|
| Service | One-click Port | Step-by-step Port | Description |
|
||||||
|
|------|-------------|-------------|------|
|
||||||
|
| Admin Panel | 25666 | 5666 | Admin backend access |
|
||||||
|
| User Frontend | 25137 | 5137 | User frontend access |
|
||||||
|
| Backend Service | 26039 | 6039 | Backend API service |
|
||||||
|
| MySQL | 23306 | 23306 | Database service |
|
||||||
|
| Redis | 26379 | 6379 | Cache service |
|
||||||
|
| Weaviate | 28080 | 28080 | Vector database |
|
||||||
|
| MinIO API | 29000 | 9000 | Object storage API |
|
||||||
|
| MinIO Console | 29090 | 9090 | Object storage console |
|
||||||
|
|
||||||
|
### Image Registry
|
||||||
|
|
||||||
|
All images are hosted on Alibaba Cloud Container Registry:
|
||||||
|
|
||||||
|
```
|
||||||
|
crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai
|
||||||
|
```
|
||||||
|
|
||||||
|
Available images:
|
||||||
|
- `mysql:v3` - MySQL database (includes initialization SQL)
|
||||||
|
- `redis:6.2` - Redis cache
|
||||||
|
- `weaviate:1.30.0` - Vector database
|
||||||
|
- `minio:latest` - Object storage
|
||||||
|
- `ruoyi-ai-backend:latest` - Backend service
|
||||||
|
- `ruoyi-ai-admin:latest` - Admin frontend
|
||||||
|
- `ruoyi-ai-web:latest` - User frontend
|
||||||
|
|
||||||
|
### Common Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Stop all services
|
||||||
|
docker-compose -f docker-compose-all.yaml down
|
||||||
|
|
||||||
|
# View service logs
|
||||||
|
docker-compose -f docker-compose-all.yaml logs -f [service-name]
|
||||||
|
|
||||||
|
# Restart a service
|
||||||
|
docker-compose -f docker-compose-all.yaml restart [service-name]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📚 Documentation
|
||||||
|
|
||||||
|
Want to learn more about installation, deployment, configuration, and secondary development?
|
||||||
|
|
||||||
|
**👉 [Complete Documentation](https://doc.pandarobot.chat)**
|
||||||
|
|
||||||
|
Experiencing issues with knowledge base or RAG responses?
|
||||||
|
|
||||||
|
**👉 [RAG Troubleshooting Guide](docs/troubleshooting/rag-failures.md)**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
We warmly welcome community contributions! Whether you are a seasoned developer or just getting started, you can contribute to the project 💪
|
||||||
|
|
||||||
|
### How to Contribute
|
||||||
|
|
||||||
|
1. **Fork** the project to your account
|
||||||
|
2. **Create a branch** (`git checkout -b feature/new-feature-name`)
|
||||||
|
3. **Commit your changes** (`git commit -m 'Add new feature'`)
|
||||||
|
4. **Push to the branch** (`git push origin feature/new-feature-name`)
|
||||||
|
5. **Create a Pull Request**
|
||||||
|
|
||||||
|
> 💡 **Tip**: We recommend submitting PRs to GitHub, we will automatically sync to other code hosting platforms
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
This project is licensed under the **MIT License**. See the [LICENSE](LICENSE) file for details.
|
||||||
|
|
||||||
|
## 🙏 Acknowledgments
|
||||||
|
|
||||||
|
Thanks to the following excellent open-source projects for their support:
|
||||||
|
- [Spring AI Alibaba Copilot](https://github.com/spring-ai-alibaba/copilot) - Intelligent coding assistant based on spring-ai-alibaba
|
||||||
|
- [Langchain4j](https://github.com/langchain4j/langchain4j) - Powerful Java LLM development framework
|
||||||
|
- [RuoYi-Vue-Plus](https://gitee.com/dromara/RuoYi-Vue-Plus) - Mature enterprise-level rapid development framework
|
||||||
|
- [Vben Admin](https://github.com/vbenjs/vue-vben-admin) - Modern Vue admin template
|
||||||
|
|
||||||
|
## 🌐 Ecosystem Partners
|
||||||
|
|
||||||
|
- [PPIO Cloud](https://ppinfra.com/user/register?invited_by=P8QTUY&utm_source=github_ruoyi-ai) - Provides cost-effective GPU computing and model API services
|
||||||
|
- [Youyun Intelligent Computing](https://www.compshare.cn/?ytag=GPU_YY-gh_ruoyi) - Thousands of RTX40 series GPUs + mainstream models API services, second-level response, pay-per-use, free for new customers.
|
||||||
|
|
||||||
|
|
||||||
|
## 💬 Community Chat
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
**[📱 Join Telegram Group](
|
||||||
|
https://t.me/+LqooQAc5HxRmYmE1)**
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
**[⭐ Star to Support](https://github.com/ageerle/ruoyi-ai)** • **[Fork to Contribute](https://github.com/ageerle/ruoyi-ai/fork)** • **[📚 中文](README.md)** • **[📖 Complete Documentation](https://doc.pandarobot.chat)**
|
||||||
|
|
||||||
|
*Built with ❤️, maintained by the RuoYi AI open-source community*
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Badge Links -->
|
||||||
|
|
||||||
|
[contributors-shield]: https://img.shields.io/github/contributors/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
|
|
||||||
|
[contributors-url]: https://github.com/ageerle/ruoyi-ai/graphs/contributors
|
||||||
|
|
||||||
|
[forks-shield]: https://img.shields.io/github/forks/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
|
|
||||||
|
[forks-url]: https://github.com/ageerle/ruoyi-ai/network/members
|
||||||
|
|
||||||
|
[stars-shield]: https://img.shields.io/github/stars/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
|
|
||||||
|
[stars-url]: https://github.com/ageerle/ruoyi-ai/stargazers
|
||||||
|
|
||||||
|
[issues-shield]: https://img.shields.io/github/issues/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
|
|
||||||
|
[issues-url]: https://github.com/ageerle/ruoyi-ai/issues
|
||||||
|
|
||||||
|
[license-shield]: https://img.shields.io/github/license/ageerle/ruoyi-ai.svg?style=flat-square
|
||||||
|
|
||||||
|
[license-url]: https://github.com/ageerle/ruoyi-ai/blob/main/LICENSE
|
||||||
28
docs/docker/ minio/ docker-compose.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
minio:
|
||||||
|
image: minio/minio
|
||||||
|
container_name: minio
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
- "9090:9090"
|
||||||
|
environment:
|
||||||
|
- MINIO_ACCESS_KEY=ruoyi
|
||||||
|
- MINIO_SECRET_KEY=ruoyi123
|
||||||
|
volumes:
|
||||||
|
- minio_data:/data
|
||||||
|
- minio_config:/root/.minio
|
||||||
|
command: server /data --console-address ":9090"
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- minio-net
|
||||||
|
|
||||||
|
networks:
|
||||||
|
minio-net:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
minio_data:
|
||||||
|
minio_config:
|
||||||
65
docs/docker/ neo4j/docker-compose.yml
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
neo4j:
|
||||||
|
image: neo4j:5.15.0
|
||||||
|
container_name: ruoyi-neo4j
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
# HTTP端口
|
||||||
|
- "7474:7474"
|
||||||
|
# HTTPS端口
|
||||||
|
- "7473:7473"
|
||||||
|
# Bolt端口
|
||||||
|
- "7687:7687"
|
||||||
|
environment:
|
||||||
|
# 初始密码设置(首次启动后需要修改)
|
||||||
|
- NEO4J_AUTH=neo4j/your_password
|
||||||
|
# 接受许可协议
|
||||||
|
- NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
|
||||||
|
# 内存配置(根据服务器配置调整)
|
||||||
|
- NEO4J_dbms_memory_heap_initial__size=512m
|
||||||
|
- NEO4J_dbms_memory_heap_max__size=2g
|
||||||
|
- NEO4J_dbms_memory_pagecache_size=1g
|
||||||
|
# 事务日志配置
|
||||||
|
- NEO4J_dbms_tx__log_rotation_retention__policy=3 days
|
||||||
|
# 允许从任何主机连接
|
||||||
|
- NEO4J_dbms_default__listen__address=0.0.0.0
|
||||||
|
# 启用APOC插件
|
||||||
|
- NEO4J_dbms_security_procedures_unrestricted=apoc.*
|
||||||
|
- NEO4J_dbms_security_procedures_allowlist=apoc.*
|
||||||
|
# 日志级别
|
||||||
|
- NEO4J_dbms_logs_debug_level=INFO
|
||||||
|
volumes:
|
||||||
|
# 数据持久化
|
||||||
|
- neo4j_data:/data
|
||||||
|
# 日志持久化
|
||||||
|
- neo4j_logs:/logs
|
||||||
|
# 导入目录
|
||||||
|
- neo4j_import:/var/lib/neo4j/import
|
||||||
|
# 插件目录
|
||||||
|
- neo4j_plugins:/plugins
|
||||||
|
networks:
|
||||||
|
- ruoyi-network
|
||||||
|
healthcheck:
|
||||||
|
test: [ "CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:7474 || exit 1" ]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
start_period: 40s
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
neo4j_data:
|
||||||
|
name: ruoyi-neo4j-data
|
||||||
|
neo4j_logs:
|
||||||
|
name: ruoyi-neo4j-logs
|
||||||
|
neo4j_import:
|
||||||
|
name: ruoyi-neo4j-import
|
||||||
|
neo4j_plugins:
|
||||||
|
name: ruoyi-neo4j-plugins
|
||||||
|
|
||||||
|
networks:
|
||||||
|
ruoyi-network:
|
||||||
|
name: ruoyi-network
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
version: '3.5'
|
version: '3.5'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
etcd:
|
etcd:
|
||||||
container_name: milvus-etcd
|
container_name: milvus-etcd
|
||||||
image: quay.io/coreos/etcd:v3.5.5
|
image: quay.io/coreos/etcd:v3.5.18
|
||||||
environment:
|
environment:
|
||||||
- ETCD_AUTO_COMPACTION_MODE=revision
|
- ETCD_AUTO_COMPACTION_MODE=revision
|
||||||
- ETCD_AUTO_COMPACTION_RETENTION=1000
|
- ETCD_AUTO_COMPACTION_RETENTION=1000
|
||||||
@@ -11,13 +11,13 @@ services:
|
|||||||
- ETCD_SNAPSHOT_COUNT=50000
|
- ETCD_SNAPSHOT_COUNT=50000
|
||||||
volumes:
|
volumes:
|
||||||
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
|
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
|
||||||
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
command: etcd -advertise-client-urls=http://etcd:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "etcdctl", "endpoint", "health"]
|
test: ["CMD", "etcdctl", "endpoint", "health"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 20s
|
timeout: 20s
|
||||||
retries: 3
|
retries: 3
|
||||||
|
|
||||||
minio:
|
minio:
|
||||||
container_name: milvus-minio
|
container_name: milvus-minio
|
||||||
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
|
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
|
||||||
@@ -35,11 +35,13 @@ services:
|
|||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 20s
|
timeout: 20s
|
||||||
retries: 3
|
retries: 3
|
||||||
|
|
||||||
standalone:
|
standalone:
|
||||||
container_name: milvus-standalone
|
container_name: milvus-standalone
|
||||||
image: milvusdb/milvus:v2.3.1
|
image: milvusdb/milvus:v2.5.7
|
||||||
command: ["milvus", "run", "standalone"]
|
command: ["milvus", "run", "standalone"]
|
||||||
|
security_opt:
|
||||||
|
- seccomp:unconfined
|
||||||
environment:
|
environment:
|
||||||
ETCD_ENDPOINTS: etcd:2379
|
ETCD_ENDPOINTS: etcd:2379
|
||||||
MINIO_ADDRESS: minio:9000
|
MINIO_ADDRESS: minio:9000
|
||||||
@@ -57,7 +59,17 @@ services:
|
|||||||
depends_on:
|
depends_on:
|
||||||
- "etcd"
|
- "etcd"
|
||||||
- "minio"
|
- "minio"
|
||||||
|
|
||||||
|
attu:
|
||||||
|
container_name: attu
|
||||||
|
image: zilliz/attu:v2.5.7
|
||||||
|
environment:
|
||||||
|
MILVUS_URL: milvus-standalone:19530
|
||||||
|
ports:
|
||||||
|
- "19500:3000" # 外部端口19500可以自定义
|
||||||
|
depends_on:
|
||||||
|
- "standalone"
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
default:
|
default:
|
||||||
name: milvus
|
name: milvus
|
||||||
12
docs/docker/qdrant/docker-compose.yml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
services:
|
||||||
|
qdrant:
|
||||||
|
image: qdrant/qdrant:latest
|
||||||
|
ports:
|
||||||
|
- 6333:6333
|
||||||
|
- 6334:6334
|
||||||
|
volumes:
|
||||||
|
- qdrant_data:/qdrant/storage
|
||||||
|
volumes:
|
||||||
|
qdrant_data:
|
||||||
|
...
|
||||||
36
docs/docker/ruoyi-ai/Dockerfile.backend
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# RuoYi-AI 后端 Dockerfile
|
||||||
|
# 基于 Maven + OpenJDK 17
|
||||||
|
|
||||||
|
FROM maven:3.9-eclipse-temurin-17 AS builder
|
||||||
|
|
||||||
|
# 设置工作目录
|
||||||
|
WORKDIR /build
|
||||||
|
|
||||||
|
# 复制 pom.xml 和源码
|
||||||
|
COPY pom.xml .
|
||||||
|
COPY ruoyi-admin ./ruoyi-admin
|
||||||
|
COPY ruoyi-common ./ruoyi-common
|
||||||
|
COPY ruoyi-modules ./ruoyi-modules
|
||||||
|
COPY ruoyi-extend ./ruoyi-extend
|
||||||
|
|
||||||
|
|
||||||
|
# 构建项目 (使用 prod profile)
|
||||||
|
RUN mvn clean package -Pprod -DskipTests
|
||||||
|
|
||||||
|
# 最终运行镜像
|
||||||
|
FROM eclipse-temurin:17-jre-alpine
|
||||||
|
|
||||||
|
# 设置工作目录
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# 从构建阶段复制 jar 包
|
||||||
|
COPY --from=builder /build/ruoyi-admin/target/ruoyi-admin.jar ./ruoyi-admin.jar
|
||||||
|
|
||||||
|
# 创建日志目录
|
||||||
|
RUN mkdir -p /ruoyi/server/logs
|
||||||
|
|
||||||
|
# 暴露端口
|
||||||
|
EXPOSE 6039
|
||||||
|
|
||||||
|
# 启动命令
|
||||||
|
ENTRYPOINT ["java", "-jar", "ruoyi-admin.jar", "--spring.profiles.active=prod"]
|
||||||
21
docs/docker/ruoyi-ai/Dockerfile.mysql
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# 基于官方MySQL 8.0镜像构建自定义镜像
|
||||||
|
# 构建命令: docker build -t registry.cn-hangzhou.aliyuncs.com/ruoyi-ai/mysql:v3 -f Dockerfile.mysql .
|
||||||
|
FROM mysql:8.0.33
|
||||||
|
|
||||||
|
# 设置时区
|
||||||
|
ENV TZ=Asia/Shanghai
|
||||||
|
|
||||||
|
# 复制初始化脚本和SQL文件到镜像中
|
||||||
|
COPY docs/script/docker/mysql/init/init-db.sh /docker-entrypoint-initdb.d/init-db.sh
|
||||||
|
COPY docs/script/sql/ruoyi-ai-v3_mysql8.sql /docker-entrypoint-initdb.d/ruoyi-ai-v3_mysql8.sql
|
||||||
|
|
||||||
|
# 设置脚本可执行权限
|
||||||
|
RUN chmod +x /docker-entrypoint-initdb.d/init-db.sh
|
||||||
|
|
||||||
|
# MySQL启动参数
|
||||||
|
CMD ["--default-authentication-plugin=mysql_native_password", \
|
||||||
|
"--character-set-server=utf8mb4", \
|
||||||
|
"--collation-server=utf8mb4_general_ci", \
|
||||||
|
"--explicit_defaults_for_timestamp=true", \
|
||||||
|
"--lower_case_table_names=1", \
|
||||||
|
"--skip-ssl"]
|
||||||
180
docs/docker/ruoyi-ai/docker-compose-all.yaml
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
# RuoYi-AI 一键启动全部服务
|
||||||
|
# 使用方式: docker-compose up -d
|
||||||
|
#
|
||||||
|
# 包含服务:
|
||||||
|
# - MySQL 8.0 (数据库,包含初始化SQL)
|
||||||
|
# - Redis 6.2 (缓存)
|
||||||
|
# - Weaviate (向量数据库)
|
||||||
|
# - MinIO (对象存储)
|
||||||
|
# - RuoYi-Backend (后端服务)
|
||||||
|
# - RuoYi-Admin (管理端前端)
|
||||||
|
# - RuoYi-Web (用户端前端)
|
||||||
|
#
|
||||||
|
# 镜像仓库地址: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai
|
||||||
|
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# ==================== MySQL 数据库 ====================
|
||||||
|
mysql:
|
||||||
|
# 阿里云镜像地址(包含初始化SQL)
|
||||||
|
image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/mysql:v3
|
||||||
|
container_name: ruoyi-ai-mysql
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "23306:3306"
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: root
|
||||||
|
MYSQL_DATABASE: ruoyi-ai-agent
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
volumes:
|
||||||
|
- mysql-data:/var/lib/mysql
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"]
|
||||||
|
interval: 15s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 10
|
||||||
|
start_period: 60s
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# ==================== Redis 缓存 ====================
|
||||||
|
redis:
|
||||||
|
image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/redis:6.2
|
||||||
|
container_name: ruoyi-ai-redis
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "26379:6379"
|
||||||
|
volumes:
|
||||||
|
- redis-data:/data
|
||||||
|
command: redis-server --appendonly yes
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "redis-cli", "ping"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# ==================== Weaviate 向量数据库 ====================
|
||||||
|
weaviate:
|
||||||
|
image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/weaviate:1.30.0
|
||||||
|
container_name: ruoyi-ai-weaviate
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "28080:8080"
|
||||||
|
environment:
|
||||||
|
QUERY_DEFAULTS_LIMIT: 25
|
||||||
|
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: true
|
||||||
|
PERSISTENCE_DATA_PATH: /var/lib/weaviate
|
||||||
|
DEFAULT_VECTORIZER_MODULE: none
|
||||||
|
ENABLE_MODULES: text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai
|
||||||
|
CLUSTER_HOSTNAME: node1
|
||||||
|
volumes:
|
||||||
|
- weaviate-data:/var/lib/weaviate
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# ==================== MinIO 对象存储 ====================
|
||||||
|
minio:
|
||||||
|
image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/minio:latest
|
||||||
|
container_name: ruoyi-ai-minio
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "29000:9000"
|
||||||
|
- "29090:9090"
|
||||||
|
environment:
|
||||||
|
MINIO_ROOT_USER: ruoyi
|
||||||
|
MINIO_ROOT_PASSWORD: ruoyi123
|
||||||
|
volumes:
|
||||||
|
- minio-data:/data
|
||||||
|
command: server /data --console-address ":9090"
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# ==================== RuoYi-AI 后端服务 ====================
|
||||||
|
backend:
|
||||||
|
image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/ruoyi-ai-backend:latest
|
||||||
|
container_name: ruoyi-ai-backend
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "26039:6039"
|
||||||
|
environment:
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
# MySQL 配置
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_PRIMARY: master
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_DRIVERCLASSNAME: com.mysql.cj.jdbc.Driver
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://mysql:3306/ruoyi-ai-agent?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: root
|
||||||
|
# Redis 配置
|
||||||
|
SPRING_DATA_REDIS_HOST: redis
|
||||||
|
SPRING_DATA_REDIS_PORT: 6379
|
||||||
|
SPRING_DATA_REDIS_DATABASE: 0
|
||||||
|
# 日志配置
|
||||||
|
LOGGING_LEVEL_ORG_RUOYI: info
|
||||||
|
LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: warn
|
||||||
|
SYS_UPLOAD_PATH: /ruoyi/upload
|
||||||
|
volumes:
|
||||||
|
- logs-data:/ruoyi/server/logs
|
||||||
|
- upload-data:/ruoyi/upload
|
||||||
|
depends_on:
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
redis:
|
||||||
|
condition: service_started
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# ==================== RuoYi-AI 管理端前端 ====================
|
||||||
|
admin-frontend:
|
||||||
|
image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/ruoyi-ai-admin:latest
|
||||||
|
container_name: ruoyi-ai-admin
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "25666:5666"
|
||||||
|
environment:
|
||||||
|
# 后端 API 地址 - 运行时动态配置(无需重新构建镜像)
|
||||||
|
# nginx upstream 配置不需要 http:// 前缀,直接使用 host:port
|
||||||
|
UPSTREAM_HOST: backend:6039
|
||||||
|
# 资源限制 - 防止 CPU 和内存耗尽
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '2'
|
||||||
|
memory: 3G
|
||||||
|
reservations:
|
||||||
|
cpus: '1'
|
||||||
|
memory: 1G
|
||||||
|
depends_on:
|
||||||
|
- backend
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# ==================== RuoYi-AI 用户端前端 ====================
|
||||||
|
web-frontend:
|
||||||
|
image: crpi-31mraxd99y2gqdgr.cn-beijing.personal.cr.aliyuncs.com/ruoyi_ai/ruoyi-ai-web:latest
|
||||||
|
container_name: ruoyi-ai-web
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "25137:5137"
|
||||||
|
environment:
|
||||||
|
UPSTREAM_URL: http://backend:6039
|
||||||
|
depends_on:
|
||||||
|
- backend
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# ==================== 网络配置 ====================
|
||||||
|
networks:
|
||||||
|
ruoyi-net:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
# ==================== 数据卷配置 ====================
|
||||||
|
volumes:
|
||||||
|
mysql-data:
|
||||||
|
redis-data:
|
||||||
|
weaviate-data:
|
||||||
|
minio-data:
|
||||||
|
logs-data:
|
||||||
|
upload-data:
|
||||||
144
docs/docker/ruoyi-ai/docker-compose.yaml
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
# RuoYi-AI 一键启动后端服务
|
||||||
|
# 使用方式: docker-compose up -d --build
|
||||||
|
#
|
||||||
|
# 包含服务:
|
||||||
|
# - MySQL 8.0 (数据库)
|
||||||
|
# - Redis 6.2 (缓存)
|
||||||
|
# - Weaviate (向量数据库)
|
||||||
|
# - MinIO (对象存储)
|
||||||
|
# - RuoYi-Backend (后端服务,源码编译)
|
||||||
|
|
||||||
|
services:
|
||||||
|
# MySQL 数据库
|
||||||
|
mysql:
|
||||||
|
image: mysql:8.0.33
|
||||||
|
container_name: ruoyi-ai-mysql
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "23306:3306"
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: root
|
||||||
|
MYSQL_DATABASE: ruoyi-ai-agent
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
volumes:
|
||||||
|
- ./docs/script/docker/mysql/init/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro
|
||||||
|
- ./docs/script/sql/ruoyi-ai-v3_mysql8.sql:/docker-entrypoint-initdb.d/ruoyi-ai-v3_mysql8.sql:ro
|
||||||
|
- mysql-data:/var/lib/mysql
|
||||||
|
command:
|
||||||
|
--default-authentication-plugin=mysql_native_password
|
||||||
|
--character-set-server=utf8mb4
|
||||||
|
--collation-server=utf8mb4_general_ci
|
||||||
|
--explicit_defaults_for_timestamp=true
|
||||||
|
--lower_case_table_names=1
|
||||||
|
--skip-ssl
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"]
|
||||||
|
interval: 15s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 10
|
||||||
|
start_period: 60s
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# Redis 缓存
|
||||||
|
redis:
|
||||||
|
image: redis:6.2
|
||||||
|
container_name: ruoyi-ai-redis
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "6379:6379"
|
||||||
|
volumes:
|
||||||
|
- redis-data:/data
|
||||||
|
command: redis-server --appendonly yes
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "redis-cli", "ping"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# Weaviate 向量数据库
|
||||||
|
weaviate:
|
||||||
|
image: semitechnologies/weaviate:1.30.0
|
||||||
|
container_name: ruoyi-ai-weaviate
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "28080:8080"
|
||||||
|
environment:
|
||||||
|
QUERY_DEFAULTS_LIMIT: 25
|
||||||
|
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: true
|
||||||
|
PERSISTENCE_DATA_PATH: /var/lib/weaviate
|
||||||
|
DEFAULT_VECTORIZER_MODULE: none
|
||||||
|
ENABLE_MODULES: text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai
|
||||||
|
CLUSTER_HOSTNAME: node1
|
||||||
|
volumes:
|
||||||
|
- weaviate-data:/var/lib/weaviate
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# MinIO 对象存储
|
||||||
|
minio:
|
||||||
|
image: minio/minio
|
||||||
|
container_name: ruoyi-ai-minio
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
- "9090:9090"
|
||||||
|
environment:
|
||||||
|
MINIO_ROOT_USER: ruoyi
|
||||||
|
MINIO_ROOT_PASSWORD: ruoyi123
|
||||||
|
volumes:
|
||||||
|
- minio-data:/data
|
||||||
|
command: server /data --console-address ":9090"
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
# RuoYi-AI 后端服务 (源码编译)
|
||||||
|
backend:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile.backend
|
||||||
|
container_name: ruoyi-ai-backend
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "26039:6039"
|
||||||
|
environment:
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
# MySQL 配置
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_PRIMARY: master
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_DRIVERCLASSNAME: com.mysql.cj.jdbc.Driver
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL: jdbc:mysql://mysql:3306/ruoyi-ai-agent?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_USERNAME: root
|
||||||
|
SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_PASSWORD: root
|
||||||
|
# Redis 配置
|
||||||
|
SPRING_DATA_REDIS_HOST: redis
|
||||||
|
SPRING_DATA_REDIS_PORT: 6379
|
||||||
|
SPRING_DATA_REDIS_DATABASE: 0
|
||||||
|
# 日志配置
|
||||||
|
LOGGING_LEVEL_ORG_RUOYI: info
|
||||||
|
LOGGING_LEVEL_ORG_SPRINGFRAMEWORK: warn
|
||||||
|
SYS_UPLOAD_PATH: /ruoyi/upload # 新增:对应 sys.upload.path
|
||||||
|
volumes:
|
||||||
|
- logs-data:/ruoyi/server/logs
|
||||||
|
- upload-data:/ruoyi/upload
|
||||||
|
depends_on:
|
||||||
|
mysql:
|
||||||
|
condition: service_healthy
|
||||||
|
redis:
|
||||||
|
condition: service_started
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
|
networks:
|
||||||
|
ruoyi-net:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
# 数据卷 支持手动指定 空为默认值
|
||||||
|
volumes:
|
||||||
|
mysql-data:
|
||||||
|
redis-data:
|
||||||
|
weaviate-data:
|
||||||
|
minio-data:
|
||||||
|
logs-data:
|
||||||
|
upload-data:
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
version: '3.4'
|
|
||||||
services:
|
services:
|
||||||
weaviate:
|
weaviate:
|
||||||
command:
|
command:
|
||||||
@@ -9,19 +8,17 @@ services:
|
|||||||
- '6038'
|
- '6038'
|
||||||
- --scheme
|
- --scheme
|
||||||
- http
|
- http
|
||||||
image: cr.weaviate.io/semitechnologies/weaviate:1.19.7
|
image: semitechnologies/weaviate:1.19.7
|
||||||
ports:
|
ports:
|
||||||
- 6038:6038
|
- 6038:6038
|
||||||
- 50051:50051
|
- 50051:50051
|
||||||
volumes:
|
volumes:
|
||||||
- weaviate_data:/var/lib/weaviate
|
- weaviate_data:/var/lib/weaviate
|
||||||
restart: on-failure:0
|
|
||||||
environment:
|
environment:
|
||||||
QUERY_DEFAULTS_LIMIT: 25
|
QUERY_DEFAULTS_LIMIT: 25
|
||||||
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
|
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
|
||||||
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
|
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
|
||||||
DEFAULT_VECTORIZER_MODULE: 'none'
|
DEFAULT_VECTORIZER_MODULE: 'none'
|
||||||
ENABLE_MODULES: 'text2vec-cohere,text2vec-huggingface,text2vec-palm,text2vec-openai,generative-openai,generative-cohere,generative-palm,ref2vec-centroid,reranker-cohere,qna-openai'
|
|
||||||
CLUSTER_HOSTNAME: 'node1'
|
CLUSTER_HOSTNAME: 'node1'
|
||||||
volumes:
|
volumes:
|
||||||
weaviate_data:
|
weaviate_data:
|
||||||
BIN
docs/image/bibi.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
docs/image/dy.png
Normal file
|
After Width: | Height: | Size: 156 KiB |
BIN
docs/image/logo.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
docs/image/qq.png
Normal file
|
After Width: | Height: | Size: 193 KiB |
BIN
docs/image/wx.png
Normal file
|
After Width: | Height: | Size: 151 KiB |
10
docs/script/docker/mysql/init/init-db.sh
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 数据库初始化脚本
|
||||||
|
# 使用 --force 参数确保即使出错也继续执行
|
||||||
|
|
||||||
|
echo "开始初始化数据库..."
|
||||||
|
|
||||||
|
# 使用 --force 参数忽略错误继续执行
|
||||||
|
mysql -uroot -proot ruoyi-ai-agent --force < /docker-entrypoint-initdb.d/ruoyi-ai-v3_mysql8.sql
|
||||||
|
|
||||||
|
echo "数据库初始化完成"
|
||||||
129
docs/script/leave/leave1.json
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
{
|
||||||
|
"nodeList": [
|
||||||
|
{
|
||||||
|
"nodeType": "0",
|
||||||
|
"nodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac",
|
||||||
|
"nodeName": "开始",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "200,200|200,200",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "d5ee3ddf-3968-4379-a86f-9ceabde5faac",
|
||||||
|
"nextNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42",
|
||||||
|
"coordinate": "220,200;310,200"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42",
|
||||||
|
"nodeName": "申请人",
|
||||||
|
"permissionFlag": "",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,copy\"}]",
|
||||||
|
"coordinate": "360,200|360,200",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "dd515cdd-59f6-446f-94ca-25ca062afb42",
|
||||||
|
"nextNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf",
|
||||||
|
"coordinate": "410,200;490,200"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf",
|
||||||
|
"nodeName": "组长",
|
||||||
|
"permissionFlag": "role:1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,copy,transfer,trust,file\"}]",
|
||||||
|
"coordinate": "540,200|540,200",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "78fa8e5b-e809-44ed-978a-41092409ebcf",
|
||||||
|
"nextNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe",
|
||||||
|
"coordinate": "590,200;670,200"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe",
|
||||||
|
"nodeName": "部门主管",
|
||||||
|
"permissionFlag": "role:3@@role:4",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,copy,transfer,trust,file\"}]",
|
||||||
|
"coordinate": "720,200|720,200",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "a8abf15f-b83e-428a-86cc-033555ea9bbe",
|
||||||
|
"nextNodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d",
|
||||||
|
"coordinate": "770,200;880,200"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "2",
|
||||||
|
"nodeCode": "8b82b7d7-8660-455e-b880-d6d22ea3eb6d",
|
||||||
|
"nodeName": "结束",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "900,200|900,200",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flowCode": "leave1",
|
||||||
|
"flowName": "请假申请-普通",
|
||||||
|
"modelValue": "CLASSICS",
|
||||||
|
"category": "103",
|
||||||
|
"version": "1",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": "/workflow/leaveEdit/index",
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null
|
||||||
|
}
|
||||||
187
docs/script/leave/leave2.json
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
{
|
||||||
|
"nodeList": [
|
||||||
|
{
|
||||||
|
"nodeType": "0",
|
||||||
|
"nodeCode": "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a",
|
||||||
|
"nodeName": "开始",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "300,240|300,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "cef3895c-f7d8-4598-8bf3-8ec2ef6ce84a",
|
||||||
|
"nextNodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd",
|
||||||
|
"coordinate": "320,240;390,240"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd",
|
||||||
|
"nodeName": "申请人",
|
||||||
|
"permissionFlag": "",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||||
|
"coordinate": "440,240|440,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "fdcae93b-b69c-498a-b231-09255e74bcbd",
|
||||||
|
"nextNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
|
||||||
|
"coordinate": "490,240;535,240"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "3",
|
||||||
|
"nodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "560,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": "le@@leaveDays|2",
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
|
||||||
|
"nextNodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86",
|
||||||
|
"coordinate": "560,265;560,320;670,320"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": "gt@@leaveDays|2",
|
||||||
|
"skipName": "大于两天",
|
||||||
|
"nowNodeCode": "7b8c7ead-7dc8-4951-a7f3-f0c41995909e",
|
||||||
|
"nextNodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605",
|
||||||
|
"coordinate": "560,215;560,160;670,160|560,187"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86",
|
||||||
|
"nodeName": "组长",
|
||||||
|
"permissionFlag": "3@@4",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||||
|
"coordinate": "720,320|720,320",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "b3528155-dcb7-4445-bbdf-3d00e3499e86",
|
||||||
|
"nextNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
|
||||||
|
"coordinate": "770,320;860,320;860,280"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
|
||||||
|
"nodeName": "总经理",
|
||||||
|
"permissionFlag": "role:1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||||
|
"coordinate": "860,240|860,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
|
||||||
|
"nextNodeCode": "40aa65fd-0712-4d23-b6f7-d0432b920fd1",
|
||||||
|
"coordinate": "910,240;980,240"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "2",
|
||||||
|
"nodeCode": "40aa65fd-0712-4d23-b6f7-d0432b920fd1",
|
||||||
|
"nodeName": "结束",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "1000,240|1000,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605",
|
||||||
|
"nodeName": "部门领导",
|
||||||
|
"permissionFlag": "role:1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||||
|
"coordinate": "720,160|720,160",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "5ed2362b-fc0c-4d52-831f-95208b830605",
|
||||||
|
"nextNodeCode": "c9fa6d7d-2a74-4e78-b947-0cad8a6af869",
|
||||||
|
"nextNodeType": "1",
|
||||||
|
"coordinate": "770,160;860,160;860,200"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flowCode": "leave2",
|
||||||
|
"flowName": "请假申请-排他网关",
|
||||||
|
"modelValue": "CLASSICS",
|
||||||
|
"category": "103",
|
||||||
|
"version": "1",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": "/workflow/leaveEdit/index",
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null
|
||||||
|
}
|
||||||
211
docs/script/leave/leave3.json
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
{
|
||||||
|
"nodeList": [
|
||||||
|
{
|
||||||
|
"nodeType": "0",
|
||||||
|
"nodeCode": "a80ecf9f-f465-4ae5-a429-e30ec5d0f957",
|
||||||
|
"nodeName": "开始",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "380,220|380,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "a80ecf9f-f465-4ae5-a429-e30ec5d0f957",
|
||||||
|
"nextNodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99",
|
||||||
|
"coordinate": "400,220;470,220"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99",
|
||||||
|
"nodeName": "申请人",
|
||||||
|
"permissionFlag": "",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||||
|
"coordinate": "520,220|520,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "b7bbb571-06de-455c-8083-f83c07bf0b99",
|
||||||
|
"nextNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
|
||||||
|
"coordinate": "570,220;655,220"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "4",
|
||||||
|
"nodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "680,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
|
||||||
|
"nextNodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe",
|
||||||
|
"coordinate": "680,195;680,140;750,140"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "84d7ed24-bb44-4ba1-bf1f-e6f5092d3f0a",
|
||||||
|
"nextNodeCode": "762cb975-37d8-4276-b6db-79a4c3606394",
|
||||||
|
"coordinate": "680,245;680,300;750,300"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe",
|
||||||
|
"nodeName": "市场部",
|
||||||
|
"permissionFlag": "role:1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||||
|
"coordinate": "800,140|800,140",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "4b7743cd-940c-431b-926f-e7b614fbf1fe",
|
||||||
|
"nextNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
|
||||||
|
"coordinate": "850,140;920,140;920,195"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "4",
|
||||||
|
"nodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "920,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
|
||||||
|
"nextNodeCode": "23e7429e-2b47-4431-b93e-40db7c431ce6",
|
||||||
|
"coordinate": "945,220;975,220;975,220;960,220;960,220;990,220"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "23e7429e-2b47-4431-b93e-40db7c431ce6",
|
||||||
|
"nodeName": "CEO",
|
||||||
|
"permissionFlag": "1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||||
|
"coordinate": "1040,220|1040,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "23e7429e-2b47-4431-b93e-40db7c431ce6",
|
||||||
|
"nextNodeCode": "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1",
|
||||||
|
"coordinate": "1090,220;1140,220"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "2",
|
||||||
|
"nodeCode": "f5ace37f-5a5e-4e64-a6f6-913ab9a71cd1",
|
||||||
|
"nodeName": "结束",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "1160,220|1160,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "762cb975-37d8-4276-b6db-79a4c3606394",
|
||||||
|
"nodeName": "综合部",
|
||||||
|
"permissionFlag": "role:3@@role:4",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||||
|
"coordinate": "800,300|800,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "762cb975-37d8-4276-b6db-79a4c3606394",
|
||||||
|
"nextNodeCode": "b66b6563-f9fe-41cc-a782-f7837bb6f3d2",
|
||||||
|
"nextNodeType": "4",
|
||||||
|
"coordinate": "850,300;920,300;920,245"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flowCode": "leave3",
|
||||||
|
"flowName": "请假申请-并行网关",
|
||||||
|
"modelValue": "CLASSICS",
|
||||||
|
"category": "103",
|
||||||
|
"version": "1",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": "/workflow/leaveEdit/index",
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null
|
||||||
|
}
|
||||||
154
docs/script/leave/leave4.json
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
{
|
||||||
|
"nodeList": [
|
||||||
|
{
|
||||||
|
"nodeType": "0",
|
||||||
|
"nodeCode": "9ce8bf00-f25b-4fc6-91b8-827082fc4876",
|
||||||
|
"nodeName": "开始",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "320,240|320,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "9ce8bf00-f25b-4fc6-91b8-827082fc4876",
|
||||||
|
"nextNodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f",
|
||||||
|
"coordinate": "340,240;410,240"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f",
|
||||||
|
"nodeName": "申请人",
|
||||||
|
"permissionFlag": "",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||||
|
"coordinate": "460,240|460,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "e90b98ef-35b4-410c-a663-bae8b7624b9f",
|
||||||
|
"nextNodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045",
|
||||||
|
"coordinate": "510,240;590,240"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045",
|
||||||
|
"nodeName": "百分之60通过",
|
||||||
|
"permissionFlag": "${userList}",
|
||||||
|
"nodeRatio": "60.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
|
||||||
|
"coordinate": "640,240|640,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "768b5b1a-6726-4d67-8853-4cc70d5b1045",
|
||||||
|
"nextNodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
|
||||||
|
"coordinate": "690,240;770,240"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
|
||||||
|
"nodeName": "全部审批通过",
|
||||||
|
"permissionFlag": "role:1@@role:3",
|
||||||
|
"nodeRatio": "100.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
|
||||||
|
"coordinate": "820,240|820,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "2f9f2e21-9bcf-42a3-a07c-13037aad22d1",
|
||||||
|
"nextNodeCode": "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
|
||||||
|
"coordinate": "870,240;950,240"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
|
||||||
|
"nodeName": "CEO",
|
||||||
|
"permissionFlag": "1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||||
|
"coordinate": "1000,240|1000,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "27461e01-3d9f-4530-8fe3-bd5ec7f9571f",
|
||||||
|
"nextNodeCode": "b62b88c3-8d8d-4969-911e-2aaea219e7fc",
|
||||||
|
"coordinate": "1050,240;1080,240;1080,240;1070,240;1070,240;1100,240"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "2",
|
||||||
|
"nodeCode": "b62b88c3-8d8d-4969-911e-2aaea219e7fc",
|
||||||
|
"nodeName": "结束",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "1120,240|1120,240",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flowCode": "leave4",
|
||||||
|
"flowName": "请假申请-会签",
|
||||||
|
"modelValue": "CLASSICS",
|
||||||
|
"category": "103",
|
||||||
|
"version": "1",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": "/workflow/leaveEdit/index",
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null
|
||||||
|
}
|
||||||
211
docs/script/leave/leave5.json
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
{
|
||||||
|
"nodeList": [
|
||||||
|
{
|
||||||
|
"nodeType": "0",
|
||||||
|
"nodeCode": "ebebaf26-9cb6-497e-8119-4c9fed4c597c",
|
||||||
|
"nodeName": "开始",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "300,220|300,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "ebebaf26-9cb6-497e-8119-4c9fed4c597c",
|
||||||
|
"nextNodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374",
|
||||||
|
"coordinate": "320,220;350,220;350,220;340,220;340,220;370,220"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374",
|
||||||
|
"nodeName": "申请人",
|
||||||
|
"permissionFlag": "",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||||
|
"coordinate": "420,220|420,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "e1b04e96-dc81-4858-a309-2fe945d2f374",
|
||||||
|
"nextNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
|
||||||
|
"coordinate": "470,220;535,220"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "4",
|
||||||
|
"nodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "560,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
|
||||||
|
"nextNodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
|
||||||
|
"coordinate": "560,245;560,320;650,320"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "3e743f4f-51ca-41d4-8e94-21f5dd9b59c9",
|
||||||
|
"nextNodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
|
||||||
|
"coordinate": "560,195;560,120;650,120"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
|
||||||
|
"nodeName": "会签",
|
||||||
|
"permissionFlag": "role:1@@role:3",
|
||||||
|
"nodeRatio": "100.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
|
||||||
|
"coordinate": "700,320|700,320",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "c80f273e-1f17-4bd8-9ad1-04a4a94ea862",
|
||||||
|
"nextNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
|
||||||
|
"coordinate": "750,320;860,320;860,245"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "4",
|
||||||
|
"nodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "860,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
|
||||||
|
"nextNodeCode": "7a8f0473-e409-442e-a843-5c2b813d00e9",
|
||||||
|
"coordinate": "885,220;950,220"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "7a8f0473-e409-442e-a843-5c2b813d00e9",
|
||||||
|
"nodeName": "CEO",
|
||||||
|
"permissionFlag": "1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,transfer,trust,copy\"}]",
|
||||||
|
"coordinate": "1000,220|1000,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "7a8f0473-e409-442e-a843-5c2b813d00e9",
|
||||||
|
"nextNodeCode": "03c4d2bc-58b5-4408-a2e4-65afb046f169",
|
||||||
|
"coordinate": "1050,220;1120,220"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "2",
|
||||||
|
"nodeCode": "03c4d2bc-58b5-4408-a2e4-65afb046f169",
|
||||||
|
"nodeName": "结束",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "1140,220|1140,220",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
|
||||||
|
"nodeName": "百分之60票签",
|
||||||
|
"permissionFlag": "${userList}",
|
||||||
|
"nodeRatio": "60.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file,addSign,subSign\"}]",
|
||||||
|
"coordinate": "700,120|700,120",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "1e3e8d3b-18ae-4d6c-a814-ce0d724adfa4",
|
||||||
|
"nextNodeCode": "1a20169e-3d82-4926-a151-e2daad28de1b",
|
||||||
|
"nextNodeType": "4",
|
||||||
|
"coordinate": "750,120;860,120;860,195"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flowCode": "leave5",
|
||||||
|
"flowName": "请假申请-并行会签网关",
|
||||||
|
"modelValue": "CLASSICS",
|
||||||
|
"category": "103",
|
||||||
|
"version": "1",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": "/workflow/leaveEdit/index",
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null
|
||||||
|
}
|
||||||
368
docs/script/leave/leave6.json
Normal file
@@ -0,0 +1,368 @@
|
|||||||
|
{
|
||||||
|
"nodeList": [
|
||||||
|
{
|
||||||
|
"nodeType": "0",
|
||||||
|
"nodeCode": "122b89a5-7c6f-40a3-aa09-7a263f902054",
|
||||||
|
"nodeName": "开始",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "240,300|240,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "122b89a5-7c6f-40a3-aa09-7a263f902054",
|
||||||
|
"nextNodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
|
||||||
|
"coordinate": "260,300;350,300"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
|
||||||
|
"nodeName": "申请人",
|
||||||
|
"permissionFlag": "",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,file\"}]",
|
||||||
|
"coordinate": "400,300|400,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "c25a0e86-fdd1-4f03-8e22-14db70389dbd",
|
||||||
|
"nextNodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742",
|
||||||
|
"coordinate": "450,300;510,300"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
|
||||||
|
"nodeName": "副经理",
|
||||||
|
"permissionFlag": "role:1@@role:3@@role:4",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||||
|
"coordinate": "860,200|860,200",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
|
||||||
|
"nextNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
|
||||||
|
"coordinate": "910,200;1000,200;1000,275"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
|
||||||
|
"nodeName": "组长",
|
||||||
|
"permissionFlag": "1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||||
|
"coordinate": "860,400|860,400",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
|
||||||
|
"nextNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
|
||||||
|
"coordinate": "910,400;1000,400;1000,325"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742",
|
||||||
|
"nodeName": "副组长",
|
||||||
|
"permissionFlag": "1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,transfer,copy,pop\"}]",
|
||||||
|
"coordinate": "560,300|560,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "07ecda1d-7a0a-47b5-8a91-6186c9473742",
|
||||||
|
"nextNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
|
||||||
|
"coordinate": "610,300;675,300"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "3",
|
||||||
|
"nodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "700,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": "default@@${leaveDays > 2}",
|
||||||
|
"skipName": "大于两天",
|
||||||
|
"nowNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
|
||||||
|
"nextNodeCode": "2bfa3919-78cf-4bc1-b59b-df463a4546f9",
|
||||||
|
"nextNodeType": "1",
|
||||||
|
"coordinate": "700,275;700,200;810,200|700,237"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": "spel@@#{@testLeaveServiceImpl.eval(#leaveDays)}",
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "48117e2c-6328-406b-b102-c4a9d115bb13",
|
||||||
|
"nextNodeCode": "ec17f60e-94e0-4d96-a3ce-3417e9d32d60",
|
||||||
|
"nextNodeType": "1",
|
||||||
|
"coordinate": "700,325;700,400;810,400"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "3",
|
||||||
|
"nodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "1000,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "394e1cc8-b8b2-4189-9f81-44448e88ac32",
|
||||||
|
"nextNodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496",
|
||||||
|
"coordinate": "1025,300;1130,300"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496",
|
||||||
|
"nodeName": "经理会签",
|
||||||
|
"permissionFlag": "1@@3",
|
||||||
|
"nodeRatio": "100.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination,pop,addSign,subSign\"}]",
|
||||||
|
"coordinate": "1180,300|1180,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "9c93a195-cff2-4e17-ab0a-a4f264191496",
|
||||||
|
"nextNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
|
||||||
|
"coordinate": "1230,300;1315,300"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "4",
|
||||||
|
"nodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "1340,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
|
||||||
|
"nextNodeCode": "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
|
||||||
|
"coordinate": "1340,325;1340,400;1430,400"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "a1a42056-afd1-4e90-88bc-36cbf5a66992",
|
||||||
|
"nextNodeCode": "350dfa0c-a77c-4efa-8527-10efa02d8be4",
|
||||||
|
"coordinate": "1340,275;1340,200;1430,200"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "350dfa0c-a77c-4efa-8527-10efa02d8be4",
|
||||||
|
"nodeName": "总经理",
|
||||||
|
"permissionFlag": "3@@1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||||
|
"coordinate": "1480,200|1480,200",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "350dfa0c-a77c-4efa-8527-10efa02d8be4",
|
||||||
|
"nextNodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
|
||||||
|
"coordinate": "1530,200;1640,200;1640,275"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
|
||||||
|
"nodeName": "副总经理",
|
||||||
|
"permissionFlag": "1@@3",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||||
|
"coordinate": "1480,400|1480,400",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "fcfdd9f6-f526-4c1a-b71d-88afa31aebc5",
|
||||||
|
"nextNodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
|
||||||
|
"coordinate": "1530,400;1640,400;1640,325"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "4",
|
||||||
|
"nodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "1640,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "c36a46ef-04f9-463f-bad7-4b395c818519",
|
||||||
|
"nextNodeCode": "3fcea762-b53a-4ae1-8365-7bec90444828",
|
||||||
|
"coordinate": "1665,300;1770,300"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "1",
|
||||||
|
"nodeCode": "3fcea762-b53a-4ae1-8365-7bec90444828",
|
||||||
|
"nodeName": "董事",
|
||||||
|
"permissionFlag": "1",
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": "",
|
||||||
|
"listenerPath": "",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[{\"code\":\"ButtonPermissionEnum\",\"value\":\"back,termination\"}]",
|
||||||
|
"coordinate": "1820,300|1820,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": [
|
||||||
|
{
|
||||||
|
"skipType": "PASS",
|
||||||
|
"skipCondition": null,
|
||||||
|
"skipName": null,
|
||||||
|
"nowNodeCode": "3fcea762-b53a-4ae1-8365-7bec90444828",
|
||||||
|
"nextNodeCode": "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31",
|
||||||
|
"coordinate": "1870,300;1960,300"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nodeType": "2",
|
||||||
|
"nodeCode": "9cfbfd3e-6c04-41d6-9fc2-6787a7d2cd31",
|
||||||
|
"nodeName": "结束",
|
||||||
|
"permissionFlag": null,
|
||||||
|
"nodeRatio": "0.000",
|
||||||
|
"anyNodeSkip": null,
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null,
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": null,
|
||||||
|
"ext": "[]",
|
||||||
|
"coordinate": "1980,300|1980,300",
|
||||||
|
"version": "1",
|
||||||
|
"skipList": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"flowCode": "leave6",
|
||||||
|
"flowName": "请假申请-排他并行会签",
|
||||||
|
"modelValue": "CLASSICS",
|
||||||
|
"category": "103",
|
||||||
|
"version": "1",
|
||||||
|
"formCustom": "N",
|
||||||
|
"formPath": "/workflow/leaveEdit/index",
|
||||||
|
"listenerType": null,
|
||||||
|
"listenerPath": null
|
||||||
|
}
|
||||||
3481
docs/script/sql/ruoyi-ai-v3_mysql8.sql
Normal file
352
docs/troubleshooting/rag-failures.md
Normal file
@@ -0,0 +1,352 @@
|
|||||||
|
<a id="top"></a>
|
||||||
|
|
||||||
|
# RAG 常见故障排查(16 问题清单)
|
||||||
|
|
||||||
|
当知识库已经接入,系统也能正常回答,但结果仍然出现命中错误、引用旧内容、推理漂移、跨轮次失忆,或部署后表面可用但实际异常时,最常见的问题不是“模型不行”,而是**不同层的故障被混在一起处理**。
|
||||||
|
|
||||||
|
这份页面不重新发明一套新方法。
|
||||||
|
它直接使用一份固定的 **16 问题清单** 作为排查主轴,让你先把问题标到正确的 **No.X**,再决定下一步查哪里、改哪里,而不是一次性乱改检索、模型、切块、会话和部署配置。
|
||||||
|
|
||||||
|
这份清单的核心目的只有一个:
|
||||||
|
|
||||||
|
**先把问题放进正确的故障域,再做修复。**
|
||||||
|
|
||||||
|
快速导航:
|
||||||
|
[这页怎么用](#how-to-use) | [标签说明](#legend) | [常见症状入口](#symptoms) | [16 问题清单](#map16) | [按层排查](#by-layer) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<a id="how-to-use"></a>
|
||||||
|
|
||||||
|
## 一、这页怎么用
|
||||||
|
|
||||||
|
这不是一篇“从头到尾照着做”的传统教程。
|
||||||
|
它更像一张固定的 RAG 故障地图,作用是先帮助你**判断故障属于哪一种类型**。
|
||||||
|
|
||||||
|
建议按下面顺序使用:
|
||||||
|
|
||||||
|
### 1. 先看现象,不要先改配置
|
||||||
|
|
||||||
|
先回答两个问题:
|
||||||
|
|
||||||
|
1. 你看到的故障,最像哪一种症状
|
||||||
|
2. 这个故障更像发生在输入检索层、推理层、状态层,还是部署层
|
||||||
|
|
||||||
|
在还没判断层级之前,不要先一起改这些东西:
|
||||||
|
|
||||||
|
- 检索条数
|
||||||
|
- 切块大小
|
||||||
|
- 会话配置
|
||||||
|
- 模型参数
|
||||||
|
- 部署顺序
|
||||||
|
- 依赖服务
|
||||||
|
|
||||||
|
如果先全部一起动,问题通常只会更难定位。
|
||||||
|
|
||||||
|
### 2. 先给问题打上 No.X 标签
|
||||||
|
|
||||||
|
这份页面最重要的动作,不是“立刻修好”,而是先做一件小事:
|
||||||
|
|
||||||
|
**给当前问题贴上最接近的 No.X。**
|
||||||
|
|
||||||
|
例如:
|
||||||
|
|
||||||
|
- 检索结果看起来相似,但其实答非所问,先看 `No.1` 或 `No.5`
|
||||||
|
- 切块是对的,但结论还是错,先看 `No.2`
|
||||||
|
- 系统回答很自信,但没有根据,先看 `No.4`
|
||||||
|
- 刚部署完就炸,先看 `No.14` 到 `No.16`
|
||||||
|
|
||||||
|
### 3. 一次只排一个故障域
|
||||||
|
|
||||||
|
同一个表面现象,背后可能是不同层的问题。
|
||||||
|
例如“答案不对”既可能是:
|
||||||
|
|
||||||
|
- `No.1` 检索漂移
|
||||||
|
- `No.2` 理解塌陷
|
||||||
|
- `No.4` 自信乱答
|
||||||
|
- `No.8` 根本看不到错误路径
|
||||||
|
|
||||||
|
所以这张表的用法不是“多选全改”,而是:
|
||||||
|
|
||||||
|
**先挑最接近的一项,优先验证这一项是否成立。**
|
||||||
|
|
||||||
|
[返回顶部](#top) | [下一节:标签说明](#legend)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<a id="legend"></a>
|
||||||
|
|
||||||
|
## 二、标签说明
|
||||||
|
|
||||||
|
这份 16 问题清单本身已经带有层级 / 标签结构。
|
||||||
|
这些标签不是装饰,而是用来帮助你快速判断故障发生在哪一层。
|
||||||
|
|
||||||
|
### 1. 层级标签
|
||||||
|
|
||||||
|
- `[IN]`:输入与检索
|
||||||
|
输入、切块、召回、语义匹配、可见性问题
|
||||||
|
|
||||||
|
- `[RE]`:推理与规划
|
||||||
|
理解、推理、归纳、逻辑链、抽象处理问题
|
||||||
|
|
||||||
|
- `[ST]`:状态与上下文
|
||||||
|
会话、记忆、上下文连续性、多代理状态问题
|
||||||
|
|
||||||
|
- `[OP]`:基础设施与部署
|
||||||
|
启动顺序、依赖就绪、部署锁死、预部署状态问题
|
||||||
|
|
||||||
|
### 2. `{OBS}` 标签
|
||||||
|
|
||||||
|
带 `{OBS}` 的项,通常都和“**你是否看得见问题是怎么坏掉的**”有关。
|
||||||
|
它们往往不是单纯回答错误,而是:
|
||||||
|
|
||||||
|
- 错误路径不可见
|
||||||
|
- 漂移过程不可见
|
||||||
|
- 状态熔化过程不可见
|
||||||
|
- 多代理覆盖过程不可见
|
||||||
|
|
||||||
|
所以一旦你发现“我知道结果错,但我根本看不到它是怎么错的”,通常就已经很接近 `{OBS}` 类问题了。
|
||||||
|
|
||||||
|
### 3. 为什么要保留这些标签
|
||||||
|
|
||||||
|
因为同样叫“答错了”,实际含义完全不同。
|
||||||
|
|
||||||
|
例如:
|
||||||
|
|
||||||
|
- `[IN]` 的答错,常常是**拿错材料**
|
||||||
|
- `[RE]` 的答错,常常是**拿对材料但理解错**
|
||||||
|
- `[ST]` 的答错,常常是**前文断掉、状态漂移**
|
||||||
|
- `[OP]` 的答错,常常是**系统根本没在完整状态下运行**
|
||||||
|
|
||||||
|
如果不先分层,就会掉进典型的 RAG 地狱:
|
||||||
|
表面在改答案,实际上在盲修。
|
||||||
|
|
||||||
|
[返回顶部](#top) | [下一节:常见症状入口](#symptoms)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<a id="symptoms"></a>
|
||||||
|
|
||||||
|
## 三、常见症状入口
|
||||||
|
|
||||||
|
如果你现在还不知道该从哪一项开始,就先从症状入口反查。
|
||||||
|
|
||||||
|
### 1. 检索返回了错误内容,或看起来相关但其实不回答问题
|
||||||
|
|
||||||
|
这类问题最常见的是:
|
||||||
|
“有命中,但命中的不是该用的内容。”
|
||||||
|
|
||||||
|
优先看:
|
||||||
|
|
||||||
|
- [No.1](#no1) `幻觉与切块漂移`
|
||||||
|
- [No.5](#no5) `语义 ≠ 向量嵌入`
|
||||||
|
- [No.8](#no8) `调试是一个黑箱`
|
||||||
|
|
||||||
|
### 2. 切块本身是对的,但最终答案还是错的
|
||||||
|
|
||||||
|
这类问题不是简单没检索到,而是后面那层坏了。
|
||||||
|
|
||||||
|
优先看:
|
||||||
|
|
||||||
|
- [No.2](#no2) `解释塌陷`
|
||||||
|
- [No.4](#no4) `虚张声势 / 过度自信`
|
||||||
|
- [No.6](#no6) `逻辑塌陷与恢复`
|
||||||
|
|
||||||
|
### 3. 多步任务一开始正常,后面越来越偏
|
||||||
|
|
||||||
|
这类问题通常不是单点错误,而是中途漂移或熔化。
|
||||||
|
|
||||||
|
优先看:
|
||||||
|
|
||||||
|
- [No.3](#no3) `长推理链`
|
||||||
|
- [No.6](#no6) `逻辑塌陷与恢复`
|
||||||
|
- [No.9](#no9) `熵塌陷`
|
||||||
|
|
||||||
|
### 4. 多轮对话后开始失忆,跨轮次接不上
|
||||||
|
|
||||||
|
这类问题一般已经进入状态层。
|
||||||
|
|
||||||
|
优先看:
|
||||||
|
|
||||||
|
- [No.7](#no7) `跨会话记忆断裂`
|
||||||
|
- [No.9](#no9) `熵塌陷`
|
||||||
|
- [No.13](#no13) `多代理混乱`
|
||||||
|
|
||||||
|
### 5. 遇到抽象、逻辑、规则、符号关系就崩
|
||||||
|
|
||||||
|
这类问题通常不是检索空,而是推理结构扛不住。
|
||||||
|
|
||||||
|
优先看:
|
||||||
|
|
||||||
|
- [No.11](#no11) `符号塌陷`
|
||||||
|
- [No.12](#no12) `哲学递归`
|
||||||
|
|
||||||
|
### 6. 你根本不知道错在哪一层,只知道结果不对
|
||||||
|
|
||||||
|
这类问题先不要乱调参数。
|
||||||
|
先解决“不可见”的问题。
|
||||||
|
|
||||||
|
优先看:
|
||||||
|
|
||||||
|
- [No.8](#no8) `调试是一个黑箱`
|
||||||
|
|
||||||
|
### 7. 刚部署完最容易炸,首轮调用异常,重启后偶尔恢复
|
||||||
|
|
||||||
|
这类问题通常不在答案逻辑,而在部署状态。
|
||||||
|
|
||||||
|
优先看:
|
||||||
|
|
||||||
|
- [No.14](#no14) `引导启动顺序`
|
||||||
|
- [No.15](#no15) `部署死锁`
|
||||||
|
- [No.16](#no16) `预部署塌陷`
|
||||||
|
|
||||||
|
[返回顶部](#top) | [下一节:16 问题清单](#map16)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<a id="map16"></a>
|
||||||
|
|
||||||
|
## 四、16 问题清单(固定主表)
|
||||||
|
|
||||||
|
下面这 16 项按固定顺序使用。
|
||||||
|
不要先重组,不要先混类,先判断最接近哪一个 **No.X**。
|
||||||
|
|
||||||
|
| # | 问题域(含层级/标签) | 会坏在哪里 |
|
||||||
|
|---|---|---|
|
||||||
|
| <a id="no1"></a> 1 | `[IN] 幻觉与切块漂移 {OBS}` | 检索返回错误/无关内容 |
|
||||||
|
| <a id="no2"></a> 2 | `[RE] 解释塌陷` | 切块是对的,逻辑是错的 |
|
||||||
|
| <a id="no3"></a> 3 | `[RE] 长推理链 {OBS}` | 在多步任务中逐步漂移 |
|
||||||
|
| <a id="no4"></a> 4 | `[RE] 虚张声势 / 过度自信` | 自信但没有根据的回答 |
|
||||||
|
| <a id="no5"></a> 5 | `[IN] 语义 ≠ 向量嵌入 {OBS}` | 余弦匹配 ≠ 真实语义 |
|
||||||
|
| <a id="no6"></a> 6 | `[RE] 逻辑塌陷与恢复 {OBS}` | 走入死胡同,需要受控重置 |
|
||||||
|
| <a id="no7"></a> 7 | `[ST] 跨会话记忆断裂` | 线索丢失,没有连续性 |
|
||||||
|
| <a id="no8"></a> 8 | `[IN] 调试是一个黑箱 {OBS}` | 看不到故障路径 |
|
||||||
|
| <a id="no9"></a> 9 | `[ST] 熵塌陷` | 注意力熔化,输出失去连贯性 |
|
||||||
|
| <a id="no10"></a> 10 | `[RE] 创造力冻结` | 平直、字面化输出 |
|
||||||
|
| <a id="no11"></a> 11 | `[RE] 符号塌陷` | 抽象/逻辑性提示词失效 |
|
||||||
|
| <a id="no12"></a> 12 | `[RE] 哲学递归` | 自我引用循环、悖论陷阱 |
|
||||||
|
| <a id="no13"></a> 13 | `[ST] 多代理混乱 {OBS}` | 代理互相覆盖或使逻辑错位 |
|
||||||
|
| <a id="no14"></a> 14 | `[OP] 引导启动顺序` | 依赖未就绪时服务先启动 |
|
||||||
|
| <a id="no15"></a> 15 | `[OP] 部署死锁` | 基础设施中的循环等待 |
|
||||||
|
| <a id="no16"></a> 16 | `[OP] 预部署塌陷 {OBS}` | 首次调用时版本错配 / 缺少密钥 |
|
||||||
|
|
||||||
|
这张表是主表。
|
||||||
|
如果你时间很少,只做一件事也行:
|
||||||
|
|
||||||
|
**先从这 16 项里选出最接近的一项。**
|
||||||
|
|
||||||
|
[返回顶部](#top) | [下一节:按层排查](#by-layer)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<a id="by-layer"></a>
|
||||||
|
|
||||||
|
## 五、按层排查:不要改错层
|
||||||
|
|
||||||
|
这一节不重写 16 项,只是告诉你:
|
||||||
|
当你已经选到某个 No.X 时,第一眼应该优先查哪一层。
|
||||||
|
|
||||||
|
### A. `[IN]` 层:先确认你拿到的是不是对的材料
|
||||||
|
|
||||||
|
对应编号:
|
||||||
|
|
||||||
|
- [No.1](#no1)
|
||||||
|
- [No.5](#no5)
|
||||||
|
- [No.8](#no8)
|
||||||
|
|
||||||
|
这层最常见的误判是:
|
||||||
|
|
||||||
|
“我以为系统理解错了,其实它一开始就拿错了东西。”
|
||||||
|
|
||||||
|
如果你命中了弱相关片段、表面相似文本、错误切块,后面推理再强也没用。
|
||||||
|
所以 `[IN]` 层优先看的是:
|
||||||
|
|
||||||
|
1. 原始召回内容到底是什么
|
||||||
|
2. 命中的片段是否只是“相似”,而不是“正确”
|
||||||
|
3. 你是否能看到检索过程,还是整个过程像黑箱
|
||||||
|
|
||||||
|
这层如果没先排好,后面的推理诊断通常会失真。
|
||||||
|
|
||||||
|
### B. `[RE]` 层:材料可能是对的,但系统用错了
|
||||||
|
|
||||||
|
对应编号:
|
||||||
|
|
||||||
|
- [No.2](#no2)
|
||||||
|
- [No.3](#no3)
|
||||||
|
- [No.4](#no4)
|
||||||
|
- [No.6](#no6)
|
||||||
|
- [No.10](#no10)
|
||||||
|
- [No.11](#no11)
|
||||||
|
- [No.12](#no12)
|
||||||
|
|
||||||
|
这层最常见的误判是:
|
||||||
|
|
||||||
|
“我以为是检索坏了,其实是后面理解、归纳、逻辑链坏了。”
|
||||||
|
|
||||||
|
例如:
|
||||||
|
|
||||||
|
- 切块是对的,但结论错了 → 常见是 `No.2`
|
||||||
|
- 多步任务中途开始偏 → 常见是 `No.3`
|
||||||
|
- 回答很笃定,但完全站不住 → 常见是 `No.4`
|
||||||
|
- 遇到抽象规则就崩 → 常见是 `No.11`
|
||||||
|
- 陷入循环解释 → 常见是 `No.12`
|
||||||
|
|
||||||
|
如果 `[IN]` 层已经基本没问题,答案还是不对,就应该优先回到 `[RE]` 层判断是哪一种塌陷。
|
||||||
|
|
||||||
|
### C. `[ST]` 层:单轮正常,不代表状态层正常
|
||||||
|
|
||||||
|
对应编号:
|
||||||
|
|
||||||
|
- [No.7](#no7)
|
||||||
|
- [No.9](#no9)
|
||||||
|
- [No.13](#no13)
|
||||||
|
|
||||||
|
这层最常见的误判是:
|
||||||
|
|
||||||
|
“单轮看起来还行,所以我以为系统没问题。”
|
||||||
|
|
||||||
|
其实很多 RAG 地狱不是单轮错误,而是:
|
||||||
|
|
||||||
|
- 多轮之后前文断掉
|
||||||
|
- 上下文越来越乱
|
||||||
|
- 多角色、多代理之间互相覆盖
|
||||||
|
|
||||||
|
如果你发现:
|
||||||
|
|
||||||
|
- 第一轮没事,后面越来越歪
|
||||||
|
- 切换角色后前面的约束消失
|
||||||
|
- 多个步骤之间状态彼此污染
|
||||||
|
|
||||||
|
那就不要再只盯着检索条数了,应该直接回到 `[ST]` 层看 `No.7 / No.9 / No.13`。
|
||||||
|
|
||||||
|
### D. `[OP]` 层:别把部署问题误诊成回答问题
|
||||||
|
|
||||||
|
对应编号:
|
||||||
|
|
||||||
|
- [No.14](#no14)
|
||||||
|
- [No.15](#no15)
|
||||||
|
- [No.16](#no16)
|
||||||
|
|
||||||
|
这层最常见的误判是:
|
||||||
|
|
||||||
|
“答案不稳定,所以我先去调模型或检索。”
|
||||||
|
|
||||||
|
但如果系统根本没有在完整状态下启动,所有上层表现都会像鬼打墙。
|
||||||
|
尤其是这些情况:
|
||||||
|
|
||||||
|
- 依赖还没就绪,服务先起了 → `No.14`
|
||||||
|
- 多个组件互相等待,长期半可用 → `No.15`
|
||||||
|
- 首次调用就因为版本、密钥、环境没对齐而塌陷 → `No.16`
|
||||||
|
|
||||||
|
只要你看到“刚部署最容易出事”“首轮异常最严重”“重启后暂时恢复”,就要优先怀疑 `[OP]` 层,而不是先改提示词或参数。
|
||||||
|
|
||||||
|
[返回顶部](#top) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<a id="issue-report"></a>
|
||||||
|
|
||||||
|
|
||||||
|
## 六、快速返回
|
||||||
|
|
||||||
|
[返回顶部](#top) | [这页怎么用](#how-to-use) | [标签说明](#legend) | [常见症状入口](#symptoms) | [16 问题清单](#map16) | [按层排查](#by-layer)
|
||||||
42
docs/文件上传接口文档.md
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
## 接口信息
|
||||||
|
|
||||||
|
**接口路径**: `POST /resource/oss/upload`
|
||||||
|
**请求类型**: `multipart/form-data`
|
||||||
|
**权限要求**: `system:oss:upload`
|
||||||
|
**业务类型**: [INSERT]
|
||||||
|
|
||||||
|
### 接口描述
|
||||||
|
上传OSS对象存储接口,用于将文件上传到对象存储服务。
|
||||||
|
|
||||||
|
### 请求参数
|
||||||
|
| 参数名 | 类型 | 必填 | 说明 |
|
||||||
|
| ---- | ------------- | ---- | ------ |
|
||||||
|
| file | MultipartFile | 是 | 要上传的文件 |
|
||||||
|
|
||||||
|
### 请求头
|
||||||
|
- `Content-Type`: `multipart/form-data`
|
||||||
|
|
||||||
|
### 返回值
|
||||||
|
返回 `R<SysOssUploadVo>` 类型,包含以下字段:
|
||||||
|
| 字段名 | 类型 | 说明 |
|
||||||
|
| -------- | ------ | ------- |
|
||||||
|
| url | String | 文件访问URL |
|
||||||
|
| fileName | String | 原始文件名 |
|
||||||
|
| ossId | String | 文件ID |
|
||||||
|
|
||||||
|
### 响应示例
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"code": 200,
|
||||||
|
"msg": "操作成功",
|
||||||
|
"data": {
|
||||||
|
"url": "fileid://xxx",
|
||||||
|
"fileName": "example.jpg",
|
||||||
|
"ossId": "123"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### 异常情况
|
||||||
|
- 当上传文件为空时,返回错误信息:"上传文件不能为空"
|
||||||
BIN
image/00.png
|
Before Width: | Height: | Size: 78 KiB |
BIN
image/01.png
|
Before Width: | Height: | Size: 232 KiB |
BIN
image/02.png
|
Before Width: | Height: | Size: 329 KiB |
BIN
image/03.png
|
Before Width: | Height: | Size: 123 KiB |
BIN
image/04.png
|
Before Width: | Height: | Size: 127 KiB |
BIN
image/05.png
|
Before Width: | Height: | Size: 129 KiB |
BIN
image/06.png
|
Before Width: | Height: | Size: 284 KiB |
BIN
image/07.png
|
Before Width: | Height: | Size: 674 KiB |
BIN
image/08.png
|
Before Width: | Height: | Size: 35 KiB |
BIN
image/09.png
|
Before Width: | Height: | Size: 100 KiB |
BIN
image/10.png
|
Before Width: | Height: | Size: 65 KiB |
BIN
image/11.png
|
Before Width: | Height: | Size: 26 KiB |
BIN
image/12.png
|
Before Width: | Height: | Size: 95 KiB |
BIN
image/13.png
|
Before Width: | Height: | Size: 136 KiB |
299
pom.xml
@@ -9,57 +9,77 @@
|
|||||||
<version>${revision}</version>
|
<version>${revision}</version>
|
||||||
|
|
||||||
<name>ruoyi-ai</name>
|
<name>ruoyi-ai</name>
|
||||||
<url>https://gitee.com/ageerle/ruoyi-ai</url>
|
<url>>https://gitee.com/ageerle/ruoyi-ai</url>
|
||||||
<description>AI助手</description>
|
<description>全栈式AI开发平台</description>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<revision>1.0.0</revision>
|
<revision>3.0.0</revision>
|
||||||
<spring-boot.version>3.0.6</spring-boot.version>
|
<spring-boot.version>3.5.8</spring-boot.version>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<java.version>17</java.version>
|
<java.version>17</java.version>
|
||||||
<spring-boot.mybatis>3.0.1</spring-boot.mybatis>
|
<mybatis.version>3.5.16</mybatis.version>
|
||||||
<springdoc.version>2.1.0</springdoc.version>
|
<springdoc.version>2.8.13</springdoc.version>
|
||||||
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
|
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
|
||||||
<poi.version>5.2.3</poi.version>
|
<fastexcel.version>1.3.0</fastexcel.version>
|
||||||
<easyexcel.version>3.2.1</easyexcel.version>
|
|
||||||
<velocity.version>2.3</velocity.version>
|
<velocity.version>2.3</velocity.version>
|
||||||
<satoken.version>1.34.0</satoken.version>
|
<satoken.version>1.44.0</satoken.version>
|
||||||
<mybatis-plus.version>3.5.3.1</mybatis-plus.version>
|
<mybatis-plus.version>3.5.14</mybatis-plus.version>
|
||||||
<p6spy.version>3.9.1</p6spy.version>
|
<p6spy.version>3.9.1</p6spy.version>
|
||||||
<hutool.version>5.8.18</hutool.version>
|
<hutool.version>5.8.40</hutool.version>
|
||||||
<okhttp.version>4.10.0</okhttp.version>
|
<spring-boot-admin.version>3.5.5</spring-boot-admin.version>
|
||||||
<spring-boot-admin.version>3.0.3</spring-boot-admin.version>
|
<redisson.version>3.51.0</redisson.version>
|
||||||
<redisson.version>3.20.1</redisson.version>
|
<lock4j.version>2.2.7</lock4j.version>
|
||||||
<lock4j.version>2.2.4</lock4j.version>
|
<dynamic-ds.version>4.3.1</dynamic-ds.version>
|
||||||
<dynamic-ds.version>3.6.1</dynamic-ds.version>
|
<snailjob.version>1.8.0</snailjob.version>
|
||||||
<alibaba-ttl.version>2.14.2</alibaba-ttl.version>
|
<mapstruct-plus.version>1.5.0</mapstruct-plus.version>
|
||||||
<xxl-job.version>2.4.0</xxl-job.version>
|
|
||||||
<mapstruct-plus.version>1.2.1</mapstruct-plus.version>
|
|
||||||
<mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
|
<mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
|
||||||
<lombok.version>1.18.26</lombok.version>
|
<lombok.version>1.18.40</lombok.version>
|
||||||
<bouncycastle.version>1.72</bouncycastle.version>
|
<bouncycastle.version>1.80</bouncycastle.version>
|
||||||
|
<justauth.version>1.16.7</justauth.version>
|
||||||
<!-- 离线IP地址定位库 -->
|
<!-- 离线IP地址定位库 -->
|
||||||
<ip2region.version>2.7.0</ip2region.version>
|
<ip2region.version>2.7.0</ip2region.version>
|
||||||
|
|
||||||
<!-- 临时修复 snakeyaml 漏洞 -->
|
|
||||||
<snakeyaml.version>1.33</snakeyaml.version>
|
|
||||||
|
|
||||||
<!-- OSS 配置 -->
|
<!-- OSS 配置 -->
|
||||||
<aws-java-sdk-s3.version>1.12.400</aws-java-sdk-s3.version>
|
<aws.sdk.version>2.28.22</aws.sdk.version>
|
||||||
<!-- SMS 配置 -->
|
<!-- SMS 配置 -->
|
||||||
<aliyun.sms.version>2.0.23</aliyun.sms.version>
|
<sms4j.version>3.3.5</sms4j.version>
|
||||||
<tencent.sms.version>3.1.687</tencent.sms.version>
|
<!-- 限制框架中的fastjson版本 -->
|
||||||
|
<fastjson.version>1.2.83</fastjson.version>
|
||||||
|
<!-- 面向运行时的D-ORM依赖 -->
|
||||||
|
<anyline.version>8.7.2-20250603</anyline.version>
|
||||||
|
<!-- 工作流配置 -->
|
||||||
|
<warm-flow.version>1.8.2</warm-flow.version>
|
||||||
|
<!-- 企业微信SDK -->
|
||||||
|
<weixin-java-cp.version>4.6.0</weixin-java-cp.version>
|
||||||
|
<!-- Jackson XML -->
|
||||||
|
<jackson-dataformat-xml.version>2.18.2</jackson-dataformat-xml.version>
|
||||||
|
<!-- AI 相关依赖 -->
|
||||||
|
<langchain4j.version>1.11.0</langchain4j.version>
|
||||||
|
<langchain4j.community.version>1.11.0-beta19</langchain4j.community.version>
|
||||||
|
<langgraph4j.version>1.5.3</langgraph4j.version>
|
||||||
|
<weaviate.version>1.19.6</weaviate.version>
|
||||||
|
<dify.version>1.0.7</dify.version>
|
||||||
|
<!-- gRPC 版本 - 解决 Milvus SDK 依赖冲突 -->
|
||||||
|
<grpc.version>1.62.2</grpc.version>
|
||||||
|
<!-- Apache Commons Compress - 用于POI处理ZIP格式 -->
|
||||||
|
<commons-compress.version>1.27.1</commons-compress.version>
|
||||||
|
|
||||||
|
|
||||||
|
<avatar-generator.version>1.1.0</avatar-generator.version>
|
||||||
|
<jsoup.version>1.21.2</jsoup.version>
|
||||||
|
<knife4j.version>4.4.0</knife4j.version>
|
||||||
|
<swagger-annotations.version>2.2.8</swagger-annotations.version>
|
||||||
|
<google-api-client.version>2.6.0</google-api-client.version>
|
||||||
|
<commons-collections4.version>4.5.0</commons-collections4.version>
|
||||||
|
|
||||||
<!-- 插件版本 -->
|
<!-- 插件版本 -->
|
||||||
<maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
|
<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
|
||||||
<maven-war-plugin.version>3.2.2</maven-war-plugin.version>
|
<maven-war-plugin.version>3.4.0</maven-war-plugin.version>
|
||||||
<maven-compiler-plugin.verison>3.11.0</maven-compiler-plugin.verison>
|
<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
|
||||||
<maven-surefire-plugin.version>3.0.0</maven-surefire-plugin.version>
|
<maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
|
||||||
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
|
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
|
||||||
<weixin-java-miniapp.version>4.5.0</weixin-java-miniapp.version>
|
<!-- 打包默认跳过测试 -->
|
||||||
<weixin-java-pay.version>4.6.0</weixin-java-pay.version>
|
<skipTests>true</skipTests>
|
||||||
<weixin-java-cp.version>4.6.0</weixin-java-cp.version>
|
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<profiles>
|
<profiles>
|
||||||
@@ -68,7 +88,9 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<!-- 环境标识,需要与配置文件的名称相对应 -->
|
<!-- 环境标识,需要与配置文件的名称相对应 -->
|
||||||
<profiles.active>local</profiles.active>
|
<profiles.active>local</profiles.active>
|
||||||
<logging.level>debug</logging.level>
|
<logging.level>info</logging.level>
|
||||||
|
<monitor.username>ruoyi</monitor.username>
|
||||||
|
<monitor.password>123456</monitor.password>
|
||||||
</properties>
|
</properties>
|
||||||
</profile>
|
</profile>
|
||||||
<profile>
|
<profile>
|
||||||
@@ -76,7 +98,9 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<!-- 环境标识,需要与配置文件的名称相对应 -->
|
<!-- 环境标识,需要与配置文件的名称相对应 -->
|
||||||
<profiles.active>dev</profiles.active>
|
<profiles.active>dev</profiles.active>
|
||||||
<logging.level>debug</logging.level>
|
<logging.level>info</logging.level>
|
||||||
|
<monitor.username>ruoyi</monitor.username>
|
||||||
|
<monitor.password>123456</monitor.password>
|
||||||
</properties>
|
</properties>
|
||||||
<activation>
|
<activation>
|
||||||
<!-- 默认环境 -->
|
<!-- 默认环境 -->
|
||||||
@@ -88,6 +112,8 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<profiles.active>prod</profiles.active>
|
<profiles.active>prod</profiles.active>
|
||||||
<logging.level>warn</logging.level>
|
<logging.level>warn</logging.level>
|
||||||
|
<monitor.username>ruoyi</monitor.username>
|
||||||
|
<monitor.password>123456</monitor.password>
|
||||||
</properties>
|
</properties>
|
||||||
</profile>
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
@@ -105,6 +131,15 @@
|
|||||||
<scope>import</scope>
|
<scope>import</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- gRPC BOM - 解决 Milvus SDK 依赖冲突,强制统一版本 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.grpc</groupId>
|
||||||
|
<artifactId>grpc-bom</artifactId>
|
||||||
|
<version>${grpc.version}</version>
|
||||||
|
<type>pom</type>
|
||||||
|
<scope>import</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- hutool 的依赖配置-->
|
<!-- hutool 的依赖配置-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
@@ -142,25 +177,9 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.poi</groupId>
|
<groupId>cn.idev.excel</groupId>
|
||||||
<artifactId>poi</artifactId>
|
<artifactId>fastexcel</artifactId>
|
||||||
<version>${poi.version}</version>
|
<version>${fastexcel.version}</version>
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.poi</groupId>
|
|
||||||
<artifactId>poi-ooxml</artifactId>
|
|
||||||
<version>${poi.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.alibaba</groupId>
|
|
||||||
<artifactId>easyexcel</artifactId>
|
|
||||||
<version>${easyexcel.version}</version>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>org.apache.poi</groupId>
|
|
||||||
<artifactId>poi-ooxml-schemas</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- velocity代码生成使用模板 -->
|
<!-- velocity代码生成使用模板 -->
|
||||||
@@ -197,19 +216,25 @@
|
|||||||
<!-- dynamic-datasource 多数据源-->
|
<!-- dynamic-datasource 多数据源-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
|
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
|
||||||
<version>${dynamic-ds.version}</version>
|
<version>${dynamic-ds.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.mybatis.spring.boot</groupId>
|
<groupId>org.mybatis</groupId>
|
||||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
<artifactId>mybatis</artifactId>
|
||||||
<version>${spring-boot.mybatis}</version>
|
<version>${mybatis.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
|
||||||
|
<version>${mybatis-plus.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>mybatis-plus-jsqlparser</artifactId>
|
||||||
<version>${mybatis-plus.version}</version>
|
<version>${mybatis-plus.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@@ -226,35 +251,42 @@
|
|||||||
<version>${p6spy.version}</version>
|
<version>${p6spy.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- AWS SDK for Java 2.x -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.amazonaws</groupId>
|
<groupId>software.amazon.awssdk</groupId>
|
||||||
<artifactId>aws-java-sdk-s3</artifactId>
|
<artifactId>s3</artifactId>
|
||||||
<version>${aws-java-sdk-s3.version}</version>
|
<version>${aws.sdk.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- 基于 AWS CRT 的 S3 客户端的性能增强的 S3 传输管理器 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>software.amazon.awssdk</groupId>
|
||||||
|
<artifactId>s3-transfer-manager</artifactId>
|
||||||
|
<version>${aws.sdk.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- 将基于 Netty 的 HTTP 客户端从类路径中移除 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>software.amazon.awssdk</groupId>
|
||||||
|
<artifactId>netty-nio-client</artifactId>
|
||||||
|
<version>${aws.sdk.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!--短信sms4j-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara.sms4j</groupId>
|
||||||
|
<artifactId>sms4j-spring-boot-starter</artifactId>
|
||||||
|
<version>${sms4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.aliyun</groupId>
|
<groupId>de.codecentric</groupId>
|
||||||
<artifactId>dysmsapi20170525</artifactId>
|
<artifactId>spring-boot-admin-starter-server</artifactId>
|
||||||
<version>${aliyun.sms.version}</version>
|
<version>${spring-boot-admin.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.tencentcloudapi</groupId>
|
<groupId>de.codecentric</groupId>
|
||||||
<artifactId>tencentcloud-sdk-java-sms</artifactId>
|
<artifactId>spring-boot-admin-starter-client</artifactId>
|
||||||
<version>${tencent.sms.version}</version>
|
<version>${spring-boot-admin.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>de.codecentric</groupId>-->
|
|
||||||
<!-- <artifactId>spring-boot-admin-starter-server</artifactId>-->
|
|
||||||
<!-- <version>${spring-boot-admin.version}</version>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>de.codecentric</groupId>-->
|
|
||||||
<!-- <artifactId>spring-boot-admin-starter-client</artifactId>-->
|
|
||||||
<!-- <version>${spring-boot-admin.version}</version>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
|
|
||||||
<!--redisson-->
|
<!--redisson-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.redisson</groupId>
|
<groupId>org.redisson</groupId>
|
||||||
@@ -268,24 +300,16 @@
|
|||||||
<version>${lock4j.version}</version>
|
<version>${lock4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- xxl-job-core -->
|
<!-- SnailJob Client -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.xuxueli</groupId>
|
<groupId>com.aizuda</groupId>
|
||||||
<artifactId>xxl-job-core</artifactId>
|
<artifactId>snail-job-client-starter</artifactId>
|
||||||
<version>${xxl-job.version}</version>
|
<version>${snailjob.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba</groupId>
|
<groupId>com.aizuda</groupId>
|
||||||
<artifactId>transmittable-thread-local</artifactId>
|
<artifactId>snail-job-client-job-core</artifactId>
|
||||||
<version>${alibaba-ttl.version}</version>
|
<version>${snailjob.version}</version>
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- 临时修复 snakeyaml 漏洞 -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.yaml</groupId>
|
|
||||||
<artifactId>snakeyaml</artifactId>
|
|
||||||
<version>${snakeyaml.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- 加密包引入 -->
|
<!-- 加密包引入 -->
|
||||||
@@ -301,6 +325,25 @@
|
|||||||
<version>${mapstruct-plus.version}</version>
|
<version>${mapstruct-plus.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Warm-Flow国产工作流引擎, 在线文档:http://warm-flow.cn/ -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara.warm</groupId>
|
||||||
|
<artifactId>warm-flow-mybatis-plus-sb3-starter</artifactId>
|
||||||
|
<version>${warm-flow.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara.warm</groupId>
|
||||||
|
<artifactId>warm-flow-plugin-ui-sb-web</artifactId>
|
||||||
|
<version>${warm-flow.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- JustAuth 的依赖配置-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>me.zhyd.oauth</groupId>
|
||||||
|
<artifactId>JustAuth</artifactId>
|
||||||
|
<version>${justauth.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- 离线IP地址定位库 ip2region -->
|
<!-- 离线IP地址定位库 ip2region -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.lionsoul</groupId>
|
<groupId>org.lionsoul</groupId>
|
||||||
@@ -308,26 +351,18 @@
|
|||||||
<version>${ip2region.version}</version>
|
<version>${ip2region.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.alibaba</groupId>
|
||||||
|
<artifactId>fastjson</artifactId>
|
||||||
|
<version>${fastjson.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.ruoyi</groupId>
|
<groupId>org.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-system</artifactId>
|
<artifactId>ruoyi-system</artifactId>
|
||||||
<version>${revision}</version>
|
<version>${revision}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.ruoyi</groupId>
|
|
||||||
<artifactId>ruoyi-fusion</artifactId>
|
|
||||||
<version>${revision}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.ruoyi</groupId>
|
|
||||||
<artifactId>ruoyi-knowledge</artifactId>
|
|
||||||
<version>${revision}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.ruoyi</groupId>
|
<groupId>org.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-generator</artifactId>
|
<artifactId>ruoyi-generator</artifactId>
|
||||||
@@ -336,16 +371,45 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.ruoyi</groupId>
|
<groupId>org.ruoyi</groupId>
|
||||||
<artifactId>ruoyi-demo</artifactId>
|
<artifactId>ruoyi-chat</artifactId>
|
||||||
<version>${revision}</version>
|
<version>${revision}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 工作流模块 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-workflow</artifactId>
|
||||||
|
<version>${revision}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- AI流程编排模块 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.ruoyi</groupId>
|
||||||
|
<artifactId>ruoyi-aiflow</artifactId>
|
||||||
|
<version>${revision}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Jackson XML -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.dataformat</groupId>
|
||||||
|
<artifactId>jackson-dataformat-xml</artifactId>
|
||||||
|
<version>${jackson-dataformat-xml.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Apache Commons Compress - 用于POI处理ZIP格式,解决导出Excel时的NoSuchMethodError -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-compress</artifactId>
|
||||||
|
<version>${commons-compress.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
<module>ruoyi-admin</module>
|
<module>ruoyi-admin</module>
|
||||||
<module>ruoyi-common</module>
|
<module>ruoyi-common</module>
|
||||||
|
<module>ruoyi-extend</module>
|
||||||
<module>ruoyi-modules</module>
|
<module>ruoyi-modules</module>
|
||||||
</modules>
|
</modules>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
@@ -355,7 +419,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>${maven-compiler-plugin.verison}</version>
|
<version>${maven-compiler-plugin.version}</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>${java.version}</source>
|
<source>${java.version}</source>
|
||||||
<target>${java.version}</target>
|
<target>${java.version}</target>
|
||||||
@@ -398,6 +462,7 @@
|
|||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>${maven-surefire-plugin.version}</version>
|
<version>${maven-surefire-plugin.version}</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
|
<argLine>-Dfile.encoding=UTF-8</argLine>
|
||||||
<!-- 根据打包环境执行对应的@Tag测试方法 -->
|
<!-- 根据打包环境执行对应的@Tag测试方法 -->
|
||||||
<groups>${profiles.active}</groups>
|
<groups>${profiles.active}</groups>
|
||||||
<!-- 排除标签 -->
|
<!-- 排除标签 -->
|
||||||
@@ -454,8 +519,8 @@
|
|||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<id>public</id>
|
<id>public</id>
|
||||||
<name>aliyun nexus</name>
|
<name>huawei nexus</name>
|
||||||
<url>https://maven.aliyun.com/repository/public/</url>
|
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
|
||||||
<releases>
|
<releases>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</releases>
|
</releases>
|
||||||
@@ -465,8 +530,8 @@
|
|||||||
<pluginRepositories>
|
<pluginRepositories>
|
||||||
<pluginRepository>
|
<pluginRepository>
|
||||||
<id>public</id>
|
<id>public</id>
|
||||||
<name>aliyun nexus</name>
|
<name>huawei nexus</name>
|
||||||
<url>https://maven.aliyun.com/repository/public/</url>
|
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
|
||||||
<releases>
|
<releases>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</releases>
|
</releases>
|
||||||
|
|||||||
@@ -1,35 +1,31 @@
|
|||||||
#基础镜像
|
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
|
||||||
FROM findepi/graalvm:java17-native
|
FROM bellsoft/liberica-openjdk-rocky:17.0.16-cds
|
||||||
|
#FROM bellsoft/liberica-openjdk-rocky:21.0.8-cds
|
||||||
|
#FROM findepi/graalvm:java17-native
|
||||||
|
|
||||||
# 设置环境变量
|
LABEL maintainer="Lion Li"
|
||||||
ENV LANG C.UTF-8
|
|
||||||
ENV LANGUAGE C.UTF-8
|
|
||||||
ENV LC_ALL C.UTF-8
|
|
||||||
ENV SERVER_PORT=6039
|
|
||||||
|
|
||||||
MAINTAINER ageerle
|
|
||||||
|
|
||||||
RUN mkdir -p /ruoyi/server/logs \
|
RUN mkdir -p /ruoyi/server/logs \
|
||||||
/ruoyi/server/temp \
|
/ruoyi/server/temp \
|
||||||
/ruoyi/skywalking/agent
|
/ruoyi/skywalking/agent
|
||||||
|
|
||||||
|
|
||||||
#工作空间
|
|
||||||
WORKDIR /ruoyi/server
|
WORKDIR /ruoyi/server
|
||||||
|
|
||||||
|
ENV SERVER_PORT=8080 SNAIL_PORT=28080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
|
||||||
|
|
||||||
EXPOSE ${SERVER_PORT}
|
EXPOSE ${SERVER_PORT}
|
||||||
|
# 暴露 snail job 客户端端口 用于定时任务调度中心通信
|
||||||
|
EXPOSE ${SNAIL_PORT}
|
||||||
|
|
||||||
ADD ./target/ruoyi-admin.jar ./app.jar
|
ADD ./target/ruoyi-admin.jar ./app.jar
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
|
||||||
ENTRYPOINT ["java", \
|
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
|
||||||
"-Djava.security.egd=file:/dev/./urandom", \
|
-Dsnail-job.port=${SNAIL_PORT} \
|
||||||
"-Dserver.port=${SERVER_PORT}", \
|
# 应用名称 如果想区分集群节点监控 改成不同的名称即可
|
||||||
# 应用名称 如果想区分集群节点监控 改成不同的名称即可
|
#-Dskywalking.agent.service_name=ruoyi-server \
|
||||||
# "-Dskywalking.agent.service_name=ruoyi-server", \
|
#-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \
|
||||||
# "-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar", \
|
-XX:+HeapDumpOnOutOfMemoryError -XX:+UseZGC ${JAVA_OPTS} \
|
||||||
"-jar", "app.jar"]
|
-jar app.jar
|
||||||
|
|
||||||
|
|
||||||
|
|||||||