Compare commits
1391 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f599a623a | ||
|
|
bb3f1954ee | ||
|
|
34d74b378e | ||
|
|
53d3146ad9 | ||
|
|
a61ecaa019 | ||
|
|
f969670fd3 | ||
|
|
1fca0acc92 | ||
|
|
6ca2c97849 | ||
|
|
71393eed21 | ||
|
|
92eda45afd | ||
|
|
2d4251eda7 | ||
|
|
06586b85f6 | ||
|
|
7dc6b24e66 | ||
|
|
4052c5c4d0 | ||
|
|
a3db49babf | ||
|
|
33ff11edcf | ||
|
|
b8a213849c | ||
|
|
5a0d95e493 | ||
|
|
622db6dc73 | ||
|
|
456c96df16 | ||
|
|
560636ed50 | ||
|
|
8fd3173670 | ||
|
|
c57d3a65f9 | ||
|
|
2a48bcbee9 | ||
|
|
fa72dc4e59 | ||
|
|
ad68973d19 | ||
|
|
eee662adaf | ||
|
|
35ccc5eaa4 | ||
|
|
44bfa54d32 | ||
|
|
4bd1ac8424 | ||
|
|
13b37b4d2f | ||
|
|
d1fa308961 | ||
|
|
9ef140f07f | ||
|
|
99ffe0fd41 | ||
|
|
e10be5160b | ||
|
|
17a1af1069 | ||
|
|
304b2f102a | ||
|
|
2e317b165b | ||
|
|
61b6b6c7bd | ||
|
|
bcf00e3332 | ||
|
|
c95268dfba | ||
|
|
09d58706cc | ||
|
|
c6f8680da3 | ||
|
|
f6eff05053 | ||
|
|
efae658cc5 | ||
|
|
d5ed2f4728 | ||
|
|
9defcf736c | ||
|
|
b292bc2c19 | ||
|
|
72c0c013a0 | ||
|
|
6b519a7654 | ||
|
|
29e4976da3 | ||
|
|
d61554c9bb | ||
|
|
6e9933cf0f | ||
|
|
edb74f64d9 | ||
|
|
51da2a2f36 | ||
|
|
fead40e564 | ||
|
|
716e2a63c1 | ||
|
|
7739c2a35d | ||
|
|
0f27c0aa72 | ||
|
|
cad6da432b | ||
|
|
f922d3fd55 | ||
|
|
3b4d1ef4d8 | ||
|
|
291d705307 | ||
|
|
0869ad0513 | ||
|
|
e60f5496fa | ||
|
|
be65f9cf97 | ||
|
|
bc4d8f85ad | ||
|
|
c93f2ac2a4 | ||
|
|
15a2f2611f | ||
|
|
845315ff8a | ||
|
|
acbbdf2237 | ||
|
|
742a6f3caf | ||
|
|
45b06e285a | ||
|
|
382e9e8cdd | ||
|
|
8e07be59d5 | ||
|
|
201711cec1 | ||
|
|
677110ff91 | ||
|
|
bec1b083ec | ||
|
|
7015d221b1 | ||
|
|
e63b792741 | ||
|
|
e455572adb | ||
|
|
13a1993dd2 | ||
|
|
4017f71d10 | ||
|
|
ec8577bdd9 | ||
|
|
84834c7a65 | ||
|
|
667cf9d1c9 | ||
|
|
b5a7350fe9 | ||
|
|
af5bb360bf | ||
|
|
f4ba70ec5a | ||
|
|
c3bfdcf99b | ||
|
|
16e66ba175 | ||
|
|
4cfff2d05c | ||
|
|
d52e6cb7ea | ||
|
|
63d1e9403b | ||
|
|
454e68c162 | ||
|
|
12126a7530 | ||
|
|
48a7348ff1 | ||
|
|
b8aa125955 | ||
|
|
cc2aa364d5 | ||
|
|
036bdc79ba | ||
|
|
a552b5a814 | ||
|
|
f2f0d143b5 | ||
|
|
bd31e5abb2 | ||
|
|
d369c8210c | ||
|
|
a1f7f81e8d | ||
|
|
04fb7b107e | ||
|
|
b6f75b3825 | ||
|
|
78f4c7f3f7 | ||
|
|
6dcbb1829b | ||
|
|
8becb49a3b | ||
|
|
739487e528 | ||
|
|
21f90806f4 | ||
|
|
6c295f8782 | ||
|
|
a483d57eca | ||
|
|
76380b5e5d | ||
|
|
a1c07f1924 | ||
|
|
5dc81ab895 | ||
|
|
9858d5e42a | ||
|
|
5a4a3a2e5d | ||
|
|
c20433df33 | ||
|
|
4212c8aed8 | ||
|
|
c234029d9d | ||
|
|
6d5bb3f1bd | ||
|
|
8bfc3b480b | ||
|
|
45158ab898 | ||
|
|
e286630fdd | ||
|
|
43fd4ef18f | ||
|
|
336b87dd3d | ||
|
|
1e1d560a25 | ||
|
|
0b06e29877 | ||
|
|
14cfabfb9a | ||
|
|
4f1de29748 | ||
|
|
3c1748aff1 | ||
|
|
949ef86bbf | ||
|
|
187148ee8b | ||
|
|
d0d563ae61 | ||
|
|
f881cb74c5 | ||
|
|
e98716e526 | ||
|
|
a901928986 | ||
|
|
69e595d62e | ||
|
|
a0b7777783 | ||
|
|
a5aa2c84e3 | ||
|
|
f63b837300 | ||
|
|
32260511d9 | ||
|
|
bb2f5827e9 | ||
|
|
45603c7132 | ||
|
|
d952cdec59 | ||
|
|
2d7bad4e98 | ||
|
|
534b7e1f73 | ||
|
|
0ec835244d | ||
|
|
9b891ecf3c | ||
|
|
d64f4e9343 | ||
|
|
2a6b685ed7 | ||
|
|
aaaaa77f59 | ||
|
|
5ede07de09 | ||
|
|
517fb22ecc | ||
|
|
909890f68c | ||
|
|
1d41aa37c8 | ||
|
|
1618213494 | ||
|
|
bf7bd49dd2 | ||
|
|
bf0c7dadc7 | ||
|
|
25ebe6edef | ||
|
|
cd685e2304 | ||
|
|
4f7a61d8d8 | ||
|
|
186bb144c9 | ||
|
|
dd30e9e111 | ||
|
|
96c6f184fa | ||
|
|
f02c004736 | ||
|
|
17f8047da0 | ||
|
|
ec3a391981 | ||
|
|
fb47ed6c14 | ||
|
|
c5fbd548a8 | ||
|
|
f1167638ce | ||
|
|
a660f407d8 | ||
|
|
4e4dc22740 | ||
|
|
09b332ef42 | ||
|
|
17e2c10b05 | ||
|
|
aaed2f4827 | ||
|
|
4cb9af22a2 | ||
|
|
34c9f1c285 | ||
|
|
5211b4e64f | ||
|
|
f12162e7ff | ||
|
|
e01ee4e01d | ||
|
|
cb5f05b421 | ||
|
|
21243b124c | ||
|
|
8fbd9e818c | ||
|
|
ed962134f6 | ||
|
|
0838c3345a | ||
|
|
e07a81f81c | ||
|
|
edb5cdd372 | ||
|
|
34aea48b7c | ||
|
|
32a68885bb | ||
|
|
cbba929db8 | ||
|
|
78dea8a9cc | ||
|
|
44c9391254 | ||
|
|
92581e3b24 | ||
|
|
a89b6d14a8 | ||
|
|
d8fbd0f6c5 | ||
|
|
0626acc93b | ||
|
|
b584e56023 | ||
|
|
c015b68db8 | ||
|
|
2321829cc3 | ||
|
|
24402eaeef | ||
|
|
2503432067 | ||
|
|
59429be4df | ||
|
|
85a87a234a | ||
|
|
88687d2719 | ||
|
|
a66fe7cc10 | ||
|
|
6980b8cab9 | ||
|
|
178ee2004b | ||
|
|
41ef63d5d0 | ||
|
|
c52d76b274 | ||
|
|
de5795dca7 | ||
|
|
abf26721c2 | ||
|
|
7d2f7cd7fd | ||
|
|
ffb883f55e | ||
|
|
c9f6b6c1ef | ||
|
|
1b2abcc10e | ||
|
|
045b362142 | ||
|
|
606e9e27a5 | ||
|
|
35d62571fd | ||
|
|
ad5f07ce02 | ||
|
|
c87fe17ee6 | ||
|
|
63b4b52613 | ||
|
|
7b8401c715 | ||
|
|
a63587e8cb | ||
|
|
fceaa7ae00 | ||
|
|
b30396d149 | ||
|
|
7edcebf51f | ||
|
|
caa75004fb | ||
|
|
e34ed5cfa6 | ||
|
|
091591f1c0 | ||
|
|
2573a98f72 | ||
|
|
273d8f6a2a | ||
|
|
e792054adb | ||
|
|
b836c28736 | ||
|
|
9252e7b5f0 | ||
|
|
921398e437 | ||
|
|
816e1fbf9b | ||
|
|
8e45cf5787 | ||
|
|
49572b2994 | ||
|
|
a980c09d01 | ||
|
|
37d120b193 | ||
|
|
2cabcbcf8d | ||
|
|
8ae052a750 | ||
|
|
6434ba1847 | ||
|
|
9c6c2f154a | ||
|
|
8d686bc618 | ||
|
|
3baeb4f8ef | ||
|
|
88c9335f7a | ||
|
|
adadcf4f62 | ||
|
|
c55fe616b6 | ||
|
|
b4df6f93cb | ||
|
|
66824310c1 | ||
|
|
110c38bf6e | ||
|
|
8772b9444d | ||
|
|
fa02450c56 | ||
|
|
7cca8d09b1 | ||
|
|
89fccaf4a9 | ||
|
|
1ad76857b3 | ||
|
|
cd08ffe9e8 | ||
|
|
9f4c7f1fea | ||
|
|
2de710190e | ||
|
|
2382c3d844 | ||
|
|
d7a1562f0b | ||
|
|
f0c89963b9 | ||
|
|
1f02103d1b | ||
|
|
104d94977b | ||
|
|
a277987139 | ||
|
|
9502fef140 | ||
|
|
c252bc246f | ||
|
|
840ab74677 | ||
|
|
ec990c9a4f | ||
|
|
9f8188dcd4 | ||
|
|
98a5c1e8c3 | ||
|
|
a75e881833 | ||
|
|
db28fd38cd | ||
|
|
6161166af9 | ||
|
|
05f1b1e4f9 | ||
|
|
0abfa60e89 | ||
|
|
c2cf376c0d | ||
|
|
02ddf5a5a7 | ||
|
|
7d9de01556 | ||
|
|
3c5c3ddc87 | ||
|
|
8eea97add4 | ||
|
|
19ca4e7e89 | ||
|
|
38e73c2b10 | ||
|
|
e909c1bdf6 | ||
|
|
b46f29e45f | ||
|
|
e72e2588aa | ||
|
|
89ae320a4b | ||
|
|
f14dcd4200 | ||
|
|
2e3e1b12d1 | ||
|
|
321e1f5ba1 | ||
|
|
3efadfebe5 | ||
|
|
a2740634be | ||
|
|
7b6c81beaa | ||
|
|
c854fda3f1 | ||
|
|
d6fa049f61 | ||
|
|
aa37b5a2e2 | ||
|
|
198fb065d4 | ||
|
|
8140e1c274 | ||
|
|
b8b84e09ab | ||
|
|
205a82f511 | ||
|
|
8a18a010d4 | ||
|
|
8531a9f7a2 | ||
|
|
e93198afad | ||
|
|
96b46f39f4 | ||
|
|
5a2fdf49c6 | ||
|
|
d4ff363a49 | ||
|
|
96b5465c90 | ||
|
|
51cb2d768d | ||
|
|
a00592d5d3 | ||
|
|
814b3c9f3a | ||
|
|
bfa4155141 | ||
|
|
2535c4a7c6 | ||
|
|
ce1a63b184 | ||
|
|
91614e9898 | ||
|
|
08c31e889d | ||
|
|
031fa11e38 | ||
|
|
ef874191a6 | ||
|
|
603a0ffb83 | ||
|
|
fc461c2996 | ||
|
|
7a8e089a42 | ||
|
|
d79a8feb93 | ||
|
|
8a0307e535 | ||
|
|
e40fa6a3dc | ||
|
|
e8b42d7b6c | ||
|
|
fa1a5c8f8f | ||
|
|
9c762c8114 | ||
|
|
b7275b05b4 | ||
|
|
3b585181ee | ||
|
|
c62eb73aeb | ||
|
|
e2457aeec3 | ||
|
|
6117567219 | ||
|
|
916c16f468 | ||
|
|
2aa7e6d32d | ||
|
|
73b78bf11e | ||
|
|
ebd9791c70 | ||
|
|
5b99956954 | ||
|
|
e895ab5565 | ||
|
|
d883e08fdd | ||
|
|
7a0d5bd29a | ||
|
|
70c2ddf66d | ||
|
|
e9a26050b8 | ||
|
|
85b75b9c1c | ||
|
|
323396492e | ||
|
|
aeb4136e9f | ||
|
|
95f1410db3 | ||
|
|
fbf76134bc | ||
|
|
c43f5ec494 | ||
|
|
7077cff50e | ||
|
|
0421c81376 | ||
|
|
4333c5d03c | ||
|
|
7a20979b6a | ||
|
|
857a6c7489 | ||
|
|
1d1ee4698e | ||
|
|
ad41ed2c2f | ||
|
|
5c432ac134 | ||
|
|
56363a3d6e | ||
|
|
939f75acc1 | ||
|
|
4b99c76c58 | ||
|
|
d4dc82c42a | ||
|
|
9070f1f08a | ||
|
|
c251fcf698 | ||
|
|
9e067715cb | ||
|
|
d2de8f60ac | ||
|
|
1d0aabe341 | ||
|
|
e74601594f | ||
|
|
53c36a01b4 | ||
|
|
ddefb342b8 | ||
|
|
daaa23e86d | ||
|
|
49dbba9828 | ||
|
|
2a0b3945fe | ||
|
|
ad29b90a43 | ||
|
|
9d104c1c33 | ||
|
|
9b61a09259 | ||
|
|
8aacd619d4 | ||
|
|
ab188daa00 | ||
|
|
8781387065 | ||
|
|
2a01d1a970 | ||
|
|
282be0b4f0 | ||
|
|
6d1ac32343 | ||
|
|
02a074590e | ||
|
|
3bf58b0232 | ||
|
|
1e0c4503aa | ||
|
|
d238b24471 | ||
|
|
d8fc6259d1 | ||
|
|
5e2138265f | ||
|
|
d9178edd32 | ||
|
|
4c0c3dd019 | ||
|
|
58c8a7dbc2 | ||
|
|
5b81612086 | ||
|
|
0fa162876f | ||
|
|
829d200302 | ||
|
|
fdbda95984 | ||
|
|
a27e0ec757 | ||
|
|
a079633355 | ||
|
|
bd843a64b6 | ||
|
|
00d92d0f2a | ||
|
|
0d51d6c8b6 | ||
|
|
cbb239117d | ||
|
|
3d3bc3b25f | ||
|
|
2084321637 | ||
|
|
2890279e3d | ||
|
|
92d3012995 | ||
|
|
f92f9d2e17 | ||
|
|
6a5a643b18 | ||
|
|
c8f6612104 | ||
|
|
9f7c9eff96 | ||
|
|
a31ff349f6 | ||
|
|
ff33a0dc22 | ||
|
|
18e4b1f33e | ||
|
|
c31cd0f73a | ||
|
|
dc36767708 | ||
|
|
065bada15b | ||
|
|
1cc38159f2 | ||
|
|
e20e5c3452 | ||
|
|
ac270a4c88 | ||
|
|
5a2668a5e5 | ||
|
|
a7e38d8e34 | ||
|
|
e354108f31 | ||
|
|
d435645957 | ||
|
|
011974b303 | ||
|
|
0f7101fef6 | ||
|
|
4e53fde33a | ||
|
|
4121ca2543 | ||
|
|
fb238738a0 | ||
|
|
e005e4d9c6 | ||
|
|
767d503790 | ||
|
|
e181529b05 | ||
|
|
5511a6e063 | ||
|
|
a1fcfbd7b6 | ||
|
|
ee660465ba | ||
|
|
8dd21005d5 | ||
|
|
f02685a11c | ||
|
|
9b54e313f8 | ||
|
|
b70c0908b4 | ||
|
|
d3f22f8b15 | ||
|
|
e16a1e60fe | ||
|
|
d1c684428d | ||
|
|
0d2a6dca2c | ||
|
|
f27d0cd97f | ||
|
|
01d4c1c749 | ||
|
|
bb04abc4d9 | ||
|
|
6629ca0906 | ||
|
|
b9bead5dba | ||
|
|
22436c2703 | ||
|
|
7645107d27 | ||
|
|
393d7b728c | ||
|
|
8c7331873e | ||
|
|
103685269e | ||
|
|
04bd6bff04 | ||
|
|
8c579951f8 | ||
|
|
e392888032 | ||
|
|
10c520bf00 | ||
|
|
eaa4ab7fa1 | ||
|
|
d4f1971acd | ||
|
|
d796af2040 | ||
|
|
a1fbbe35fa | ||
|
|
e3090523ec | ||
|
|
fd34572c48 | ||
|
|
7b9ea9f717 | ||
|
|
f3a65a8a54 | ||
|
|
6b53d3bbd8 | ||
|
|
ef82f01242 | ||
|
|
3abfd36569 | ||
|
|
c18760b9f4 | ||
|
|
09565cc72c | ||
|
|
3f9de11f11 | ||
|
|
3f43845854 | ||
|
|
cd9bd7628f | ||
|
|
da6cea16ec | ||
|
|
76af487fd0 | ||
|
|
3156c6320e | ||
|
|
ad4dfeed1d | ||
|
|
0e5c5ba6e8 | ||
|
|
ace3401693 | ||
|
|
cec3bfe4be | ||
|
|
b4c0652dfa | ||
|
|
e678f337af | ||
|
|
e203c9b2f0 | ||
|
|
7910b4c683 | ||
|
|
278f4838d8 | ||
|
|
36e4995f1b | ||
|
|
0d57618030 | ||
|
|
728e20ff23 | ||
|
|
9841450458 | ||
|
|
ee666cc387 | ||
|
|
a65f1dae9b | ||
|
|
651cd3ad74 | ||
|
|
5534195d2f | ||
|
|
2adae9fd0f | ||
|
|
918bbaf0ec | ||
|
|
b959d00532 | ||
|
|
9d951bc2af | ||
|
|
b9ad9508e3 | ||
|
|
7c63d7b295 | ||
|
|
73ffd61808 | ||
|
|
638aed7383 | ||
|
|
696396cfab | ||
|
|
a78bf48378 | ||
|
|
580f0abe64 | ||
|
|
d338b8687d | ||
|
|
4949085365 | ||
|
|
e2e4b000e6 | ||
|
|
fe3e20bc22 | ||
|
|
e9ae4196e6 | ||
|
|
fc70c12a26 | ||
|
|
407aa5908f | ||
|
|
76e63cdcc6 | ||
|
|
c2de5d9c8c | ||
|
|
4000b895b6 | ||
|
|
7547612bfb | ||
|
|
d27536ffc1 | ||
|
|
2ec1327214 | ||
|
|
5e537c43c2 | ||
|
|
023bc70fd7 | ||
|
|
8523bdfbab | ||
|
|
204f40cd87 | ||
|
|
0d37be9f2e | ||
|
|
b012b2ce71 | ||
|
|
554ee6f02b | ||
|
|
a2d6ebb8b5 | ||
|
|
131e14f8e6 | ||
|
|
3c2c966fbc | ||
|
|
3d39f49e9e | ||
|
|
b674bb072a | ||
|
|
3a9eeb1d43 | ||
|
|
e4f0cb7f60 | ||
|
|
b38e571e27 | ||
|
|
080c690dc6 | ||
|
|
ccff80daf1 | ||
|
|
5d1c26c738 | ||
|
|
59fa135677 | ||
|
|
0082bd2189 | ||
|
|
9776ab1cf4 | ||
|
|
a15bdb752d | ||
|
|
8bfa39a59e | ||
|
|
3187219d39 | ||
|
|
94b0bc913e | ||
|
|
2643ba1674 | ||
|
|
a67f8c52a8 | ||
|
|
b0574bfb08 | ||
|
|
871b147aa5 | ||
|
|
fd5e5d9a32 | ||
|
|
60b643502a | ||
|
|
dc4412114b | ||
|
|
f6986fdd97 | ||
|
|
9a3e9cdd4f | ||
|
|
0b11e22887 | ||
|
|
ae73c5beee | ||
|
|
c2e92cc9a9 | ||
|
|
acdafccfac | ||
|
|
4d5983bf11 | ||
|
|
9ad43363e1 | ||
|
|
547ec2c7c5 | ||
|
|
9076bb84e8 | ||
|
|
e918223c9e | ||
|
|
11939ee7b1 | ||
|
|
fcb6eac4e2 | ||
|
|
7c3dacc875 | ||
|
|
e5c036a60d | ||
|
|
702465a88c | ||
|
|
953a33b4f7 | ||
|
|
c10d96d0c7 | ||
|
|
5230679525 | ||
|
|
beb3fde96d | ||
|
|
527a635155 | ||
|
|
c322c53b45 | ||
|
|
ab5c790b3d | ||
|
|
94a18018ae | ||
|
|
4c978ab78f | ||
|
|
2b8334018a | ||
|
|
50e47434bb | ||
|
|
18b63f4e05 | ||
|
|
2031f42396 | ||
|
|
14c49629b7 | ||
|
|
90d006b4c9 | ||
|
|
10b2d10fcc | ||
|
|
91180bc65b | ||
|
|
2cda46df2a | ||
|
|
1b6f99deb9 | ||
|
|
b0dbd40666 | ||
|
|
64cdc5f456 | ||
|
|
fdd0b28d2b | ||
|
|
860b099ec4 | ||
|
|
cf4cbe2f57 | ||
|
|
2cd7b0d188 | ||
|
|
9d4927029b | ||
|
|
5912d91abe | ||
|
|
dfe018b8ce | ||
|
|
d8ae5846cb | ||
|
|
3a1a818c49 | ||
|
|
246c095468 | ||
|
|
11fd5c3ff2 | ||
|
|
f9fdca0d6d | ||
|
|
a887c364f9 | ||
|
|
5208f2878e | ||
|
|
243ad6634a | ||
|
|
6e8329ef75 | ||
|
|
bcc713f4ae | ||
|
|
707ea5c48f | ||
|
|
3352eab759 | ||
|
|
7ad63f237a | ||
|
|
a57b2e5f87 | ||
|
|
f59477d0ac | ||
|
|
9635aee9d8 | ||
|
|
06d2af4e35 | ||
|
|
0cd2f3ca4a | ||
|
|
96eed422f9 | ||
|
|
7057be1b73 | ||
|
|
ae0b0ef229 | ||
|
|
4676389d31 | ||
|
|
39ac641497 | ||
|
|
a05961139c | ||
|
|
d97f76cd8b | ||
|
|
6c325d99e7 | ||
|
|
cc1c0b62a3 | ||
|
|
18f7591b38 | ||
|
|
2344332b03 | ||
|
|
a4ff54c148 | ||
|
|
5858aac8c3 | ||
|
|
5480caa3df | ||
|
|
d63a2ae439 | ||
|
|
b196c36dfa | ||
|
|
1ab73e5cd6 | ||
|
|
9443f2885c | ||
|
|
918c9981cf | ||
|
|
156818d1c4 | ||
|
|
ad2cc100d2 | ||
|
|
c3ac4384fa | ||
|
|
058eef0942 | ||
|
|
6a86386f60 | ||
|
|
4249528d0f | ||
|
|
6311bbbf02 | ||
|
|
9ee9bb4c0e | ||
|
|
c422a9f88e | ||
|
|
9685f43040 | ||
|
|
132fe68780 | ||
|
|
b950aba8a4 | ||
|
|
f319fe8a75 | ||
|
|
63f8a8940a | ||
|
|
eebf191692 | ||
|
|
3aaf4459d2 | ||
|
|
febc81d8a1 | ||
|
|
10f5fb73e0 | ||
|
|
5a9958a50d | ||
|
|
b1643482b7 | ||
|
|
7f0bc3d98d | ||
|
|
3a512b2a46 | ||
|
|
a30451dfe0 | ||
|
|
f1d69e47df | ||
|
|
514e27c20e | ||
|
|
c870eb1f13 | ||
|
|
2f4a5c6c41 | ||
|
|
7f7f7ef4f2 | ||
|
|
e7dba5afa0 | ||
|
|
7a82fb9c1a | ||
|
|
867465a6e3 | ||
|
|
fbe53bb8b9 | ||
|
|
034dbcae2f | ||
|
|
bdfe476f1a | ||
|
|
3ec48030f1 | ||
|
|
281974d9c7 | ||
|
|
1106a2504a | ||
|
|
34a4959e8a | ||
|
|
1869e1525e | ||
|
|
f6a1f732f6 | ||
|
|
b91fe96a36 | ||
|
|
3420834078 | ||
|
|
bb159c27a2 | ||
|
|
d48addf459 | ||
|
|
94125441af | ||
|
|
3f5c1dd537 | ||
|
|
736fc93df5 | ||
|
|
a739f7e02b | ||
|
|
538b5f5d3c | ||
|
|
74e5d005f7 | ||
|
|
85020318db | ||
|
|
5f7e089bd1 | ||
|
|
628cfe2296 | ||
|
|
9a49b84f27 | ||
|
|
1209a63c18 | ||
|
|
edcb29d4c6 | ||
|
|
7d9785ad79 | ||
|
|
134b8e417b | ||
|
|
ef3d712e42 | ||
|
|
d2f0c00d8f | ||
|
|
1dea81fd0c | ||
|
|
561edb80ac | ||
|
|
1a5755b03a | ||
|
|
975ed4ce10 | ||
|
|
7889a10846 | ||
|
|
618eb0c21d | ||
|
|
0081f07a6b | ||
|
|
8ba1966181 | ||
|
|
b35799b593 | ||
|
|
a827109ebf | ||
|
|
e40d1f105e | ||
|
|
b1f6110406 | ||
|
|
7255d25681 | ||
|
|
c5909e4672 | ||
|
|
047252d4fc | ||
|
|
fac4b4f3ae | ||
|
|
ab0a6b753c | ||
|
|
df5077f499 | ||
|
|
67245d98c9 | ||
|
|
d39681e98c | ||
|
|
ad59c54fdb | ||
|
|
d97e54b5cd | ||
|
|
e893caf3ad | ||
|
|
4bcdfc07ec | ||
|
|
b160d409f3 | ||
|
|
daef8d3b03 | ||
|
|
63833c9d61 | ||
|
|
f1412c032c | ||
|
|
f63b75241b | ||
|
|
51a37f885b | ||
|
|
532e8333f2 | ||
|
|
b63886ad6c | ||
|
|
4e200c57f7 | ||
|
|
87955a9751 | ||
|
|
c940d6b48e | ||
|
|
a4abdefa60 | ||
|
|
0c7d568244 | ||
|
|
00ba2d6da9 | ||
|
|
be38af728b | ||
|
|
131fe3a69f | ||
|
|
464fd60637 | ||
|
|
a4ca9800a4 | ||
|
|
68f6270f6a | ||
|
|
4ca68ff56a | ||
|
|
76e85018f0 | ||
|
|
ac6ebbf421 | ||
|
|
720b426f5e | ||
|
|
59fc020616 | ||
|
|
35f5ee4677 | ||
|
|
7a86121585 | ||
|
|
99a26defa2 | ||
|
|
2c1b6cd16f | ||
|
|
a2a6e9ad2e | ||
|
|
373c780fee | ||
|
|
cef4c14286 | ||
|
|
4139769131 | ||
|
|
bd706ecfd8 | ||
|
|
a042a4c366 | ||
|
|
96b3188c3e | ||
|
|
7cc51f3945 | ||
|
|
1285a90c5d | ||
|
|
bf08f746b3 | ||
|
|
cce77b8add | ||
|
|
45095b524f | ||
|
|
3ceb4d4685 | ||
|
|
99bef36c90 | ||
|
|
9194e094e6 | ||
|
|
f8a8538b04 | ||
|
|
0431201141 | ||
|
|
77e082c17c | ||
|
|
e9050b0148 | ||
|
|
0493a61741 | ||
|
|
b4087e7513 | ||
|
|
e5c1ce7640 | ||
|
|
7a698399c9 | ||
|
|
32324a8879 | ||
|
|
dff3e8b666 | ||
|
|
edefc6cedb | ||
|
|
c9a64030da | ||
|
|
7d79a49beb | ||
|
|
8a168cd33f | ||
|
|
e44c21dc75 | ||
|
|
4ec21f8d95 | ||
|
|
d19759afc8 | ||
|
|
b9ad4aa243 | ||
|
|
b026d186a6 | ||
|
|
5fc4b5a64b | ||
|
|
41f56969e1 | ||
|
|
f717c0f9c6 | ||
|
|
61ebfc79a1 | ||
|
|
0536fa3957 | ||
|
|
c0df6eab4e | ||
|
|
1c95e12aea | ||
|
|
74f66735c6 | ||
|
|
496c7880c8 | ||
|
|
a981ad6e1c | ||
|
|
ec62043a65 | ||
|
|
a9837ae8fe | ||
|
|
88c5c7fdf7 | ||
|
|
468d4cc6f6 | ||
|
|
2ba141a5c4 | ||
|
|
be67194cfb | ||
|
|
a9fe595823 | ||
|
|
c7d5c68b3b | ||
|
|
b0c2f75a3f | ||
|
|
35ccb222a8 | ||
|
|
5bf8c47587 | ||
|
|
b728e66282 | ||
|
|
d78d15215a | ||
|
|
43363c1167 | ||
|
|
7fbb96b0f0 | ||
|
|
3ae388d886 | ||
|
|
a034b3d218 | ||
|
|
5e9113a5c8 | ||
|
|
08b958876d | ||
|
|
e18069d45f | ||
|
|
3d29a981f7 | ||
|
|
825be64d6d | ||
|
|
1bc91e3ddf | ||
|
|
0af36c40a0 | ||
|
|
f6ff5086be | ||
|
|
ec33e42f2b | ||
|
|
84379445dd | ||
|
|
24eaa68269 | ||
|
|
906287be21 | ||
|
|
6a283eee89 | ||
|
|
398171a402 | ||
|
|
b0ffc6049a | ||
|
|
76b3f17fdc | ||
|
|
e6759fc469 | ||
|
|
0eec3e060b | ||
|
|
13c20c930a | ||
|
|
019d70e437 | ||
|
|
6be2e6ab2d | ||
|
|
97563f1457 | ||
|
|
369e6a009a | ||
|
|
407a6149cd | ||
|
|
2c97f18410 | ||
|
|
00d5abc157 | ||
|
|
40800bd728 | ||
|
|
bb2a10ba4a | ||
|
|
2dde5368db | ||
|
|
82dd3d711e | ||
|
|
fe6f1c67b3 | ||
|
|
8da3a97122 | ||
|
|
503a6eecc5 | ||
|
|
684c249d4b | ||
|
|
76a25f0283 | ||
|
|
4961d26e14 | ||
|
|
b40ebd5b42 | ||
|
|
8f74181c07 | ||
|
|
3cd1d72ab8 | ||
|
|
fd4d956476 | ||
|
|
3583aaef20 | ||
|
|
1e5dd1fc62 | ||
|
|
4508939020 | ||
|
|
5ab1687841 | ||
|
|
a9829c9624 | ||
|
|
d8941bc990 | ||
|
|
e263468389 | ||
|
|
d00a87a91f | ||
|
|
dabb8d7490 | ||
|
|
df9fb5131f | ||
|
|
7bc5da94ee | ||
|
|
50b945fba8 | ||
|
|
64cc3059c2 | ||
|
|
9834d80e92 | ||
|
|
b57f671617 | ||
|
|
653dacfa6f | ||
|
|
63c900d02f | ||
|
|
f52ea83b30 | ||
|
|
2ab6ac5d40 | ||
|
|
ee7cde1b03 | ||
|
|
1da56a0b44 | ||
|
|
cc6d0c00b7 | ||
|
|
e88c03a040 | ||
|
|
e84b1dd91b | ||
|
|
c1d5a7b094 | ||
|
|
9f2addc964 | ||
|
|
3a1fbcd448 | ||
|
|
df4bde2e67 | ||
|
|
70b887e43f | ||
|
|
4ae3ac0f6d | ||
|
|
41a16b2651 | ||
|
|
d610d74e62 | ||
|
|
1d6c72d001 | ||
|
|
6a20f3cb89 | ||
|
|
5bc5909194 | ||
|
|
76e4586e20 | ||
|
|
1902feaf6d | ||
|
|
670a2bfad0 | ||
|
|
d9fca6334d | ||
|
|
dd93fd30f1 | ||
|
|
9e76582ae6 | ||
|
|
6694e1dfc9 | ||
|
|
f9d2d3a7e2 | ||
|
|
45c4fff0ac | ||
|
|
58cc529c12 | ||
|
|
7e3c290a2d | ||
|
|
59f6d5cdf7 | ||
|
|
69562e1463 | ||
|
|
a9d91250f5 | ||
|
|
b8f1d01733 | ||
|
|
63393108e9 | ||
|
|
c0b196bd07 | ||
|
|
3b8675dc6a | ||
|
|
a8a134063f | ||
|
|
700a0996c4 | ||
|
|
c6937cf199 | ||
|
|
95936e4a0b | ||
|
|
b9fbf762bd | ||
|
|
67696f9d51 | ||
|
|
e45ccc9e8a | ||
|
|
20416d842e | ||
|
|
2414b00083 | ||
|
|
ced838f29f | ||
|
|
7295b6a10d | ||
|
|
7722162bf3 | ||
|
|
42634c0e3f | ||
|
|
634ef9b5a8 | ||
|
|
0ba330f3fe | ||
|
|
bad90e3471 | ||
|
|
5c610b2df5 | ||
|
|
0ee01346d0 | ||
|
|
d1e13f4b82 | ||
|
|
bbf7231bf6 | ||
|
|
61f82468c4 | ||
|
|
873fbf596c | ||
|
|
025857c9f2 | ||
|
|
ab642c615e | ||
|
|
f9be4f7448 | ||
|
|
1889822deb | ||
|
|
cab5ce9856 | ||
|
|
972e795d6b | ||
|
|
b4151b62eb | ||
|
|
fbc6ae07e4 | ||
|
|
06d322f9f7 | ||
|
|
4ca583cbe8 | ||
|
|
2bd9fd97bb | ||
|
|
328445f7c0 | ||
|
|
1e106844e8 | ||
|
|
6fc6fb1bc8 | ||
|
|
1e23316fb1 | ||
|
|
d1ed445298 | ||
|
|
86e5149ac6 | ||
|
|
61d8836c2d | ||
|
|
d10e5fc63f | ||
|
|
bed86d84d4 | ||
|
|
74bc3b3fd2 | ||
|
|
9d8f924fec | ||
|
|
6d40550bbf | ||
|
|
78e151d4ee | ||
|
|
ef63cb37b7 | ||
|
|
a015b1e539 | ||
|
|
f7b0618216 | ||
|
|
fe11de8e3c | ||
|
|
b1c11f8dd8 | ||
|
|
b500bb7da1 | ||
|
|
ed04f0ce5a | ||
|
|
0f802a6b52 | ||
|
|
59dd0a3f5c | ||
|
|
e618f833fd | ||
|
|
59178eca49 | ||
|
|
44055ba53f | ||
|
|
5e3e68f7f5 | ||
|
|
b150605da9 | ||
|
|
961e3210c7 | ||
|
|
ddafd44114 | ||
|
|
ca93a858fd | ||
|
|
96e2548240 | ||
|
|
8e17192ad1 | ||
|
|
819ad49b08 | ||
|
|
9164fa0ffb | ||
|
|
ea4db88dab | ||
|
|
ce74fbca98 | ||
|
|
38df9d3911 | ||
|
|
feb742e084 | ||
|
|
4d069460cd | ||
|
|
36a314779a | ||
|
|
0703c8d154 | ||
|
|
1fcc167070 | ||
|
|
3af7097f17 | ||
|
|
a5aeca4d49 | ||
|
|
b90ea83d2c | ||
|
|
bb5966f1b6 | ||
|
|
7766c82f6c | ||
|
|
9c1c946edc | ||
|
|
f89d9f6d99 | ||
|
|
4e10a0c2ef | ||
|
|
3aa8d41fcd | ||
|
|
be6aaec818 | ||
|
|
e2c1c7d380 | ||
|
|
60d56f0834 | ||
|
|
c41a155cfe | ||
|
|
9de92e730b | ||
|
|
9d6eca05dd | ||
|
|
0c2736399f | ||
|
|
a6db89c9e3 | ||
|
|
06bfe3335e | ||
|
|
911790ad16 | ||
|
|
3192a252cd | ||
|
|
809e6961d6 | ||
|
|
188f98eaa2 | ||
|
|
e67f16e5bb | ||
|
|
68fef349e5 | ||
|
|
38135a1792 | ||
|
|
f88c07af17 | ||
|
|
ec9f983f73 | ||
|
|
e1df64db3c | ||
|
|
b93ed8d3b3 | ||
|
|
c1b5670027 | ||
|
|
3e8e3374f9 | ||
|
|
04ddf91370 | ||
|
|
20cfc19ec4 | ||
|
|
6d8c608a59 | ||
|
|
953ac1b534 | ||
|
|
4ecc26d08f | ||
|
|
93163f6c07 | ||
|
|
44e03eae83 | ||
|
|
910bbe8400 | ||
|
|
d82df8154a | ||
|
|
9258b67097 | ||
|
|
aa85fff295 | ||
|
|
685047d664 | ||
|
|
27fe286a09 | ||
|
|
aa5c864dc1 | ||
|
|
9c60f128ee | ||
|
|
ad0a533afb | ||
|
|
500a40ab87 | ||
|
|
820f185085 | ||
|
|
ec92874cf4 | ||
|
|
3b3de4b189 | ||
|
|
148adb4e31 | ||
|
|
636b9ad8ce | ||
|
|
65e804db8d | ||
|
|
1661315cd0 | ||
|
|
7a1aff94d6 | ||
|
|
1329ec99a1 | ||
|
|
cf8d594a81 | ||
|
|
922a9d0f5c | ||
|
|
03b07270ee | ||
|
|
c3eae200db | ||
|
|
6a53dc9300 | ||
|
|
5edcfb9d91 | ||
|
|
161b5e5bfc | ||
|
|
5517dc7d4a | ||
|
|
5be7965b18 | ||
|
|
8537964e82 | ||
|
|
c1ef9bd9ee | ||
|
|
dcc2881960 | ||
|
|
3f19bd04eb | ||
|
|
fb91eed961 | ||
|
|
8145586764 | ||
|
|
36a5859344 | ||
|
|
2370ad6ff3 | ||
|
|
e0ac8a28cb | ||
|
|
dd0d33f21d | ||
|
|
8b4b4fc7ae | ||
|
|
0e55c4da6d | ||
|
|
5f53986d5e | ||
|
|
f71a3b7dc0 | ||
|
|
3a25879064 | ||
|
|
edd2cef835 | ||
|
|
625ad70272 | ||
|
|
44699efc8d | ||
|
|
f7fbbc6da3 | ||
|
|
b2ec898932 | ||
|
|
f7186bd223 | ||
|
|
d85880f199 | ||
|
|
446935fc72 | ||
|
|
5693ebeb87 | ||
|
|
478d57f2a1 | ||
|
|
04a242acfc | ||
|
|
68fcb018a9 | ||
|
|
106d603f67 | ||
|
|
92f8fa8d7c | ||
|
|
aab2375ff2 | ||
|
|
b71180ef47 | ||
|
|
f612b6ebdd | ||
|
|
2208eef8cf | ||
|
|
8289a22f03 | ||
|
|
7341b60272 | ||
|
|
1a491cca98 | ||
|
|
fa2908a2f9 | ||
|
|
c1bcf49207 | ||
|
|
dbf844592a | ||
|
|
94c0cd9300 | ||
|
|
480da489e3 | ||
|
|
df564909ff | ||
|
|
1382c71298 | ||
|
|
7c23582250 | ||
|
|
4a9fb0e17f | ||
|
|
40f1045261 | ||
|
|
9c61ad553a | ||
|
|
c98738d405 | ||
|
|
1c409b8a6b | ||
|
|
55d5b81360 | ||
|
|
a7fcf268cf | ||
|
|
4cb68f24b7 | ||
|
|
f742c7b22d | ||
|
|
c79042d0c9 | ||
|
|
d4bb268803 | ||
|
|
ecd7f894c1 | ||
|
|
b33e0f7970 | ||
|
|
479062e599 | ||
|
|
aa2dac145f | ||
|
|
20c1ee87ff | ||
|
|
882b70dcf1 | ||
|
|
388928722e | ||
|
|
0012f6f06d | ||
|
|
a3e3a38bad | ||
|
|
5f64c0b07f | ||
|
|
3434a089a3 | ||
|
|
fb05d4143e | ||
|
|
3f2417960c | ||
|
|
87bdc1bba6 | ||
|
|
705ae71f9f | ||
|
|
a7e7631ce8 | ||
|
|
c3c191ec6a | ||
|
|
ef64d303bf | ||
|
|
4e2630ef14 | ||
|
|
bc17db5c12 | ||
|
|
3844d75ed2 | ||
|
|
b1b15185eb | ||
|
|
08bfaa2caf | ||
|
|
8bdddd719d | ||
|
|
f50780300f | ||
|
|
e007a44315 | ||
|
|
8e97e38050 | ||
|
|
692bab1926 | ||
|
|
fd9c4d73b1 | ||
|
|
bca3d0c691 | ||
|
|
04566131e2 | ||
|
|
b3d02c1ed6 | ||
|
|
fd42b3e30f | ||
|
|
f36b333590 | ||
|
|
ba5910cb74 | ||
|
|
65dcb16d57 | ||
|
|
6894a51fef | ||
|
|
6210bde1de | ||
|
|
b5391c3ed2 | ||
|
|
e4c62c34b3 | ||
|
|
efc9649fa5 | ||
|
|
49aee82b6a | ||
|
|
af41069b50 | ||
|
|
18785550da | ||
|
|
f806995de3 | ||
|
|
497d55a640 | ||
|
|
8610ffe0ba | ||
|
|
5b50be2689 | ||
|
|
396ffef68c | ||
|
|
930cdce7a0 | ||
|
|
2a52f61e01 | ||
|
|
b512a23465 | ||
|
|
f91d419b7f | ||
|
|
b93ed9efbb | ||
|
|
5cce6a510e | ||
|
|
066ba7ece8 | ||
|
|
2014af1c0b | ||
|
|
5c50b5ff13 | ||
|
|
df2bcb267d | ||
|
|
70bd92bcb4 | ||
|
|
2ba43bede8 | ||
|
|
27710435b2 | ||
|
|
ce42bf7826 | ||
|
|
80afe88dad | ||
|
|
417f7cd877 | ||
|
|
7b97d1a3e4 | ||
|
|
2802b77148 | ||
|
|
df437cfc38 | ||
|
|
4a7e03cc79 | ||
|
|
86e3dba268 | ||
|
|
578348c015 | ||
|
|
f8991ba134 | ||
|
|
1535ae03b6 | ||
|
|
216a5b1343 | ||
|
|
bc05fe497c | ||
|
|
16c303bc28 | ||
|
|
0df10bcb1e | ||
|
|
4e83cef189 | ||
|
|
a47cd877f8 | ||
|
|
35bd977e19 | ||
|
|
11c0c0d52b | ||
|
|
f7a96d5aa0 | ||
|
|
6be49dae3a | ||
|
|
28d3356467 | ||
|
|
5ca97b6d70 | ||
|
|
516de93cd7 | ||
|
|
50817cec45 | ||
|
|
fc45d97498 | ||
|
|
2314806d82 | ||
|
|
2d9aa7a94a | ||
|
|
fb479d7d79 | ||
|
|
d047424b98 | ||
|
|
7fd2ef7e8a | ||
|
|
522ab17902 | ||
|
|
562f82580e | ||
|
|
85ffccbdbf | ||
|
|
4118f25d75 | ||
|
|
c8c0c8431b | ||
|
|
a6edd13317 | ||
|
|
e0bac57c14 | ||
|
|
ae14ff2f95 | ||
|
|
95d5fc4a58 | ||
|
|
91832e2ae3 | ||
|
|
0837f9adbc | ||
|
|
ac0f9a020a | ||
|
|
26c9a2597d | ||
|
|
77e98bbb2d | ||
|
|
81781c7d0e | ||
|
|
7afe119d72 | ||
|
|
f353011d96 | ||
|
|
1f12d253fd | ||
|
|
78869a9004 | ||
|
|
e21b8f977e | ||
|
|
2450d7afdc | ||
|
|
02693836b2 | ||
|
|
045c20d0db | ||
|
|
e3e499e00d | ||
|
|
fdb479ef49 | ||
|
|
80edb0e808 | ||
|
|
e10f325843 | ||
|
|
e850e39e80 | ||
|
|
6d5b066ae6 | ||
|
|
57330054de | ||
|
|
51f96686f8 | ||
|
|
f7d264eff7 | ||
|
|
b133cfa2a8 | ||
|
|
110b3476a8 | ||
|
|
3f32c4488e | ||
|
|
df2b1b45a4 | ||
|
|
9fc31ac2ae | ||
|
|
5b14810626 | ||
|
|
f826d117f8 | ||
|
|
97103a8846 | ||
|
|
e26b29c5eb | ||
|
|
162f34a6c4 | ||
|
|
537d3421a8 | ||
|
|
52f014b195 | ||
|
|
93715790ae | ||
|
|
040a321b4e | ||
|
|
ec49751f25 | ||
|
|
df7d49a8b1 | ||
|
|
6653c074fa | ||
|
|
6a51097e1d | ||
|
|
08c5248757 | ||
|
|
323d160d61 | ||
|
|
625e62ef9d | ||
|
|
747356ff09 | ||
|
|
4277ff1c52 | ||
|
|
7a303e5b45 | ||
|
|
e4b55590fc | ||
|
|
6ec18e8942 | ||
|
|
0db6a80044 | ||
|
|
0bac17d6a6 | ||
|
|
9341c1891f | ||
|
|
e8da08a2ea | ||
|
|
144cece04d | ||
|
|
aadea6d1ff | ||
|
|
9cba937fe7 | ||
|
|
4801147663 | ||
|
|
3cdd624b72 | ||
|
|
e5b461f5b8 | ||
|
|
4ce1280686 | ||
|
|
e74135c386 | ||
|
|
0e31114ea0 | ||
|
|
594834e66c | ||
|
|
8eb482024d | ||
|
|
cfe86a31d7 | ||
|
|
91ab421b65 | ||
|
|
6863041251 | ||
|
|
e7703c6f48 | ||
|
|
3af88326f9 | ||
|
|
0162933ce7 | ||
|
|
f0897cb435 | ||
|
|
3b9affe056 | ||
|
|
be7ee3e447 | ||
|
|
4fedb6be0b | ||
|
|
a4c2061113 | ||
|
|
b80a928fec | ||
|
|
9ec0ce48e2 | ||
|
|
54df71b900 | ||
|
|
984bcc8885 | ||
|
|
2769ee3635 | ||
|
|
09c018fa13 | ||
|
|
6f3ed48a3b | ||
|
|
904648425f | ||
|
|
dbf79e5856 | ||
|
|
b073167a9e | ||
|
|
f0dae8f1c6 | ||
|
|
1123e6f1e4 | ||
|
|
4e56907919 | ||
|
|
244edf67e2 | ||
|
|
633c277228 | ||
|
|
38e5804b5b | ||
|
|
f2b7c0483c | ||
|
|
4fe865e94e | ||
|
|
f546d33f40 | ||
|
|
8bd2f64024 | ||
|
|
938f40d02d | ||
|
|
d12843664d | ||
|
|
d04001a56d | ||
|
|
247be4ce44 | ||
|
|
866c21a624 | ||
|
|
c4cbb1db42 | ||
|
|
b72302e201 | ||
|
|
f82a323508 | ||
|
|
bb34cdea2c | ||
|
|
c0d7235cba | ||
|
|
09d4d56304 | ||
|
|
6dad9456e3 | ||
|
|
f9c0f76ada | ||
|
|
c28ef89a78 | ||
|
|
2201a3ad0f | ||
|
|
58d70ace8a | ||
|
|
abe05db277 | ||
|
|
f1924a003a | ||
|
|
eeeac1a627 | ||
|
|
dbcfab3bd8 | ||
|
|
b4c7c0446c | ||
|
|
2b5bb4e121 | ||
|
|
591242c76c | ||
|
|
59450a4656 | ||
|
|
2f7c306c9d | ||
|
|
515adcaac3 | ||
|
|
af4f8ef0dd | ||
|
|
2b9973d374 | ||
|
|
ca886c2791 | ||
|
|
91e0af0944 | ||
|
|
e205129943 | ||
|
|
0b17298963 | ||
|
|
8b704ff483 | ||
|
|
3dd4700ce4 | ||
|
|
7f7a3c589b | ||
|
|
3930fd739a | ||
|
|
0ff2f9783d | ||
|
|
9a18483482 | ||
|
|
c92f1c44a6 | ||
|
|
9ba06ec07e | ||
|
|
0feb865ef0 | ||
|
|
1475e9a507 | ||
|
|
6236b4a5ab | ||
|
|
93c123633e | ||
|
|
c03c32d01b | ||
|
|
c6595afb01 | ||
|
|
94b4a0f93c | ||
|
|
9e01afc1da | ||
|
|
6331054678 | ||
|
|
f21468c175 | ||
|
|
496a81393b | ||
|
|
9eb17fce00 | ||
|
|
3126672fcb | ||
|
|
c22cf007d1 | ||
|
|
85d55d1af5 | ||
|
|
c906a616f8 | ||
|
|
e502fe2921 | ||
|
|
2c915af2b4 | ||
|
|
52fc41cfa5 | ||
|
|
bd7fee0a88 | ||
|
|
6d334f2438 | ||
|
|
60d5d942c6 | ||
|
|
d68fa54e55 | ||
|
|
85c483ca9a | ||
|
|
0145b5abee | ||
|
|
3733dca6f1 | ||
|
|
0930c1ff73 | ||
|
|
e5b2973403 | ||
|
|
fb60881aa7 | ||
|
|
2cac29d7d1 | ||
|
|
26ef7bcabd | ||
|
|
fc8af37bd5 | ||
|
|
20cb26fb05 | ||
|
|
eb44015b74 | ||
|
|
333eecae77 | ||
|
|
aea35a2021 | ||
|
|
ab062f35b1 | ||
|
|
d5f82da73c | ||
|
|
23e84c2b59 | ||
|
|
518dd30fb2 | ||
|
|
0ef82437ca | ||
|
|
5f8129d65b | ||
|
|
6d13b43593 | ||
|
|
5d0a1a6fb5 | ||
|
|
fcfd494747 | ||
|
|
5dd5bfb2c7 | ||
|
|
797244b845 | ||
|
|
2d160aeacd | ||
|
|
c9a50da6f9 | ||
|
|
9347e136a4 | ||
|
|
9b08d0a38c | ||
|
|
dc4f17cb4f | ||
|
|
8d6f7db67b | ||
|
|
9525f2d7ec | ||
|
|
e0e814f38a | ||
|
|
787d7600be | ||
|
|
a9cda4fdb2 | ||
|
|
a3b007b462 | ||
|
|
2247f21db8 | ||
|
|
f672af1a09 | ||
|
|
476adb035a | ||
|
|
b4bf529179 | ||
|
|
ac5299a00b |
@@ -1,10 +0,0 @@
|
||||
root=true
|
||||
|
||||
[*.{adoc,bat,groovy,html,java,js,jsp,kt,kts,md,properties,py,rb,sh,sql,svg,txt,xml,xsd}]
|
||||
charset = utf-8
|
||||
|
||||
[*.{groovy,java,kt,kts,xml,xsd}]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
continuation_indent_size = 8
|
||||
end_of_line = lf
|
||||
4
.gitattributes
vendored
@@ -1,4 +0,0 @@
|
||||
*.css linguist-language=java
|
||||
*.less linguist-language=java
|
||||
*.js linguist-language=java
|
||||
*.html linguist-language=java
|
||||
2
.gitignore
vendored
@@ -4,6 +4,8 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
|
||||
.flattened-pom.xml
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
|
||||
BIN
.image/Java监控.jpg
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
.image/MySQL.jpg
Normal file
|
After Width: | Height: | Size: 142 KiB |
BIN
.image/OA请假-列表.jpg
Normal file
|
After Width: | Height: | Size: 152 KiB |
BIN
.image/OA请假-发起.jpg
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
.image/OA请假-详情.jpg
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
.image/Redis.jpg
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
.image/admin-uniapp/01.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
.image/admin-uniapp/02.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
.image/admin-uniapp/03.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
.image/admin-uniapp/04.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
.image/admin-uniapp/05.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
.image/admin-uniapp/06.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
.image/admin-uniapp/07.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
.image/admin-uniapp/08.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
.image/admin-uniapp/09.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
.image/common/ai-feature.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
.image/common/ai-preview.gif
Normal file
|
After Width: | Height: | Size: 348 KiB |
BIN
.image/common/bpm-feature.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
.image/common/crm-feature.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
.image/common/erp-feature.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
.image/common/infra-feature.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
.image/common/mall-feature.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
.image/common/mall-preview.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
BIN
.image/common/project-vs.png
Normal file
|
After Width: | Height: | Size: 139 KiB |
BIN
.image/common/ruoyi-vue-pro-architecture.png
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
.image/common/ruoyi-vue-pro-biz.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
.image/common/system-feature.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
.image/common/yudao-cloud-architecture.png
Normal file
|
After Width: | Height: | Size: 201 KiB |
BIN
.image/common/yudao-roadmap.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
.image/个人中心.jpg
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
.image/代码生成.jpg
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
.image/令牌管理.jpg
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
.image/任务列表-审批.jpg
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
.image/任务列表-已办.jpg
Normal file
|
After Width: | Height: | Size: 160 KiB |
BIN
.image/任务列表-待办.jpg
Normal file
|
After Width: | Height: | Size: 150 KiB |
BIN
.image/任务日志.jpg
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
.image/商户信息.jpg
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
.image/在线用户.jpg
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
.image/大屏设计器-列表.jpg
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
.image/大屏设计器-编辑.jpg
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
.image/大屏设计器-预览.jpg
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
.image/字典数据.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
.image/字典类型.jpg
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
.image/定时任务.jpg
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
.image/岗位管理.jpg
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
.image/工作流设计器-bpmn.jpg
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
.image/工作流设计器-simple.jpg
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
.image/应用信息-列表.jpg
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
.image/应用信息-编辑.jpg
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
.image/应用管理.jpg
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
.image/我的流程-列表.jpg
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
.image/我的流程-发起.jpg
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
.image/我的流程-详情.jpg
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
.image/报表设计器-图形报表.jpg
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
.image/报表设计器-打印设计.jpg
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
.image/报表设计器-数据报表.jpg
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
.image/操作日志.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
.image/支付订单.jpg
Normal file
|
After Width: | Height: | Size: 208 KiB |
BIN
.image/敏感词.jpg
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
.image/数据库文档.jpg
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
.image/文件管理.jpg
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
.image/文件管理2.jpg
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
.image/文件配置.jpg
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
.image/日志中心.jpg
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
.image/流程模型-列表.jpg
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
.image/流程模型-定义.jpg
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
.image/流程模型-设计.jpg
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
.image/流程表单.jpg
Normal file
|
After Width: | Height: | Size: 148 KiB |
BIN
.image/生成效果.jpg
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
.image/用户分组.jpg
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
.image/用户管理.jpg
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
.image/登录.jpg
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
.image/登录日志.jpg
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
.image/短信日志.jpg
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
.image/短信模板.jpg
Normal file
|
After Width: | Height: | Size: 248 KiB |
BIN
.image/短信渠道.jpg
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
.image/租户套餐.png
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
.image/租户管理.jpg
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
.image/系统接口.jpg
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
.image/菜单管理.jpg
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
.image/表单构建.jpg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
.image/角色管理.jpg
Normal file
|
After Width: | Height: | Size: 85 KiB |
BIN
.image/访问日志.jpg
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
.image/退款订单.jpg
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
.image/通知公告.jpg
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
.image/部门管理.jpg
Normal file
|
After Width: | Height: | Size: 109 KiB |
BIN
.image/配置管理.jpg
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
.image/链路追踪.jpg
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
.image/错误日志.jpg
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
.image/错误码管理.jpg
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
.image/首页.jpg
Normal file
|
After Width: | Height: | Size: 62 KiB |
408
README.md
@@ -1,4 +1,11 @@
|
||||
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!**
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/Spring%20Cloud-2021-blue.svg" alt="Coverage Status">
|
||||
<img src="https://img.shields.io/badge/Spring%20Boot-2.7.18-blue.svg" alt="Downloads">
|
||||
<img src="https://img.shields.io/badge/Vue-3.2-blue.svg" alt="Downloads">
|
||||
<img src="https://img.shields.io/github/license/YunaiV/yudao-cloud" alt="Downloads" />
|
||||
</p>
|
||||
|
||||
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
|
||||
|
||||
**「我喜欢写代码,乐此不疲」**
|
||||
**「我喜欢做开源,以此为乐」**
|
||||
@@ -7,12 +14,28 @@
|
||||
|
||||
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
|
||||
|
||||
可参考 [《迁移文档》](https://cloud.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】
|
||||
|
||||
## 🐶 新手必读
|
||||
|
||||
* 演示地址:<http://dashboard.yudao.iocoder.cn>
|
||||
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
|
||||
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
|
||||
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
|
||||
* 启动文档:<https://cloud.iocoder.cn/quick-start/>
|
||||
* 视频教程:<https://cloud.iocoder.cn/video/>
|
||||
|
||||
## 🐰 版本说明
|
||||
|
||||
| 版本 | JDK 8 + Spring Boot 2.7 | JDK 17/21 + Spring Boot 3.2 |
|
||||
|-----------------------------------------------------------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
|
||||
| 【完整版】[yudao-cloud](https://gitee.com/zhijiantianya/yudao-cloud) | [`master`](https://gitee.com/zhijiantianya/yudao-cloud/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/zhijiantianya/yudao-cloud/tree/master-jdk17/) 分支 |
|
||||
| 【精简版】[yudao-cloud-mini](https://gitee.com/yudaocode/yudao-cloud-mini) | [`master`](https://gitee.com/yudaocode/yudao-cloud-mini/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/yudaocode/yudao-cloud-mini/tree/master-jdk17/) 分支 |
|
||||
|
||||
* 【完整版】:包括系统功能、基础设施、会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能
|
||||
* 【精简版】:只包括系统功能、基础设施功能,不包括会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能
|
||||
|
||||
可参考 [《迁移文档》](https://cloud.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】
|
||||
|
||||
## 🐯 平台简介
|
||||
|
||||
**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。
|
||||
@@ -21,30 +44,32 @@
|
||||
>
|
||||
> 😜 给项目点点 Star 吧,这对我们真的很重要!
|
||||
|
||||

|
||||

|
||||
|
||||
* 管理后台的 Vue3 版本采用 [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin) ,Vue2 版本采用 [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
|
||||
* 管理后台的移动端采用 [uni-app](https://github.com/dcloudio/uni-app) 方案,一份代码多终端适配,同时支持 APP、小程序、H5!
|
||||
* 后端采用 Spring Cloud Alibaba 微服务架构,注册中心 + 配置中心 Nacos,消息队列 RocketMQ,定时任务 XXL-Job,服务保障 Sentinel,服务网关 Gateway,分布式事务 Seata
|
||||
* Java 后端:`master` 分支为 JDK 8 + Spring Boot 2.7,`master-jdk17` 分支为 JDK 17/21 + Spring Boot 3.2
|
||||
* 管理后台的电脑端:Vue3 提供 [element-plus](https://gitee.com/yudaocode/yudao-ui-admin-vue3)、[vben(ant-design-vue)](https://gitee.com/yudaocode/yudao-ui-admin-vben) 两个版本,Vue2 提供 [element-ui](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-ui-admin) 版本
|
||||
* 管理后台的移动端:采用 [uni-app](https://github.com/dcloudio/uni-app) 方案,一份代码多终端适配,同时支持 APP、小程序、H5!
|
||||
* 后端采用 Spring Cloud Alibaba 微服务架构,注册中心 + 配置中心 Nacos,定时任务 XXL-Job,服务保障 Sentinel,服务网关 Gateway,分布式事务 Seata
|
||||
* 数据库可使用 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、国产达梦 DM、TiDB 等,基于 MyBatis Plus、Redis + Redisson 操作
|
||||
* 消息队列可使用 Event、Redis、RabbitMQ、Kafka、RocketMQ 等
|
||||
* 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统,支持 SSO 单点登录
|
||||
* 支持加载动态权限菜单,按钮级别权限控制,本地缓存提升性能
|
||||
* 支持 SaaS 多租户系统,可自定义每个租户的权限,提供透明化的多租户底层封装
|
||||
* 支持加载动态权限菜单,按钮级别权限控制,Redis 缓存提升性能
|
||||
* 支持 SaaS 多租户,可自定义每个租户的权限,提供透明化的多租户底层封装
|
||||
* 工作流使用 Flowable,支持动态表单、在线设计流程、会签 / 或签、多种任务分配方式
|
||||
* 高效率开发,使用代码生成器可以一键生成前后端代码 + 单元测试 + Swagger 接口文档 + Validator 参数校验
|
||||
* 高效率开发,使用代码生成器可以一键生成 Java、Vue 前后端代码、SQL 脚本、接口文档,支持单表、树表、主子表
|
||||
* 实时通信,采用 Spring WebSocket 实现,内置 Token 身份校验,支持 WebSocket 集群
|
||||
* 集成微信小程序、微信公众号、企业微信、钉钉等三方登陆,集成支付宝、微信等支付与退款
|
||||
* 集成阿里云、腾讯云等短信渠道,集成 MinIO、阿里云、腾讯云、七牛云等云存储服务
|
||||
* 集成报表设计器、大屏设计器,通过拖拽即可生成酷炫的报表与大屏
|
||||
|
||||
## 🐳 项目关系
|
||||
|
||||

|
||||

|
||||
|
||||
三个项目的功能对比,可见社区共同整理的 [国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn) 表格。
|
||||
|
||||
### 后端项目
|
||||
|
||||
|
||||
| 项目 | Star | 简介 |
|
||||
|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
|
||||
| [ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro) | [](https://gitee.com/zhijiantianya/ruoyi-vue-pro) [](https://github.com/YunaiV/ruoyi-vue-pro) | 基于 Spring Boot 多模块架构 |
|
||||
@@ -53,14 +78,14 @@
|
||||
|
||||
### 前端项目
|
||||
|
||||
| 项目 | Star | 简介 |
|
||||
|----------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|
|
||||
| [yudao-ui-admin-vue3](https://gitee.com/yudaocode/yudao-ui-admin-vue3) | [](https://gitee.com/yudaocode/yudao-ui-admin-vue3) [](https://github.com/yudaocode/yudao-ui-admin-vue3) | 基于 Vue3 + element-plus 实现的管理后台 |
|
||||
| [yudao-ui-admin-vben](https://gitee.com/yudaocode/yudao-ui-admin-vben) | [](https://gitee.com/yudaocode/yudao-ui-admin-vben) [](https://github.com/yudaocode/yudao-ui-admin-vben) | 基于 Vue3 + vben(ant-design-vue) 实现的管理后台 |
|
||||
| [yudao-ui-admin](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-ui-admin) | [](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-ui-admin) [](https://github.com/YunaiV/ruoyi-vue-pro/tree/master/yudao-ui-admin) | 基于 Vue2 + element-ui 实现的管理后台 |
|
||||
| [yudao-ui-admin-uniapp](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-ui-admin-uniapp) | [](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-ui-admin-uniapp) [](https://github.com/YunaiV/ruoyi-vue-pro/tree/master/yudao-ui-admin-uniapp) | 基于 uni-app + uni-ui 实现的管理后台的小程序 |
|
||||
| [yudao-ui-go-view](https://gitee.com/yudaocode/yudao-ui-go-view) | [](https://gitee.com/yudaocode/yudao-ui-go-view) [](https://github.com/yudaocode/yudao-ui-go-view) | 基于 Vue3 + naive-ui 实现的大屏报表 |
|
||||
| [yudao-ui-app](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-ui-app) | [](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-ui-app) [](https://github.com/YunaiV/ruoyi-vue-pro/tree/master/yudao-ui-app) | 基于 uni-app + uview 实现的用户 App |
|
||||
| 项目 | Star | 简介 |
|
||||
|----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|
|
||||
| [yudao-ui-admin-vue3](https://gitee.com/yudaocode/yudao-ui-admin-vue3) | [](https://gitee.com/yudaocode/yudao-ui-admin-vue3) [](https://github.com/yudaocode/yudao-ui-admin-vue3) | 基于 Vue3 + element-plus 实现的管理后台 |
|
||||
| [yudao-ui-admin-vben](https://gitee.com/yudaocode/yudao-ui-admin-vben) | [](https://gitee.com/yudaocode/yudao-ui-admin-vben) [](https://github.com/yudaocode/yudao-ui-admin-vben) | 基于 Vue3 + vben(ant-design-vue) 实现的管理后台 |
|
||||
| [yudao-mall-uniapp](https://gitee.com/yudaocode/yudao-mall-uniapp) | [](https://gitee.com/yudaocode/yudao-mall-uniapp) [](https://github.com/yudaocode/yudao-mall-uniapp) | 基于 uni-app 实现的商城小程序 |
|
||||
| [yudao-ui-admin-vue2](https://gitee.com/yudaocode/yudao-ui-admin-vue2) | [](https://gitee.com/yudaocode/yudao-ui-admin-vue2) [](https://github.com/yudaocode/yudao-ui-admin-vue2) | 基于 Vue2 + element-ui 实现的管理后台 |
|
||||
| [yudao-ui-admin-uniapp](https://gitee.com/yudaocode/yudao-ui-admin-uniapp) | [](https://gitee.com/yudaocode/yudao-ui-admin-uniapp) [](https://github.com/yudaocode/yudao-ui-admin-uniapp) | 基于 Vue2 + element-ui 实现的管理后台 |
|
||||
| [yudao-ui-go-view](https://gitee.com/yudaocode/yudao-ui-go-view) | [](https://gitee.com/yudaocode/yudao-ui-go-view) [](https://github.com/yudaocode/yudao-ui-go-view) | 基于 Vue3 + naive-ui 实现的大屏报表 |
|
||||
|
||||
## 😎 开源协议
|
||||
|
||||
@@ -70,9 +95,9 @@
|
||||
|
||||
② 代码全部开源,不会像其他项目一样,只开源部分代码,让你无法了解整个项目的架构设计。[国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn)
|
||||
|
||||

|
||||

|
||||
|
||||
③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,57000 行 Java 代码,22000 行代码注释。
|
||||
③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,113770 行 Java 代码,42462 行代码注释。
|
||||
|
||||
## 🤝 项目外包
|
||||
|
||||
@@ -86,16 +111,11 @@
|
||||
|
||||
系统内置多种多种业务功能,可以用于快速你的业务系统:
|
||||
|
||||

|
||||

|
||||
|
||||
* 系统功能
|
||||
* 基础设施
|
||||
* 工作流程
|
||||
* 支付系统
|
||||
* 会员中心
|
||||
* 数据报表
|
||||
* 商城系统
|
||||
* 微信公众号
|
||||
* 通用模块(必选):系统功能、基础设施
|
||||
* 通用模块(可选):工作流程、支付系统、数据报表、会员中心
|
||||
* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型
|
||||
|
||||
> 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。
|
||||
>
|
||||
@@ -128,195 +148,253 @@
|
||||
| 🚀 | 应用管理 | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 |
|
||||
| 🚀 | 地区管理 | 展示省份、城市、区镇等城市信息,支持 IP 对应城市 |
|
||||
|
||||

|
||||
|
||||
### 工作流程
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|-----|-------|----------------------------------------|
|
||||
| 🚀 | 流程模型 | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 |
|
||||
| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 |
|
||||
| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 |
|
||||
| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 |
|
||||
| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作 |
|
||||
| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,未来会支持回退操作 |
|
||||
| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 |
|
||||

|
||||
|
||||
基于 Flowable 构建,可支持信创(国产)数据库,满足中国特色流程操作:
|
||||
|
||||
| BPMN 设计器 | 钉钉/飞书设计器 |
|
||||
|------------------------------|--------------------------------|
|
||||
|  |  |
|
||||
|
||||
> 历经头部企业生产验证,工作流引擎须标配仿钉钉/飞书 + BPMN 双设计器!!!
|
||||
>
|
||||
> 前者支持轻量配置简单流程,后者实现复杂场景深度编排
|
||||
|
||||
| 功能列表 | 功能描述 | 是否完成 |
|
||||
|------------|-------------------------------------------------------------------------------------|------|
|
||||
| SIMPLE 设计器 | 仿钉钉/飞书设计器,支持拖拽搭建表单流程,10 分钟快速完成审批流程配置 | ✅ |
|
||||
| BPMN 设计器 | 基于 BPMN 标准开发,适配复杂业务场景,满足多层级审批及流程自动化需求 | ✅ |
|
||||
| 会签 | 同一个审批节点设置多个人(如 A、B、C 三人,三人会同时收到待办任务),需全部同意之后,审批才可到下一审批节点 | ✅ |
|
||||
| 或签 | 同一个审批节点设置多个人,任意一个人处理后,就能进入下一个节点 | ✅ |
|
||||
| 依次审批 | (顺序会签)同一个审批节点设置多个人(如 A、B、C 三人),三人按顺序依次收到待办,即 A 先审批,A 提交后 B 才能审批,需全部同意之后,审批才可到下一审批节点 | ✅ |
|
||||
| 抄送 | 将审批结果通知给抄送人,同一个审批默认排重,不重复抄送给同一人 | ✅ |
|
||||
| 驳回 | (退回)将审批重置发送给某节点,重新审批。可驳回至发起人、上一节点、任意节点 | ✅ |
|
||||
| 转办 | A 转给其 B 审批,B 审批后,进入下一节点 | ✅ |
|
||||
| 委派 | A 转给其 B 审批,B 审批后,转给 A,A 继续审批后进入下一节点 | ✅ |
|
||||
| 加签 | 允许当前审批人根据需要,自行增加当前节点的审批人,支持向前、向后加签 | ✅ |
|
||||
| 减签 | (取消加签)在当前审批人操作之前,减少审批人 | ✅ |
|
||||
| 撤销 | (取消流程)流程发起人,可以对流程进行撤销处理 | ✅ |
|
||||
| 终止 | 系统管理员,在任意节点终止流程实例 | ✅ |
|
||||
| 表单权限 | 支持拖拉拽配置表单,每个审批节点可配置只读、编辑、隐藏权限 | ✅ |
|
||||
| 超时审批 | 配置超时审批时间,超时后自动触发审批通过、不通过、驳回等操作 | ✅ |
|
||||
| 自动提醒 | 配置提醒时间,到达时间后自动触发短信、邮箱、站内信等通知提醒,支持自定义重复提醒频次 | ✅ |
|
||||
| 父子流程 | 主流程设置子流程节点,子流程节点会自动触发子流程。子流程结束后,主流程才会执行(继续往下下执行),支持同步子流程、异步子流程 | ✅ |
|
||||
| 条件分支 | (排它分支)用于在流程中实现决策,即根据条件选择一个分支执行 | ✅ |
|
||||
| 并行分支 | 允许将流程分成多条分支,不进行条件判断,所有分支都会执行 | ✅ |
|
||||
| 包容分支 | (条件分支 + 并行分支的结合体)允许基于条件选择多条分支执行,但如果没有任何一个分支满足条件,则可以选择默认分支 | ✅ |
|
||||
| 路由分支 | 根据条件选择一个分支执行(重定向到指定配置节点),也可以选择默认分支执行(继续往下执行) | ✅ |
|
||||
| 触发节点 | 执行到该节点,触发 HTTP 请求、HTTP 回调、更新数据、删除数据等 | ✅ |
|
||||
| 延迟节点 | 执行到该节点,审批等待一段时间再执行,支持固定时长、固定日期等 | ✅ |
|
||||
| 拓展设置 | 流程前置/后置通知,节点(任务)前置、后置通知,流程报表,自动审批去重,自定流程编号、标题、摘要,流程报表等 | ✅ |
|
||||
|
||||
### 支付系统
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|-----|------|---------------------------|
|
||||
| 🚀 | 商户信息 | 管理商户信息,支持 Saas 场景下的多商户功能 |
|
||||
| 🚀 | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 |
|
||||
| 🚀 | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单 |
|
||||
| 🚀 | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单 |
|
||||
|
||||
ps:核心功能已经实现,正在对接微信小程序中...
|
||||
| 🚀 | 回调通知 | 查看支付回调业务的【支付】【退款】的通知结果 |
|
||||
| 🚀 | 接入示例 | 提供接入支付系统的【支付】【退款】的功能实战 |
|
||||
|
||||
### 基础设施
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|-----|----------|----------------------------------------------|
|
||||
| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 |
|
||||
| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |
|
||||
| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |
|
||||
| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |
|
||||
| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
|
||||
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
|
||||
| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 |
|
||||
| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
|
||||
| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |
|
||||
| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
|
||||
| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 |
|
||||
| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |
|
||||
| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 |
|
||||
| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 |
|
||||
| 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 |
|
||||
| 🚀 | 幂等组件 | 基于 Redis 实现幂等组件,解决重复请求问题 |
|
||||
| 🚀 | 服务保障 | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 |
|
||||
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
|
||||
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
|
||||
| | 功能 | 描述 |
|
||||
|-----|-----------|----------------------------------------------|
|
||||
| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 |
|
||||
| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |
|
||||
| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |
|
||||
| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |
|
||||
| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
|
||||
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
|
||||
| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 |
|
||||
| 🚀 | WebSocket | 提供 WebSocket 接入示例,支持一对一、一对多发送方式 |
|
||||
| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
|
||||
| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |
|
||||
| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
|
||||
| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 |
|
||||
| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |
|
||||
| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 |
|
||||
| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 |
|
||||
| 🚀 | 服务保障 | 基于 Redis 实现分布式锁、幂等、限流功能,满足高并发场景 |
|
||||
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
|
||||
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
|
||||
|
||||

|
||||
|
||||
### 数据报表
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|-----|----------|----------------------------------------------|
|
||||
| 🚀 | 报表设计器 | 支持数据报表、图形报表、打印设计等 |
|
||||
| | 功能 | 描述 |
|
||||
|-----|-------|--------------------|
|
||||
| 🚀 | 报表设计器 | 支持数据报表、图形报表、打印设计等 |
|
||||
| 🚀 | 大屏设计器 | 拖拽生成数据大屏,内置几十种图表组件 |
|
||||
|
||||
### 微信公众号
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|-----|--------|-------------------------------|
|
||||
| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 |
|
||||
| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 |
|
||||
| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 |
|
||||
| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 |
|
||||
| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 |
|
||||
| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 |
|
||||
| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 |
|
||||
| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 |
|
||||
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 |
|
||||
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 |
|
||||
| | 功能 | 描述 |
|
||||
|----|--------|-------------------------------|
|
||||
| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 |
|
||||
| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 |
|
||||
| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 |
|
||||
| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 |
|
||||
| 🚀 | 模版消息 | 配置和发送模版消息,用于向粉丝推送通知类消息 |
|
||||
| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 |
|
||||
| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 |
|
||||
| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 |
|
||||
| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 |
|
||||
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 |
|
||||
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 |
|
||||
|
||||
### 商城系统
|
||||
|
||||
建设中...
|
||||
演示地址:<https://cloud.iocoder.cn/mall-preview/>
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
### 会员中心
|
||||
|
||||
和「商城系统」一起开发
|
||||
| | 功能 | 描述 |
|
||||
|-----|------|----------------------------------|
|
||||
| 🚀 | 会员管理 | 会员是 C 端的消费者,该功能用于会员的搜索与管理 |
|
||||
| 🚀 | 会员标签 | 对会员的标签进行创建、查询、修改、删除等操作 |
|
||||
| 🚀 | 会员等级 | 对会员的等级、成长值进行管理,可用于订单折扣等会员权益 |
|
||||
| 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 |
|
||||
| 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 |
|
||||
|
||||
### ERP 系统
|
||||
|
||||
演示地址:<https://cloud.iocoder.cn/erp-preview/>
|
||||
|
||||

|
||||
|
||||
### CRM 系统
|
||||
|
||||
演示地址:<https://cloud.iocoder.cn/crm-preview/>
|
||||
|
||||

|
||||
|
||||
### AI 大模型
|
||||
|
||||
演示地址:<https://cloud.iocoder.cn/ai-preview/>
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 🐨 技术栈
|
||||
|
||||
### 微服务
|
||||
|
||||
| 项目 | 说明 |
|
||||
|--------------------------------------------------------------------------|--------------------|
|
||||
| `yudao-dependencies` | Maven 依赖版本管理 |
|
||||
| `yudao-framework` | Java 框架拓展 |
|
||||
| `yudao-server` | 管理后台 + 用户 APP 的服务端 |
|
||||
| `yudao-module-system` | 系统功能的 Module 模块 |
|
||||
| `yudao-module-member` | 会员中心的 Module 模块 |
|
||||
| `yudao-module-infra` | 基础设施的 Module 模块 |
|
||||
| `yudao-module-bpm` | 工作流程的 Module 模块 |
|
||||
| `yudao-module-pay` | 支付系统的 Module 模块 |
|
||||
| `yudao-module-mall` | 商城系统的 Module 模块 |
|
||||
| `yudao-module-mp` | 微信公众号的 Module 模块 |
|
||||
| `yudao-module-report` | 大屏报表 Module 模块 |
|
||||
| 项目 | 说明 |
|
||||
|-----------------------|--------------------|
|
||||
| `yudao-dependencies` | Maven 依赖版本管理 |
|
||||
| `yudao-framework` | Java 框架拓展 |
|
||||
| `yudao-server` | 管理后台 + 用户 APP 的服务端 |
|
||||
| `yudao-module-system` | 系统功能的 Module 模块 |
|
||||
| `yudao-module-member` | 会员中心的 Module 模块 |
|
||||
| `yudao-module-infra` | 基础设施的 Module 模块 |
|
||||
| `yudao-module-bpm` | 工作流程的 Module 模块 |
|
||||
| `yudao-module-pay` | 支付系统的 Module 模块 |
|
||||
| `yudao-module-mall` | 商城系统的 Module 模块 |
|
||||
| `yudao-module-erp` | ERP 系统的 Module 模块 |
|
||||
| `yudao-module-crm` | CRM 系统的 Module 模块 |
|
||||
| `yudao-module-ai` | AI 大模型的 Module 模块 |
|
||||
| `yudao-module-mp` | 微信公众号的 Module 模块 |
|
||||
| `yudao-module-report` | 大屏报表 Module 模块 |
|
||||
|
||||
### 框架
|
||||
|
||||
| 框架 | 说明 | 版本 | 学习指南 |
|
||||
|---------------------------------------------------------------------------------------------|------------------|-------------|---------------------------------------------------------------------|
|
||||
| [Spring Cloud Alibaba](https://github.com/alibaba/spring-cloud-alibaba) | 微服务框架 | 2021.0.4.0 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
|
||||
| [Nacos](https://github.com/alibaba/nacos) | 配置中心 & 注册中心 | 2.0.4 | [文档](https://www.iocoder.cn/categories/Nacos/?yudao) |
|
||||
| [RocketMQ](https://github.com/apache/rocketmq) | 消息队列 | 4.9.4 | [文档](https://www.iocoder.cn/categories/RocketMQ/?yudao) |
|
||||
| [Sentinel](https://github.com/alibaba/sentinel) | 服务保障 | 1.8.6 | [文档](https://www.iocoder.cn/categories/Sentinel/?yudao) |
|
||||
| [XXL Job](https://github.com/xuxueli/xxl-job) | 定时任务 | 2.3.1 | [文档](https://www.iocoder.cn/XXL-JOB/good-collection/?yudao) |
|
||||
| [Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway) | 服务网关 | 3.4.1 | [文档](https://www.iocoder.cn/categories/Spring-Cloud-Gateway/?yudao) |
|
||||
| [Seata](https://github.com/seata/seata) | 分布式事务 | 1.6.1 | [文档](https://www.iocoder.cn/categories/Seata/?yudao) |
|
||||
| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | |
|
||||
| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.16 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
|
||||
| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.3.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
|
||||
| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 3.6.0 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
|
||||
| [Redis](https://redis.io/) | key-value 数据库 | 5.0 / 6.0 | |
|
||||
| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.18.0 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) |
|
||||
| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.3.24 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) |
|
||||
| [Spring Security](https://github.com/spring-projects/spring-security) | Spring 安全框架 | 5.7.5 | [文档](http://www.iocoder.cn/Spring-Boot/Spring-Security/?yudao) |
|
||||
| [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 6.2.5 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?yudao) |
|
||||
| [Flowable](https://github.com/flowable/flowable-engine) | 工作流引擎 | 6.7.2 | [文档](https://doc.iocoder.cn/bpm/) |
|
||||
| [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 4.0.0 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) |
|
||||
| [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 8.12.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao) |
|
||||
| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 2.7.10 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) |
|
||||
| [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.13.3 | |
|
||||
| [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.5.3.Final | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) |
|
||||
| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.18.26 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) |
|
||||
| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.8.2 | - |
|
||||
| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 4.8.0 | - |
|
||||
| 框架 | 说明 | 版本 | 学习指南 |
|
||||
|---------------------------------------------------------------------------------------------|------------------|------------|---------------------------------------------------------------------|
|
||||
| [Spring Cloud Alibaba](https://github.com/alibaba/spring-cloud-alibaba) | 微服务框架 | 2021.0.4.0 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
|
||||
| [Nacos](https://github.com/alibaba/nacos) | 配置中心 & 注册中心 | 2.3.2 | [文档](https://www.iocoder.cn/categories/Nacos/?yudao) |
|
||||
| [RocketMQ](https://github.com/apache/rocketmq) | 消息队列 | 5.2.0 | [文档](https://www.iocoder.cn/categories/RocketMQ/?yudao) |
|
||||
| [Sentinel](https://github.com/alibaba/sentinel) | 服务保障 | 1.8.6 | [文档](https://www.iocoder.cn/categories/Sentinel/?yudao) |
|
||||
| [XXL Job](https://github.com/xuxueli/xxl-job) | 定时任务 | 2.3.1 | [文档](https://www.iocoder.cn/XXL-JOB/good-collection/?yudao) |
|
||||
| [Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway) | 服务网关 | 3.4.1 | [文档](https://www.iocoder.cn/categories/Spring-Cloud-Gateway/?yudao) |
|
||||
| [Seata](https://github.com/seata/seata) | 分布式事务 | 1.6.1 | [文档](https://www.iocoder.cn/categories/Seata/?yudao) |
|
||||
| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | |
|
||||
| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.23 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
|
||||
| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.7 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
|
||||
| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 4.3.1 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
|
||||
| [Redis](https://redis.io/) | key-value 数据库 | 5.0 / 6.0 | |
|
||||
| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.32.0 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) |
|
||||
| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.3.24 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) |
|
||||
| [Spring Security](https://github.com/spring-projects/spring-security) | Spring 安全框架 | 5.7.5 | [文档](http://www.iocoder.cn/Spring-Boot/Spring-Security/?yudao) |
|
||||
| [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 6.2.5 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?yudao) |
|
||||
| [Flowable](https://github.com/flowable/flowable-engine) | 工作流引擎 | 6.8.0 | [文档](https://doc.iocoder.cn/bpm/) |
|
||||
| [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 4.5.0 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) |
|
||||
| [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 8.12.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao) |
|
||||
| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 2.7.10 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) |
|
||||
| [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.13.3 | |
|
||||
| [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.6.3 | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) |
|
||||
| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.18.34 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) |
|
||||
| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.8.2 | - |
|
||||
| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 4.8.0 | - |
|
||||
|
||||
## 🐷 演示图
|
||||
|
||||
### 系统功能
|
||||
|
||||
| 模块 | biu | biu | biu |
|
||||
|------------|--------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|
|
||||
| 登录 & 首页 |  |  |  |
|
||||
| 用户 & 应用 |  |  |  |
|
||||
| 租户 & 套餐 |  |  | - |
|
||||
| 部门 & 岗位 |  |  | - |
|
||||
| 菜单 & 角色 |  |  | - |
|
||||
| 审计日志 |  |  | - |
|
||||
| 短信 |  |  |  |
|
||||
| 字典 & 敏感词 |  |  |  |
|
||||
| 错误码 & 通知 |  |  | - |
|
||||
| 模块 | biu | biu | biu |
|
||||
|----------|-----------------------------|---------------------------|--------------------------|
|
||||
| 登录 & 首页 |  |  |  |
|
||||
| 用户 & 应用 |  |  |  |
|
||||
| 租户 & 套餐 |  |  | - |
|
||||
| 部门 & 岗位 |  |  | - |
|
||||
| 菜单 & 角色 |  |  | - |
|
||||
| 审计日志 |  |  | - |
|
||||
| 短信 |  |  |  |
|
||||
| 字典 & 敏感词 |  |  |  |
|
||||
| 错误码 & 通知 |  |  | - |
|
||||
|
||||
### 工作流程
|
||||
|
||||
| 模块 | biu | biu | biu |
|
||||
|---------|------------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------|
|
||||
| 流程模型 |  |  |  |
|
||||
| 表单 & 分组 |  |  | - |
|
||||
| 我的流程 |  |  |  |
|
||||
| 待办 & 已办 |  |  |  |
|
||||
| OA 请假 |  |  |  |
|
||||
| 模块 | biu | biu | biu |
|
||||
|---------|---------------------------------|---------------------------------|---------------------------------|
|
||||
| 流程模型 |  |  |  |
|
||||
| 表单 & 分组 |  |  | - |
|
||||
| 我的流程 |  |  |  |
|
||||
| 待办 & 已办 |  |  |  |
|
||||
| OA 请假 |  |  |  |
|
||||
|
||||
### 基础设施
|
||||
|
||||
| 模块 | biu | biu | biu |
|
||||
|---------------|----------------------------------------------------------------------|--------------------------------------------------------------------|------------------------------------------------------------------|
|
||||
| 代码生成 |  |  | - |
|
||||
| 文档 |  |  | - |
|
||||
| 文件 & 配置 |  |  |  |
|
||||
| 定时任务 |  |  | - |
|
||||
| API 日志 |  |  | - |
|
||||
| MySQL & Redis |  |  | - |
|
||||
| 监控平台 |  |  |  |
|
||||
| 模块 | biu | biu | biu |
|
||||
|---------------|-------------------------------|-----------------------------|---------------------------|
|
||||
| 代码生成 |  |  | - |
|
||||
| 文档 |  |  | - |
|
||||
| 文件 & 配置 |  |  |  |
|
||||
| 定时任务 |  |  | - |
|
||||
| API 日志 |  |  | - |
|
||||
| MySQL & Redis |  |  | - |
|
||||
| 监控平台 |  |  |  |
|
||||
|
||||
### 支付系统
|
||||
|
||||
| 模块 | biu | biu | biu |
|
||||
|---------|------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------|
|
||||
| 商家 & 应用 |  |  |  |
|
||||
| 支付 & 退款 |  |  | --- |
|
||||
|
||||
| 模块 | biu | biu | biu |
|
||||
|---------|---------------------------|---------------------------------|---------------------------------|
|
||||
| 商家 & 应用 |  |  |  |
|
||||
| 支付 & 退款 |  |  | --- |
|
||||
### 数据报表
|
||||
|
||||
| 模块 | biu | biu | biu |
|
||||
|---------|------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------|
|
||||
| 报表设计器 |  |  |  |
|
||||
| 大屏设计器 |  |  |  |
|
||||
| 模块 | biu | biu | biu |
|
||||
|-------|---------------------------------|---------------------------------|---------------------------------------|
|
||||
| 报表设计器 |  |  |  |
|
||||
| 大屏设计器 |  |  |  |
|
||||
|
||||
### 移动端(管理后台)
|
||||
|
||||
| biu | biu | biu |
|
||||
|------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------|
|
||||
|  |  |  |
|
||||
|  |  |  |
|
||||
|  |  |  |
|
||||
| biu | biu | biu |
|
||||
|----------------------------------|----------------------------------|----------------------------------|
|
||||
|  |  |  |
|
||||
|  |  |  |
|
||||
|  |  |  |
|
||||
|
||||
目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。
|
||||
|
||||
73
pom.xml
@@ -11,13 +11,22 @@
|
||||
<module>yudao-dependencies</module>
|
||||
<module>yudao-gateway</module>
|
||||
<module>yudao-framework</module>
|
||||
<!-- Server 主项目 -->
|
||||
<module>yudao-server</module>
|
||||
<!-- 各种 module 拓展 -->
|
||||
<!-- <module>yudao-module-member</module>-->
|
||||
<module>yudao-module-bpm</module>
|
||||
<module>yudao-module-system</module>
|
||||
<module>yudao-module-infra</module>
|
||||
<!-- <module>yudao-module-pay</module>-->
|
||||
<module>yudao-module-member</module>
|
||||
<module>yudao-module-bpm</module>
|
||||
<module>yudao-module-pay</module>
|
||||
<module>yudao-module-report</module>
|
||||
<module>yudao-module-mp</module>
|
||||
<module>yudao-module-mall</module>
|
||||
<module>yudao-module-erp</module>
|
||||
<module>yudao-module-crm</module>
|
||||
<!-- 友情提示:基于 Spring AI 实现 LLM 大模型的接入,需要使用 JDK17 版本,详细可见 https://doc.iocoder.cn/ai/build/ -->
|
||||
<!-- <module>yudao-module-ai</module>-->
|
||||
<module>yudao-module-iot</module>
|
||||
</modules>
|
||||
|
||||
<name>${project.artifactId}</name>
|
||||
@@ -25,17 +34,18 @@
|
||||
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
|
||||
|
||||
<properties>
|
||||
<revision>1.7.2-snapshot</revision>
|
||||
<revision>2026.01-jdk8-SNAPSHOT</revision>
|
||||
<!-- Maven 相关 -->
|
||||
<java.version>1.8</java.version>
|
||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||
<maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
|
||||
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
|
||||
<!-- 看看咋放到 bom 里 -->
|
||||
<lombok.version>1.18.26</lombok.version>
|
||||
<spring.boot.version>2.7.10</spring.boot.version>
|
||||
<mapstruct.version>1.5.3.Final</mapstruct.version>
|
||||
<maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
|
||||
<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
|
||||
<flatten-maven-plugin.version>1.7.2</flatten-maven-plugin.version>
|
||||
<!-- maven-surefire-plugin 暂时无法通过 bom 的依赖读取(兼容老版本 IDEA 2024 及以前版本) -->
|
||||
<lombok.version>1.18.42</lombok.version>
|
||||
<spring.boot.version>2.7.18</spring.boot.version>
|
||||
<mapstruct.version>1.6.3</mapstruct.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
@@ -79,6 +89,13 @@
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.version}</version>
|
||||
</path>
|
||||
<path>
|
||||
<!-- 确保 Lombok 生成的 getter/setter 方法能被 MapStruct 正确识别,
|
||||
避免出现 No property named “xxx" exists 的编译错误 -->
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok-mapstruct-binding</artifactId>
|
||||
<version>0.2.0</version>
|
||||
</path>
|
||||
<path>
|
||||
<groupId>org.mapstruct</groupId>
|
||||
<artifactId>mapstruct-processor</artifactId>
|
||||
@@ -89,10 +106,44 @@
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
|
||||
<plugins>
|
||||
<!-- 统一 revision 版本 -->
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>flatten-maven-plugin</artifactId>
|
||||
<version>${flatten-maven-plugin.version}</version>
|
||||
<configuration>
|
||||
<flattenMode>oss</flattenMode>
|
||||
<updatePomFile>true</updatePomFile>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>flatten</goal>
|
||||
</goals>
|
||||
<id>flatten</id>
|
||||
<phase>process-resources</phase>
|
||||
</execution>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>clean</goal>
|
||||
</goals>
|
||||
<id>flatten.clean</id>
|
||||
<phase>clean</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!-- 使用 aliyun 的 Maven 源,提升下载速度 -->
|
||||
<!-- 使用 huawei / aliyun 的 Maven 源,提升下载速度 -->
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>huaweicloud</id>
|
||||
<name>huawei</name>
|
||||
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>aliyunmaven</id>
|
||||
<name>aliyun</name>
|
||||
|
||||
162
script/docker/docker-compose.yml
Normal file
@@ -0,0 +1,162 @@
|
||||
version: '3'
|
||||
services:
|
||||
yudao-gateway:
|
||||
image: yudao-gateway
|
||||
container_name: yudao-gateway
|
||||
environment:
|
||||
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
|
||||
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
|
||||
- SW_AGENT_NAME=yudao-gateway
|
||||
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
|
||||
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
|
||||
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
|
||||
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
|
||||
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
|
||||
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
volumes:
|
||||
- /docker/yudao-cloud/logs:/root/logs/
|
||||
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
|
||||
restart: always
|
||||
network_mode: host # 以主机网络环境运行
|
||||
yudao-system:
|
||||
image: yudao-module-system-biz
|
||||
container_name: yudao-system
|
||||
environment:
|
||||
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
|
||||
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
|
||||
- SW_AGENT_NAME=yudao-gateway
|
||||
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
|
||||
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
|
||||
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
|
||||
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
|
||||
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
|
||||
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
volumes:
|
||||
- /docker/yudao-cloud/logs:/root/logs/
|
||||
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
|
||||
healthcheck:
|
||||
test: [ "CMD","curl","-f","http://localhost:48081" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 60s
|
||||
restart: always
|
||||
network_mode: host
|
||||
yudao-infra:
|
||||
image: yudao-module-infra-biz
|
||||
container_name: yudao-infra
|
||||
environment:
|
||||
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
|
||||
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
|
||||
- SW_AGENT_NAME=yudao-gateway
|
||||
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
|
||||
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
|
||||
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
|
||||
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
|
||||
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
|
||||
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
volumes:
|
||||
- /docker/yudao-cloud/logs:/root/logs/
|
||||
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
|
||||
restart: always
|
||||
network_mode: host
|
||||
healthcheck:
|
||||
test: [ "CMD","curl","-f","http://localhost:48082" ]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 60s
|
||||
depends_on:
|
||||
yudao-system:
|
||||
condition: service_healthy
|
||||
yudao-report:
|
||||
image: yudao-module-report-biz
|
||||
container_name: yudao-report
|
||||
environment:
|
||||
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
|
||||
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
|
||||
- SW_AGENT_NAME=yudao-gateway
|
||||
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
|
||||
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
|
||||
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
|
||||
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
|
||||
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
|
||||
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
volumes:
|
||||
- /docker/yudao-cloud/logs:/root/logs/
|
||||
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
|
||||
restart: always
|
||||
network_mode: host
|
||||
depends_on:
|
||||
yudao-infra:
|
||||
condition: service_healthy
|
||||
yudao-bpm:
|
||||
image: yudao-module-bpm-biz
|
||||
container_name: yudao-bpm
|
||||
environment:
|
||||
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
|
||||
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
|
||||
- SW_AGENT_NAME=yudao-gateway
|
||||
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
|
||||
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
|
||||
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
|
||||
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
|
||||
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
|
||||
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
volumes:
|
||||
- /docker/yudao-cloud/logs:/root/logs/
|
||||
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
|
||||
restart: always
|
||||
network_mode: host
|
||||
depends_on:
|
||||
yudao-infra:
|
||||
condition: service_healthy
|
||||
yudao-pay:
|
||||
image: yudao-module-pay-biz
|
||||
container_name: yudao-pay
|
||||
environment:
|
||||
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
|
||||
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
|
||||
- SW_AGENT_NAME=yudao-gateway
|
||||
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
|
||||
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
|
||||
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
|
||||
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
|
||||
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
|
||||
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
volumes:
|
||||
- /docker/yudao-cloud/logs:/root/logs/
|
||||
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
|
||||
restart: always
|
||||
network_mode: host
|
||||
depends_on:
|
||||
yudao-infra:
|
||||
condition: service_healthy
|
||||
yudao-mp:
|
||||
image: yudao-module-mp-biz
|
||||
container_name: yudao-mp
|
||||
environment:
|
||||
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
|
||||
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
|
||||
- SW_AGENT_NAME=yudao-gateway
|
||||
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
|
||||
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
|
||||
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
|
||||
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
|
||||
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
|
||||
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
|
||||
volumes:
|
||||
- /docker/yudao-cloud/logs:/root/logs/
|
||||
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
|
||||
restart: always
|
||||
network_mode: host
|
||||
depends_on:
|
||||
yudao-infra:
|
||||
condition: service_healthy
|
||||
@@ -5,7 +5,7 @@
|
||||
"infaBaseUrl": "http://127.0.0.1:48082/admin-api",
|
||||
|
||||
"token": "test1",
|
||||
"adminTenentId": "1",
|
||||
"adminTenantId": "1",
|
||||
"tag": "${HOSTNAME}",
|
||||
|
||||
"appApi": "http://127.0.0.1:48080/app-api",
|
||||
@@ -18,7 +18,7 @@
|
||||
"infaBaseUrl": "http://127.0.0.1:48080/admin-api",
|
||||
|
||||
"token": "test1",
|
||||
"adminTenentId": "1",
|
||||
"adminTenantId": "1",
|
||||
"tag": "${HOSTNAME}",
|
||||
|
||||
"appApi": "http://127.0.0.1:8888/app-api",
|
||||
@@ -1,3 +0,0 @@
|
||||
暂未适配国产 DM 数据库,如果你有需要,可以微信联系 wangwenbin-server 一起建设。
|
||||
|
||||
你需要把表结构与数据导入到 DM 数据库,我来测试与适配代码。
|
||||
@@ -0,0 +1,598 @@
|
||||
package liquibase.database.core;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import liquibase.CatalogAndSchema;
|
||||
import liquibase.Scope;
|
||||
import liquibase.database.AbstractJdbcDatabase;
|
||||
import liquibase.database.DatabaseConnection;
|
||||
import liquibase.database.OfflineConnection;
|
||||
import liquibase.database.jvm.JdbcConnection;
|
||||
import liquibase.exception.DatabaseException;
|
||||
import liquibase.exception.UnexpectedLiquibaseException;
|
||||
import liquibase.exception.ValidationErrors;
|
||||
import liquibase.executor.ExecutorService;
|
||||
import liquibase.statement.DatabaseFunction;
|
||||
import liquibase.statement.SequenceCurrentValueFunction;
|
||||
import liquibase.statement.SequenceNextValueFunction;
|
||||
import liquibase.statement.core.RawCallStatement;
|
||||
import liquibase.statement.core.RawSqlStatement;
|
||||
import liquibase.structure.DatabaseObject;
|
||||
import liquibase.structure.core.Catalog;
|
||||
import liquibase.structure.core.Index;
|
||||
import liquibase.structure.core.PrimaryKey;
|
||||
import liquibase.structure.core.Schema;
|
||||
import liquibase.util.JdbcUtils;
|
||||
import liquibase.util.StringUtil;
|
||||
|
||||
public class DmDatabase extends AbstractJdbcDatabase {
|
||||
private static final String PRODUCT_NAME = "DM DBMS";
|
||||
|
||||
@Override
|
||||
protected String getDefaultDatabaseProductName() {
|
||||
return PRODUCT_NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this AbstractDatabase subclass the correct one to use for the given connection.
|
||||
*
|
||||
* @param conn
|
||||
*/
|
||||
@Override
|
||||
public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
|
||||
return PRODUCT_NAME.equalsIgnoreCase(conn.getDatabaseProductName());
|
||||
}
|
||||
|
||||
/**
|
||||
* If this database understands the given url, return the default driver class name. Otherwise return null.
|
||||
*
|
||||
* @param url
|
||||
*/
|
||||
@Override
|
||||
public String getDefaultDriver(String url) {
|
||||
if(url.startsWith("jdbc:dm")) {
|
||||
return "dm.jdbc.driver.DmDriver";
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an all-lower-case short name of the product. Used for end-user selecting of database type
|
||||
* such as the DBMS precondition.
|
||||
*/
|
||||
@Override
|
||||
public String getShortName() {
|
||||
return "dm";
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getDefaultPort() {
|
||||
return 5236;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether this database support initially deferrable columns.
|
||||
*/
|
||||
@Override
|
||||
public boolean supportsInitiallyDeferrableColumns() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsTablespaces() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPriority() {
|
||||
return PRIORITY_DEFAULT;
|
||||
}
|
||||
|
||||
private static final Pattern PROXY_USER = Pattern.compile(".*(?:thin|oci)\\:(.+)/@.*");
|
||||
|
||||
protected final int SHORT_IDENTIFIERS_LENGTH = 30;
|
||||
protected final int LONG_IDENTIFIERS_LEGNTH = 128;
|
||||
public static final int ORACLE_12C_MAJOR_VERSION = 12;
|
||||
|
||||
private Set<String> reservedWords = new HashSet<>();
|
||||
private Set<String> userDefinedTypes;
|
||||
private Map<String, String> savedSessionNlsSettings;
|
||||
|
||||
private Boolean canAccessDbaRecycleBin;
|
||||
private Integer databaseMajorVersion;
|
||||
private Integer databaseMinorVersion;
|
||||
|
||||
/**
|
||||
* Default constructor for an object that represents the Oracle Database DBMS.
|
||||
*/
|
||||
public DmDatabase() {
|
||||
super.unquotedObjectsAreUppercased = true;
|
||||
//noinspection HardCodedStringLiteral
|
||||
super.setCurrentDateTimeFunction("SYSTIMESTAMP");
|
||||
// Setting list of Oracle's native functions
|
||||
//noinspection HardCodedStringLiteral
|
||||
dateFunctions.add(new DatabaseFunction("SYSDATE"));
|
||||
//noinspection HardCodedStringLiteral
|
||||
dateFunctions.add(new DatabaseFunction("SYSTIMESTAMP"));
|
||||
//noinspection HardCodedStringLiteral
|
||||
dateFunctions.add(new DatabaseFunction("CURRENT_TIMESTAMP"));
|
||||
//noinspection HardCodedStringLiteral
|
||||
super.sequenceNextValueFunction = "%s.nextval";
|
||||
//noinspection HardCodedStringLiteral
|
||||
super.sequenceCurrentValueFunction = "%s.currval";
|
||||
}
|
||||
|
||||
private void tryProxySession(final String url, final Connection con) {
|
||||
Matcher m = PROXY_USER.matcher(url);
|
||||
if (m.matches()) {
|
||||
Properties props = new Properties();
|
||||
props.put("PROXY_USER_NAME", m.group(1));
|
||||
try {
|
||||
Method method = con.getClass().getMethod("openProxySession", int.class, Properties.class);
|
||||
method.setAccessible(true);
|
||||
method.invoke(con, 1, props);
|
||||
} catch (Exception e) {
|
||||
Scope.getCurrentScope().getLog(getClass()).info("Could not open proxy session on OracleDatabase: " + e.getCause().getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDatabaseMajorVersion() throws DatabaseException {
|
||||
if (databaseMajorVersion == null) {
|
||||
return super.getDatabaseMajorVersion();
|
||||
} else {
|
||||
return databaseMajorVersion;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDatabaseMinorVersion() throws DatabaseException {
|
||||
if (databaseMinorVersion == null) {
|
||||
return super.getDatabaseMinorVersion();
|
||||
} else {
|
||||
return databaseMinorVersion;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJdbcCatalogName(CatalogAndSchema schema) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJdbcSchemaName(CatalogAndSchema schema) {
|
||||
return correctObjectName((schema.getCatalogName() == null) ? schema.getSchemaName() : schema.getCatalogName(), Schema.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getAutoIncrementClause(final String generationType, final Boolean defaultOnNull) {
|
||||
if (StringUtil.isEmpty(generationType)) {
|
||||
return super.getAutoIncrementClause();
|
||||
}
|
||||
|
||||
String autoIncrementClause = "GENERATED %s AS IDENTITY"; // %s -- [ ALWAYS | BY DEFAULT [ ON NULL ] ]
|
||||
String generationStrategy = generationType;
|
||||
if (Boolean.TRUE.equals(defaultOnNull) && generationType.toUpperCase().equals("BY DEFAULT")) {
|
||||
generationStrategy += " ON NULL";
|
||||
}
|
||||
return String.format(autoIncrementClause, generationStrategy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generatePrimaryKeyName(String tableName) {
|
||||
if (tableName.length() > 27) {
|
||||
//noinspection HardCodedStringLiteral
|
||||
return "PK_" + tableName.toUpperCase(Locale.US).substring(0, 27);
|
||||
} else {
|
||||
//noinspection HardCodedStringLiteral
|
||||
return "PK_" + tableName.toUpperCase(Locale.US);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReservedWord(String objectName) {
|
||||
return reservedWords.contains(objectName.toUpperCase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsSequences() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Oracle supports catalogs in liquibase terms
|
||||
*
|
||||
* @return false
|
||||
*/
|
||||
@Override
|
||||
public boolean supportsSchemas() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getConnectionCatalogName() throws DatabaseException {
|
||||
if (getConnection() instanceof OfflineConnection) {
|
||||
return getConnection().getCatalog();
|
||||
}
|
||||
try {
|
||||
//noinspection HardCodedStringLiteral
|
||||
return Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForObject(new RawCallStatement("select sys_context( 'userenv', 'current_schema' ) from dual"), String.class);
|
||||
} catch (Exception e) {
|
||||
//noinspection HardCodedStringLiteral
|
||||
Scope.getCurrentScope().getLog(getClass()).info("Error getting default schema", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultCatalogName() {//NOPMD
|
||||
return (super.getDefaultCatalogName() == null) ? null : super.getDefaultCatalogName().toUpperCase(Locale.US);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns an Oracle date literal with the same value as a string formatted using ISO 8601.</p>
|
||||
*
|
||||
* <p>Convert an ISO8601 date string to one of the following results:
|
||||
* to_date('1995-05-23', 'YYYY-MM-DD')
|
||||
* to_date('1995-05-23 09:23:59', 'YYYY-MM-DD HH24:MI:SS')</p>
|
||||
* <p>
|
||||
* Implementation restriction:<br>
|
||||
* Currently, only the following subsets of ISO8601 are supported:<br>
|
||||
* <ul>
|
||||
* <li>YYYY-MM-DD</li>
|
||||
* <li>YYYY-MM-DDThh:mm:ss</li>
|
||||
* </ul>
|
||||
*/
|
||||
@Override
|
||||
public String getDateLiteral(String isoDate) {
|
||||
String normalLiteral = super.getDateLiteral(isoDate);
|
||||
|
||||
if (isDateOnly(isoDate)) {
|
||||
return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD')";
|
||||
} else if (isTimeOnly(isoDate)) {
|
||||
return "TO_DATE(" + normalLiteral + ", 'HH24:MI:SS')";
|
||||
} else if (isTimestamp(isoDate)) {
|
||||
return "TO_TIMESTAMP(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS.FF')";
|
||||
} else if (isDateTime(isoDate)) {
|
||||
int seppos = normalLiteral.lastIndexOf('.');
|
||||
if (seppos != -1) {
|
||||
normalLiteral = normalLiteral.substring(0, seppos) + "'";
|
||||
}
|
||||
return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS')";
|
||||
}
|
||||
return "UNSUPPORTED:" + isoDate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSystemObject(DatabaseObject example) {
|
||||
if (example == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.isLiquibaseObject(example)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (example instanceof Schema) {
|
||||
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
|
||||
if ("SYSTEM".equals(example.getName()) || "SYS".equals(example.getName()) || "CTXSYS".equals(example.getName()) || "XDB".equals(example.getName())) {
|
||||
return true;
|
||||
}
|
||||
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
|
||||
if ("SYSTEM".equals(example.getSchema().getCatalogName()) || "SYS".equals(example.getSchema().getCatalogName()) || "CTXSYS".equals(example.getSchema().getCatalogName()) || "XDB".equals(example.getSchema().getCatalogName())) {
|
||||
return true;
|
||||
}
|
||||
} else if (isSystemObject(example.getSchema())) {
|
||||
return true;
|
||||
}
|
||||
if (example instanceof Catalog) {
|
||||
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
|
||||
if (("SYSTEM".equals(example.getName()) || "SYS".equals(example.getName()) || "CTXSYS".equals(example.getName()) || "XDB".equals(example.getName()))) {
|
||||
return true;
|
||||
}
|
||||
} else if (example.getName() != null) {
|
||||
//noinspection HardCodedStringLiteral
|
||||
if (example.getName().startsWith("BIN$")) { //oracle deleted table
|
||||
boolean filteredInOriginalQuery = this.canAccessDbaRecycleBin();
|
||||
if (!filteredInOriginalQuery) {
|
||||
filteredInOriginalQuery = StringUtil.trimToEmpty(example.getSchema().getName()).equalsIgnoreCase(this.getConnection().getConnectionUserName());
|
||||
}
|
||||
|
||||
if (filteredInOriginalQuery) {
|
||||
return !((example instanceof PrimaryKey) || (example instanceof Index) || (example instanceof
|
||||
liquibase.statement.UniqueConstraint));
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if (example.getName().startsWith("AQ$")) { //oracle AQ tables
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if (example.getName().startsWith("DR$")) { //oracle index tables
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if (example.getName().startsWith("SYS_IOT_OVER")) { //oracle system table
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral,HardCodedStringLiteral
|
||||
if ((example.getName().startsWith("MDRT_") || example.getName().startsWith("MDRS_")) && example.getName().endsWith("$")) {
|
||||
// CORE-1768 - Oracle creates these for spatial indices and will remove them when the index is removed.
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if (example.getName().startsWith("MLOG$_")) { //Created by materliaized view logs for every table that is part of a materialized view. Not available for DDL operations.
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if (example.getName().startsWith("RUPD$_")) { //Created by materialized view log tables using primary keys. Not available for DDL operations.
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if (example.getName().startsWith("WM$_")) { //Workspace Manager backup tables.
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if ("CREATE$JAVA$LOB$TABLE".equals(example.getName())) { //This table contains the name of the Java object, the date it was loaded, and has a BLOB column to store the Java object.
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if ("JAVA$CLASS$MD5$TABLE".equals(example.getName())) { //This is a hash table that tracks the loading of Java objects into a schema.
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if (example.getName().startsWith("ISEQ$$_")) { //System-generated sequence
|
||||
return true;
|
||||
} else //noinspection HardCodedStringLiteral
|
||||
if (example.getName().startsWith("USLOG$")) { //for update materialized view
|
||||
return true;
|
||||
} else if (example.getName().startsWith("SYS_FBA")) { //for Flashback tables
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return super.isSystemObject(example);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsAutoIncrement() {
|
||||
// Oracle supports Identity beginning with version 12c
|
||||
boolean isAutoIncrementSupported = false;
|
||||
|
||||
try {
|
||||
if (getDatabaseMajorVersion() >= 12) {
|
||||
isAutoIncrementSupported = true;
|
||||
}
|
||||
|
||||
// Returning true will generate create table command with 'IDENTITY' clause, example:
|
||||
// CREATE TABLE AutoIncTest (IDPrimaryKey NUMBER(19) GENERATED BY DEFAULT AS IDENTITY NOT NULL, TypeID NUMBER(3) NOT NULL, Description NVARCHAR2(50), CONSTRAINT PK_AutoIncTest PRIMARY KEY (IDPrimaryKey));
|
||||
|
||||
// While returning false will continue to generate create table command without 'IDENTITY' clause, example:
|
||||
// CREATE TABLE AutoIncTest (IDPrimaryKey NUMBER(19) NOT NULL, TypeID NUMBER(3) NOT NULL, Description NVARCHAR2(50), CONSTRAINT PK_AutoIncTest PRIMARY KEY (IDPrimaryKey));
|
||||
|
||||
} catch (DatabaseException ex) {
|
||||
isAutoIncrementSupported = false;
|
||||
}
|
||||
|
||||
return isAutoIncrementSupported;
|
||||
}
|
||||
|
||||
|
||||
// public Set<UniqueConstraint> findUniqueConstraints(String schema) throws DatabaseException {
|
||||
// Set<UniqueConstraint> returnSet = new HashSet<UniqueConstraint>();
|
||||
//
|
||||
// List<Map> maps = new Executor(this).queryForList(new RawSqlStatement("SELECT UC.CONSTRAINT_NAME, UCC.TABLE_NAME, UCC.COLUMN_NAME FROM USER_CONSTRAINTS UC, USER_CONS_COLUMNS UCC WHERE UC.CONSTRAINT_NAME=UCC.CONSTRAINT_NAME AND CONSTRAINT_TYPE='U' ORDER BY UC.CONSTRAINT_NAME"));
|
||||
//
|
||||
// UniqueConstraint constraint = null;
|
||||
// for (Map map : maps) {
|
||||
// if (constraint == null || !constraint.getName().equals(constraint.getName())) {
|
||||
// returnSet.add(constraint);
|
||||
// Table table = new Table((String) map.get("TABLE_NAME"));
|
||||
// constraint = new UniqueConstraint(map.get("CONSTRAINT_NAME").toString(), table);
|
||||
// }
|
||||
// }
|
||||
// if (constraint != null) {
|
||||
// returnSet.add(constraint);
|
||||
// }
|
||||
//
|
||||
// return returnSet;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public boolean supportsRestrictForeignKeys() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDataTypeMaxParameters(String dataTypeName) {
|
||||
//noinspection HardCodedStringLiteral
|
||||
if ("BINARY_FLOAT".equals(dataTypeName.toUpperCase())) {
|
||||
return 0;
|
||||
}
|
||||
//noinspection HardCodedStringLiteral
|
||||
if ("BINARY_DOUBLE".equals(dataTypeName.toUpperCase())) {
|
||||
return 0;
|
||||
}
|
||||
return super.getDataTypeMaxParameters(dataTypeName);
|
||||
}
|
||||
|
||||
public String getSystemTableWhereClause(String tableNameColumn) {
|
||||
List<String> clauses = new ArrayList<String>(Arrays.asList("BIN$",
|
||||
"AQ$",
|
||||
"DR$",
|
||||
"SYS_IOT_OVER",
|
||||
"MLOG$_",
|
||||
"RUPD$_",
|
||||
"WM$_",
|
||||
"ISEQ$$_",
|
||||
"USLOG$",
|
||||
"SYS_FBA"));
|
||||
|
||||
for (int i = 0;i<clauses.size(); i++) {
|
||||
clauses.set(i, tableNameColumn+" NOT LIKE '"+clauses.get(i)+"%'");
|
||||
}
|
||||
return "("+ StringUtil.join(clauses, " AND ") + ")";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean jdbcCallsCatalogsSchemas() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public Set<String> getUserDefinedTypes() {
|
||||
if (userDefinedTypes == null) {
|
||||
userDefinedTypes = new HashSet<>();
|
||||
if ((getConnection() != null) && !(getConnection() instanceof OfflineConnection)) {
|
||||
try {
|
||||
try {
|
||||
//noinspection HardCodedStringLiteral
|
||||
userDefinedTypes.addAll(Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT DISTINCT TYPE_NAME FROM ALL_TYPES"), String.class));
|
||||
} catch (DatabaseException e) { //fall back to USER_TYPES if the user cannot see ALL_TYPES
|
||||
//noinspection HardCodedStringLiteral
|
||||
userDefinedTypes.addAll(Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT TYPE_NAME FROM USER_TYPES"), String.class));
|
||||
}
|
||||
} catch (DatabaseException e) {
|
||||
//ignore error
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return userDefinedTypes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateDatabaseFunctionValue(DatabaseFunction databaseFunction) {
|
||||
//noinspection HardCodedStringLiteral
|
||||
if ((databaseFunction != null) && "current_timestamp".equalsIgnoreCase(databaseFunction.toString())) {
|
||||
return databaseFunction.toString();
|
||||
}
|
||||
if ((databaseFunction instanceof SequenceNextValueFunction) || (databaseFunction instanceof
|
||||
SequenceCurrentValueFunction)) {
|
||||
String quotedSeq = super.generateDatabaseFunctionValue(databaseFunction);
|
||||
// replace "myschema.my_seq".nextval with "myschema"."my_seq".nextval
|
||||
return quotedSeq.replaceFirst("\"([^\\.\"]+)\\.([^\\.\"]+)\"", "\"$1\".\"$2\"");
|
||||
|
||||
}
|
||||
|
||||
return super.generateDatabaseFunctionValue(databaseFunction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ValidationErrors validate() {
|
||||
ValidationErrors errors = super.validate();
|
||||
DatabaseConnection connection = getConnection();
|
||||
if ((connection == null) || (connection instanceof OfflineConnection)) {
|
||||
//noinspection HardCodedStringLiteral
|
||||
Scope.getCurrentScope().getLog(getClass()).info("Cannot validate offline database");
|
||||
return errors;
|
||||
}
|
||||
|
||||
if (!canAccessDbaRecycleBin()) {
|
||||
errors.addWarning(getDbaRecycleBinWarning());
|
||||
}
|
||||
|
||||
return errors;
|
||||
|
||||
}
|
||||
|
||||
public String getDbaRecycleBinWarning() {
|
||||
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,
|
||||
// HardCodedStringLiteral
|
||||
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
|
||||
return "Liquibase needs to access the DBA_RECYCLEBIN table so we can automatically handle the case where " +
|
||||
"constraints are deleted and restored. Since Oracle doesn't properly restore the original table names " +
|
||||
"referenced in the constraint, we use the information from the DBA_RECYCLEBIN to automatically correct this" +
|
||||
" issue.\n" +
|
||||
"\n" +
|
||||
"The user you used to connect to the database (" + getConnection().getConnectionUserName() +
|
||||
") needs to have \"SELECT ON SYS.DBA_RECYCLEBIN\" permissions set before we can perform this operation. " +
|
||||
"Please run the following SQL to set the appropriate permissions, and try running the command again.\n" +
|
||||
"\n" +
|
||||
" GRANT SELECT ON SYS.DBA_RECYCLEBIN TO " + getConnection().getConnectionUserName() + ";";
|
||||
}
|
||||
|
||||
public boolean canAccessDbaRecycleBin() {
|
||||
if (canAccessDbaRecycleBin == null) {
|
||||
DatabaseConnection connection = getConnection();
|
||||
if ((connection == null) || (connection instanceof OfflineConnection)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Statement statement = null;
|
||||
try {
|
||||
statement = ((JdbcConnection) connection).createStatement();
|
||||
@SuppressWarnings("HardCodedStringLiteral") ResultSet resultSet = statement.executeQuery("select 1 from dba_recyclebin where 0=1");
|
||||
resultSet.close(); //don't need to do anything with the result set, just make sure statement ran.
|
||||
this.canAccessDbaRecycleBin = true;
|
||||
} catch (Exception e) {
|
||||
//noinspection HardCodedStringLiteral
|
||||
if ((e instanceof SQLException) && e.getMessage().startsWith("ORA-00942")) { //ORA-00942: table or view does not exist
|
||||
this.canAccessDbaRecycleBin = false;
|
||||
} else {
|
||||
//noinspection HardCodedStringLiteral
|
||||
Scope.getCurrentScope().getLog(getClass()).warning("Cannot check dba_recyclebin access", e);
|
||||
this.canAccessDbaRecycleBin = false;
|
||||
}
|
||||
} finally {
|
||||
JdbcUtils.close(null, statement);
|
||||
}
|
||||
}
|
||||
|
||||
return canAccessDbaRecycleBin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean supportsNotNullConstraintNames() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests if the given String would be a valid identifier in Oracle DBMS. In Oracle, a valid identifier has
|
||||
* the following form (case-insensitive comparison):
|
||||
* 1st character: A-Z
|
||||
* 2..n characters: A-Z0-9$_#
|
||||
* The maximum length of an identifier differs by Oracle version and object type.
|
||||
*/
|
||||
public boolean isValidOracleIdentifier(String identifier, Class<? extends DatabaseObject> type) {
|
||||
if ((identifier == null) || (identifier.length() < 1))
|
||||
return false;
|
||||
|
||||
if (!identifier.matches("^(i?)[A-Z][A-Z0-9\\$\\_\\#]*$"))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* @todo It seems we currently do not have a class for tablespace identifiers, and all other classes
|
||||
* we do know seem to be supported as 12cR2 long identifiers, so:
|
||||
*/
|
||||
return (identifier.length() <= LONG_IDENTIFIERS_LEGNTH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum number of bytes (NOT: characters) for an identifier. For Oracle <=12c Release 20, this
|
||||
* is 30 bytes, and starting from 12cR2, up to 128 (except for tablespaces, PDB names and some other rather rare
|
||||
* object types).
|
||||
*
|
||||
* @return the maximum length of an object identifier, in bytes
|
||||
*/
|
||||
public int getIdentifierMaximumLength() {
|
||||
try {
|
||||
if (getDatabaseMajorVersion() < ORACLE_12C_MAJOR_VERSION) {
|
||||
return SHORT_IDENTIFIERS_LENGTH;
|
||||
} else if ((getDatabaseMajorVersion() == ORACLE_12C_MAJOR_VERSION) && (getDatabaseMinorVersion() <= 1)) {
|
||||
return SHORT_IDENTIFIERS_LENGTH;
|
||||
} else {
|
||||
return LONG_IDENTIFIERS_LEGNTH;
|
||||
}
|
||||
} catch (DatabaseException ex) {
|
||||
throw new UnexpectedLiquibaseException("Cannot determine the Oracle database version number", ex);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||