Compare commits
2028 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f2f0ea096 | |||
| 0dff03b8b1 | |||
| 6898c17adf | |||
| a039ab3a64 | |||
| 91a7e6b44b | |||
| 9572fef995 | |||
| 34bdf00d66 | |||
| 35a1908bc6 | |||
| 5e8988b73b | |||
| 499134cfa2 | |||
| 2cdf61a56b | |||
| fcef0f7f50 | |||
| 6a6e95fcb6 | |||
| 7f1ebb35cb | |||
| a6ef21b1b7 | |||
| 292d35eed0 | |||
| a9891405aa | |||
| 023a7b14d8 | |||
| aa716642ab | |||
| f4a55d3e26 | |||
| ba3fe15ec5 | |||
| fea84deca0 | |||
| ee1870802f | |||
| 2655110865 | |||
| a5dc4e7876 | |||
| 0abc618a1b | |||
| 6624a93a84 | |||
| 3cc127496e | |||
| ca55282516 | |||
| 867d8bc3cd | |||
| 4c200eda92 | |||
| 75f2b207a4 | |||
| dd0a2b73e8 | |||
| 93ff08863e | |||
| adfbb1433c | |||
| 7b36eb888e | |||
| ff9cef6a92 | |||
| 3720a648d7 | |||
| 6dbc942cdd | |||
| fc2a8f1311 | |||
| 9df6cc76e7 | |||
| 8f171ba3d0 | |||
| 1bc472b528 | |||
| 555bac151d | |||
| e21c262bd7 | |||
| 5ae1d0ab3e | |||
| 9819e05d4e | |||
| a886ad9785 | |||
| 510b4fd3de | |||
| 410c551e03 | |||
| e64e60c711 | |||
| cc6cb83507 | |||
| 9b7f6cfbac | |||
| 4ca1f72d4f | |||
| 64e1d68923 | |||
| 454e800067 | |||
| e16f1caae0 | |||
| 0c30f59e02 | |||
| 5efa0f327f | |||
| 4558ecd836 | |||
| b249c4e852 | |||
| 50f7be9976 | |||
| f361d05940 | |||
| 73c459f360 | |||
| 2de0fb48ea | |||
| fe0bde8417 | |||
| ed34b18d82 | |||
| eaa8e4be96 | |||
| d58da7b2b0 | |||
| 8b3bfcbd6b | |||
| bbee720710 | |||
| 1b87b8a42f | |||
| 7226f9b9b3 | |||
| df29f0682f | |||
| 8d2008f2b5 | |||
| 6891b75e27 | |||
| 19c0227cef | |||
| e79c750b46 | |||
| d80406acbb | |||
| bf966cd610 | |||
| f6c8159dac | |||
| fe5c5e4223 | |||
| f8e85575e0 | |||
| 008f88d185 | |||
| 803816b162 | |||
| 31a28cb40d | |||
| d6b59743a3 | |||
| 680718c78f | |||
| 30fce2911f | |||
| 2ab2b510cc | |||
| df609df2cf | |||
| 6b426fcd01 | |||
| ad4044f932 | |||
| 19fa65b0c3 | |||
| ba103d6e86 | |||
| 1a5fe6fa9a | |||
| 9bba1ce8a4 | |||
| 0ee7fedea8 | |||
| 99b8465e29 | |||
| 1280f49a04 | |||
| 722b33513c | |||
| 6a93484260 | |||
| e4936725f5 | |||
| 81f838c5d2 | |||
| 4d68e5e747 | |||
| 4237cfb4a9 | |||
| 63db275af1 | |||
| 772b794374 | |||
| dab0211385 | |||
| 4afff6185e | |||
| 2d1e57554d | |||
| 3c7f63c356 | |||
| df9ff3fc5c | |||
| 761ab8a0e5 | |||
| d728c36c1e | |||
| 19d5a0c2aa | |||
| 450cd1baf1 | |||
| bbba83ef61 | |||
| eb048532f7 | |||
| 44d828023c | |||
| a259e032e1 | |||
| 68f5edaa88 | |||
| 3170e7fd97 | |||
| 9ce50ec369 | |||
| 269816446a | |||
| f73cb540cf | |||
| a1c17b9b00 | |||
| 9203f485e9 | |||
| d8bb55fc0b | |||
| 3091a0882f | |||
| ee250c74d6 | |||
| ea4b4b8956 | |||
| e6f4c1f0d5 | |||
| a974d055b6 | |||
| c6a9751511 | |||
| 2668e0cfeb | |||
| b9f1e8ffaf | |||
| 9e895c8af1 | |||
| 02324f9e60 | |||
| cff6e520ee | |||
| f8f5e525be | |||
| 2e7c3e09a9 | |||
| d0df0e8e16 | |||
| e18ac461ea | |||
| 90bdc1fd83 | |||
| 0253846fdf | |||
| 1da8006af3 | |||
| 9e3055ee1e | |||
| 39d26cc84d | |||
| 2d0537387b | |||
| 8c9b483ac5 | |||
| 9c3cf1d6b6 | |||
| 290f45dd6e | |||
| 6c0978407b | |||
| 8a947990f4 | |||
| a98d00a7fe | |||
| 2fb36563ec | |||
| 81c726542b | |||
| 51968c4c19 | |||
| e35b8c45a0 | |||
| baabebb5d1 | |||
| 078ead536b | |||
| be0e0f5d71 | |||
| 9a03f1a796 | |||
| 2ede505987 | |||
| c48e0b9f48 | |||
| b5e19c63f7 | |||
| c38790655f | |||
| d31a12aff7 | |||
| 8dc56cc3f5 | |||
| 53a64272b9 | |||
| b0857aedbc | |||
| f0fd0c6677 | |||
| 8de2eea1f7 | |||
| ed1b55fed7 | |||
| b1be080e2f | |||
| 6d5fe962b7 | |||
| 0f6f204320 | |||
| 06977644ce | |||
| ff162e9c6c | |||
| 475e932aec | |||
| 039a2b1278 | |||
| 29405b9e41 | |||
| 0861372755 | |||
| bc93325b9e | |||
| 829965e50a | |||
| 46e60d6b0a | |||
| 08ff391f78 | |||
| 33c3686bef | |||
| 1f3f3d789b | |||
| c019136f07 | |||
| a1ee0991f1 | |||
| e5377074d5 | |||
| 6950368991 | |||
| 2f5afdb5c9 | |||
| 5de6a8bd23 | |||
| 82a25474f6 | |||
| 7542b6a78d | |||
| 525d41bad1 | |||
| 7286f33a7f | |||
| 60e684c455 | |||
| bd5c7d57dc | |||
| 7b482f5729 | |||
| e8ade5f1fe | |||
| 59752d43b7 | |||
| d65c28d7f7 | |||
| 106c1ecf4c | |||
| 0944584029 | |||
| a05d3bc1d1 | |||
| f56d8a2751 | |||
| 1fae341cae | |||
| 46f929ee8c | |||
| 1bdb389c89 | |||
| cd45fc35ea | |||
| 55a215da44 | |||
| 3e91ac73c4 | |||
| 9c341be4ae | |||
| 3bab9748db | |||
| 09724adb8d | |||
| 4cd36b2502 | |||
| b4612262b3 | |||
| e59f43408c | |||
| 805190300f | |||
| 0b7d42482f | |||
| bd76ea59a7 | |||
| 8434a8cd68 | |||
| f374e778bb | |||
| 86a9c4bbf4 | |||
| de8f2800e5 | |||
| ddb6fe7ec8 | |||
| 5851bcb479 | |||
| bada32750c | |||
| b0b6544887 | |||
| 4a007f0c98 | |||
| e1bb546460 | |||
| 8298896efd | |||
| 35f796875d | |||
| 07e610b3f7 | |||
| 8913572e51 | |||
| c1429dd3a0 | |||
| daf4651a4f | |||
| 289f0409d0 | |||
| 3c74b22933 | |||
| 6de17c38fd | |||
| c74881c8f0 | |||
| 13d6c42a48 | |||
| c5cc818a49 | |||
| 72cebfca14 | |||
| 1e5b0a1c0d | |||
| a7189e7425 | |||
| ff00748d11 | |||
| d2c071bbb6 | |||
| e71867683e | |||
| 8fa8f2890b | |||
| c234f5b5f8 | |||
| 63431082e5 | |||
| 1ac68aca97 | |||
| e4d3175f06 | |||
| a6a9f4e3a6 | |||
| 6a8baff080 | |||
| 1316f92081 | |||
| 9bac10c6f7 | |||
| a8c14614ab | |||
| 5c60202c14 | |||
| 23df8633f4 | |||
| 8f578a9a82 | |||
| 517f3bc187 | |||
| 8c67d1d0ba | |||
| 7c54affb16 | |||
| 57b8411f03 | |||
| 72865b5ebb | |||
| 802ac89b73 | |||
| 10d245afc3 | |||
| f69a18fd23 | |||
| 490418a1fc | |||
| 9ea0607339 | |||
| 5c395fc1c4 | |||
| f8604e17a1 | |||
| 8b80c9f415 | |||
| a0d72ffb00 | |||
| 7e806c65dc | |||
| db62d70f3f | |||
| 9574b23d9a | |||
| 8f2a156f30 | |||
| 0be3947199 | |||
| a321805ff0 | |||
| 59ff4be03d | |||
| 3cd27c83d2 | |||
| 98697ee075 | |||
| a8e8c14ab3 | |||
| 2ad27a487f | |||
| a9ae7b0865 | |||
| 30bf72f50e | |||
| 77e8600040 | |||
| 39b4cac33f | |||
| b8f8cab699 | |||
| 7cbdd1670b | |||
| 6b1f94f122 | |||
| ae98d17473 | |||
| 090b1bcd45 | |||
| f9fede3ea7 | |||
| ea59975d54 | |||
| 85994b6920 | |||
| c9482452e3 | |||
| 7038db5785 | |||
| 6a4449e03f | |||
| 076bf13687 | |||
| 0d3efe4f80 | |||
| 5e9cbb9cad | |||
| 9350523b35 | |||
| 5894d2be01 | |||
| 7c43c3a2b1 | |||
| 8507fa9172 | |||
| 9d10c74599 | |||
| 5bf7cd396f | |||
| 9451287264 | |||
| 160e3584d3 | |||
| 9eb4f49b4d | |||
| f333aa38c1 | |||
| 3707662187 | |||
| d430063eec | |||
| a36fe8c40e | |||
| 21a3870c00 | |||
| 3678752a61 | |||
| c94f71a3df | |||
| a9b2656971 | |||
| e0bdc4f4c1 | |||
| 73e76ab453 | |||
| a11d5dc5f1 | |||
| d59d1428d7 | |||
| c463f831f4 | |||
| 9a898a81fd | |||
| c69fbe540a | |||
| 455a4ebc7b | |||
| 78165f2161 | |||
| b2621c8891 | |||
| 9c1687dc25 | |||
| a62399fbca | |||
| da829f7cf5 | |||
| c2e9ecf7be | |||
| 6f237a10b5 | |||
| f656888965 | |||
| d2e965fb02 | |||
| 4dab6d0217 | |||
| dab751dc74 | |||
| 910bc09e19 | |||
| 319c73feaf | |||
| 47b77d7360 | |||
| 30fef09eee | |||
| e541fe6324 | |||
| c7386d9e04 | |||
| 35d171b1d9 | |||
| fc3bb430c3 | |||
| 645e6f3cc8 | |||
| 42dc4b6194 | |||
| d4cf945af7 | |||
| 5bb8fdca7e | |||
| e61ecb63dd | |||
| 8b67111733 | |||
| 2dd835893a | |||
| 73d53dbaad | |||
| 9aed06af5d | |||
| 5eb5472dec | |||
| b77b6322e1 | |||
| 4225db217d | |||
| 8eb04d6805 | |||
| c493397653 | |||
| a9c8f6c8e9 | |||
| 72969e921e | |||
| f02b9464bd | |||
| a5c59c6079 | |||
| 8ecc8cddba | |||
| eeeafcc10c | |||
| fa1aa51c96 | |||
| bc6cdecb23 | |||
| 58b901a8c1 | |||
| db03b10d24 | |||
| 2d9f5cc4d0 | |||
| fe4b51b9ad | |||
| 53b8e37f36 | |||
| 103e38b82c | |||
| 25595a13f4 | |||
| 1a93e3a110 | |||
| 591bc36737 | |||
| 36a51b68d9 | |||
| 6f882ca24e | |||
| 7724d6e830 | |||
| d3a565f011 | |||
| b79f6a8859 | |||
| 7b587a79ca | |||
| 79600774ec | |||
| 1580789334 | |||
| 6c536caad4 | |||
| c437201236 | |||
| b4d16b368d | |||
| 5ebebf1579 | |||
| fd2af50202 | |||
| 492adfe8e5 | |||
| 455f8e49fb | |||
| 16084d468d | |||
| 3f3899f5d3 | |||
| d6d4e50c4b | |||
| 4e897f3a9b | |||
| df51a678eb | |||
| 12bcee2a72 | |||
| 6d228828f4 | |||
| 4f42e7ca68 | |||
| 86160f40de | |||
| 4a51b20155 | |||
| f87d73724b | |||
| 8f06d02293 | |||
| 7f569f3299 | |||
| 930b5a8dd5 | |||
| d2c6c285f7 | |||
| f766474ff4 | |||
| 18c8a11a89 | |||
| e4378e5628 | |||
| b580356051 | |||
| 81f1800f40 | |||
| d07869f461 | |||
| a1e6348a37 | |||
| ee25b8aedb | |||
| 0bf24c6d16 | |||
| fbf864b6b4 | |||
| 033f13c6ad | |||
| ab3748d102 | |||
| f2ff30e465 | |||
| 6d7491fb02 | |||
| 6b3a54c8df | |||
| bb06c11405 | |||
| c7ab595460 | |||
| bd91276155 | |||
| ae763f727f | |||
| 63f9bcb0a3 | |||
| 3e9eb59de3 | |||
| 899e40deb9 | |||
| d1579499f4 | |||
| 8e480162c4 | |||
| 13e5d70be7 | |||
| ec67e63c67 | |||
| 1842549634 | |||
| 9a5f6f13b4 | |||
| fb8f5b6339 | |||
| 8bcc732c33 | |||
| d4bc6ce52d | |||
| 4a3aa1fa08 | |||
| 3021b405d2 | |||
| a597eb17d4 | |||
| 4e1d9d6292 | |||
| 0233b092b8 | |||
| be20178f12 | |||
| 0d821d705d | |||
| 1941a7b3e6 | |||
| 6a61db8508 | |||
| 6b86793b9d | |||
| 05369a36a3 | |||
| 770086ac5b | |||
| b41d469d46 | |||
| 77d7bcc73f | |||
| 780526f484 | |||
| 49accc946d | |||
| 0955ad0fc0 | |||
| 41c324acc3 | |||
| edea17e781 | |||
| 7506a1b012 | |||
| 6f135303d8 | |||
| 3d2022e31f | |||
| c50d27f5cb | |||
| 80db28ee5b | |||
| b5a667cb9c | |||
| 822e441765 | |||
| a0e3cb11ab | |||
| 737ea4635c | |||
| 87778f7fd9 | |||
| 827897807f | |||
| e40c0e3057 | |||
| 7f75f0abfc | |||
| 6fd8d0095c | |||
| c7a21b2a64 | |||
| 667957c941 | |||
| 867293a4f9 | |||
| 6270975902 | |||
| 7e1ffcbc0c | |||
| f589881de5 | |||
| e519b41244 | |||
| 86050d411b | |||
| 58ede7d69c | |||
| 716b081464 | |||
| 677a6d348f | |||
| 8c9873c425 | |||
| 8c9c91f0ca | |||
| 90f135ad95 | |||
| 5122aee924 | |||
| 966690125b | |||
| bf8bfef8cb | |||
| a440b354ba | |||
| 29ff418091 | |||
| 7ac74b44d8 | |||
| ac80aa97b3 | |||
| 067d53ac48 | |||
| a25fea18e7 | |||
| a88c93fc60 | |||
| df69fecbb4 | |||
| ee918a6d3f | |||
| 330380c2d0 | |||
| d2aee55ed2 | |||
| 2aecdbf09e | |||
| 5b9879ca8d | |||
| 01a55b93c2 | |||
| f5ea270be3 | |||
| a2f7067494 | |||
| 0d49691aa0 | |||
| d83e0413b8 | |||
| 413640f593 | |||
| 91d7938ddf | |||
| 7e6b084f77 | |||
| 5e6e02e4f4 | |||
| ddb5bce0a2 | |||
| b47c4fbd8d | |||
| 06649624e5 | |||
| 794649ea8a | |||
| a75bb825d7 | |||
| a51e9645ef | |||
| 7c48aaba8a | |||
| 01bdb33696 | |||
| 90842542a9 | |||
| a4b1395e92 | |||
| 256c560d43 | |||
| e67a6a2fe9 | |||
| 322411304c | |||
| 07e71e2ab0 | |||
| 7af80ba248 | |||
| 7598ed05cf | |||
| 0a8257a565 | |||
| 5b295d56b6 | |||
| 055eb350aa | |||
| ebb8f04fb5 | |||
| 7c09a1fc86 | |||
| 2915b46fa5 | |||
| 9abff2c7ad | |||
| 01b62a9b0c | |||
| 2f6456e2b0 | |||
| 5a5a42463b | |||
| 92be763c6f | |||
| 670c0962a7 | |||
| f4c92089e5 | |||
| 388e07c834 | |||
| 533b7295ab | |||
| c8ed99a5a4 | |||
| cbaadc3a77 | |||
| 5facac7330 | |||
| daa7d14b09 | |||
| cba0b08730 | |||
| e04c4b11df | |||
| 18de22dc39 | |||
| 645fe827a3 | |||
| b06432b8f8 | |||
| 2afc2caf1d | |||
| 71574da2cf | |||
| 53afc9d50a | |||
| 4ae3d34801 | |||
| 15313c2992 | |||
| 4235beec3b | |||
| 9705ae061c | |||
| 668fae9398 | |||
| a24919e555 | |||
| e8bc284dd0 | |||
| 9762a2a7c3 | |||
| d48a236d4c | |||
| e63ae8e1e7 | |||
| feba904fd8 | |||
| c162b39e1e | |||
| 09d45e6393 | |||
| 24b9688894 | |||
| 8efdf3141a | |||
| 381b8ea63a | |||
| 9537669d01 | |||
| 370d6df473 | |||
| 023b592299 | |||
| ca184026cf | |||
| b400aaac36 | |||
| 989d7c44d0 | |||
| 1eff9822ce | |||
| 787de1be94 | |||
| f9e64a9f0a | |||
| bf42f8e9ff | |||
| 87bc3f510c | |||
| e9317bf293 | |||
| 01641cd1be | |||
| ecf728966f | |||
| 9ee6a27b86 | |||
| 64db1a9c90 | |||
| e6d79eaf8d | |||
| acdfc28ee6 | |||
| 9a007de947 | |||
| 5bb91f139e | |||
| b7900c2035 | |||
| 0a58790c6b | |||
| fdaa08c258 | |||
| 71ce831d59 | |||
| 20b11092c2 | |||
| 4092f298ed | |||
| bdfb5b8894 | |||
| cf114409b0 | |||
| f4d600398c | |||
| 9996608da6 | |||
| 497d826ac4 | |||
| c886e7eff2 | |||
| 456b0c8ddd | |||
| 20725e3dfd | |||
| b8d5a665be | |||
| e1c34e9124 | |||
| f8ed0e15f0 | |||
| 68c9d563bc | |||
| 23cfbfe491 | |||
| 7a8ffd9ccb | |||
| 91dd61edc0 | |||
| bee4b761ec | |||
| a385a37c4a | |||
| c6422dc657 | |||
| 98aae5ed1a | |||
| 32499be98f | |||
| 3dade7fd54 | |||
| a0c142f886 | |||
| ab9dc8ad71 | |||
| 95e9dc81c9 | |||
| f1f180ff77 | |||
| 798dd3269f | |||
| 921c2ab757 | |||
| c066ea46f9 | |||
| df8a81f658 | |||
| 4dab376ca9 | |||
| 7767a8f837 | |||
| 5bfb8098d6 | |||
| 9f1b92abd9 | |||
| 7cd5272e7f | |||
| c2fd817989 | |||
| e6eaa3a24a | |||
| d048daf7d6 | |||
| 19c9b6ae93 | |||
| bec8a27a21 | |||
| 48b1c19f28 | |||
| ccccd9f226 | |||
| 1d3ef770a0 | |||
| b5f9ed9edf | |||
| 87fb47ca6a | |||
| fc087fa252 | |||
| 054d80b472 | |||
| 53afce0bff | |||
| 973b710992 | |||
| d1978d318b | |||
| c637a172ec | |||
| 67ac11b56c | |||
| 9608cf0539 | |||
| 677e8ab2fc | |||
| f73b857551 | |||
| fe50356ae8 | |||
| 0657c357bf | |||
| d8e49fa0f6 | |||
| 722e9c8a04 | |||
| 36a76c5ce6 | |||
| d9f6fb241a | |||
| 3af9688383 | |||
| c18f5baa4b | |||
| f4ea648ac9 | |||
| b0ddd522fb | |||
| 301f497527 | |||
| 81b6aebf47 | |||
| bf247a6626 | |||
| 74f786f8ed | |||
| 0719efb4c2 | |||
| ecb36eef67 | |||
| 3a2ccc9d6b | |||
| 8552e86d8a | |||
| 75115bcc48 | |||
| 5f29399cf4 | |||
| 626bd0bd55 | |||
| 12ae5bf128 | |||
| 738fcef453 | |||
| eb4b719b4b | |||
| 866eaedfeb | |||
| 04613af0cd | |||
| 126dc610b1 | |||
| 3fdc132c17 | |||
| 3a9ac56f96 | |||
| c11300d33a | |||
| a4aa1fac0b | |||
| 52e735f360 | |||
| 07dbfc5546 | |||
| c7695def5e | |||
| dd2f5ba2c3 | |||
| ff3b1e942a | |||
| d9a5ef3321 | |||
| df00126fa4 | |||
| af788e36ce | |||
| 86598dd177 | |||
| fc2d30cfaf | |||
| 7bff98b658 | |||
| 9095394fed | |||
| 633a4c5687 | |||
| 054569a3d3 | |||
| 3672d0f245 | |||
| 6723cae781 | |||
| a39a0e68a0 | |||
| 98561731f5 | |||
| f0d3614c34 | |||
| 1611dd4b23 | |||
| f3f2efcced | |||
| a778c25075 | |||
| 918ffc40ae | |||
| 728308cbc0 | |||
| 94c2ad5d1d | |||
| d0caa77f80 | |||
| ec27a1bae5 | |||
| 55f9e0131c | |||
| 723707c7ed | |||
| b5560fa0be | |||
| 9cf4cfca86 | |||
| f942e2c7f2 | |||
| 56b59cf383 | |||
| 6f8fd383f7 | |||
| 24e6deb82b | |||
| 9697aee898 | |||
| 3bb3e4caf6 | |||
| cc67174f87 | |||
| 0db4581030 | |||
| 3e570b8b89 | |||
| 6dfef29834 | |||
| aca65a66b5 | |||
| 785fbeeb5b | |||
| 90fb2c62b8 | |||
| 0e754a9924 | |||
| f363c598d8 | |||
| 89e847c8cd | |||
| 1bb2010dc0 | |||
| 2f7371b4ea | |||
| e4eeaa1d69 | |||
| 435d7dcfca | |||
| 34a5785768 | |||
| e4943f0dfa | |||
| db0fbf0596 | |||
| 183206e2d3 | |||
| f18a4741a9 | |||
| 73f4fc8ceb | |||
| f462ac7f96 | |||
| 04061b028c | |||
| 283ca908b7 | |||
| 01490c879c | |||
| bee6f41211 | |||
| 6e11154010 | |||
| 52ebcaaad7 | |||
| 6c8e82ca5a | |||
| 8bd1942083 | |||
| 3590336b1c | |||
| 453f69931f | |||
| 64b842ed94 | |||
| e21422d119 | |||
| f8e4aece31 | |||
| 14f006088a | |||
| 630890d0ac | |||
| 439edcd1be | |||
| 48661f980c | |||
| 979b484d7f | |||
| 6f757e5297 | |||
| d256275099 | |||
| 1b6c8574cd | |||
| a09ee495b6 | |||
| 00e18a480f | |||
| ffbf9278b8 | |||
| 6081ce30d5 | |||
| 2f69389982 | |||
| 0c4713b7e0 | |||
| 5842a361e2 | |||
| 0612a13cce | |||
| ee1d5c7e60 | |||
| b133acd8cd | |||
| 43985bff93 | |||
| 4b0333f3e9 | |||
| 0dcab0363d | |||
| 3c6c8aab01 | |||
| 07f3d09e38 | |||
| 0af205ede1 | |||
| c629fd2208 | |||
| b1e0129046 | |||
| 5e65512a92 | |||
| ba271da427 | |||
| 164be5732b | |||
| eedb528412 | |||
| e26bd20a5b | |||
| d842708c23 | |||
| d2112458d2 | |||
| 1ff9bc6a71 | |||
| 34210d3534 | |||
| 7d0bcf5d3b | |||
| b89ae001ad | |||
| 7aa1ecceeb | |||
| cebdc190b6 | |||
| 6fbb7d6d6d | |||
| b6e63e885d | |||
| 4273b8f09c | |||
| 01ef5f7911 | |||
| 1502159608 | |||
| 76f512fc7a | |||
| b6d400e04a | |||
| 6f08645f61 | |||
| d3385dcb4f | |||
| 8e35a786ba | |||
| 4f731e9904 | |||
| bb82c631e9 | |||
| ea810bb5d6 | |||
| 7345933d6b | |||
| df70402484 | |||
| f5dac38ca5 | |||
| 69268b525a | |||
| 4359c584bb | |||
| 3db7b30e66 | |||
| fcbbbc737d | |||
| 4f7c7f5619 | |||
| 0d45acaf20 | |||
| 7bc3b7b2ff | |||
| 7e312aae02 | |||
| 7cb8f8fab9 | |||
| b009f0b058 | |||
| 26d3672668 | |||
| 1fe6c82899 | |||
| 55eed1377a | |||
| 944e3862a5 | |||
| a47ab32800 | |||
| 6e4a9c3b01 | |||
| ca5e3f7bd1 | |||
| 8fd814e0c1 | |||
| 82fd800ad2 | |||
| fa600dbb44 | |||
| 3110e427fb | |||
| 970e524088 | |||
| 1ac2f2b5c2 | |||
| 0eb86ca269 | |||
| 82545ddaac | |||
| a4613f0af9 | |||
| e06f61ef39 | |||
| 8cd7941fc3 | |||
| 04d491b90d | |||
| 625504333b | |||
| 3105d86b7d | |||
| 2e207019b3 | |||
| 571961b4da | |||
| 7a9dbfe41d | |||
| b30754a0a4 | |||
| a72869b97e | |||
| 9a876cff3d | |||
| 4be709b815 | |||
| 66cdf4ca4c | |||
| fef808d88c | |||
| 704087ce86 | |||
| 670a098aa8 | |||
| 8d40f1d71a | |||
| 708af92a0f | |||
| b0179457ce | |||
| 41e5cf5285 | |||
| 7181ccbcef | |||
| 150a1c9771 | |||
| 2e5cc0537b | |||
| cfbc8b4849 | |||
| bccd270fc7 | |||
| 599d13b1ac | |||
| fdbebc406c | |||
| 42fcbe0501 | |||
| bc781d9473 | |||
| 245f14b8f1 | |||
| 2c10dde195 | |||
| 91d0bbf8b1 | |||
| 74a5e40d8d | |||
| df16278a03 | |||
| 6388950ab2 | |||
| 831983e314 | |||
| 45a2cd70f0 | |||
| 5d6faa8023 | |||
| e845872adc | |||
| 57407a39d2 | |||
| c869d99a0f | |||
| cd887511d8 | |||
| e09f07475a | |||
| 53e67c0437 | |||
| 10af05066c | |||
| 7b727d5ce2 | |||
| 781ec1028f | |||
| 2c0f1121ca | |||
| 2e559ebe06 | |||
| c71bdd158a | |||
| c8a9d68933 | |||
| 8a11ca8126 | |||
| 01e6140d67 | |||
| 99649bfdb8 | |||
| 6a38da4ad9 | |||
| c917f01d83 | |||
| 6636ee7420 | |||
| 1a0fda23b1 | |||
| 89b240c1f9 | |||
| c485c6e04d | |||
| c95317577d | |||
| f40bd23f6a | |||
| ec2c3e508a | |||
| c7b5df930e | |||
| c8f1269d6e | |||
| 1d9db4874f | |||
| 6099786c1b | |||
| 8b480c52cc | |||
| 34bf360da6 | |||
| ce77d510bb | |||
| 383439f902 | |||
| 4f33a0c9c0 | |||
| a76760c419 | |||
| 8e7b295d24 | |||
| 5f57cc6247 | |||
| 3d51c67f1a | |||
| 92da91a7dc | |||
| 9d7285c4ed | |||
| 07493bc7e5 | |||
| 3f6f7f404b | |||
| 474eebd8c9 | |||
| f732e7a750 | |||
| 038e23a6b3 | |||
| aec8e853e4 | |||
| 0b2943ba8b | |||
| 07d6ab5842 | |||
| 1bda3c8b53 | |||
| 6a04d6c458 | |||
| 269da3d56d | |||
| cd45be1fe2 | |||
| 16e436a0f5 | |||
| cc087e4eca | |||
| a37427c355 | |||
| c5824eedf7 | |||
| 6f39b2c030 | |||
| 8dbabb9efc | |||
| 7a15b340b0 | |||
| 60ea719b46 | |||
| 8e905f706d | |||
| dc1347184f | |||
| 20f5834d9a | |||
| a1e9bedf34 | |||
| 5819b08740 | |||
| 3c5917a6cd | |||
| a9e822762d | |||
| ac55a9657c | |||
| c66b4e7bc0 | |||
| 1bc1be14fb | |||
| df4716d5a1 | |||
| d874346d42 | |||
| b7359706db | |||
| d0f0bc5888 | |||
| 7fdd36d979 | |||
| 1f910992d6 | |||
| 2f0483ce9f | |||
| fdb10aeced | |||
| 6f4c04d944 | |||
| 0c1f5c9582 | |||
| f8b4a08fae | |||
| d4417d2474 | |||
| 057952bdeb | |||
| b74169acfc | |||
| 4f7d6b4959 | |||
| 00c2153fd3 | |||
| abfebebdd5 | |||
| 11921fab5a | |||
| afd306a71d | |||
| 2168145c3e | |||
| ab35fcbe9b | |||
| 4f03635fcd | |||
| a04a3a27a9 | |||
| d3f03540f8 | |||
| 82210a9583 | |||
| 7d68bdc7c8 | |||
| cafa938ff4 | |||
| e7876b1520 | |||
| 3875c80471 | |||
| d2c5eaf916 | |||
| aaa01de21d | |||
| d0d21b2787 | |||
| 16cea61435 | |||
| 42a899c5d3 | |||
| fc432ba073 | |||
| 9d71dff2a4 | |||
| 497ea2eee8 | |||
| d7ae944438 | |||
| cd678e997a | |||
| be6399238b | |||
| 86e2523069 | |||
| 3489144757 | |||
| 367b45e3bd | |||
| 597eacaaeb | |||
| 0b35d4a7e3 | |||
| 5ecd0d94eb | |||
| b376de1ad3 | |||
| 6b7f071988 | |||
| 26628913cb | |||
| 929ff4286a | |||
| 171161e6c7 | |||
| 96b1662e4a | |||
| 9ee0aebd3f | |||
| 80d532b0f1 | |||
| 7d497ce09b | |||
| 71ec06393a | |||
| 57d782bc94 | |||
| ce6f7ab1b1 | |||
| aa2f651124 | |||
| 666ba351a2 | |||
| 3c643f814c | |||
| d402bdb7e0 | |||
| 62f821abf2 | |||
| f9bf41d773 | |||
| b1ce971a2f | |||
| 9cd36abf10 | |||
| 5913ee0706 | |||
| eeb8873b1d | |||
| 9e3564bd6a | |||
| 8811ce0200 | |||
| b2c608e7a5 | |||
| 565a8e0e6b | |||
| b9018baa03 | |||
| c5f2d07c87 | |||
| 26dfbfb2ac | |||
| be426235dd | |||
| bc07e1dbf4 | |||
| 74ef98f8fc | |||
| 2766dd672a | |||
| 11ffa45b89 | |||
| 53bd1b9ec1 | |||
| cd2d0b7089 | |||
| 77f7763560 | |||
| cf41347cb3 | |||
| b1ac3a0b8b | |||
| f9aec7d8fd | |||
| debf568750 | |||
| 0a3a6825d5 | |||
| ad535e674f | |||
| a8c78f3097 | |||
| a431bccc02 | |||
| 9e99b04375 | |||
| 826d792ff2 | |||
| 5a5f92d2e9 | |||
| bce96b29a6 | |||
| 42c47d9b44 | |||
| f088fdff84 | |||
| 8649b285cf | |||
| 3972fbd1d9 | |||
| 437185cb1d | |||
| 6fcff0863a | |||
| 56c4595058 | |||
| e384b810bf | |||
| 1553900193 | |||
| d6e736bd56 | |||
| c92365128a | |||
| 16af31d980 | |||
| 0f0e6eb8ba | |||
| 3dca66eefa | |||
| f864aa1cfd | |||
| 0669b9da34 | |||
| 9b7c757942 | |||
| 0b84c18736 | |||
| 3a297271eb | |||
| 83a133b344 | |||
| 967e578d54 | |||
| 9856e17974 | |||
| 96d4e7bc56 | |||
| ffdaf3a859 | |||
| e9fd377772 | |||
| 63fee66657 | |||
| cfec4b12ca | |||
| 13f135abe9 | |||
| a98a7c7645 | |||
| 22041b6f8d | |||
| 8187398bdf | |||
| 0b649fd3e1 | |||
| 4efa93b03b | |||
| 3826846368 | |||
| 921f99d39d | |||
| 421bb7d154 | |||
| 60f766f35c | |||
| 51899c4c13 | |||
| f7296d18b9 | |||
| b420c5b8fe | |||
| 9b8312f596 | |||
| 29b806e675 | |||
| 798ae7c2c7 | |||
| 2a9aa357cb | |||
| b4587fd79e | |||
| 53e789dfdc | |||
| bf0e7d2c77 | |||
| aa5525d1f5 | |||
| 1da14a3f53 | |||
| a9485ad6bf | |||
| e9c9ac0cab | |||
| b13f71424b | |||
| 052328c5fa | |||
| 71d6311bd4 | |||
| 54fe0174bc | |||
| 9451342aae | |||
| dc46dff62c | |||
| f30fa39067 | |||
| bbd18afbcc | |||
| 6e6486ccae | |||
| ad0513c87c | |||
| bf40767fa1 | |||
| 7c4fbc63dc | |||
| ee15b802b2 | |||
| 972b01c001 | |||
| 92f6c8f4d6 | |||
| 910ffa7a5a | |||
| 7a8a440eb6 | |||
| eddc897cd8 | |||
| 637ae8ce1d | |||
| c146c98b72 | |||
| f72a087007 | |||
| 594e4d5fee | |||
| a7de955926 | |||
| 5ed99a9105 | |||
| 24111c1548 | |||
| 5949727c8d | |||
| c880dbfa60 | |||
| dbd7ab5f23 | |||
| b94f89b4f5 | |||
| 8060aeb5e7 | |||
| 35569c5ec8 | |||
| 1b477aaa0d | |||
| 583a0a2dd5 | |||
| 6ef94ade6a | |||
| 52848d6341 | |||
| 1d2a6ad065 | |||
| c766f7daa5 | |||
| 1b154699c6 | |||
| 2278ad4652 | |||
| 962f2bbf69 | |||
| 9630f236f8 | |||
| de7699d972 | |||
| e22c577f7a | |||
| 8cfb738db3 | |||
| 32e1fc66ce | |||
| 581f9d4101 | |||
| edfa7bcefb | |||
| 04a391cd4b | |||
| 408df683d8 | |||
| f998d43e68 | |||
| a3e161a9a3 | |||
| 6c80ef38f5 | |||
| a3e8b42be6 | |||
| af6016bba5 | |||
| 75874035a4 | |||
| be1ecf96d4 | |||
| 477342d324 | |||
| 080c32b9f3 | |||
| b81ebe6f19 | |||
| 436fef7efa | |||
| 222daa5366 | |||
| a51579a77d | |||
| 48fd4972da | |||
| ab800aa891 | |||
| 50371b3676 | |||
| 62c4838ba7 | |||
| ebb3a04251 | |||
| 6a371f06b0 | |||
| 808ff6abb9 | |||
| f0f5b52150 | |||
| 08d39d4593 | |||
| a52e490c86 | |||
| d4a891e6c4 | |||
| 0907ca2081 | |||
| bbc16bb937 | |||
| 73e4976ae4 | |||
| e893cfd757 | |||
| 9d262e8e7f | |||
| 2c821d2bbf | |||
| ebd4ea548c | |||
| 0e1b8126dd | |||
| cfaffd3c88 | |||
| 1b9a3f9f63 | |||
| bcb3b19418 | |||
| a10d77cdfe | |||
| 437131cc7a | |||
| 9358639c41 | |||
| e8bdd8349c | |||
| a2ba5518e0 | |||
| bdd81e4cbc | |||
| 82c6354e1d | |||
| 18c9f22560 | |||
| c67ecbf61d | |||
| 950ec10cff | |||
| 254d7828aa | |||
| 1f327ef8ca | |||
| f2ee213caa | |||
| 8b50cd9661 | |||
| 4674caa01a | |||
| 092e48b9d5 | |||
| 5e9e41c045 | |||
| 1184b46c40 | |||
| 97a91e5454 | |||
| c5b78a2af5 | |||
| e1b92c3d64 | |||
| 314dee430e | |||
| 77daa0085e | |||
| 7fb455096c | |||
| cddeb37289 | |||
| 4eedf6ad36 | |||
| 290d1671a2 | |||
| 0c9485a6bf | |||
| dffdd471d5 | |||
| 6c193f723f | |||
| 3976011af0 | |||
| 499a054eb9 | |||
| 40e1a879e3 | |||
| 57f0ea04f7 | |||
| c023209aa5 | |||
| 51dab96889 | |||
| 50354462fe | |||
| 95d8be0455 | |||
| 2bbd86e25d | |||
| 4265441e1d | |||
| a47d744f64 | |||
| 797680895b | |||
| cd51d57f12 | |||
| 426594ae00 | |||
| 643602d038 | |||
| 5858f57fe9 | |||
| 5a940b1d2c | |||
| a5e33f6d3a | |||
| ca55e61dd2 | |||
| 65d7b30011 | |||
| 55f8585ea8 | |||
| fcf8ec98a0 | |||
| 5719b7df06 | |||
| 5d4a750dfb | |||
| 7bf21fb02d | |||
| 57d2b7e3be | |||
| 557b09a157 | |||
| 3b5215db21 | |||
| 4e9be7a181 | |||
| 259734964d | |||
| f97c7a0f6e | |||
| d7488e70b0 | |||
| 87c55784c4 | |||
| 5235aff8ad | |||
| 6ef36d5ca6 | |||
| 1ead368595 | |||
| 4b43304c76 | |||
| 3e09da0128 | |||
| f36a6c5d6c | |||
| b85d660a5c | |||
| 2fd201c7fa | |||
| 0a0c3c0ede | |||
| ddcebb1986 | |||
| 1cc2dfc963 | |||
| 166b1b31c0 | |||
| 5d6bb84d25 | |||
| 0e8755972c | |||
| 5808f77ade | |||
| a4d6d5e6c3 | |||
| b3d3efc8c4 | |||
| b8a4d8cab2 | |||
| 1bf182c341 | |||
| 76a8fb8a0a | |||
| eb342d5abf | |||
| 62a4e8242b | |||
| ea26691967 | |||
| bf92727b27 | |||
| fcca69d243 | |||
| beb385aab4 | |||
| 2591ab5d36 | |||
| 9074312fe3 | |||
| 4a0fa2a3a4 | |||
| 3f51be6a2d | |||
| fa53a3b15e | |||
| 9336a0a102 | |||
| e4b153a866 | |||
| a68691f2d9 | |||
| 6474502738 | |||
| 0329f13fbf | |||
| 9eb7837b67 | |||
| a708521b9d | |||
| 2f6092005b | |||
| f99e2aec2d | |||
| f3ca0f066b | |||
| a58d7d63ed | |||
| 090058a2ba | |||
| c7ef8519c8 | |||
| eae8218f0d | |||
| 7389e4fb65 | |||
| fc56a15f76 | |||
| cc4c924717 | |||
| 91b03e7c93 | |||
| 6a819da0b6 | |||
| 991b53649b | |||
| 36b3cfafd2 | |||
| 5308e309ea | |||
| 379c143dbb | |||
| a532ba0579 | |||
| 05fc322919 | |||
| 0cb7d8a29a | |||
| 4db3de8d86 | |||
| a1f6826e14 | |||
| 4809e9b462 | |||
| 8f86f65884 | |||
| 482a84a6f1 | |||
| 670f2ef5da | |||
| 8321d14b0b | |||
| b69d4e0852 | |||
| 80a5889757 | |||
| 7870283bfa | |||
| e67b62f2f6 | |||
| 9148170926 | |||
| 71efa0ed6f | |||
| 8bbaaf1ce9 | |||
| 6a7be19d3a | |||
| 11ad7ad5e4 | |||
| c25bf38f50 | |||
| 9c0d0c809a | |||
| 68c1113ed1 | |||
| a6ec3fefcf | |||
| c06d3c3d26 | |||
| 3fbce643ee | |||
| 76f510f247 | |||
| b3fcefa677 | |||
| af0771a175 | |||
| 28adfff10e | |||
| 8dd600a300 | |||
| dd6adb8ee6 | |||
| e26814be31 | |||
| 1f9968d784 | |||
| 1ca5dd7e93 | |||
| 891ed3d055 | |||
| 361ad2e22a | |||
| e6f1e5d968 | |||
| 26129b52a8 | |||
| d982a95fdd | |||
| ba444c9538 | |||
| bca6fb4698 | |||
| f28b960319 | |||
| 457312d5aa | |||
| 7d4d3bea55 | |||
| 60d4aa97fb | |||
| 059202a588 | |||
| 73f1636daa | |||
| 3e4b1c0552 | |||
| 5a788af084 | |||
| 278f2af8f8 | |||
| 716727bfa7 | |||
| e8662e35e1 | |||
| dac0d2d693 | |||
| 3e488d4308 | |||
| 9507b6d800 | |||
| d5fe7708ce | |||
| cc71aabd3d | |||
| ddcb3e69f9 | |||
| 6132443d26 | |||
| 0411b3464a | |||
| 9077f14bae | |||
| 3d894ca7f5 | |||
| 7237bc07bb | |||
| 498edfffb1 | |||
| 655eefc340 | |||
| c7f6f92159 | |||
| d82729e4c6 | |||
| 8b98d13d8b | |||
| 1baa7f4aee | |||
| 35c1ba44d3 | |||
| 2acf5c878f | |||
| 02bc9d28de | |||
| 3dd273a30d | |||
| 6696bb8943 | |||
| 40560f9618 | |||
| 7d99c6dbe8 | |||
| 544e650e15 | |||
| acee734554 | |||
| 17f0297fb6 | |||
| 530ec7ab24 | |||
| f5c5d38303 | |||
| 806228be8b | |||
| 99dd33c408 | |||
| bef7937835 | |||
| 1e2c83d90f | |||
| 02abe86253 | |||
| f10b638caf | |||
| f6f33a07d0 | |||
| b75d777670 | |||
| f8952f8e34 | |||
| 583d34a801 | |||
| 1b192b5032 | |||
| 3badd5158c | |||
| 61d51e54dc | |||
| e490195cbc | |||
| fd126ba2f7 | |||
| d4acacec60 | |||
| dad56fd096 | |||
| f33b66558c | |||
| 1ffbd9399e | |||
| 9aee08ee0e | |||
| 2895ae3ddb | |||
| 2132de9dd1 | |||
| 65eddc63af | |||
| 5cc3e6510b | |||
| 9b6f5bd503 | |||
| 0619989586 | |||
| 55cae6d2aa | |||
| b119aadba5 | |||
| 81c12b1852 | |||
| eb4434ecbc | |||
| 282c15c7c4 | |||
| da8b2eab6d | |||
| 4dd2d80887 | |||
| 4132cf1437 | |||
| dc382d80bb | |||
| 60875a0472 | |||
| 175d244dee | |||
| 5932e8e931 | |||
| 287a17a9ff | |||
| c0ffaf8ea9 | |||
| c7f0b5c73d | |||
| 4c634245e9 | |||
| 54bf24b966 | |||
| b7f54a3061 | |||
| ca51056c00 | |||
| 002475f33a | |||
| d2c135eda9 | |||
| 0753df68b8 | |||
| 551a968449 | |||
| 883bdc65a1 | |||
| 292f23c4b2 | |||
| d29c5a556c | |||
| bdb38c4157 | |||
| eff9fafde8 | |||
| 5a2d9d14df | |||
| 7fd497fcc9 | |||
| 7b2f639324 | |||
| 716f11e80b | |||
| 9d9638b15b | |||
| 8123354f09 | |||
| 8ae3401452 | |||
| c2b6c0d72a | |||
| 800c44a46e | |||
| 4cd5b5712b | |||
| 0d1fc1138a | |||
| de83531285 | |||
| e711092440 | |||
| 8ffbc15cec | |||
| f884054d2c | |||
| 8f9404f99b | |||
| c3e4e23459 | |||
| 3124948175 | |||
| 281ba1e369 | |||
| a83c156bf1 | |||
| c5e85f3bfb | |||
| 4257cad46a | |||
| e2032e7e97 | |||
| 9eca965dd6 | |||
| c7285da9a7 | |||
| bfc72a9802 | |||
| fe53e426a4 | |||
| fe68b42a8c | |||
| 29ae1bcbca | |||
| 2584911d88 | |||
| 8191d9e141 | |||
| 95254341a1 | |||
| 4f589cad53 | |||
| 5d4a7ffa3b | |||
| 87e5b2bed1 | |||
| 4153331535 | |||
| 94a32d34b2 | |||
| 9b6e2114c7 | |||
| a4e2cacc46 | |||
| e8c1bdde3d | |||
| db1f44305d | |||
| 2e9dfac9ab | |||
| 61fbb9909a | |||
| fe07e223e4 | |||
| f217ba0807 | |||
| 6446b753d3 | |||
| 97fc4027de | |||
| 5dd6e5bee8 | |||
| 6fbf7b261b | |||
| d3c02f2a57 | |||
| c3de25e760 | |||
| 1b03fdb08b | |||
| a159a983a2 | |||
| 159c74ce15 | |||
| 60171ce7e4 | |||
| e4a2c738b2 | |||
| 5b9106fdb5 | |||
| 5c2723c7bf | |||
| de828e3d04 | |||
| e2a8f7b389 | |||
| 651725e3e8 | |||
| a8223fc4f2 | |||
| e6f4d649aa | |||
| 36da5d69b0 | |||
| 715c42574f | |||
| 7dc398717a | |||
| 503c996acd | |||
| e159b2e500 | |||
| ba31d5f6fb | |||
| baa2e69cdf | |||
| 1a999cbb75 | |||
| b55c1b942d | |||
| 6fdd4da0b3 | |||
| ebf4ac1d5a | |||
| 3bfaa3d5c3 | |||
| be2ee905df | |||
| 4177071758 | |||
| 5fcd0a21da | |||
| ee53d2ad51 | |||
| 9ff67b479f | |||
| 8960a82978 | |||
| b5515799dc | |||
| b53bfb0976 | |||
| aadf2778fe | |||
| 815755fa3a | |||
| a97e06b460 | |||
| 1130434b02 | |||
| 4d0873374f | |||
| 27b8202053 | |||
| 134e5ca20f | |||
| 64c8dd6292 | |||
| c4a7da9233 | |||
| e1fe21f24c | |||
| 47698bfc6c | |||
| 72d2dcc68f | |||
| f221f58973 | |||
| 93effe8fa7 | |||
| d397758dd1 | |||
| 8f43fba629 | |||
| bae94d06ac | |||
| 33323c1483 | |||
| bcf7dd0917 | |||
| ead8741393 | |||
| 14c7465bc6 | |||
| ba59ec85e0 | |||
| 0219e6d907 | |||
| b052c8457a | |||
| 384359c9d4 | |||
| 5f9184904a | |||
| afaef0dfbb | |||
| 222d1cf69b | |||
| 5e2fa48f20 | |||
| 7a7ae3b8ec | |||
| 105f1a2707 | |||
| 1f3794db77 | |||
| c4755c49b1 | |||
| c434c960a1 | |||
| 8edc4f68a2 | |||
| 3b715a1380 | |||
| 508ad76cb8 | |||
| a82898ca13 | |||
| 92b10e2ecf | |||
| f5079b1c57 | |||
| d156d43d63 | |||
| 68049b85b9 | |||
| bc30c1d9d2 | |||
| ae98315616 | |||
| 59e6006572 | |||
| 402a3809a3 | |||
| bf3e848c17 | |||
| 7a49e45b4b | |||
| 24a406e47d | |||
| d67f4a7f46 | |||
| dfa09c787a | |||
| 27e70e73a3 | |||
| 5e7e3d816c | |||
| 95edd1d451 | |||
| 418ae829da | |||
| 48f5d3f0e2 | |||
| 09a2cfaaa7 | |||
| a6ffb5d650 | |||
| 0fb3c4bfcc | |||
| 446951bd11 | |||
| 7f657ee931 | |||
| c33186569d | |||
| 5d6308e4bb | |||
| 859cf74a6c | |||
| 6a38738760 | |||
| 21b3744544 | |||
| 0c51e7fdba | |||
| b287fdb9f2 | |||
| 6c174d9c83 | |||
| 14d7db0c60 | |||
| 114f1e4833 | |||
| 461c789492 | |||
| a0417f182e | |||
| b84f7825c5 | |||
| 414c1be128 | |||
| e2ed0b7afb | |||
| c42ff645d1 | |||
| 91769f0b75 | |||
| 1dee258c18 | |||
| d9522808eb | |||
| 8e51de5349 | |||
| 91aacefc3d | |||
| eb0a1eb293 | |||
| d1796e51ff | |||
| bd1153fbe2 | |||
| 870873e480 | |||
| 999dfd7c4a | |||
| 7f0901e0bb | |||
| 7c165fb1f6 | |||
| 9d10c85be8 | |||
| 3a1694dea3 | |||
| 0fcc0072c2 | |||
| 5ae43a238d | |||
| 73e1158836 | |||
| c9c176ea05 | |||
| 7957cfa50d | |||
| 8d13ecc9c8 | |||
| 00e1c30f57 | |||
| 3f988a890d | |||
| 3a24d05bdc | |||
| 6aea461e8d | |||
| ebeb14be2f | |||
| 9812881094 | |||
| 0e5e6c7ce0 | |||
| 5b066ea693 | |||
| ac5646b84d | |||
| cc853a2b92 | |||
| 15cca8f3de | |||
| 348d073718 | |||
| 717caf527a | |||
| f46a037164 | |||
| b426c63eeb | |||
| e27ec2fd50 | |||
| f92a5899f3 | |||
| d556877b13 | |||
| c95a1d0a7d | |||
| 6c5ea2bc11 | |||
| 91b4280625 | |||
| f23e1b857a | |||
| a73e078593 | |||
| 259807600a | |||
| 29d61beb11 | |||
| da529851bd | |||
| 654b70c514 | |||
| b54f7e9256 | |||
| 721adfbf60 | |||
| 3caa5f14bd | |||
| b84da30234 | |||
| 5dcb3db5d7 | |||
| 888c488206 | |||
| 3f410c2735 | |||
| 1c282bd3cb | |||
| d80bf5a368 | |||
| 6f475f8c85 | |||
| 7cf4c5415e | |||
| d0a7f41875 | |||
| 68a4ef98ca | |||
| 66ed61c641 | |||
| 7caf8e900f | |||
| ecdc39612f | |||
| a6437b7cc5 | |||
| c44ace6011 | |||
| 518e89dc4b | |||
| 1c3521c5fa | |||
| 147cd271b8 | |||
| 7cdb321fe4 | |||
| 927f71c7e2 | |||
| fbb63ee262 | |||
| 47ba5b7b44 | |||
| 35ceef371c | |||
| 052e4689ee | |||
| 0ac599a3d9 | |||
| f1c4c7964a | |||
| cad508def6 | |||
| ca4afc2909 | |||
| 2485a5ebc9 | |||
| e7d8643665 | |||
| 0134375401 | |||
| 0fa3ed9421 | |||
| 9cbd0fec1c | |||
| 5d2d52020e | |||
| 4682650e11 | |||
| b06a21f9af | |||
| e31b40eefa | |||
| 4014137a4c | |||
| efb221b1fe | |||
| e615be971e | |||
| d76bc7aa82 | |||
| 284506b356 | |||
| f492797fba | |||
| eaeb435459 | |||
| 2865c28a9f | |||
| 75afab1f86 | |||
| 3f33ca2d6b | |||
| d224b6b9be | |||
| cbc61184bd | |||
| 67d60e32f8 | |||
| b697ee3298 | |||
| b78f814552 | |||
| 78b3d2a20f | |||
| 20eb0a2a88 | |||
| 41d996f7f3 | |||
| c563051841 | |||
| 409ec555e8 | |||
| 23e3c4d0d9 | |||
| 08e9772f66 | |||
| 11c4c950b7 | |||
| 6b42efd786 | |||
| 040a66965c | |||
| 2f42964a96 | |||
| 9b90320985 | |||
| 1b558a02b0 | |||
| 6fc724545b | |||
| 6206dd94e2 | |||
| 0a20f7fe9e | |||
| 3750dc76c7 | |||
| 3a1e5c1b5f | |||
| ef656cf762 | |||
| b3c1be108c | |||
| a918b54b28 | |||
| c1e020a286 | |||
| 0200fa6e53 | |||
| c7ced55a6c | |||
| 5ffea93731 | |||
| 846405d8b1 | |||
| 3e9768374b | |||
| 7ad3b6ad2b | |||
| 7036a6652c | |||
| 8ea46b8fc2 | |||
| 9826bd614b | |||
| c1782c432f | |||
| d44c29296d | |||
| 4393c5da1c | |||
| 02fe0329e4 | |||
| 0899f5fd29 | |||
| bdb18b4ced | |||
| 5c9a99c83e | |||
| e5c556f106 | |||
| bb0bb2a4fa | |||
| 4a3703e302 | |||
| 050f0bb6a2 | |||
| b582206003 | |||
| ad1f656dfa | |||
| 1dfbe45913 | |||
| 07884ef423 | |||
| bc54e2fb35 | |||
| b92ed60136 | |||
| 2efdbf93cb | |||
| b16632ea41 | |||
| 6b1d996b66 | |||
| 26f563df57 | |||
| ab30ff6480 | |||
| b0fcd96dfe | |||
| f5b2bb4d7d | |||
| c33bd38b5d | |||
| b44ad3a0f7 | |||
| 666925da6e | |||
| 772a982b5f | |||
| 700d95a43d | |||
| 8dfb298376 | |||
| 9517ffdfb8 | |||
| bf7f68a04b | |||
| 8a7f7fd641 | |||
| 2f0aaee823 | |||
| d6bd4be8b0 | |||
| 32b348a2d3 | |||
| 6b3af71735 | |||
| b7c0fef63f | |||
| 2672b3e2fa | |||
| a93b9a616f | |||
| 7fc1016e90 | |||
| 850d028ec7 | |||
| 331be53b8b | |||
| 49d726019a | |||
| fc570b6062 | |||
| d795dbc7ac | |||
| cd4940d710 | |||
| a93acd2a74 | |||
| 6573849f56 | |||
| 7d0e9ea762 | |||
| 60b24e36d5 | |||
| 1871a01944 | |||
| 59e16795be | |||
| 35df912be7 | |||
| 08535d6019 | |||
| 16f2a5b91a | |||
| 32cca12cd2 | |||
| fd072b7d6e | |||
| 798e322f08 | |||
| 8e3a65d84c | |||
| 8d58b1e862 | |||
| a4c11b890c | |||
| 079fa42ba3 | |||
| 74aebfca3e | |||
| c7e3a8c126 | |||
| 1f4f8c0747 | |||
| ecfe0b864b | |||
| a978c99617 | |||
| 16dd86a8db | |||
| 933bb188bd | |||
| 281590c48e | |||
| 03d7d2eead | |||
| 09776a73b5 | |||
| e791a06e2e | |||
| 749fe9d515 | |||
| 7e6a3d2e36 | |||
| 0d47d6cead | |||
| 59d5fef592 | |||
| 07fe52939d | |||
| 5b324f90a4 | |||
| 8ec3733882 | |||
| af9334c9b2 | |||
| 1662d17fc9 | |||
| e69e6d880b | |||
| 217a31a123 | |||
| af0eeb6e3b | |||
| b74991e242 | |||
| b892a6d2bd | |||
| 25df1e2ecd | |||
| 296256a55a | |||
| 66f09ed54b | |||
| cd33f68e2b | |||
| 4953d5ec62 | |||
| ae8397422a | |||
| e23fb5024a | |||
| 573ad59edc | |||
| df6d63068d | |||
| 60172274ec | |||
| 70b48ca232 | |||
| 5cfcaa1a6e | |||
| 9ff873fe53 | |||
| 20100aa78b | |||
| dcb1660880 | |||
| e1a8e45ac7 | |||
| 0c283ded5d | |||
| b6c7a940be | |||
| 644d976a78 | |||
| 45e5578cb4 | |||
| 5ffc1ac9f3 | |||
| 5f64fe052b | |||
| 73d0e9d08a | |||
| 4f5ac0edbb | |||
| 143bff909a | |||
| 9e894e0430 | |||
| 66210e5ee2 | |||
| bb8e44a268 | |||
| dde89d51d5 | |||
| 1e1a22c256 | |||
| 84b365a707 | |||
| 25bea4920c | |||
| f2d803c111 | |||
| 4126e37d91 | |||
| f75f4e8846 | |||
| 0e817b190f | |||
| 91e357e59d | |||
| 8f7efbe4e2 | |||
| 151e58daa1 | |||
| 5bfca56efa | |||
| db7e47faa2 | |||
| 6ca09af97e | |||
| 3e350151bc | |||
| 87d4f9b71a | |||
| 9af0aa5f7d | |||
| 87670265b2 | |||
| 36c45bd44e | |||
| dd93215139 | |||
| e72f741d02 | |||
| f3a982da31 | |||
| f59119bf6e | |||
| ba380ea615 | |||
| 910d374cee | |||
| 36ce968893 | |||
| f1fa8eadd2 | |||
| 73a781cbbe | |||
| 0d08c814ec | |||
| 1452f6b231 | |||
| 636b14ccce | |||
| 2a9a869e01 | |||
| 51cf5b7c67 | |||
| e41935ea1d | |||
| 8d2bcc57aa | |||
| 5de8fa2e42 | |||
| e86214015d | |||
| e34eddc386 | |||
| 894b19b8ec | |||
| f8db53896f | |||
| 35daee84e7 | |||
| fcaa92d406 | |||
| 382c3a4699 | |||
| 151f659c99 | |||
| 8004a11036 | |||
| 406f69e21d | |||
| cc049566d1 | |||
| 5ffed46288 | |||
| 6bdc31a315 | |||
| 0631c51d93 | |||
| 6a9146ff8d | |||
| 22c70df111 | |||
| 55dbff7570 | |||
| 02fa6fc5c6 | |||
| 0083d12404 | |||
| b065a2a741 | |||
| 53e9be733f | |||
| c62da6a056 | |||
| fb7915c917 | |||
| a70c7ca855 | |||
| d08b9530a2 | |||
| cac5545762 | |||
| 16956a6501 | |||
| 3672c217f8 | |||
| 7bfb426a9d | |||
| 3b92042d4b | |||
| 01a67289a9 | |||
| 02e22c664d | |||
| e942b52a67 | |||
| e745bb6675 | |||
| be7c664e07 | |||
| 83aa656bda | |||
| e25099a49e | |||
| fbeaa06100 | |||
| 3da2eb89b2 | |||
| 39e52cb145 | |||
| f129eab36f | |||
| db73ddc942 | |||
| 8ed52701fd | |||
| 4faf61a475 | |||
| 86be0bdf80 | |||
| 4b643a7b34 | |||
| 12d6c14b1c | |||
| dbdf1d9fb0 | |||
| c74ab7450d | |||
| 5fb77df903 | |||
| 61220cf44e | |||
| 5dab4ae2e2 | |||
| bb949d991a | |||
| cf61b6056a | |||
| 3bcbc6656f | |||
| 21499a4d40 | |||
| 7a792a7d48 | |||
| 7fef594390 | |||
| c21e88860f | |||
| 85047bca7b | |||
| 467811a42e | |||
| 0ffa7ff4c8 | |||
| 494928ed88 | |||
| e4a5a5672f | |||
| 69ebfbe105 | |||
| 7c1a4db5a9 | |||
| 9d68c62177 | |||
| 4891f18538 | |||
| d794c2c198 | |||
| 912e18857a | |||
| c3d9439030 | |||
| 8ec0be01a8 | |||
| 6ac96facf6 | |||
| 0b3640a522 | |||
| d25062ec81 | |||
| da2810dece | |||
| 6a4616b6ea | |||
| 235882791f | |||
| 5b13c07e01 | |||
| be01cd4894 | |||
| 023322cb25 | |||
| 14d02bdfb3 | |||
| 96e2bf020f | |||
| cd86620b74 | |||
| 7345d80b53 | |||
| 19ceea2c6c | |||
| 810c7ed040 | |||
| c233ce1a20 | |||
| 6b05835cb3 | |||
| e163ae8b70 | |||
| 9980b12551 | |||
| 97502c8b51 | |||
| 70816371e5 | |||
| f7fe9ad7b0 | |||
| 6428f0fcaf | |||
| da162853ec | |||
| 15ced47b17 | |||
| c10ea9d9de | |||
| 24a56bb45f | |||
| f56d394830 | |||
| 668d493b7f | |||
| 3905060bbf | |||
| 1e3380d0a3 | |||
| 2113e825d7 | |||
| 3851149338 | |||
| 7549ab2611 | |||
| c88794f212 | |||
| 1df0fd1bf8 | |||
| 28f4456bbe | |||
| 3ced6a3240 | |||
| 3219611a32 | |||
| 4068548c45 | |||
| dbb75e1d9e | |||
| 8e64e93d9e | |||
| c139be1966 | |||
| 9bdd71dbf1 | |||
| a5f018104e | |||
| 7c47fd47c1 | |||
| f8e54dda30 | |||
| 81b8f4171f | |||
| 711a2763ed | |||
| 160606356e | |||
| 992a30486e | |||
| c3e36ba9da | |||
| 6786aa352b | |||
| 640a60231c | |||
| 91f63ff813 | |||
| 8ce8f4e3a8 | |||
| 4b2855232a | |||
| 9822a5ce47 | |||
| dd46e9b107 | |||
| a2ca746f0a | |||
| 8c65afc56a | |||
| 38462fbcf8 | |||
| 552e9969cc | |||
| d3cd87767b | |||
| 502fa11f1d | |||
| 32da5aae84 | |||
| 63542b4ccb | |||
| b30fc28021 | |||
| d5a48e63a3 | |||
| a30ca26af8 | |||
| 70de47c156 | |||
| 38d7d75f7f | |||
| 6fe5f4bc0d | |||
| cbf5ef5953 | |||
| da53a041da | |||
| f69d8503a2 | |||
| c1935fba2d | |||
| b0c73b786a | |||
| 5674bfafc8 | |||
| b89d7ff384 | |||
| 4a01348e0b | |||
| 1811b96eb5 |
1
.gitattributes
vendored
@ -1 +0,0 @@
|
||||
*.sql linguist-language=java
|
||||
2
.gitignore
vendored
@ -8,6 +8,8 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
|
||||
.flattened-pom.xml
|
||||
|
||||
######################################################################
|
||||
# IDE
|
||||
|
||||
|
||||
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/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/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/应用信息-列表.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 |
266
README.md
@ -1,3 +1,9 @@
|
||||
<p align="center">
|
||||
<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/ruoyi-vue-pro"/>
|
||||
</p>
|
||||
|
||||
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
|
||||
|
||||
**「我喜欢写代码,乐此不疲」**
|
||||
@ -10,6 +16,7 @@
|
||||
## 🐶 新手必读
|
||||
|
||||
* 演示地址【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://doc.iocoder.cn/quick-start/>
|
||||
* 视频教程:<https://doc.iocoder.cn/video/>
|
||||
@ -22,30 +29,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!
|
||||
* Java 后端:`master` 分支为 JDK 8 + Spring Boot 2.7.18,`master-jdk21` 分支为 JDK21 + Spring Boot 3.2.0
|
||||
* 管理后台的电脑端:Vue3 提供 `element-plus`、`vben(ant-design-vue)` 两个版本,Vue2 提供 `element-ui` 版本
|
||||
* 管理后台的移动端:采用 `uni-app` 方案,一份代码多终端适配,同时支持 APP、小程序、H5!
|
||||
* 后端采用 Spring Boot 多模块架构、MySQL + MyBatis Plus、Redis + Redisson
|
||||
* 数据库可使用 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、国产达梦 DM、TiDB 等
|
||||
* 消息队列可使用 Event、Redis、RabbitMQ、Kafka、RocketMQ 等
|
||||
* 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统,支持 SSO 单点登录
|
||||
* 支持加载动态权限菜单,按钮级别权限控制,本地缓存提升性能
|
||||
* 支持加载动态权限菜单,按钮级别权限控制,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 多模块架构 |
|
||||
@ -54,28 +63,36 @@
|
||||
|
||||
### 前端项目
|
||||
|
||||
| 项目 | 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 实现的大屏报表 |
|
||||
|
||||
## 🐰 分支说明
|
||||
|
||||
| | JDK 8 完整版 | JDK 8 精简版 | JDK 17 完整版 |
|
||||
|-------|-----------------------------------------------------------|--------------------------------------------------------------------|-----------------------------------------------------------------------------|
|
||||
| 分支 | [`master`](https://gitee.com/zhijiantianya/ruoyi-vue-pro) | [`mini`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/mini/) | [`boot-dev`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/boot3-dev/) |
|
||||
| 说明 | 包括所有功能 | 只保留核心功能 | 适配 Spring Boot 3.X |
|
||||
| 系统功能 | √ | √ | √ |
|
||||
| 基础设施 | √ | √ | √ |
|
||||
| 会员中心 | √ | √ | √ |
|
||||
| 工作流程 | √ | x | 适配中 |
|
||||
| 数据报表 | √ | x | 适配中 |
|
||||
| 商城系统 | √ | x | √ |
|
||||
| 微信公众号 | √ | x | √ |
|
||||
### ⬅️ 完整版
|
||||
|
||||
【完整版】包括系统功能、基础设施、会员中心、数据报表、工作流程、商城系统、微信公众号、CRM 等功能
|
||||
|
||||
* JDK 8 + Spring Boot 2.7.18 版本:<https://gitee.com/zhijiantianya/ruoyi-vue-pro> 的 `master` 分支
|
||||
* JDK 21 + Spring Boot 3.2.0 版本:<https://gitee.com/zhijiantianya/ruoyi-vue-pro> 的 `master-jdk21` 分支
|
||||
|
||||
两个分支的功能是一致的,可以放心使用!
|
||||
|
||||
### ➡️️ 精简版
|
||||
|
||||
【精简版】只包括系统功能、基础设施功能,不包括会员中心、数据报表、工作流程、商城系统、微信公众号、CRM 等功能
|
||||
|
||||
* JDK 8 + Spring Boot 2.7.18 版本:<https://gitee.com/yudaocode/yudao-boot-mini> 的 `master` 分支
|
||||
* JDK 21 + Spring Boot 3.2.0 版本:<https://gitee.com/yudaocode/yudao-boot-mini> 的 `master-jdk21` 分支
|
||||
|
||||
如果你想把【完整版】的功能,迁移到【精简版】,可以参考 [《迁移功能到精简版》](https://doc.iocoder.cn/migrate-module/) 文档。
|
||||
|
||||
如果你想把【完整版】的功能,迁移到【精简版】,可以参考 [《迁移功能到精简版》](https://doc.iocoder.cn/migrate-module/) 文档。
|
||||
|
||||
## 😎 开源协议
|
||||
|
||||
@ -85,9 +102,9 @@
|
||||
|
||||
② 代码全部开源,不会像其他项目一样,只开源部分代码,让你无法了解整个项目的架构设计。[国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn)
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
* 系统功能
|
||||
* 基础设施
|
||||
@ -159,36 +176,36 @@
|
||||
|
||||
| | 功能 | 描述 |
|
||||
|-----|------|---------------------------|
|
||||
| 🚀 | 商户信息 | 管理商户信息,支持 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 实现分布式锁,满足并发场景 |
|
||||
| 🚀 | 幂等组件 | 基于 Redis 实现幂等组件,解决重复请求问题 |
|
||||
| 🚀 | 服务保障 | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 |
|
||||
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
|
||||
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
|
||||
|
||||
### 数据报表
|
||||
|
||||
@ -214,17 +231,21 @@ ps:核心功能已经实现,正在对接微信小程序中...
|
||||
|
||||
### 商城系统
|
||||
|
||||
建设中...
|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
演示地址:<https://doc.iocoder.cn/mall-preview/>
|
||||
|
||||
### 会员中心
|
||||
|
||||
和「商城系统」一起开发
|
||||
| | 功能 | 描述 |
|
||||
|-----|------|----------------------------------|
|
||||
| 🚀 | 会员管理 | 会员是 C 端的消费者,该功能用于会员的搜索与管理 |
|
||||
| 🚀 | 会员标签 | 对会员的标签进行创建、查询、修改、删除等操作 |
|
||||
| 🚀 | 会员等级 | 对会员的等级、成长值进行管理,可用于订单折扣等会员权益 |
|
||||
| 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 |
|
||||
| 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 |
|
||||
|
||||
## 🐨 技术栈
|
||||
|
||||
@ -246,88 +267,87 @@ ps:核心功能已经实现,正在对接微信小程序中...
|
||||
|
||||
### 框架
|
||||
|
||||
| 框架 | 说明 | 版本 | 学习指南 |
|
||||
|---------------------------------------------------------------------------------------------|------------------|-------------|----------------------------------------------------------------|
|
||||
| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.7.10 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
|
||||
| [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.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.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.6 | [文档](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/) |
|
||||
| [Quartz](https://github.com/quartz-scheduler) | 任务调度组件 | 2.3.2 | [文档](http://www.iocoder.cn/Spring-Boot/Job/?yudao) |
|
||||
| [Springdoc](https://springdoc.org/) | Swagger 文档 | 1.6.15 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) |
|
||||
| [Resilience4j](https://github.com/resilience4j/resilience4j) | 服务保障组件 | 1.7.1 | [文档](http://www.iocoder.cn/Spring-Boot/Resilience4j/?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 Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.7.17 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
|
||||
| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | |
|
||||
| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.19 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
|
||||
| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.3.2 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
|
||||
| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 3.6.1 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
|
||||
| [Redis](https://redis.io/) | key-value 数据库 | 5.0 / 6.0 /7.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.11 | [文档](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/) |
|
||||
| [Quartz](https://github.com/quartz-scheduler) | 任务调度组件 | 2.3.2 | [文档](http://www.iocoder.cn/Spring-Boot/Job/?yudao) |
|
||||
| [Springdoc](https://springdoc.org/) | Swagger 文档 | 1.6.15 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) |
|
||||
| [Resilience4j](https://github.com/resilience4j/resilience4j) | 服务保障组件 | 1.7.1 | [文档](http://www.iocoder.cn/Spring-Boot/Resilience4j/?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.5.Final | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) |
|
||||
| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.18.30 | [文档](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 |
|
||||
|----------------------------------|----------------------------------|----------------------------------|
|
||||
|  |  |  |
|
||||
|  |  |  |
|
||||
|  |  |  |
|
||||
|
||||
目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。
|
||||
|
||||
56
pom.xml
@ -13,16 +13,17 @@
|
||||
<!-- Server 主项目 -->
|
||||
<module>yudao-server</module>
|
||||
<!-- 各种 module 拓展 -->
|
||||
<module>yudao-module-member</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-report</module>-->
|
||||
<!-- <module>yudao-module-mp</module>-->
|
||||
<!-- <module>yudao-module-pay</module>-->
|
||||
<!-- <module>yudao-module-mall</module>-->
|
||||
<!-- <module>yudao-module-crm</module>-->
|
||||
<!-- 示例项目 -->
|
||||
<module>yudao-example</module>
|
||||
<!-- <module>yudao-example</module>-->
|
||||
</modules>
|
||||
|
||||
<name>${project.artifactId}</name>
|
||||
@ -30,17 +31,18 @@
|
||||
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
|
||||
|
||||
<properties>
|
||||
<revision>1.7.2-snapshot</revision>
|
||||
<revision>2.0.0-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>
|
||||
<flatten-maven-plugin.version>1.5.0</flatten-maven-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>
|
||||
<lombok.version>1.18.30</lombok.version>
|
||||
<spring.boot.version>2.7.17</spring.boot.version>
|
||||
<mapstruct.version>1.5.5.Final</mapstruct.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
@ -92,12 +94,50 @@
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>flatten-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
|
||||
<plugins>
|
||||
<!-- 统一 revision 版本 -->
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>flatten-maven-plugin</artifactId>
|
||||
<version>${flatten-maven-plugin.version}</version>
|
||||
<configuration>
|
||||
<flattenMode>resolveCiFriendliesOnly</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>
|
||||
|
||||
49
script/docker/Docker-HOWTO.md
Normal file
@ -0,0 +1,49 @@
|
||||
# Docker Build & Up
|
||||
|
||||
目标: 快速部署体验系统,帮助了解系统之间的依赖关系。
|
||||
依赖:docker compose v2,删除`name: yudao-system`,降低`version`版本为`3.3`以下,支持`docker-compose`。
|
||||
|
||||
## 功能文件列表
|
||||
|
||||
```text
|
||||
.
|
||||
├── Docker-HOWTO.md
|
||||
├── docker-compose.yml
|
||||
├── docker.env <-- 提供docker-compose环境变量配置
|
||||
├── yudao-server
|
||||
│ └── Dockerfile
|
||||
└── yudao-ui-admin
|
||||
├── .dockerignore
|
||||
├── Dockerfile
|
||||
└── nginx.conf <-- 提供基础配置,gzip压缩、api转发
|
||||
```
|
||||
|
||||
## 构建 jar 包
|
||||
|
||||
```shell
|
||||
# 创建maven缓存volume
|
||||
docker volume create --name yudao-maven-repo
|
||||
|
||||
docker run -it --rm --name yudao-maven \
|
||||
-v yudao-maven-repo:/root/.m2 \
|
||||
-v $PWD:/usr/src/mymaven \
|
||||
-w /usr/src/mymaven \
|
||||
maven mvn clean install package '-Dmaven.test.skip=true'
|
||||
```
|
||||
|
||||
## 构建启动服务
|
||||
|
||||
```shell
|
||||
docker compose --env-file docker.env up -d
|
||||
```
|
||||
|
||||
首次运行会自动构建容器。可以通过`docker compose build [service]`来手动构建所有或某个docker镜像
|
||||
|
||||
`--env-file docker.env`为可选参数,只是展示了通过`.env`文件配置容器启动的环境变量,`docker-compose.yml`本身已经提供足够的默认参数来正常运行系统。
|
||||
|
||||
## 服务器的宿主机端口映射
|
||||
|
||||
- admin ui: http://localhost:8080
|
||||
- api server: http://localhost:48080
|
||||
- mysql: root/123456, port: 3306
|
||||
- redis: port: 6379
|
||||
84
script/docker/docker-compose.yml
Normal file
@ -0,0 +1,84 @@
|
||||
version: "3.4"
|
||||
|
||||
name: yudao-system
|
||||
|
||||
services:
|
||||
mysql:
|
||||
container_name: yudao-mysql
|
||||
image: mysql:8
|
||||
restart: unless-stopped
|
||||
tty: true
|
||||
ports:
|
||||
- "3306:3306"
|
||||
environment:
|
||||
MYSQL_DATABASE: ${MYSQL_DATABASE:-ruoyi-vue-pro}
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456}
|
||||
volumes:
|
||||
- mysql:/var/lib/mysql/
|
||||
- ./sql/mysql/ruoyi-vue-pro.sql:/docker-entrypoint-initdb.d/ruoyi-vue-pro.sql:ro
|
||||
|
||||
redis:
|
||||
container_name: yudao-redis
|
||||
image: redis:6-alpine
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "6379:6379"
|
||||
volumes:
|
||||
- redis:/data
|
||||
|
||||
server:
|
||||
container_name: yudao-server
|
||||
build:
|
||||
context: ./yudao-server/
|
||||
image: yudao-server
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "48080:48080"
|
||||
environment:
|
||||
# https://github.com/polovyivan/docker-pass-configs-to-container
|
||||
SPRING_PROFILES_ACTIVE: local
|
||||
JAVA_OPTS:
|
||||
${JAVA_OPTS:-
|
||||
-Xms512m
|
||||
-Xmx512m
|
||||
-Djava.security.egd=file:/dev/./urandom
|
||||
}
|
||||
ARGS:
|
||||
--spring.datasource.dynamic.datasource.master.url=${MASTER_DATASOURCE_URL:-jdbc:mysql://yudao-mysql:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true}
|
||||
--spring.datasource.dynamic.datasource.master.username=${MASTER_DATASOURCE_USERNAME:-root}
|
||||
--spring.datasource.dynamic.datasource.master.password=${MASTER_DATASOURCE_PASSWORD:-123456}
|
||||
--spring.datasource.dynamic.datasource.slave.url=${SLAVE_DATASOURCE_URL:-jdbc:mysql://yudao-mysql:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true}
|
||||
--spring.datasource.dynamic.datasource.slave.username=${SLAVE_DATASOURCE_USERNAME:-root}
|
||||
--spring.datasource.dynamic.datasource.slave.password=${SLAVE_DATASOURCE_PASSWORD:-123456}
|
||||
--spring.redis.host=${REDIS_HOST:-yudao-redis}
|
||||
depends_on:
|
||||
- mysql
|
||||
- redis
|
||||
|
||||
admin:
|
||||
container_name: yudao-admin
|
||||
build:
|
||||
context: ./yudao-ui-admin
|
||||
args:
|
||||
NODE_ENV:
|
||||
ENV=${NODE_ENV:-production}
|
||||
PUBLIC_PATH=${PUBLIC_PATH:-/}
|
||||
VUE_APP_TITLE=${VUE_APP_TITLE:-芋道管理系统}
|
||||
VUE_APP_BASE_API=${VUE_APP_BASE_API:-/prod-api}
|
||||
VUE_APP_APP_NAME=${VUE_APP_APP_NAME:-/}
|
||||
VUE_APP_TENANT_ENABLE=${VUE_APP_TENANT_ENABLE:-true}
|
||||
VUE_APP_CAPTCHA_ENABLE=${VUE_APP_CAPTCHA_ENABLE:-true}
|
||||
VUE_APP_DOC_ENABLE=${VUE_APP_DOC_ENABLE:-true}
|
||||
VUE_APP_BAIDU_CODE=${VUE_APP_BAIDU_CODE:-fadc1bd5db1a1d6f581df60a1807f8ab}
|
||||
image: yudao-admin
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:80"
|
||||
depends_on:
|
||||
- server
|
||||
|
||||
volumes:
|
||||
mysql:
|
||||
driver: local
|
||||
redis:
|
||||
driver: local
|
||||
25
script/docker/docker.env
Normal file
@ -0,0 +1,25 @@
|
||||
## mysql
|
||||
MYSQL_DATABASE=ruoyi-vue-pro
|
||||
MYSQL_ROOT_PASSWORD=123456
|
||||
|
||||
## server
|
||||
JAVA_OPTS=-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom
|
||||
|
||||
MASTER_DATASOURCE_URL=jdbc:mysql://yudao-mysql:3306/${MYSQL_DATABASE}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
|
||||
MASTER_DATASOURCE_USERNAME=root
|
||||
MASTER_DATASOURCE_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
SLAVE_DATASOURCE_URL=${MASTER_DATASOURCE_URL}
|
||||
SLAVE_DATASOURCE_USERNAME=${MASTER_DATASOURCE_USERNAME}
|
||||
SLAVE_DATASOURCE_PASSWORD=${MASTER_DATASOURCE_PASSWORD}
|
||||
REDIS_HOST=yudao-redis
|
||||
|
||||
## admin
|
||||
NODE_ENV=production
|
||||
PUBLIC_PATH=/
|
||||
VUE_APP_TITLE=芋道管理系统
|
||||
VUE_APP_BASE_API=/prod-api
|
||||
VUE_APP_APP_NAME=/
|
||||
VUE_APP_TENANT_ENABLE=true
|
||||
VUE_APP_CAPTCHA_ENABLE=true
|
||||
VUE_APP_DOC_ENABLE=true
|
||||
VUE_APP_BAIDU_CODE=fadc1bd5db1a1d6f581df60a1807f8ab
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,165 @@
|
||||
package liquibase.datatype.core;
|
||||
|
||||
import liquibase.change.core.LoadDataChange;
|
||||
import liquibase.database.Database;
|
||||
import liquibase.database.core.*;
|
||||
import liquibase.datatype.DataTypeInfo;
|
||||
import liquibase.datatype.DatabaseDataType;
|
||||
import liquibase.datatype.LiquibaseDataType;
|
||||
import liquibase.exception.UnexpectedLiquibaseException;
|
||||
import liquibase.statement.DatabaseFunction;
|
||||
import liquibase.util.StringUtil;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@DataTypeInfo(name = "boolean", aliases = {"java.sql.Types.BOOLEAN", "java.lang.Boolean", "bit", "bool"}, minParameters = 0, maxParameters = 0, priority = LiquibaseDataType.PRIORITY_DEFAULT)
|
||||
public class BooleanType extends LiquibaseDataType {
|
||||
|
||||
@Override
|
||||
public DatabaseDataType toDatabaseDataType(Database database) {
|
||||
String originalDefinition = StringUtil.trimToEmpty(getRawDefinition());
|
||||
if ((database instanceof Firebird3Database)) {
|
||||
return new DatabaseDataType("BOOLEAN");
|
||||
}
|
||||
|
||||
if ((database instanceof Db2zDatabase) || (database instanceof FirebirdDatabase)) {
|
||||
return new DatabaseDataType("SMALLINT");
|
||||
} else if (database instanceof MSSQLDatabase) {
|
||||
return new DatabaseDataType(database.escapeDataTypeName("bit"));
|
||||
} else if (database instanceof MySQLDatabase) {
|
||||
if (originalDefinition.toLowerCase(Locale.US).startsWith("bit")) {
|
||||
return new DatabaseDataType("BIT", getParameters());
|
||||
}
|
||||
return new DatabaseDataType("BIT", 1);
|
||||
} else if (database instanceof OracleDatabase) {
|
||||
return new DatabaseDataType("NUMBER", 1);
|
||||
} else if ((database instanceof SybaseASADatabase) || (database instanceof SybaseDatabase)) {
|
||||
return new DatabaseDataType("BIT");
|
||||
} else if (database instanceof DerbyDatabase) {
|
||||
if (((DerbyDatabase) database).supportsBooleanDataType()) {
|
||||
return new DatabaseDataType("BOOLEAN");
|
||||
} else {
|
||||
return new DatabaseDataType("SMALLINT");
|
||||
}
|
||||
} else if (database instanceof DB2Database) {
|
||||
if (((DB2Database) database).supportsBooleanDataType())
|
||||
return new DatabaseDataType("BOOLEAN");
|
||||
else
|
||||
return new DatabaseDataType("SMALLINT");
|
||||
} else if (database instanceof HsqlDatabase) {
|
||||
return new DatabaseDataType("BOOLEAN");
|
||||
} else if (database instanceof PostgresDatabase) {
|
||||
if (originalDefinition.toLowerCase(Locale.US).startsWith("bit")) {
|
||||
return new DatabaseDataType("BIT", getParameters());
|
||||
}
|
||||
} else if (database instanceof DmDatabase) { // dhb52: DM Support
|
||||
return new DatabaseDataType("bit");
|
||||
}
|
||||
|
||||
return super.toDatabaseDataType(database);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String objectToSql(Object value, Database database) {
|
||||
if ((value == null) || "null".equals(value.toString().toLowerCase(Locale.US))) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String returnValue;
|
||||
if (value instanceof String) {
|
||||
value = ((String) value).replaceAll("'", "");
|
||||
if ("true".equals(((String) value).toLowerCase(Locale.US)) || "1".equals(value) || "b'1'".equals(((String) value).toLowerCase(Locale.US)) || "t".equals(((String) value).toLowerCase(Locale.US)) || ((String) value).toLowerCase(Locale.US).equals(this.getTrueBooleanValue(database).toLowerCase(Locale.US))) {
|
||||
returnValue = this.getTrueBooleanValue(database);
|
||||
} else if ("false".equals(((String) value).toLowerCase(Locale.US)) || "0".equals(value) || "b'0'".equals(
|
||||
((String) value).toLowerCase(Locale.US)) || "f".equals(((String) value).toLowerCase(Locale.US)) || ((String) value).toLowerCase(Locale.US).equals(this.getFalseBooleanValue(database).toLowerCase(Locale.US))) {
|
||||
returnValue = this.getFalseBooleanValue(database);
|
||||
} else if (database instanceof PostgresDatabase && Pattern.matches("b?([01])\\1*(::bit|::\"bit\")?", (String) value)) {
|
||||
returnValue = "b'"
|
||||
+ value.toString()
|
||||
.replace("b", "")
|
||||
.replace("\"", "")
|
||||
.replace("::it", "")
|
||||
+ "'::\"bit\"";
|
||||
} else {
|
||||
throw new UnexpectedLiquibaseException("Unknown boolean value: " + value);
|
||||
}
|
||||
} else if (value instanceof Long) {
|
||||
if (Long.valueOf(1).equals(value)) {
|
||||
returnValue = this.getTrueBooleanValue(database);
|
||||
} else {
|
||||
returnValue = this.getFalseBooleanValue(database);
|
||||
}
|
||||
} else if (value instanceof Number) {
|
||||
if (value.equals(1) || "1".equals(value.toString()) || "1.0".equals(value.toString())) {
|
||||
returnValue = this.getTrueBooleanValue(database);
|
||||
} else {
|
||||
returnValue = this.getFalseBooleanValue(database);
|
||||
}
|
||||
} else if (value instanceof DatabaseFunction) {
|
||||
return value.toString();
|
||||
} else if (value instanceof Boolean) {
|
||||
if (((Boolean) value)) {
|
||||
returnValue = this.getTrueBooleanValue(database);
|
||||
} else {
|
||||
returnValue = this.getFalseBooleanValue(database);
|
||||
}
|
||||
} else {
|
||||
throw new UnexpectedLiquibaseException("Cannot convert type " + value.getClass() + " to a boolean value");
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
protected boolean isNumericBoolean(Database database) {
|
||||
if (database instanceof Firebird3Database) {
|
||||
return false;
|
||||
}
|
||||
if (database instanceof DerbyDatabase) {
|
||||
return !((DerbyDatabase) database).supportsBooleanDataType();
|
||||
} else if (database instanceof DB2Database) {
|
||||
return !((DB2Database) database).supportsBooleanDataType();
|
||||
}
|
||||
return (database instanceof Db2zDatabase)
|
||||
|| (database instanceof FirebirdDatabase)
|
||||
|| (database instanceof MSSQLDatabase)
|
||||
|| (database instanceof MySQLDatabase)
|
||||
|| (database instanceof OracleDatabase)
|
||||
|| (database instanceof SQLiteDatabase)
|
||||
|| (database instanceof SybaseASADatabase)
|
||||
|| (database instanceof SybaseDatabase)
|
||||
|| (database instanceof DmDatabase); // dhb52: DM Support
|
||||
}
|
||||
|
||||
/**
|
||||
* The database-specific value to use for "false" "boolean" columns.
|
||||
*/
|
||||
public String getFalseBooleanValue(Database database) {
|
||||
if (isNumericBoolean(database)) {
|
||||
return "0";
|
||||
}
|
||||
if (database instanceof InformixDatabase) {
|
||||
return "'f'";
|
||||
}
|
||||
return "FALSE";
|
||||
}
|
||||
|
||||
/**
|
||||
* The database-specific value to use for "true" "boolean" columns.
|
||||
*/
|
||||
public String getTrueBooleanValue(Database database) {
|
||||
if (isNumericBoolean(database)) {
|
||||
return "1";
|
||||
}
|
||||
if (database instanceof InformixDatabase) {
|
||||
return "'t'";
|
||||
}
|
||||
return "TRUE";
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoadDataChange.LOAD_DATA_TYPE getLoadTypeName() {
|
||||
return LoadDataChange.LOAD_DATA_TYPE.BOOLEAN;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
防止IDEA将`.`和`/`混为一谈
|
||||
@ -0,0 +1,21 @@
|
||||
liquibase.database.core.CockroachDatabase
|
||||
liquibase.database.core.DB2Database
|
||||
liquibase.database.core.Db2zDatabase
|
||||
liquibase.database.core.DerbyDatabase
|
||||
liquibase.database.core.Firebird3Database
|
||||
liquibase.database.core.FirebirdDatabase
|
||||
liquibase.database.core.H2Database
|
||||
liquibase.database.core.HsqlDatabase
|
||||
liquibase.database.core.InformixDatabase
|
||||
liquibase.database.core.Ingres9Database
|
||||
liquibase.database.core.MSSQLDatabase
|
||||
liquibase.database.core.MariaDBDatabase
|
||||
liquibase.database.core.MockDatabase
|
||||
liquibase.database.core.MySQLDatabase
|
||||
liquibase.database.core.OracleDatabase
|
||||
liquibase.database.core.PostgresDatabase
|
||||
liquibase.database.core.SQLiteDatabase
|
||||
liquibase.database.core.SybaseASADatabase
|
||||
liquibase.database.core.SybaseDatabase
|
||||
liquibase.database.core.DmDatabase
|
||||
liquibase.database.core.UnsupportedDatabase
|
||||
5798
sql/dm/ruoyi-vue-pro-dm8.sql
Normal file
77
sql/mysql/optinal/Ureport.sql
Normal file
@ -0,0 +1,77 @@
|
||||
-- 菜单 SQL
|
||||
INSERT INTO system_menu(
|
||||
name, permission, type, sort, parent_id,
|
||||
path, icon, component, status, component_name
|
||||
)
|
||||
VALUES (
|
||||
'Ureport2报表管理', '', 2, 0, 1281,
|
||||
'ureport-data', '', 'report/ureport/index', 0, 'UReportData'
|
||||
);
|
||||
|
||||
-- 按钮父菜单ID
|
||||
-- 暂时只支持 MySQL。如果你是 Oracle、PostgreSQL、SQLServer 的话,需要手动修改 @parentId 的部分的代码
|
||||
SELECT @parentId := LAST_INSERT_ID();
|
||||
|
||||
-- 按钮 SQL
|
||||
INSERT INTO system_menu(
|
||||
name, permission, type, sort, parent_id,
|
||||
path, icon, component, status
|
||||
)
|
||||
VALUES (
|
||||
'Ureport2报表查询', 'report:ureport-data:query', 3, 1, @parentId,
|
||||
'', '', '', 0
|
||||
);
|
||||
INSERT INTO system_menu(
|
||||
name, permission, type, sort, parent_id,
|
||||
path, icon, component, status
|
||||
)
|
||||
VALUES (
|
||||
'Ureport2报表创建', 'report:ureport-data:create', 3, 2, @parentId,
|
||||
'', '', '', 0
|
||||
);
|
||||
INSERT INTO system_menu(
|
||||
name, permission, type, sort, parent_id,
|
||||
path, icon, component, status
|
||||
)
|
||||
VALUES (
|
||||
'Ureport2报表更新', 'report:ureport-data:update', 3, 3, @parentId,
|
||||
'', '', '', 0
|
||||
);
|
||||
INSERT INTO system_menu(
|
||||
name, permission, type, sort, parent_id,
|
||||
path, icon, component, status
|
||||
)
|
||||
VALUES (
|
||||
'Ureport2报表删除', 'report:ureport-data:delete', 3, 4, @parentId,
|
||||
'', '', '', 0
|
||||
);
|
||||
INSERT INTO system_menu(
|
||||
name, permission, type, sort, parent_id,
|
||||
path, icon, component, status
|
||||
)
|
||||
VALUES (
|
||||
'Ureport2报表导出', 'report:ureport-data:export', 3, 5, @parentId,
|
||||
'', '', '', 0
|
||||
);
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS `report_ureport_data`;
|
||||
CREATE TABLE `report_ureport_data` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文件名称',
|
||||
`status` tinyint(4) NOT NULL COMMENT '状态',
|
||||
`content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '文件内容',
|
||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
|
||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
||||
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户编号',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'Ureport2报表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of report_ureport_data
|
||||
-- ----------------------------
|
||||
INSERT INTO `report_ureport_data` VALUES (11, 'role.ureport.xml', 0, '<?xml version=\"1.0\" encoding=\"UTF-8\"?><ureport><cell expand=\"Down\" name=\"A1\" row=\"1\" col=\"1\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><dataset-value dataset-name=\"role\" aggregate=\"group\" property=\"name\" order=\"none\" mapping-type=\"simple\"></dataset-value></cell><cell expand=\"Down\" name=\"B1\" row=\"1\" col=\"2\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><dataset-value dataset-name=\"role\" aggregate=\"group\" property=\"code\" order=\"none\" mapping-type=\"simple\"></dataset-value></cell><cell expand=\"Down\" name=\"C1\" row=\"1\" col=\"3\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><dataset-value dataset-name=\"role\" aggregate=\"group\" property=\"status\" order=\"none\" mapping-type=\"simple\"></dataset-value></cell><cell expand=\"None\" name=\"D1\" row=\"1\" col=\"4\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><simple-value><![CDATA[]]></simple-value></cell><cell expand=\"None\" name=\"A2\" row=\"2\" col=\"1\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><simple-value><![CDATA[]]></simple-value></cell><cell expand=\"None\" name=\"B2\" row=\"2\" col=\"2\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><simple-value><![CDATA[]]></simple-value></cell><cell expand=\"None\" name=\"C2\" row=\"2\" col=\"3\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><simple-value><![CDATA[]]></simple-value></cell><cell expand=\"None\" name=\"D2\" row=\"2\" col=\"4\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><simple-value><![CDATA[]]></simple-value></cell><cell expand=\"None\" name=\"A3\" row=\"3\" col=\"1\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><simple-value><![CDATA[]]></simple-value></cell><cell expand=\"None\" name=\"B3\" row=\"3\" col=\"2\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><simple-value><![CDATA[]]></simple-value></cell><cell expand=\"None\" name=\"C3\" row=\"3\" col=\"3\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><simple-value><![CDATA[]]></simple-value></cell><cell expand=\"None\" name=\"D3\" row=\"3\" col=\"4\"><cell-style font-size=\"10\" align=\"center\" valign=\"middle\"></cell-style><simple-value><![CDATA[]]></simple-value></cell><row row-number=\"1\" height=\"18\"/><row row-number=\"2\" height=\"18\"/><row row-number=\"3\" height=\"18\"/><column col-number=\"1\" width=\"80\"/><column col-number=\"2\" width=\"80\"/><column col-number=\"3\" width=\"80\"/><column col-number=\"4\" width=\"80\"/><datasource name=\"UReportDataSource\" type=\"buildin\"><dataset name=\"role\" type=\"sql\"><sql><![CDATA[select * from system_role]]></sql><field name=\"id\"/><field name=\"name\"/><field name=\"code\"/><field name=\"sort\"/><field name=\"data_scope\"/><field name=\"data_scope_dept_ids\"/><field name=\"status\"/><field name=\"type\"/><field name=\"remark\"/><field name=\"creator\"/><field name=\"create_time\"/><field name=\"updater\"/><field name=\"update_time\"/><field name=\"deleted\"/><field name=\"tenant_id\"/></dataset></datasource><paper type=\"A4\" left-margin=\"90\" right-margin=\"90\"\n top-margin=\"72\" bottom-margin=\"72\" paging-mode=\"fitpage\" fixrows=\"0\"\n width=\"595\" height=\"842\" orientation=\"portrait\" html-report-align=\"left\" bg-image=\"\" html-interval-refresh-value=\"0\" column-enabled=\"false\"></paper></ureport>', NULL, NULL, '2023-11-25 22:40:58', NULL, '2023-11-25 23:00:42', b'0', 0);
|
||||