Showing
42 changed files
with
4862 additions
and
0 deletions
Too many changes to show.
To preserve performance only 42 of 42+ files are displayed.
LICENSE
0 → 100644
1 | + Apache License | ||
2 | + Version 2.0, January 2004 | ||
3 | + http://www.apache.org/licenses/ | ||
4 | + | ||
5 | + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||
6 | + | ||
7 | + 1. Definitions. | ||
8 | + | ||
9 | + "License" shall mean the terms and conditions for use, reproduction, | ||
10 | + and distribution as defined by Sections 1 through 9 of this document. | ||
11 | + | ||
12 | + "Licensor" shall mean the copyright owner or entity authorized by | ||
13 | + the copyright owner that is granting the License. | ||
14 | + | ||
15 | + "Legal Entity" shall mean the union of the acting entity and all | ||
16 | + other entities that control, are controlled by, or are under common | ||
17 | + control with that entity. For the purposes of this definition, | ||
18 | + "control" means (i) the power, direct or indirect, to cause the | ||
19 | + direction or management of such entity, whether by contract or | ||
20 | + otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||
21 | + outstanding shares, or (iii) beneficial ownership of such entity. | ||
22 | + | ||
23 | + "You" (or "Your") shall mean an individual or Legal Entity | ||
24 | + exercising permissions granted by this License. | ||
25 | + | ||
26 | + "Source" form shall mean the preferred form for making modifications, | ||
27 | + including but not limited to software source code, documentation | ||
28 | + source, and configuration files. | ||
29 | + | ||
30 | + "Object" form shall mean any form resulting from mechanical | ||
31 | + transformation or translation of a Source form, including but | ||
32 | + not limited to compiled object code, generated documentation, | ||
33 | + and conversions to other media types. | ||
34 | + | ||
35 | + "Work" shall mean the work of authorship, whether in Source or | ||
36 | + Object form, made available under the License, as indicated by a | ||
37 | + copyright notice that is included in or attached to the work | ||
38 | + (an example is provided in the Appendix below). | ||
39 | + | ||
40 | + "Derivative Works" shall mean any work, whether in Source or Object | ||
41 | + form, that is based on (or derived from) the Work and for which the | ||
42 | + editorial revisions, annotations, elaborations, or other modifications | ||
43 | + represent, as a whole, an original work of authorship. For the purposes | ||
44 | + of this License, Derivative Works shall not include works that remain | ||
45 | + separable from, or merely link (or bind by name) to the interfaces of, | ||
46 | + the Work and Derivative Works thereof. | ||
47 | + | ||
48 | + "Contribution" shall mean any work of authorship, including | ||
49 | + the original version of the Work and any modifications or additions | ||
50 | + to that Work or Derivative Works thereof, that is intentionally | ||
51 | + submitted to Licensor for inclusion in the Work by the copyright owner | ||
52 | + or by an individual or Legal Entity authorized to submit on behalf of | ||
53 | + the copyright owner. For the purposes of this definition, "submitted" | ||
54 | + means any form of electronic, verbal, or written communication sent | ||
55 | + to the Licensor or its representatives, including but not limited to | ||
56 | + communication on electronic mailing lists, source code control systems, | ||
57 | + and issue tracking systems that are managed by, or on behalf of, the | ||
58 | + Licensor for the purpose of discussing and improving the Work, but | ||
59 | + excluding communication that is conspicuously marked or otherwise | ||
60 | + designated in writing by the copyright owner as "Not a Contribution." | ||
61 | + | ||
62 | + "Contributor" shall mean Licensor and any individual or Legal Entity | ||
63 | + on behalf of whom a Contribution has been received by Licensor and | ||
64 | + subsequently incorporated within the Work. | ||
65 | + | ||
66 | + 2. Grant of Copyright License. Subject to the terms and conditions of | ||
67 | + this License, each Contributor hereby grants to You a perpetual, | ||
68 | + worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
69 | + copyright license to reproduce, prepare Derivative Works of, | ||
70 | + publicly display, publicly perform, sublicense, and distribute the | ||
71 | + Work and such Derivative Works in Source or Object form. | ||
72 | + | ||
73 | + 3. Grant of Patent License. Subject to the terms and conditions of | ||
74 | + this License, each Contributor hereby grants to You a perpetual, | ||
75 | + worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
76 | + (except as stated in this section) patent license to make, have made, | ||
77 | + use, offer to sell, sell, import, and otherwise transfer the Work, | ||
78 | + where such license applies only to those patent claims licensable | ||
79 | + by such Contributor that are necessarily infringed by their | ||
80 | + Contribution(s) alone or by combination of their Contribution(s) | ||
81 | + with the Work to which such Contribution(s) was submitted. If You | ||
82 | + institute patent litigation against any entity (including a | ||
83 | + cross-claim or counterclaim in a lawsuit) alleging that the Work | ||
84 | + or a Contribution incorporated within the Work constitutes direct | ||
85 | + or contributory patent infringement, then any patent licenses | ||
86 | + granted to You under this License for that Work shall terminate | ||
87 | + as of the date such litigation is filed. | ||
88 | + | ||
89 | + 4. Redistribution. You may reproduce and distribute copies of the | ||
90 | + Work or Derivative Works thereof in any medium, with or without | ||
91 | + modifications, and in Source or Object form, provided that You | ||
92 | + meet the following conditions: | ||
93 | + | ||
94 | + (a) You must give any other recipients of the Work or | ||
95 | + Derivative Works a copy of this License; and | ||
96 | + | ||
97 | + (b) You must cause any modified files to carry prominent notices | ||
98 | + stating that You changed the files; and | ||
99 | + | ||
100 | + (c) You must retain, in the Source form of any Derivative Works | ||
101 | + that You distribute, all copyright, patent, trademark, and | ||
102 | + attribution notices from the Source form of the Work, | ||
103 | + excluding those notices that do not pertain to any part of | ||
104 | + the Derivative Works; and | ||
105 | + | ||
106 | + (d) If the Work includes a "NOTICE" text file as part of its | ||
107 | + distribution, then any Derivative Works that You distribute must | ||
108 | + include a readable copy of the attribution notices contained | ||
109 | + within such NOTICE file, excluding those notices that do not | ||
110 | + pertain to any part of the Derivative Works, in at least one | ||
111 | + of the following places: within a NOTICE text file distributed | ||
112 | + as part of the Derivative Works; within the Source form or | ||
113 | + documentation, if provided along with the Derivative Works; or, | ||
114 | + within a display generated by the Derivative Works, if and | ||
115 | + wherever such third-party notices normally appear. The contents | ||
116 | + of the NOTICE file are for informational purposes only and | ||
117 | + do not modify the License. You may add Your own attribution | ||
118 | + notices within Derivative Works that You distribute, alongside | ||
119 | + or as an addendum to the NOTICE text from the Work, provided | ||
120 | + that such additional attribution notices cannot be construed | ||
121 | + as modifying the License. | ||
122 | + | ||
123 | + You may add Your own copyright statement to Your modifications and | ||
124 | + may provide additional or different license terms and conditions | ||
125 | + for use, reproduction, or distribution of Your modifications, or | ||
126 | + for any such Derivative Works as a whole, provided Your use, | ||
127 | + reproduction, and distribution of the Work otherwise complies with | ||
128 | + the conditions stated in this License. | ||
129 | + | ||
130 | + 5. Submission of Contributions. Unless You explicitly state otherwise, | ||
131 | + any Contribution intentionally submitted for inclusion in the Work | ||
132 | + by You to the Licensor shall be under the terms and conditions of | ||
133 | + this License, without any additional terms or conditions. | ||
134 | + Notwithstanding the above, nothing herein shall supersede or modify | ||
135 | + the terms of any separate license agreement you may have executed | ||
136 | + with Licensor regarding such Contributions. | ||
137 | + | ||
138 | + 6. Trademarks. This License does not grant permission to use the trade | ||
139 | + names, trademarks, service marks, or product names of the Licensor, | ||
140 | + except as required for reasonable and customary use in describing the | ||
141 | + origin of the Work and reproducing the content of the NOTICE file. | ||
142 | + | ||
143 | + 7. Disclaimer of Warranty. Unless required by applicable law or | ||
144 | + agreed to in writing, Licensor provides the Work (and each | ||
145 | + Contributor provides its Contributions) on an "AS IS" BASIS, | ||
146 | + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||
147 | + implied, including, without limitation, any warranties or conditions | ||
148 | + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||
149 | + PARTICULAR PURPOSE. You are solely responsible for determining the | ||
150 | + appropriateness of using or redistributing the Work and assume any | ||
151 | + risks associated with Your exercise of permissions under this License. | ||
152 | + | ||
153 | + 8. Limitation of Liability. In no event and under no legal theory, | ||
154 | + whether in tort (including negligence), contract, or otherwise, | ||
155 | + unless required by applicable law (such as deliberate and grossly | ||
156 | + negligent acts) or agreed to in writing, shall any Contributor be | ||
157 | + liable to You for damages, including any direct, indirect, special, | ||
158 | + incidental, or consequential damages of any character arising as a | ||
159 | + result of this License or out of the use or inability to use the | ||
160 | + Work (including but not limited to damages for loss of goodwill, | ||
161 | + work stoppage, computer failure or malfunction, or any and all | ||
162 | + other commercial damages or losses), even if such Contributor | ||
163 | + has been advised of the possibility of such damages. | ||
164 | + | ||
165 | + 9. Accepting Warranty or Additional Liability. While redistributing | ||
166 | + the Work or Derivative Works thereof, You may choose to offer, | ||
167 | + and charge a fee for, acceptance of support, warranty, indemnity, | ||
168 | + or other liability obligations and/or rights consistent with this | ||
169 | + License. However, in accepting such obligations, You may act only | ||
170 | + on Your own behalf and on Your sole responsibility, not on behalf | ||
171 | + of any other Contributor, and only if You agree to indemnify, | ||
172 | + defend, and hold each Contributor harmless for any liability | ||
173 | + incurred by, or claims asserted against, such Contributor by reason | ||
174 | + of your accepting any such warranty or additional liability. | ||
175 | + | ||
176 | + END OF TERMS AND CONDITIONS | ||
177 | + | ||
178 | + APPENDIX: How to apply the Apache License to your work. | ||
179 | + | ||
180 | + To apply the Apache License to your work, attach the following | ||
181 | + boilerplate notice, with the fields enclosed by brackets "[]" | ||
182 | + replaced with your own identifying information. (Don't include | ||
183 | + the brackets!) The text should be enclosed in the appropriate | ||
184 | + comment syntax for the file format. We also recommend that a | ||
185 | + file or class name and description of purpose be included on the | ||
186 | + same "printed page" as the copyright notice for easier | ||
187 | + identification within third-party archives. | ||
188 | + | ||
189 | + Copyright (c) 2019 <a href="http://www.jeecg.com">Jeecg Boot</a> All rights reserved. | ||
190 | + | ||
191 | + Licensed under the Apache License, Version 2.0 (the "License"); | ||
192 | + you may not use this file except in compliance with the License. | ||
193 | + You may obtain a copy of the License at | ||
194 | + | ||
195 | + http://www.apache.org/licenses/LICENSE-2.0 | ||
196 | + | ||
197 | + Unless required by applicable law or agreed to in writing, software | ||
198 | + distributed under the License is distributed on an "AS IS" BASIS, | ||
199 | + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
200 | + See the License for the specific language governing permissions and | ||
201 | + limitations under the License. | ||
202 | + | ||
203 | + In any case, you must not make any such use of this software as to develop software which may be considered competitive with this software. | ||
204 | + | ||
205 | + 开源协议补充 | ||
206 | + JeecgBoot 是由 北京敲敲云科技有限公司 发行的软件。 总部位于北京,地址:中国·北京·朝阳区科荟前街1号院奥林佳泰大厦。邮箱:jeecgos@163.com | ||
207 | + 本软件受适用的国家软件著作权法(包括国际条约)和双重保护许可。 | ||
208 | + | ||
209 | + 1.允许基于本平台软件开展业务系统开发。 | ||
210 | + 2.不得基于该平台软件的基础,修改包装成一个与JeecgBoot平台软件功能类似的产品进行发布、销售,或与JeecgBoot参与同类软件产品市场的竞争。 | ||
211 | + 违反此条款属于侵权行为,须赔偿侵权经济损失,同时立即停止著作权侵权行为。 | ||
212 | + 解释权归:http://www.jeecg.com | ||
213 | + |
README-EN.md
0 → 100644
1 | + | ||
2 | + | ||
3 | + | ||
4 | + | ||
5 | + | ||
6 | + | ||
7 | +JEECG BOOT Low Code Development Platform | ||
8 | +=============== | ||
9 | + | ||
10 | +The Latest Version: 3.5.0(Release date:2023-03-08) | ||
11 | + | ||
12 | + | ||
13 | +[](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE) | ||
14 | +[](http://www.jeecg.com) | ||
15 | +[](https://jeecg.blog.csdn.net) | ||
16 | +[](https://github.com/zhangdaiscott/jeecg-boot) | ||
17 | +[](https://github.com/zhangdaiscott/jeecg-boot) | ||
18 | +[](https://github.com/zhangdaiscott/jeecg-boot) | ||
19 | + | ||
20 | + | ||
21 | + | ||
22 | +Project introduction | ||
23 | +----------------------------------- | ||
24 | + | ||
25 | +<h3 align="center">Java Low Code Platform for Enterprise web applications</h3> | ||
26 | + | ||
27 | +JeecgBoot is a `low code development platform` based on code `generators`! Front and back end separation architecture SpringBoot2.x, SpringCloud, Ant Design&Vue, Mybatis plus, Shiro, JWT, support for microservices. The powerful code generator makes the front and back end of the code generation, low code development! JeecgBoot leads a new low-code development paradigm (OnlineCoding-> Code Generator -> Manual MERGE) that helps resolve 70% of the duplication in Java projects and makes development more business-focused. Not only can quickly improve efficiency, save research and development costs, but also do not lose flexibility! | ||
28 | + | ||
29 | +JeecgBoot provides a series of low code modules to make Online development truly zero code: Online form development, online reports, report configuration capabilities, online chart design, large screen design, mobile configuration capabilities, form designer, online design flow, process automation configuration, plug-in capabilities (pluggable) and more! | ||
30 | + | ||
31 | + | ||
32 | +The purpose of JEECG is: simple functions are implemented by OnlineCoding configuration, so that zero code development; Complex functions are generated by code generator and manually Merge to achieve low code development, which ensures both intelligence and flexibility. The implementation of low code development and support flexible coding at the same time, to solve the current low code products are generally not flexible drawbacks! | ||
33 | + | ||
34 | +JEECG Business process: Using workflow to implement and extend the task interface for developing and writing business logic, forms provides a variety of solutions: form designer, online configuration form, and coding form. At the same time, the separation design of process and form (loose coupling) is realized, and the flexible configuration of task nodes is supported, which not only ensures the confidentiality of the company's process, but also reduces the workload of developers. | ||
35 | + | ||
36 | + | ||
37 | +Technical support | ||
38 | +----------------------------------- | ||
39 | + | ||
40 | +Problems or bugs in use can be found in [Making on the Issues](https://github.com/jeecgboot/jeecg-boot/issues/new) | ||
41 | + | ||
42 | +Official Support: http://jeecg.com/doc/help | ||
43 | + | ||
44 | + | ||
45 | +Download the source code | ||
46 | +----------------------------------- | ||
47 | +- The background source :https://github.com/jeecgboot/jeecg-boot | ||
48 | +- Front-end source (Vue3 version):https://github.com/jeecgboot/jeecgboot-vue3 | ||
49 | +- Front-end source (Vue2 version):https://github.com/jeecgboot/ant-design-vue-jeecg | ||
50 | +- APP Supporting framework:https://github.com/jeecgboot/jeecg-uniapp | ||
51 | + | ||
52 | +##### Project description | ||
53 | + | ||
54 | +| Project | description | | ||
55 | +|--------------------|------------------------| | ||
56 | +| `jeecg-boot` | SpringBoot background source code (support microservices) | | ||
57 | +| `jeecgboot-vue3` | Vue3+TS new front-end source code| | ||
58 | +| `ant-design-vue-jeecg` |Vue2 version front-end source code | | ||
59 | +| `jeecg-uniapp` | APP development framework, a code multi terminal adaptation, and support APP, small program, H5 | | ||
60 | +| `jeecg-boot-starter` | [Stater relies on the project to be maintained separately. Click Download](https://gitee.com/jeecg/jeecg-boot-starter) | | ||
61 | +| `More` | [Download more source code](https://github.com/jeecgboot) | | ||
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | ||
66 | + | ||
67 | +For the project | ||
68 | +----------------------------------- | ||
69 | +Jeecg-Boot low code development platform can be applied in the development of any J2EE project, especially for SAAS projects, enterprise information management system (MIS), internal office system (OA), enterprise resource planning system (ERP), customer relationship management system (CRM), etc. Its semi-intelligent manual Merge development method, Can significantly improve the development efficiency of more than 70%, greatly reduce the development cost. | ||
70 | + | ||
71 | + | ||
72 | + | ||
73 | +Docker starts the project | ||
74 | +----------------------------------- | ||
75 | + | ||
76 | +- [Docker starts the monomer background](http://doc.jeecg.com/2043889) | ||
77 | +- [Docker starts the Vue3 front-end](http://vue3.jeecg.com/3028878) | ||
78 | + | ||
79 | +- [Docker starts the micro-service background](http://doc.jeecg.com/3043472) | ||
80 | +- [Docker starts the Vue2 front-end](http://doc.jeecg.com/3043612) | ||
81 | + | ||
82 | + | ||
83 | + | ||
84 | + | ||
85 | +Technical documentation | ||
86 | +----------------------------------- | ||
87 | + | ||
88 | +- Website: [http://www.jeecg.com](http://www.jeecg.com) | ||
89 | + | ||
90 | +- Demo : [Vue3](http://boot3.jeecg.com) | [Vue2](http://boot.jeecg.com) | ||
91 | + | ||
92 | +- Doc: [Vue3](http://vue3.jeecg.com) | [Main](http://doc.jeecg.com) | ||
93 | + | ||
94 | +- Newbie guide: [Quick start](http://www.jeecg.com/doc/quickstart) | [video](https://space.bilibili.com/454617261/channel/series) | [Q&A ](http://www.jeecg.com/doc/qa) | [help](http://jeecg.com/doc/help) | [1 minute experience](https://my.oschina.net/jeecg/blog/3083313) | ||
95 | + | ||
96 | +- Microservice Development: [Monomer upgrade to microservice](http://doc.jeecg.com/3043471) | ||
97 | + | ||
98 | +- QQ group : ⑥730954414、683903138、⑤860162132(full)、④774126647(full)、③816531124(full)、②769925425(full)、①284271917(full) | ||
99 | + | ||
100 | + | ||
101 | + | ||
102 | + | ||
103 | +##### Star charts | ||
104 | + | ||
105 | +[](https://star-history.com/#jeecgboot/jeecg-boot) | ||
106 | + | ||
107 | + | ||
108 | + | ||
109 | + | ||
110 | +Background directory Structure | ||
111 | +----------------------------------- | ||
112 | +``` | ||
113 | +project structure | ||
114 | +├─jeecg-boot-parent | ||
115 | +│ ├─jeecg-boot-base-core | ||
116 | +│ ├─jeecg-module-demo | ||
117 | +│ ├─jeecg-module-system | ||
118 | +│ │ ├─jeecg-system-biz | ||
119 | +│ │ ├─jeecg-system-start system (8080) | ||
120 | +│ │ ├─jeecg-system-api | ||
121 | +│ │ │ ├─jeecg-system-cloud-api | ||
122 | +│ │ │ ├─jeecg-system-local-api | ||
123 | +│ ├─jeecg-server-cloud | ||
124 | + ├─jeecg-cloud-gateway (9999) | ||
125 | + ├─jeecg-cloud-nacos --Nacos(8848) | ||
126 | + ├─jeecg-system-cloud-start --System(7001) | ||
127 | + ├─jeecg-demo-cloud-start --Demo(7002) | ||
128 | + ├─jeecg-visual | ||
129 | + ├─jeecg-cloud-monitor -- (9111) | ||
130 | + ├─jeecg-cloud-xxljob -- (9080) | ||
131 | + ├─jeecg-cloud-sentinel --sentinel (9000) | ||
132 | + ├─jeecg-cloud-test | ||
133 | + ├─jeecg-cloud-test-more | ||
134 | + ├─jeecg-cloud-test-rabbitmq | ||
135 | + ├─jeecg-cloud-test-seata | ||
136 | + ├─jeecg-cloud-test-shardingsphere | ||
137 | + | ||
138 | +``` | ||
139 | + | ||
140 | + | ||
141 | + | ||
142 | + | ||
143 | +Why JeecgBoot? | ||
144 | +----------------------------------- | ||
145 | +* Adopt the latest mainstream front and back separation framework (Springboot+Mybatis+antd), easy to use; Code generator has low dependency, flexible expansion ability, and can quickly realize secondary development; | ||
146 | +* Support microservices SpringCloud Alibaba(Nacos, Gateway, Sentinel, Skywalking), and provide switching mechanism to support free switching between single and microservices | ||
147 | +* High development efficiency, using code generator, single table, tree list, one-to-many, one-to-one and other data models, add, delete, change and search function one-key generation, menu configuration directly use; | ||
148 | +* Code generator provides powerful template mechanism, support custom template, currently provide four sets of style template (single table two sets, tree model one set, one to many three sets) | ||
149 | +* Code generator is very intelligent, online business modeling, online configuration, WYSIWYG support 23 kinds of controls, a key to generate front and back end code, greatly improve the development efficiency, no longer worry about repeated work. | ||
150 | +* Low code ability: Online online form (without coding, through online configuration of the form, to achieve the addition, deletion, change and check of the form, support single table, tree, one-to-many, one-to-one model, to achieve everyone can code) | ||
151 | +* Low code ability: Online online report (without coding, through online configuration, to achieve data report, can quickly extract data, reduce development pressure, to achieve everyone can code) | ||
152 | +* Low code ability: Online online chart (without coding, through online configuration, to achieve graphs, bar graphs, data reports, etc., support custom layout, to achieve everyone can code) | ||
153 | +* Complete encapsulation of user, role, menu, organization, data dictionary, online scheduled tasks and other basic functions, support access authorization, button permission, data permission and other functions | ||
154 | +* Commonly used common package, various tools (scheduled task, SMS interface, email sending,Excel import and export, etc.), basically meeting 80% of project requirements | ||
155 | +* Easy Excel import and export, support single table export and one-to-many table mode export, generated code with import and export function | ||
156 | +* Integrated simple report tools, image report and data export is very convenient, can be extremely convenient to generate graphical reports, pdf, excel, word and other reports; | ||
157 | +* Before and after the separation technology, the page UI style is exquisite, for the commonly used components to do the encapsulation: time, row table control, interception display control, report component, editor and so on | ||
158 | +* Query filter: query function automatically generated, the background dynamic spell SQL additional query conditions; Supports multiple matching modes (full matching, fuzzy query, included query, and unmatched query). | ||
159 | +* Data permission (fine data permission control, control to row level, list level, form field level, realize different people see different data, different people operate different fields on the same page | ||
160 | +* Page verification automatically generated (must be input, digital verification, amount verification, time and space, etc.); | ||
161 | +* Support SAAS service model and provide SaaS multi-tenant architecture solution. | ||
162 | +* Distributed file service, integration of minio, Ali OSS and other excellent third parties, to provide convenient file upload and management, but also support local storage. | ||
163 | +* Mainstream database compatibility, a set of code is fully compatible with Mysql, Postgresql, Oracle, Sqlserver, MariaDB, dream and other mainstream databases. | ||
164 | +* Integrate workflow activiti and realize only the configuration of flow direction in the page, which can greatly simplify the development of bpm workflow; Using bpm's process designer to draw the flow direction, a workflow is basically complete with a small amount of java code; | ||
165 | +* Low code ability: online process design, using open source Activiti process engine, to achieve online drawing process, custom form, form attachment, business flow | ||
166 | +* Multi-data source: its simple way of use, online configuration of data source configuration, convenient to grab data from other data; | ||
167 | +* Provide single sign-on CAS integration solution, and complete docking code has been provided in the project | ||
168 | +* Low code ability: form designer, support user custom form layout, support single table, one to many forms, support select, radio, checkbox, textarea, date, popup, list, macro and other controls | ||
169 | +* Professional interface docking mechanism, unified using restful interface, integrated swagger-ui online interface documentation, Jwt token security verification, convenient client docking | ||
170 | +* Interface security mechanism, can be refined control interface authorization, very simple to realize different clients only see their own data control | ||
171 | +* Advanced combination query function, online configuration support primary and sub-table associated query, can save the query history | ||
172 | +* Provide a variety of system monitoring, real-time tracking system running conditions (monitoring Redis, Tomcat, jvm, server information, request tracking, SQL monitoring) | ||
173 | +* Message center (support SMS, email, wechat push, etc.) | ||
174 | +* Integrate Websocket message notification mechanism | ||
175 | +* Excellent mobile adaptive effect, providing APP release scheme: | ||
176 | +* Support multiple languages and provide internationalization solutions; | ||
177 | +* Data change record log, can record each change of data content, through the version comparison function to view historical changes | ||
178 | +* The platform UI is powerful and mobile adaptation is implemented | ||
179 | +* Platform home page style, provide a variety of combination mode, support custom style | ||
180 | +* Provide easy to use print plug-in, support Google, Firefox, IE11+ and other browsers | ||
181 | +* Rich sample code, provide a lot of learning case reference | ||
182 | +* Using maven module development method | ||
183 | +* Support dynamic menu routing | ||
184 | +* RBAC (Role-Based Access Control) is used for permission control. | ||
185 | +* Provide new row edit table JVXETable, easily meet a variety of complex ERP layout, with higher performance, more flexible extension, more powerful functions | ||
186 | + | ||
187 | + | ||
188 | + | ||
189 | + | ||
190 | +Technical Architecture: | ||
191 | +----------------------------------- | ||
192 | + | ||
193 | +#### Development Environment | ||
194 | + | ||
195 | +- Language: Java 8+ (less than 17) | ||
196 | + | ||
197 | +- IDE(JAVA) : IDEA (lombok plug-in must be installed) | ||
198 | + | ||
199 | +- IDE(front-end) : Vscode, WebStorm, IDEA | ||
200 | + | ||
201 | +- Dependency management: Maven | ||
202 | + | ||
203 | +- Cache: Redis | ||
204 | + | ||
205 | +- Database: MySQL5.7 + & Oracle 11 g & Sqlserver2017 [More Databases](https://my.oschina.net/jeecg/blog/4905722) | ||
206 | + | ||
207 | + | ||
208 | +#### backend | ||
209 | + | ||
210 | +- Basic framework: Spring Boot 2.6.6 | ||
211 | + | ||
212 | +- Microservice framework: Spring Cloud Alibaba 2021.0.1.0 | ||
213 | + | ||
214 | +- Persistence layer framework: MybatisPlus 3.5.1 | ||
215 | + | ||
216 | +- Report tool: JimuReport 1.5.2 | ||
217 | + | ||
218 | +- Security framework: Apache Shiro 1.8.0, Jwt 3.11.0 | ||
219 | + | ||
220 | +- Microservice technology stack: Spring Cloud Alibaba, Nacos, Gateway, Sentinel, Skywalking | ||
221 | + | ||
222 | +- Database connection pool: Alibaba Druid 1.1.22 | ||
223 | + | ||
224 | +- Log printing: logback | ||
225 | + | ||
226 | +- Others: autopoi, fastjson, poi, Swagger-ui, quartz, lombok (simplified code), etc. | ||
227 | + | ||
228 | + | ||
229 | +#### The front end | ||
230 | + | ||
231 | +- Vue2 version:`Vue2.6+@vue/cli+AntDesignVue+Viser-vue+Vuex` [detail](https://github.com/jeecgboot/ant-design-vue-jeecg) | ||
232 | +- Vue3 version:`Vue3.0+TypeScript+Vite+AntDesignVue+pinia+echarts` [detail](https://github.com/jeecgboot/jeecgboot-vue3) | ||
233 | + | ||
234 | +#### Support library | ||
235 | + | ||
236 | +| database | support | | ||
237 | +| --- | --- | | ||
238 | +| MySQL | √ | | ||
239 | +| Oracle11g | √ | | ||
240 | +| Sqlserver2017 | √ | | ||
241 | +| PostgreSQL | √ | | ||
242 | +| MariaDB | √ | | ||
243 | +| 达梦、人大金仓 | √ | | ||
244 | + | ||
245 | + | ||
246 | + | ||
247 | +## Microservice solutions | ||
248 | + | ||
249 | + | ||
250 | +1. Service registration and discovery Nacos √ | ||
251 | + | ||
252 | +2. Nacos √ | ||
253 | + | ||
254 | +3. Route gateway gateway(Three loading modes) √ | ||
255 | + | ||
256 | +4. Distributed http feign √ | ||
257 | + | ||
258 | +5. fuse degrade current limiting Sentinel √ | ||
259 | + | ||
260 | +6. Distributed files Minio and Alioss √ | ||
261 | + | ||
262 | +7. Unified permission control | ||
263 | + | ||
264 | +8. Service monitoring SpringBootAdmin√ | ||
265 | + | ||
266 | +9. link tracking Skywalking [reference document](http://doc.jeecg.com/2350293) | ||
267 | + | ||
268 | +10. Messaging middleware RabbitMQ √ | ||
269 | + | ||
270 | +11. Distributed task xxl-job √ | ||
271 | + | ||
272 | +12. Distributed Transaction Seata | ||
273 | + | ||
274 | +13. Distributed log elk + kafka | ||
275 | + | ||
276 | +14. Support docker-compose, k8s, jenkins | ||
277 | + | ||
278 | +15. CAS SSO √ | ||
279 | + | ||
280 | +16. Route traffic limiting √ | ||
281 | + | ||
282 | + | ||
283 | +#### Microservice architecture diagram | ||
284 | + | ||
285 | + | ||
286 | +### Jeecg Boot product functionality blueprint | ||
287 | + | ||
288 | + | ||
289 | + | ||
290 | + | ||
291 | + | ||
292 | +### Function module | ||
293 | +``` | ||
294 | +├─系统管理 | ||
295 | +│ ├─用户管理 | ||
296 | +│ ├─角色管理 | ||
297 | +│ ├─菜单管理 | ||
298 | +│ ├─权限设置(支持按钮权限、数据权限) | ||
299 | +│ ├─表单权限(控制字段禁用、隐藏) | ||
300 | +│ ├─部门管理 | ||
301 | +│ ├─我的部门(二级管理员) | ||
302 | +│ └─字典管理 | ||
303 | +│ └─分类字典 | ||
304 | +│ └─系统公告 | ||
305 | +│ └─职务管理 | ||
306 | +│ └─通讯录 | ||
307 | +│ └─多租户管理 | ||
308 | +├─消息中心 | ||
309 | +│ ├─消息管理 | ||
310 | +│ ├─模板管理 | ||
311 | +├─代码生成器(低代码) | ||
312 | +│ ├─代码生成器功能(一键生成前后端代码,生成后无需修改直接用,绝对是后端开发福音) | ||
313 | +│ ├─代码生成器模板(提供4套模板,分别支持单表和一对多模型,不同风格选择) | ||
314 | +│ ├─代码生成器模板(生成代码,自带excel导入导出) | ||
315 | +│ ├─查询过滤器(查询逻辑无需编码,系统根据页面配置自动生成) | ||
316 | +│ ├─高级查询器(弹窗自动组合查询条件) | ||
317 | +│ ├─Excel导入导出工具集成(支持单表,一对多 导入导出) | ||
318 | +│ ├─平台移动自适应支持 | ||
319 | +├─系统监控 | ||
320 | +│ ├─Gateway路由网关 | ||
321 | +│ ├─性能扫描监控 | ||
322 | +│ │ ├─监控 Redis | ||
323 | +│ │ ├─Tomcat | ||
324 | +│ │ ├─jvm | ||
325 | +│ │ ├─服务器信息 | ||
326 | +│ │ ├─请求追踪 | ||
327 | +│ │ ├─磁盘监控 | ||
328 | +│ ├─定时任务 | ||
329 | +│ ├─系统日志 | ||
330 | +│ ├─消息中心(支持短信、邮件、微信推送等等) | ||
331 | +│ ├─数据日志(记录数据快照,可对比快照,查看数据变更情况) | ||
332 | +│ ├─系统通知 | ||
333 | +│ ├─SQL监控 | ||
334 | +│ ├─swagger-ui(在线接口文档) | ||
335 | +│─报表示例 | ||
336 | +│ ├─曲线图 | ||
337 | +│ └─饼状图 | ||
338 | +│ └─柱状图 | ||
339 | +│ └─折线图 | ||
340 | +│ └─面积图 | ||
341 | +│ └─雷达图 | ||
342 | +│ └─仪表图 | ||
343 | +│ └─进度条 | ||
344 | +│ └─排名列表 | ||
345 | +│ └─等等 | ||
346 | +│─大屏模板 | ||
347 | +│ ├─作战指挥中心大屏 | ||
348 | +│ └─物流服务中心大屏 | ||
349 | +│─常用示例 | ||
350 | +│ ├─自定义组件 | ||
351 | +│ ├─对象存储(对接阿里云) | ||
352 | +│ ├─JVXETable示例(各种复杂ERP布局示例) | ||
353 | +│ ├─单表模型例子 | ||
354 | +│ └─一对多模型例子 | ||
355 | +│ └─打印例子 | ||
356 | +│ └─一对多TAB例子 | ||
357 | +│ └─内嵌table例子 | ||
358 | +│ └─常用选择组件 | ||
359 | +│ └─异步树table | ||
360 | +│ └─接口模拟测试 | ||
361 | +│ └─表格合计示例 | ||
362 | +│ └─异步树列表示例 | ||
363 | +│ └─一对多JEditable | ||
364 | +│ └─JEditable组件示例 | ||
365 | +│ └─图片拖拽排序 | ||
366 | +│ └─图片翻页 | ||
367 | +│ └─图片预览 | ||
368 | +│ └─PDF预览 | ||
369 | +│ └─分屏功能 | ||
370 | +│─封装通用组件 | ||
371 | +│ ├─行编辑表格JEditableTable | ||
372 | +│ └─省略显示组件 | ||
373 | +│ └─时间控件 | ||
374 | +│ └─高级查询 | ||
375 | +│ └─用户选择组件 | ||
376 | +│ └─报表组件封装 | ||
377 | +│ └─字典组件 | ||
378 | +│ └─下拉多选组件 | ||
379 | +│ └─选人组件 | ||
380 | +│ └─选部门组件 | ||
381 | +│ └─通过部门选人组件 | ||
382 | +│ └─封装曲线、柱状图、饼状图、折线图等等报表的组件(经过封装,使用简单) | ||
383 | +│ └─在线code编辑器 | ||
384 | +│ └─上传文件组件 | ||
385 | +│ └─验证码组件 | ||
386 | +│ └─树列表组件 | ||
387 | +│ └─表单禁用组件 | ||
388 | +│ └─等等 | ||
389 | +│─更多页面模板 | ||
390 | +│ ├─各种高级表单 | ||
391 | +│ ├─各种列表效果 | ||
392 | +│ └─结果页面 | ||
393 | +│ └─异常页面 | ||
394 | +│ └─个人页面 | ||
395 | +├─高级功能 | ||
396 | +│ ├─系统编码规则 | ||
397 | +│ ├─提供单点登录CAS集成方案 | ||
398 | +│ ├─提供APP发布方案 | ||
399 | +│ ├─集成Websocket消息通知机制 | ||
400 | +├─Online在线开发(低代码) | ||
401 | +│ ├─Online在线表单 - 功能已开放 | ||
402 | +│ ├─Online代码生成器 - 功能已开放 | ||
403 | +│ ├─Online在线报表 - 功能已开放 | ||
404 | +│ ├─Online在线图表(未开源) | ||
405 | +│ ├─Online图表模板配置(未开源) | ||
406 | +│ ├─Online布局设计(未开源) | ||
407 | +│ ├─多数据源管理 - 功能已开放 | ||
408 | +├─积木报表设计器(低代码) | ||
409 | +│ ├─打印设计器 | ||
410 | +│ ├─数据报表设计 | ||
411 | +│ ├─图形报表设计(支持echart) | ||
412 | +│ ├─大屏设计器(未开源) | ||
413 | +│─流程模块功能 (未开源) | ||
414 | +│ ├─流程设计器 | ||
415 | +│ ├─表单设计器 | ||
416 | + ├─大屏设计器 | ||
417 | + ├─门户设计/仪表盘设计器 | ||
418 | +│ └─我的任务 | ||
419 | +│ └─历史流程 | ||
420 | +│ └─历史流程 | ||
421 | +│ └─流程实例管理 | ||
422 | +│ └─流程监听管理 | ||
423 | +│ └─流程表达式 | ||
424 | +│ └─我发起的流程 | ||
425 | +│ └─我的抄送 | ||
426 | +│ └─流程委派、抄送、跳转 | ||
427 | +│ └─。。。 | ||
428 | +│─OA办公组件 (未开源) | ||
429 | +│ ├─更多功能 | ||
430 | +│ └─。。。 | ||
431 | +└─其他模块 | ||
432 | + └─更多功能开发中。。 | ||
433 | + | ||
434 | +``` | ||
435 | + | ||
436 | + | ||
437 | + | ||
438 | + | ||
439 | + | ||
440 | +Effect of system | ||
441 | +---- | ||
442 | +##### Screen template | ||
443 | + | ||
444 | + | ||
445 | + | ||
446 | + | ||
447 | +##### PC | ||
448 | + | ||
449 | + | ||
450 | + | ||
451 | + | ||
452 | + | ||
453 | + | ||
454 | + | ||
455 | +##### Online interface documentation | ||
456 | + | ||
457 | + | ||
458 | + | ||
459 | + | ||
460 | +##### Report | ||
461 | + | ||
462 | + | ||
463 | + | ||
464 | + | ||
465 | + | ||
466 | + | ||
467 | +##### Process | ||
468 | + | ||
469 | + | ||
470 | + | ||
471 | + | ||
472 | + | ||
473 | + | ||
474 | +##### App | ||
475 | + | ||
476 | + | ||
477 | + | ||
478 | +##### PAD | ||
479 | + | ||
480 | + | ||
481 | + | ||
482 | + | ||
483 | + | ||
484 | + | ||
485 | +## donation | ||
486 | + | ||
487 | +If so, buy the author a cup of coffee ☺ | ||
488 | + | ||
489 | + |
README.md
0 → 100644
1 | + | ||
2 | + | ||
3 | + | ||
4 | + | ||
5 | + | ||
6 | + | ||
7 | +JEECG BOOT 低代码开发平台 | ||
8 | +=============== | ||
9 | + | ||
10 | +当前最新版本: 3.5.0(发布日期:2023-03-08) | ||
11 | + | ||
12 | + | ||
13 | +[](https://github.com/zhangdaiscott/jeecg-boot/blob/master/LICENSE) | ||
14 | +[](http://www.jeecg.com) | ||
15 | +[](https://jeecg.blog.csdn.net) | ||
16 | +[](https://github.com/zhangdaiscott/jeecg-boot) | ||
17 | +[](https://github.com/zhangdaiscott/jeecg-boot) | ||
18 | +[](https://github.com/zhangdaiscott/jeecg-boot) | ||
19 | + | ||
20 | + | ||
21 | + | ||
22 | +项目介绍 | ||
23 | +----------------------------------- | ||
24 | + | ||
25 | +<h3 align="center">Java Low Code Platform for Enterprise web applications</h3> | ||
26 | + | ||
27 | +JeecgBoot 是一款基于代码生成器的`低代码开发平台`!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发! JeecgBoot 引领新的低代码开发模式(OnlineCoding-> 代码生成器-> 手工MERGE), 帮助解决Java项目70%的重复工作,让开发更多关注业务。既能快速提高效率,节省研发成本,同时又不失灵活性! | ||
28 | + | ||
29 | +JeecgBoot 提供了一系列`低代码模块`,实现在线开发`真正的零代码`:Online表单开发、Online报表、报表配置能力、在线图表设计、大屏设计、移动配置能力、表单设计器、在线设计流程、流程自动化配置、插件能力(可插拔)等等! | ||
30 | + | ||
31 | + | ||
32 | +`JEECG宗旨是:` 简单功能由OnlineCoding配置实现,做到`零代码开发`;复杂功能由代码生成器生成进行手工Merge 实现`低代码开发`,既保证了`智能`又兼顾`灵活`;实现了低代码开发的同时又支持灵活编码,解决了当前低代码产品普遍不灵活的弊端! | ||
33 | + | ||
34 | +`JEECG业务流程:` 采用工作流来实现、扩展出任务接口,供开发编写业务逻辑,表单提供多种解决方案: 表单设计器、online配置表单、编码表单。同时实现了流程与表单的分离设计(松耦合)、并支持任务节点灵活配置,既保证了公司流程的保密性,又减少了开发人员的工作量。 | ||
35 | + | ||
36 | + | ||
37 | +源码下载 | ||
38 | +----------------------------------- | ||
39 | + | ||
40 | +| 源码 | 源码地址 | | ||
41 | +|--------------------|------------------------| | ||
42 | +| 后台源码 JAVA | https://github.com/jeecgboot/jeecg-boot | | ||
43 | +| 前端源码 `Vue3版` | https://github.com/jeecgboot/jeecgboot-vue3 | | ||
44 | +| APP配套框架 | https://github.com/jeecgboot/jeecg-uniapp | | ||
45 | + | ||
46 | +##### 快速搭建开发环境 | ||
47 | + | ||
48 | +- [通过IDEA启动前后端项目](http://doc.jeecg.com/2043874) | ||
49 | +- [Vue3前端项目快速启动](http://vue3.jeecg.com/2398848) | ||
50 | +- [单体快速切换为微服务版](http://doc.jeecg.com/3043471) | ||
51 | + | ||
52 | +##### 项目说明 | ||
53 | + | ||
54 | +| 项目名 | 说明 | | ||
55 | +|--------------------|------------------------| | ||
56 | +| `jeecg-boot` | SpringBoot后台源码(支持微服务) | | ||
57 | +| `jeecgboot-vue3` | Vue3+TS 新版前端源码 | | ||
58 | +| `jeecg-uniapp` | APP开发框架,一份代码多终端适配,同时支持APP、小程序、H5 | | ||
59 | +| `jeecg-boot-starter` | [Stater依赖项目单独维护,点击下载](https://gitee.com/jeecg/jeecg-boot-starter) | | ||
60 | +| `更多开源插件` | [更多源码下载](https://github.com/jeecgboot) | | ||
61 | + | ||
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | ||
66 | +技术文档 | ||
67 | +----------------------------------- | ||
68 | + | ||
69 | +- 项目官网: [http://www.jeecg.com](http://www.jeecg.com) | ||
70 | + | ||
71 | +- 在线演示 : [Vue3版本](http://boot3.jeecg.com) | [敲敲云(零代码)](http://app.qiaoqiaoyun.com) | ||
72 | + | ||
73 | +- 开发文档: [Vue3文档](http://vue3.jeecg.com) | [主项目文档](http://doc.jeecg.com) | ||
74 | + | ||
75 | +- 新手指南: [快速入门](http://www.jeecg.com/doc/quickstart) | [常见问题 ](http://www.jeecg.com/doc/qa) | [视频教程](https://space.bilibili.com/454617261/channel/series) | [1分钟体验低代码](https://my.oschina.net/jeecg/blog/3083313) | ||
76 | + | ||
77 | +- QQ交流群 : ⑥730954414、VUE3群683903138、⑤860162132(满)、④774126647(满)、③816531124(满)、②769925425(满)、①284271917(满) | ||
78 | +> ` 提醒:【QQ群是自助服务群,建议给帮助您解决问题的同学发送指定红包,表示感谢!】 ` | ||
79 | + | ||
80 | + | ||
81 | + | ||
82 | + | ||
83 | + | ||
84 | +Docker启动项目 | ||
85 | +----------------------------------- | ||
86 | + | ||
87 | +- [Docker启动单体后台](http://doc.jeecg.com/2043889) | ||
88 | +- [Docker启动Vue3前端](http://vue3.jeecg.com/3028878) | ||
89 | +- [Docker启动微服务后台](http://doc.jeecg.com/3043472) | ||
90 | + | ||
91 | + | ||
92 | +************ | ||
93 | + | ||
94 | +VUE2版本专题说明 | ||
95 | +----------------------------------- | ||
96 | +#### 项目介绍 | ||
97 | +- 项目名称:ant-design-vue-jeecg | ||
98 | +- 说明:JeecgBoot前端提供两套解决方案,一套VUE2和一套VUE3版本,目前vue2版本最新代码只支持到jeecgboot 3.4.3版本,一定注意。 | ||
99 | +- 更多介绍:[Vue2版演示](http://boot.jeecg.com) |[开发文档](http://doc.jeecg.com) | ||
100 | +- [快速启动——Vue2前端](http://doc.jeecg.com/2678320) | ||
101 | +- [Docker启动——Vue2前端](http://doc.jeecg.com/3043612) | ||
102 | + | ||
103 | + | ||
104 | +#### Vue2与Vue3版本区别 | ||
105 | +> - VUE3版本彻底抛弃IE兼容,不兼容IE和低版本浏览器,只适配高版本谷歌和Edge | ||
106 | + (政府、事业类单位项目需要谨慎选择——国产化迁移是一个漫长的过程,万一过程中要求IE兼容,这个不可逆) | ||
107 | +> - 所以如果对浏览器有要求的项目,请选择VUE2版本。 | ||
108 | +> - VUE3版是全新的技术栈,紧跟主流(前端重写),各个功能都做了优化,拥有更好的体验效果 | ||
109 | + | ||
110 | + | ||
111 | +#### 源码下载 | ||
112 | +| 源码 | 源码地址 | | ||
113 | +|--------------------|------------------------| | ||
114 | +| 后端源码 `Vue2版` |https://gitee.com/jeecg/jeecg-boot/tree/v3.4.3last | | ||
115 | +| 前端源码 `Vue2版` |https://gitee.com/jeecg/ant-design-vue-jeecg | | ||
116 | + | ||
117 | +************ | ||
118 | + | ||
119 | + | ||
120 | +适用项目 | ||
121 | +----------------------------------- | ||
122 | +Jeecg-Boot低代码开发平台,可以应用在任何J2EE项目的开发中,尤其适合SAAS项目、企业信息管理系统(MIS)、内部办公系统(OA)、企业资源计划系统(ERP)、客户关系管理系统(CRM)等,其半智能手工Merge的开发方式,可以显著提高开发效率70%以上,极大降低开发成本。 | ||
123 | + | ||
124 | + | ||
125 | +技术支持 | ||
126 | +----------------------------------- | ||
127 | + | ||
128 | +关闭gitee的issue通道,使用中遇到问题或者BUG可以在 [Github上提Issues](https://github.com/jeecgboot/jeecg-boot/issues/new) | ||
129 | + | ||
130 | +官方支持: [http://jeecg.com/doc/help](http://jeecg.com/doc/help) | ||
131 | + | ||
132 | + | ||
133 | +##### Star走势图 | ||
134 | + | ||
135 | +[](https://star-history.com/#jeecgboot/jeecg-boot) | ||
136 | + | ||
137 | + | ||
138 | + | ||
139 | + | ||
140 | +后台目录结构 | ||
141 | +----------------------------------- | ||
142 | +``` | ||
143 | +项目结构 | ||
144 | +├─jeecg-boot-parent(父POM: 项目依赖、modules组织) | ||
145 | +│ ├─jeecg-boot-base-core(共通模块: 工具类、config、权限、查询过滤器、注解等) | ||
146 | +│ ├─jeecg-module-demo 示例代码 | ||
147 | +│ ├─jeecg-module-system System系统管理目录 | ||
148 | +│ │ ├─jeecg-system-biz System系统管理权限等功能 | ||
149 | +│ │ ├─jeecg-system-start System单体启动项目(8080) | ||
150 | +│ │ ├─jeecg-system-api System系统管理模块对外api | ||
151 | +│ │ │ ├─jeecg-system-cloud-api System模块对外提供的微服务接口 | ||
152 | +│ │ │ ├─jeecg-system-local-api System模块对外提供的单体接口 | ||
153 | +│ ├─jeecg-server-cloud --微服务模块 | ||
154 | + ├─jeecg-cloud-gateway --微服务网关模块(9999) | ||
155 | + ├─jeecg-cloud-nacos --Nacos服务模块(8848) | ||
156 | + ├─jeecg-system-cloud-start --System微服务启动项目(7001) | ||
157 | + ├─jeecg-demo-cloud-start --Demo微服务启动项目(7002) | ||
158 | + ├─jeecg-visual | ||
159 | + ├─jeecg-cloud-monitor --微服务监控模块 (9111) | ||
160 | + ├─jeecg-cloud-xxljob --微服务xxljob定时任务服务端 (9080) | ||
161 | + ├─jeecg-cloud-sentinel --sentinel服务端 (9000) | ||
162 | + ├─jeecg-cloud-test -- 微服务测试示例(各种例子) | ||
163 | + ├─jeecg-cloud-test-more -- 微服务测试示例(feign、熔断降级、xxljob、分布式锁) | ||
164 | + ├─jeecg-cloud-test-rabbitmq -- 微服务测试示例(rabbitmq) | ||
165 | + ├─jeecg-cloud-test-seata -- 微服务测试示例(seata分布式事务) | ||
166 | + ├─jeecg-cloud-test-shardingsphere -- 微服务测试示例(分库分表) | ||
167 | +``` | ||
168 | + | ||
169 | + | ||
170 | + | ||
171 | + | ||
172 | +为什么选择JeecgBoot? | ||
173 | +----------------------------------- | ||
174 | +* 1.采用最新主流前后分离框架(Springboot+Mybatis+antd),容易上手; 代码生成器依赖性低,灵活的扩展能力,可快速实现二次开发; | ||
175 | +* 2.支持微服务SpringCloud Alibaba(Nacos、Gateway、Sentinel、Skywalking),提供切换机制支持单体和微服务自由切换 | ||
176 | +* 3.开发效率高,采用代码生成器,单表、树列表、一对多、一对一等数据模型,增删改查功能一键生成,菜单配置直接使用; | ||
177 | +* 4.代码生成器提供强大模板机制,支持自定义模板,目前提供四套风格模板(单表两套、树模型一套、一对多三套) | ||
178 | +* 5.代码生成器非常智能,在线业务建模、在线配置、所见即所得支持23种类控件,一键生成前后端代码,大幅度提升开发效率,不再为重复工作发愁。 | ||
179 | +* 6.低代码能力:Online在线表单(无需编码,通过在线配置表单,实现表单的增删改查,支持单表、树、一对多、一对一等模型,实现人人皆可编码) | ||
180 | +* 7.低代码能力:Online在线报表(无需编码,通过在线配置方式,实现数据报表,可以快速抽取数据,减轻开发压力,实现人人皆可编码) | ||
181 | +* 8.低代码能力:Online在线图表(无需编码,通过在线配置方式,实现曲线图,柱状图,数据报表等,支持自定义排版布局,实现人人皆可编码) | ||
182 | +* 9.封装完善的用户、角色、菜单、组织机构、数据字典、在线定时任务等基础功能,支持访问授权、按钮权限、数据权限等功能 | ||
183 | +* 10.常用共通封装,各种工具类(定时任务,短信接口,邮件发送,Excel导入导出等),基本满足80%项目需求 | ||
184 | +* 11.简易Excel导入导出,支持单表导出和一对多表模式导出,生成的代码自带导入导出功能 | ||
185 | +* 12.集成简易报表工具,图像报表和数据导出非常方便,可极其方便的生成图形报表、pdf、excel、word等报表; | ||
186 | +* 13.采用前后分离技术,页面UI风格精美,针对常用组件做了封装:时间、行表格控件、截取显示控件、报表组件,编辑器等等 | ||
187 | +* 14.查询过滤器:查询功能自动生成,后台动态拼SQL追加查询条件;支持多种匹配方式(全匹配/模糊查询/包含查询/不匹配查询); | ||
188 | +* 15.数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段 | ||
189 | +* 16.页面校验自动生成(必须输入、数字校验、金额校验、时间空间等); | ||
190 | +* 17.支持SAAS服务模式,提供SaaS多租户架构方案。 | ||
191 | +* 18.分布式文件服务,集成minio、阿里OSS等优秀的第三方,提供便捷的文件上传与管理,同时也支持本地存储。 | ||
192 | +* 19.主流数据库兼容,一套代码完全兼容Mysql、Postgresql、Oracle、Sqlserver、MariaDB、达梦等主流数据库。 | ||
193 | +* 20.集成工作流activiti、flowable,并实现了只需在页面配置流程转向,可极大的简化bpm工作流的开发;用bpm的流程设计器画出了流程走向,一个工作流基本就完成了,只需写很少量的java代码; | ||
194 | +* 21.低代码能力:在线流程设计,采用开源Activiti流程引擎,实现在线画流程,自定义表单,表单挂靠,业务流转 | ||
195 | +* 22.多数据源:及其简易的使用方式,在线配置数据源配置,便捷的从其他数据抓取数据; | ||
196 | +* 23.提供单点登录CAS集成方案,项目中已经提供完善的对接代码 | ||
197 | +* 24.低代码能力:表单设计器,支持用户自定义表单布局,支持单表,一对多表单、支持select、radio、checkbox、textarea、date、popup、列表、宏等控件 | ||
198 | +* 25.专业接口对接机制,统一采用restful接口方式,集成swagger-ui在线接口文档,Jwt token安全验证,方便客户端对接 | ||
199 | +* 26.接口安全机制,可细化控制接口授权,非常简便实现不同客户端只看自己数据等控制 | ||
200 | +* 27.高级组合查询功能,在线配置支持主子表关联查询,可保存查询历史 | ||
201 | +* 28.提供各种系统监控,实时跟踪系统运行情况(监控 Redis、Tomcat、jvm、服务器信息、请求追踪、SQL监控) | ||
202 | +* 29.消息中心(支持短信、邮件、微信推送等等) | ||
203 | +* 30.集成Websocket消息通知机制 | ||
204 | +* 31.移动自适应效果优秀,提供APP发布方案: | ||
205 | +* 32.支持多语言,提供国际化方案; | ||
206 | +* 33.数据变更记录日志,可记录数据每次变更内容,通过版本对比功能查看历史变化 | ||
207 | +* 34.平台UI强大,实现了移动自适应 | ||
208 | +* 35.平台首页风格,提供多种组合模式,支持自定义风格 | ||
209 | +* 36.提供简单易用的打印插件,支持谷歌、火狐、IE11+ 等各种浏览器 | ||
210 | +* 37.示例代码丰富,提供很多学习案例参考 | ||
211 | +* 38.采用maven分模块开发方式 | ||
212 | +* 39.支持菜单动态路由 | ||
213 | +* 40.权限控制采用 RBAC(Role-Based Access Control,基于角色的访问控制) | ||
214 | +* 41.提供新行编辑表格JVXETable,轻松满足各种复杂ERP布局,拥有更高的性能、更灵活的扩展、更强大的功能 | ||
215 | + | ||
216 | + | ||
217 | + | ||
218 | + | ||
219 | +技术架构: | ||
220 | +----------------------------------- | ||
221 | +#### 开发环境 | ||
222 | + | ||
223 | +- 语言:Java 8+ (小于17) | ||
224 | + | ||
225 | +- IDE(JAVA): IDEA (必须安装lombok插件 ) | ||
226 | + | ||
227 | +- IDE(前端): Vscode、WebStorm、IDEA | ||
228 | + | ||
229 | +- 依赖管理:Maven | ||
230 | + | ||
231 | +- 缓存:Redis | ||
232 | + | ||
233 | +- 数据库脚本:MySQL5.7+ & Oracle 11g & Sqlserver2017(其他数据库,[需要自己转](https://my.oschina.net/jeecg/blog/4905722)) | ||
234 | + | ||
235 | + | ||
236 | +#### 后端 | ||
237 | + | ||
238 | +- 基础框架:Spring Boot 2.6.6 | ||
239 | + | ||
240 | +- 微服务框架: Spring Cloud Alibaba 2021.0.1.0 | ||
241 | + | ||
242 | +- 持久层框架:MybatisPlus 3.5.1 | ||
243 | + | ||
244 | +- 报表工具: JimuReport 1.5.2 | ||
245 | + | ||
246 | +- 安全框架:Apache Shiro 1.8.0,Jwt 3.11.0 | ||
247 | + | ||
248 | +- 微服务技术栈:Spring Cloud Alibaba、Nacos、Gateway、Sentinel、Skywalking | ||
249 | + | ||
250 | +- 数据库连接池:阿里巴巴Druid 1.1.22 | ||
251 | + | ||
252 | +- 日志打印:logback | ||
253 | + | ||
254 | +- 其他:autopoi, fastjson,poi,Swagger-ui,quartz, lombok(简化代码)等。 | ||
255 | + | ||
256 | + | ||
257 | +#### 前端 | ||
258 | + | ||
259 | +- Vue2版本:`Vue2.6+@vue/cli+AntDesignVue+Viser-vue+Vuex等` [详细查看](https://github.com/jeecgboot/ant-design-vue-jeecg) | ||
260 | +- Vue3版本:`Vue3.0+TypeScript+Vite+AntDesignVue+pinia+echarts等新方案` [详细查看](https://github.com/jeecgboot/jeecgboot-vue3) | ||
261 | + | ||
262 | +#### 支持库 | ||
263 | + | ||
264 | +| 数据库 | 支持 | | ||
265 | +| --- | --- | | ||
266 | +| MySQL | √ | | ||
267 | +| Oracle11g | √ | | ||
268 | +| Sqlserver2017 | √ | | ||
269 | +| PostgreSQL | √ | | ||
270 | +| MariaDB | √ | | ||
271 | +| 达梦、人大金仓 | √ | | ||
272 | + | ||
273 | + | ||
274 | + | ||
275 | +## 微服务解决方案 | ||
276 | + | ||
277 | + | ||
278 | +1、服务注册和发现 Nacos √ | ||
279 | + | ||
280 | +2、统一配置中心 Nacos √ | ||
281 | + | ||
282 | +3、路由网关 gateway(三种加载方式) √ | ||
283 | + | ||
284 | +4、分布式 http feign √ | ||
285 | + | ||
286 | +5、熔断降级限流 Sentinel √ | ||
287 | + | ||
288 | +6、分布式文件 Minio、阿里OSS √ | ||
289 | + | ||
290 | +7、统一权限控制 JWT + Shiro √ | ||
291 | + | ||
292 | +8、服务监控 SpringBootAdmin√ | ||
293 | + | ||
294 | +9、链路跟踪 Skywalking [参考文档](http://doc.jeecg.com/2350293) | ||
295 | + | ||
296 | +10、消息中间件 RabbitMQ √ | ||
297 | + | ||
298 | +11、分布式任务 xxl-job √ | ||
299 | + | ||
300 | +12、分布式事务 Seata | ||
301 | + | ||
302 | +13、分布式日志 elk + kafka | ||
303 | + | ||
304 | +14、支持 docker-compose、k8s、jenkins | ||
305 | + | ||
306 | +15、CAS 单点登录 √ | ||
307 | + | ||
308 | +16、路由限流 √ | ||
309 | + | ||
310 | + | ||
311 | +#### 微服务架构图 | ||
312 | + | ||
313 | + | ||
314 | +### Jeecg Boot 产品功能蓝图 | ||
315 | + | ||
316 | + | ||
317 | + | ||
318 | + | ||
319 | + | ||
320 | +### 功能模块 | ||
321 | +``` | ||
322 | +├─系统管理 | ||
323 | +│ ├─用户管理 | ||
324 | +│ ├─角色管理 | ||
325 | +│ ├─菜单管理 | ||
326 | +│ ├─权限设置(支持按钮权限、数据权限) | ||
327 | +│ ├─表单权限(控制字段禁用、隐藏) | ||
328 | +│ ├─部门管理 | ||
329 | +│ ├─我的部门(二级管理员) | ||
330 | +│ └─字典管理 | ||
331 | +│ └─分类字典 | ||
332 | +│ └─系统公告 | ||
333 | +│ └─职务管理 | ||
334 | +│ └─通讯录 | ||
335 | +│ └─多租户管理 | ||
336 | +├─消息中心 | ||
337 | +│ ├─消息管理 | ||
338 | +│ ├─模板管理 | ||
339 | +├─代码生成器(低代码) | ||
340 | +│ ├─代码生成器功能(一键生成前后端代码,生成后无需修改直接用,绝对是后端开发福音) | ||
341 | +│ ├─代码生成器模板(提供4套模板,分别支持单表和一对多模型,不同风格选择) | ||
342 | +│ ├─代码生成器模板(生成代码,自带excel导入导出) | ||
343 | +│ ├─查询过滤器(查询逻辑无需编码,系统根据页面配置自动生成) | ||
344 | +│ ├─高级查询器(弹窗自动组合查询条件) | ||
345 | +│ ├─Excel导入导出工具集成(支持单表,一对多 导入导出) | ||
346 | +│ ├─平台移动自适应支持 | ||
347 | +├─系统监控 | ||
348 | +│ ├─Gateway路由网关 | ||
349 | +│ ├─性能扫描监控 | ||
350 | +│ │ ├─监控 Redis | ||
351 | +│ │ ├─Tomcat | ||
352 | +│ │ ├─jvm | ||
353 | +│ │ ├─服务器信息 | ||
354 | +│ │ ├─请求追踪 | ||
355 | +│ │ ├─磁盘监控 | ||
356 | +│ ├─定时任务 | ||
357 | +│ ├─系统日志 | ||
358 | +│ ├─消息中心(支持短信、邮件、微信推送等等) | ||
359 | +│ ├─数据日志(记录数据快照,可对比快照,查看数据变更情况) | ||
360 | +│ ├─系统通知 | ||
361 | +│ ├─SQL监控 | ||
362 | +│ ├─swagger-ui(在线接口文档) | ||
363 | +│─报表示例 | ||
364 | +│ ├─曲线图 | ||
365 | +│ └─饼状图 | ||
366 | +│ └─柱状图 | ||
367 | +│ └─折线图 | ||
368 | +│ └─面积图 | ||
369 | +│ └─雷达图 | ||
370 | +│ └─仪表图 | ||
371 | +│ └─进度条 | ||
372 | +│ └─排名列表 | ||
373 | +│ └─等等 | ||
374 | +│─大屏模板 | ||
375 | +│ ├─作战指挥中心大屏 | ||
376 | +│ └─物流服务中心大屏 | ||
377 | +│─常用示例 | ||
378 | +│ ├─自定义组件 | ||
379 | +│ ├─对象存储(对接阿里云) | ||
380 | +│ ├─JVXETable示例(各种复杂ERP布局示例) | ||
381 | +│ ├─单表模型例子 | ||
382 | +│ └─一对多模型例子 | ||
383 | +│ └─打印例子 | ||
384 | +│ └─一对多TAB例子 | ||
385 | +│ └─内嵌table例子 | ||
386 | +│ └─常用选择组件 | ||
387 | +│ └─异步树table | ||
388 | +│ └─接口模拟测试 | ||
389 | +│ └─表格合计示例 | ||
390 | +│ └─异步树列表示例 | ||
391 | +│ └─一对多JEditable | ||
392 | +│ └─JEditable组件示例 | ||
393 | +│ └─图片拖拽排序 | ||
394 | +│ └─图片翻页 | ||
395 | +│ └─图片预览 | ||
396 | +│ └─PDF预览 | ||
397 | +│ └─分屏功能 | ||
398 | +│─封装通用组件 | ||
399 | +│ ├─行编辑表格JEditableTable | ||
400 | +│ └─省略显示组件 | ||
401 | +│ └─时间控件 | ||
402 | +│ └─高级查询 | ||
403 | +│ └─用户选择组件 | ||
404 | +│ └─报表组件封装 | ||
405 | +│ └─字典组件 | ||
406 | +│ └─下拉多选组件 | ||
407 | +│ └─选人组件 | ||
408 | +│ └─选部门组件 | ||
409 | +│ └─通过部门选人组件 | ||
410 | +│ └─封装曲线、柱状图、饼状图、折线图等等报表的组件(经过封装,使用简单) | ||
411 | +│ └─在线code编辑器 | ||
412 | +│ └─上传文件组件 | ||
413 | +│ └─验证码组件 | ||
414 | +│ └─树列表组件 | ||
415 | +│ └─表单禁用组件 | ||
416 | +│ └─等等 | ||
417 | +│─更多页面模板 | ||
418 | +│ ├─各种高级表单 | ||
419 | +│ ├─各种列表效果 | ||
420 | +│ └─结果页面 | ||
421 | +│ └─异常页面 | ||
422 | +│ └─个人页面 | ||
423 | +├─高级功能 | ||
424 | +│ ├─系统编码规则 | ||
425 | +│ ├─提供单点登录CAS集成方案 | ||
426 | +│ ├─提供APP发布方案 | ||
427 | +│ ├─集成Websocket消息通知机制 | ||
428 | +├─Online在线开发(低代码) | ||
429 | +│ ├─Online在线表单 - 功能已开放 | ||
430 | +│ ├─Online代码生成器 - 功能已开放 | ||
431 | +│ ├─Online在线报表 - 功能已开放 | ||
432 | +│ ├─Online在线图表(未开源) | ||
433 | +│ ├─Online图表模板配置(未开源) | ||
434 | +│ ├─Online布局设计(未开源) | ||
435 | +│ ├─多数据源管理 - 功能已开放 | ||
436 | +├─积木报表设计器(低代码) | ||
437 | +│ ├─打印设计器 | ||
438 | +│ ├─数据报表设计 | ||
439 | +│ ├─图形报表设计(支持echart) | ||
440 | +│ ├─大屏设计器(未开源) | ||
441 | +│─流程模块功能 (未开源) | ||
442 | +│ ├─流程设计器 | ||
443 | +│ ├─表单设计器 | ||
444 | + ├─大屏设计器 | ||
445 | + ├─门户设计/仪表盘设计器 | ||
446 | +│ └─我的任务 | ||
447 | +│ └─历史流程 | ||
448 | +│ └─历史流程 | ||
449 | +│ └─流程实例管理 | ||
450 | +│ └─流程监听管理 | ||
451 | +│ └─流程表达式 | ||
452 | +│ └─我发起的流程 | ||
453 | +│ └─我的抄送 | ||
454 | +│ └─流程委派、抄送、跳转 | ||
455 | +│ └─。。。 | ||
456 | +│─OA办公组件 (未开源) | ||
457 | +│ ├─更多功能 | ||
458 | +│ └─。。。 | ||
459 | +└─其他模块 | ||
460 | + └─更多功能开发中。。 | ||
461 | + | ||
462 | +``` | ||
463 | + | ||
464 | + | ||
465 | + | ||
466 | + | ||
467 | + | ||
468 | +系统效果 | ||
469 | +---- | ||
470 | +##### 大屏模板 | ||
471 | + | ||
472 | + | ||
473 | + | ||
474 | + | ||
475 | +##### PC端 | ||
476 | + | ||
477 | + | ||
478 | + | ||
479 | + | ||
480 | + | ||
481 | + | ||
482 | + | ||
483 | +##### 在线接口文档 | ||
484 | + | ||
485 | + | ||
486 | + | ||
487 | + | ||
488 | +##### 报表 | ||
489 | + | ||
490 | + | ||
491 | + | ||
492 | + | ||
493 | + | ||
494 | + | ||
495 | +##### 流程 | ||
496 | + | ||
497 | + | ||
498 | + | ||
499 | + | ||
500 | + | ||
501 | + | ||
502 | +##### 手机端 | ||
503 | + | ||
504 | + | ||
505 | + | ||
506 | +##### PAD端 | ||
507 | + | ||
508 | + | ||
509 | + | ||
510 | + | ||
511 | + | ||
512 | + | ||
513 | +## 捐赠 | ||
514 | + | ||
515 | +如果觉得还不错,请作者喝杯咖啡吧 ☺ | ||
516 | + | ||
517 | + |
db/Dockerfile
0 → 100644
1 | +FROM mysql:8.0.19 | ||
2 | + | ||
3 | +MAINTAINER jeecgos@163.com | ||
4 | + | ||
5 | +ENV TZ=Asia/Shanghai | ||
6 | + | ||
7 | +RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone | ||
8 | + | ||
9 | +COPY ./tables_nacos.sql /docker-entrypoint-initdb.d | ||
10 | + | ||
11 | +COPY ./jeecgboot-mysql-5.7.sql /docker-entrypoint-initdb.d | ||
12 | + | ||
13 | +COPY ./tables_xxl_job.sql /docker-entrypoint-initdb.d |
db/insurance.sql
0 → 100644
This diff could not be displayed because it is too large.
db/jeecgboot-mysql-5.7.sql
0 → 100644
This diff could not be displayed because it is too large.
db/tables_nacos.sql
0 → 100644
1 | +CREATE database if NOT EXISTS `nacos` default character set utf8mb4 collate utf8mb4_general_ci; | ||
2 | +use `nacos`; | ||
3 | +/* | ||
4 | + Navicat Premium Data Transfer | ||
5 | + | ||
6 | + Source Server : mysql5.7 | ||
7 | + Source Server Type : MySQL | ||
8 | + Source Server Version : 50738 | ||
9 | + Source Host : 127.0.0.1:3306 | ||
10 | + Source Schema : nacos-os | ||
11 | + | ||
12 | + Target Server Type : MySQL | ||
13 | + Target Server Version : 50738 | ||
14 | + File Encoding : 65001 | ||
15 | + | ||
16 | + Date: 06/08/2022 15:12:35 | ||
17 | +*/ | ||
18 | + | ||
19 | +SET NAMES utf8mb4; | ||
20 | +SET FOREIGN_KEY_CHECKS = 0; | ||
21 | + | ||
22 | +-- ---------------------------- | ||
23 | +-- Table structure for config_info | ||
24 | +-- ---------------------------- | ||
25 | +DROP TABLE IF EXISTS `config_info`; | ||
26 | +CREATE TABLE `config_info` ( | ||
27 | + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', | ||
28 | + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', | ||
29 | + `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
30 | + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', | ||
31 | + `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5', | ||
32 | + `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', | ||
33 | + `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', | ||
34 | + `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user', | ||
35 | + `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip', | ||
36 | + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
37 | + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段', | ||
38 | + `c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
39 | + `c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
40 | + `effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
41 | + `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
42 | + `c_schema` text CHARACTER SET utf8 COLLATE utf8_bin NULL, | ||
43 | + PRIMARY KEY (`id`) USING BTREE, | ||
44 | + UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE | ||
45 | +) ENGINE = InnoDB AUTO_INCREMENT = 43 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info' ROW_FORMAT = DYNAMIC; | ||
46 | + | ||
47 | +-- ---------------------------- | ||
48 | +-- Records of config_info | ||
49 | +-- ---------------------------- | ||
50 | +INSERT INTO `config_info` VALUES (1, 'jeecg-dev.yaml', 'DEFAULT_GROUP', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', 'edb0e79d570edf341755caf3853f11e4', '2021-03-03 13:01:11', '2022-08-06 07:10:17', 'nacos', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); | ||
51 | +INSERT INTO `config_info` VALUES (2, 'jeecg.yaml', 'DEFAULT_GROUP', 'server:\n tomcat:\n max-swallow-size: -1\n error:\n include-exception: true\n include-stacktrace: ALWAYS\n include-message: ALWAYS\n compression:\n enabled: true\n min-response-size: 1024\n mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*\nmanagement:\n health:\n mail:\n enabled: false\n endpoints:\n web:\n exposure:\n include: \"*\"\n health:\n sensitive: true\n endpoint:\n health:\n show-details: ALWAYS\nspring:\n servlet:\n multipart:\n max-file-size: 10MB\n max-request-size: 10MB\n mail:\n host: smtp.163.com\n username: jeecgos@163.com\n password: ??\n properties:\n mail:\n smtp:\n auth: true\n starttls:\n enable: true\n required: true\n quartz:\n job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n startup-delay: 1s\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.springframework.scheduling.quartz.LocalDataSourceJobStore\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 12000\n clusterCheckinInterval: 15000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\n jackson:\n date-format: yyyy-MM-dd HH:mm:ss\n time-zone: GMT+8\n aop:\n proxy-target-class: true\n activiti:\n check-process-definitions: false\n async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', '2117a96ba08e8fd0f66825e87416af27', '2021-03-03 13:01:42', '2022-08-05 13:12:21', 'nacos', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); | ||
52 | +INSERT INTO `config_info` VALUES (3, 'jeecg-gateway-router.json', 'DEFAULT_GROUP', '[{\n \"id\": \"jeecg-system\",\n \"order\": 0,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/sys/**\",\n \"_genkey_1\": \"/jmreport/**\",\n \"_genkey_3\": \"/online/**\",\n \"_genkey_4\": \"/generic/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb://jeecg-system\"\n}, {\n \"id\": \"jeecg-demo\",\n \"order\": 1,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/mock/**\",\n \"_genkey_1\": \"/test/**\",\n \"_genkey_2\": \"/bigscreen/template1/**\",\n \"_genkey_3\": \"/bigscreen/template2/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb://jeecg-demo\"\n}, {\n \"id\": \"jeecg-system-websocket\",\n \"order\": 2,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/websocket/**\",\n \"_genkey_1\": \"/newsWebsocket/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb:ws://jeecg-system\"\n}, {\n \"id\": \"jeecg-demo-websocket\",\n \"order\": 3,\n \"predicates\": [{\n \"name\": \"Path\",\n \"args\": {\n \"_genkey_0\": \"/vxeSocket/**\"\n }\n }],\n \"filters\": [],\n \"uri\": \"lb:ws://jeecg-demo\"\n}]', 'be6548051d99309d7fa5ac4398404201', '2021-03-03 13:02:14', '2022-02-23 11:49:01', NULL, '0:0:0:0:0:0:0:1', '', '', '', '', '', 'json', ''); | ||
53 | +INSERT INTO `config_info` VALUES (20, 'jeecg-gateway-dev.yaml', 'DEFAULT_GROUP', 'jeecg:\n route:\n config:\n #type:database nacos yml\n data-type: database\n group: DEFAULT_GROUP\n data-id: jeecg-gateway-router\nspring:\n redis:\n database: 0\n host: jeecg-boot-redis\n port: 6379\n password:', '0fc619d2d5e304f18bc4ea8be99f68a4', '2022-08-04 16:36:11', '2022-08-06 07:11:34', 'nacos', '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', ''); | ||
54 | + | ||
55 | +-- ---------------------------- | ||
56 | +-- Table structure for config_info_aggr | ||
57 | +-- ---------------------------- | ||
58 | +DROP TABLE IF EXISTS `config_info_aggr`; | ||
59 | +CREATE TABLE `config_info_aggr` ( | ||
60 | + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', | ||
61 | + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', | ||
62 | + `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', | ||
63 | + `datum_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'datum_id', | ||
64 | + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '内容', | ||
65 | + `gmt_modified` datetime NOT NULL COMMENT '修改时间', | ||
66 | + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
67 | + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段', | ||
68 | + PRIMARY KEY (`id`) USING BTREE, | ||
69 | + UNIQUE INDEX `uk_configinfoaggr_datagrouptenantdatum`(`data_id`, `group_id`, `tenant_id`, `datum_id`) USING BTREE | ||
70 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '增加租户字段' ROW_FORMAT = DYNAMIC; | ||
71 | + | ||
72 | +-- ---------------------------- | ||
73 | +-- Records of config_info_aggr | ||
74 | +-- ---------------------------- | ||
75 | + | ||
76 | +-- ---------------------------- | ||
77 | +-- Table structure for config_info_beta | ||
78 | +-- ---------------------------- | ||
79 | +DROP TABLE IF EXISTS `config_info_beta`; | ||
80 | +CREATE TABLE `config_info_beta` ( | ||
81 | + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', | ||
82 | + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', | ||
83 | + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', | ||
84 | + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name', | ||
85 | + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', | ||
86 | + `beta_ips` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'betaIps', | ||
87 | + `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5', | ||
88 | + `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', | ||
89 | + `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', | ||
90 | + `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user', | ||
91 | + `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip', | ||
92 | + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段', | ||
93 | + PRIMARY KEY (`id`) USING BTREE, | ||
94 | + UNIQUE INDEX `uk_configinfobeta_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE | ||
95 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_beta' ROW_FORMAT = DYNAMIC; | ||
96 | + | ||
97 | +-- ---------------------------- | ||
98 | +-- Records of config_info_beta | ||
99 | +-- ---------------------------- | ||
100 | + | ||
101 | +-- ---------------------------- | ||
102 | +-- Table structure for config_info_tag | ||
103 | +-- ---------------------------- | ||
104 | +DROP TABLE IF EXISTS `config_info_tag`; | ||
105 | +CREATE TABLE `config_info_tag` ( | ||
106 | + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', | ||
107 | + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', | ||
108 | + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', | ||
109 | + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id', | ||
110 | + `tag_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_id', | ||
111 | + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name', | ||
112 | + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', | ||
113 | + `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5', | ||
114 | + `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', | ||
115 | + `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', | ||
116 | + `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user', | ||
117 | + `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip', | ||
118 | + PRIMARY KEY (`id`) USING BTREE, | ||
119 | + UNIQUE INDEX `uk_configinfotag_datagrouptenanttag`(`data_id`, `group_id`, `tenant_id`, `tag_id`) USING BTREE | ||
120 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_tag' ROW_FORMAT = DYNAMIC; | ||
121 | + | ||
122 | +-- ---------------------------- | ||
123 | +-- Records of config_info_tag | ||
124 | +-- ---------------------------- | ||
125 | + | ||
126 | +-- ---------------------------- | ||
127 | +-- Table structure for config_tags_relation | ||
128 | +-- ---------------------------- | ||
129 | +DROP TABLE IF EXISTS `config_tags_relation`; | ||
130 | +CREATE TABLE `config_tags_relation` ( | ||
131 | + `id` bigint(20) NOT NULL COMMENT 'id', | ||
132 | + `tag_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_name', | ||
133 | + `tag_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tag_type', | ||
134 | + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', | ||
135 | + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', | ||
136 | + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id', | ||
137 | + `nid` bigint(20) NOT NULL AUTO_INCREMENT, | ||
138 | + PRIMARY KEY (`nid`) USING BTREE, | ||
139 | + UNIQUE INDEX `uk_configtagrelation_configidtag`(`id`, `tag_name`, `tag_type`) USING BTREE, | ||
140 | + INDEX `idx_tenant_id`(`tenant_id`) USING BTREE | ||
141 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_tag_relation' ROW_FORMAT = DYNAMIC; | ||
142 | + | ||
143 | +-- ---------------------------- | ||
144 | +-- Records of config_tags_relation | ||
145 | +-- ---------------------------- | ||
146 | + | ||
147 | +-- ---------------------------- | ||
148 | +-- Table structure for group_capacity | ||
149 | +-- ---------------------------- | ||
150 | +DROP TABLE IF EXISTS `group_capacity`; | ||
151 | +CREATE TABLE `group_capacity` ( | ||
152 | + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', | ||
153 | + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', | ||
154 | + `quota` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值', | ||
155 | + `usage` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量', | ||
156 | + `max_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', | ||
157 | + `max_aggr_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数,,0表示使用默认值', | ||
158 | + `max_aggr_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', | ||
159 | + `max_history_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量', | ||
160 | + `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', | ||
161 | + `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', | ||
162 | + PRIMARY KEY (`id`) USING BTREE, | ||
163 | + UNIQUE INDEX `uk_group_id`(`group_id`) USING BTREE | ||
164 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '集群、各Group容量信息表' ROW_FORMAT = DYNAMIC; | ||
165 | + | ||
166 | +-- ---------------------------- | ||
167 | +-- Records of group_capacity | ||
168 | +-- ---------------------------- | ||
169 | + | ||
170 | +-- ---------------------------- | ||
171 | +-- Table structure for his_config_info | ||
172 | +-- ---------------------------- | ||
173 | +DROP TABLE IF EXISTS `his_config_info`; | ||
174 | +CREATE TABLE `his_config_info` ( | ||
175 | + `id` bigint(20) UNSIGNED NOT NULL, | ||
176 | + `nid` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, | ||
177 | + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, | ||
178 | + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, | ||
179 | + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name', | ||
180 | + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, | ||
181 | + `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
182 | + `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00', | ||
183 | + `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00', | ||
184 | + `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL, | ||
185 | + `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
186 | + `op_type` char(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, | ||
187 | + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段', | ||
188 | + PRIMARY KEY (`nid`) USING BTREE, | ||
189 | + INDEX `idx_gmt_create`(`gmt_create`) USING BTREE, | ||
190 | + INDEX `idx_gmt_modified`(`gmt_modified`) USING BTREE, | ||
191 | + INDEX `idx_did`(`data_id`) USING BTREE | ||
192 | +) ENGINE = InnoDB AUTO_INCREMENT = 91 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '多租户改造' ROW_FORMAT = DYNAMIC; | ||
193 | + | ||
194 | +-- ---------------------------- | ||
195 | +-- Records of his_config_info | ||
196 | +-- ---------------------------- | ||
197 | +INSERT INTO `his_config_info` VALUES (20, 70, 'jeecg-gateway-dev.yaml', 'DEFAULT_GROUP', '', 'jeecg:\n route:\n config:\n #mode: database、nacos、yml\n data-type: database\n #nacos: jeecg-gateway-router.json\n group: DEFAULT_GROUP\n data-id: jeecg-gateway-router\nspring:\n redis:\n database: 0\n host: jeecg-boot-redis\n port: 6379\n password:', '26fff601e10bbc8bc5ff1fa2b192087b', '2010-05-05 00:00:00', '2022-08-05 10:45:21', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
198 | +INSERT INTO `his_config_info` VALUES (1, 71, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao :\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg :\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path :\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\n\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n # agent-app-secret: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '17b0553ae2ade6474301e3d4eca6f05e', '2010-05-05 00:00:00', '2022-08-05 10:54:54', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
199 | +INSERT INTO `his_config_info` VALUES (1, 72, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n desform:\n theme-color: \'#1890ff\'\n upload-type: system\n map:\n baidu: ??\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '70922f6374bf2e4ccf0de8c089445811', '2010-05-05 00:00:00', '2022-08-05 10:57:40', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
200 | +INSERT INTO `his_config_info` VALUES (1, 73, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n desform:\n theme-color: \'#1890ff\'\n upload-type: system\n map:\n baidu: ??\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '035fff10fc0e5a38abf3c357afff7c67', '2010-05-05 00:00:00', '2022-08-05 10:59:02', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
201 | +INSERT INTO `his_config_info` VALUES (1, 74, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '87ec968621f8ac532e2fc50f98dd4f57', '2010-05-05 00:00:00', '2022-08-05 11:00:08', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
202 | +INSERT INTO `his_config_info` VALUES (1, 75, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', 'edb0e79d570edf341755caf3853f11e4', '2010-05-05 00:00:00', '2022-08-05 11:01:10', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
203 | +INSERT INTO `his_config_info` VALUES (1, 76, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '53b1c1130dff673311ad863b4ce67c8e', '2010-05-05 00:00:00', '2022-08-05 11:02:49', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
204 | +INSERT INTO `his_config_info` VALUES (1, 77, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '32d655df70c77beb8e39c5d3d8c69c9c', '2010-05-05 00:00:00', '2022-08-05 11:03:31', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
205 | +INSERT INTO `his_config_info` VALUES (1, 78, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\nsignUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', 'd3b15d3bb35c4baed32f75eabb2bf864', '2010-05-05 00:00:00', '2022-08-05 11:04:54', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
206 | +INSERT INTO `his_config_info` VALUES (1, 79, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '53b1c1130dff673311ad863b4ce67c8e', '2010-05-05 00:00:00', '2022-08-05 13:02:54', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
207 | +INSERT INTO `his_config_info` VALUES (1, 80, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true', '92ced3a81dece861666606c44cd4f630', '2010-05-05 00:00:00', '2022-08-05 13:03:28', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
208 | +INSERT INTO `his_config_info` VALUES (1, 81, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp', '364814ff81fb2a38c869f7bb5aa92f45', '2010-05-05 00:00:00', '2022-08-05 13:03:55', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
209 | +INSERT INTO `his_config_info` VALUES (1, 82, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379', '064d0471e33d707a5b70e0807f8f0d93', '2010-05-05 00:00:00', '2022-08-05 13:04:39', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
210 | +INSERT INTO `his_config_info` VALUES (2, 83, 'jeecg.yaml', 'DEFAULT_GROUP', '', 'server:\n tomcat:\n max-swallow-size: -1\n error:\n include-exception: true\n include-stacktrace: ALWAYS\n include-message: ALWAYS\n compression:\n enabled: true\n min-response-size: 1024\n mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*\nmanagement:\n health:\n mail:\n enabled: false\n endpoints:\n web:\n exposure:\n include: \"*\"\n health:\n sensitive: true\n endpoint:\n health:\n show-details: ALWAYS\nspring:\n servlet:\n multipart:\n max-file-size: 10MB\n max-request-size: 10MB\n mail:\n host: smtp.163.com\n username: jeecgos@163.com\n password: ??\n properties:\n mail:\n smtp:\n auth: true\n starttls:\n enable: true\n required: true\n quartz:\n job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n startup-delay: 1s\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.springframework.scheduling.quartz.LocalDataSourceJobStore\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 12000\n clusterCheckinInterval: 15000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\n jackson:\n date-format: yyyy-MM-dd HH:mm:ss\n time-zone: GMT+8\n aop:\n proxy-target-class: true\n activiti:\n check-process-definitions: false\n async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', '2117a96ba08e8fd0f66825e87416af27', '2010-05-05 00:00:00', '2022-08-05 13:05:34', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
211 | +INSERT INTO `his_config_info` VALUES (1, 84, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n dynamic:\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379', 'a12eaf6e6c090b303590f1e83c22ac3f', '2010-05-05 00:00:00', '2022-08-05 13:07:33', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
212 | +INSERT INTO `his_config_info` VALUES (1, 85, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n dynamic:\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379', '5e33b9dc9022eee8a1652e473dadbc42', '2010-05-05 00:00:00', '2022-08-05 13:09:30', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
213 | +INSERT INTO `his_config_info` VALUES (2, 86, 'jeecg.yaml', 'DEFAULT_GROUP', '', 'server:\n tomcat:\n max-swallow-size: -1', '4525d8351d9498a8e5f43373ee6367a1', '2010-05-05 00:00:00', '2022-08-05 13:09:55', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
214 | +INSERT INTO `his_config_info` VALUES (2, 87, 'jeecg.yaml', 'DEFAULT_GROUP', '', 'server:\n tomcat:\n max-swallow-size: -1\n error:\n include-exception: true\n include-stacktrace: ALWAYS\n include-message: ALWAYS\n compression:\n enabled: true\n min-response-size: 1024\n mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*\nmanagement:\n health:\n mail:\n enabled: false\n endpoints:\n web:\n exposure:\n include: \"*\"\n health:\n sensitive: true\n endpoint:\n health:\n show-details: ALWAYS\nspring:\n servlet:\n multipart:\n max-file-size: 10MB\n max-request-size: 10MB\n mail:\n host: smtp.163.com\n username: jeecgos@163.com\n password: ??\n properties:\n mail:\n smtp:\n auth: true\n starttls:\n enable: true\n required: true\n quartz:\n job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n startup-delay: 1s\n overwrite-existing-jobs: true\n properties:\n org:\n quartz:\n scheduler:\n instanceName: MyScheduler\n instanceId: AUTO\n jobStore:\n class: org.springframework.scheduling.quartz.LocalDataSourceJobStore\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\n tablePrefix: QRTZ_\n isClustered: true\n misfireThreshold: 12000\n clusterCheckinInterval: 15000\n threadPool:\n class: org.quartz.simpl.SimpleThreadPool\n threadCount: 10\n threadPriority: 5\n threadsInheritContextClassLoaderOfInitializingThread: true\n jackson:\n date-format: yyyy-MM-dd HH:mm:ss\n time-zone: GMT+8\n aop:\n proxy-target-class: true\n activiti:\n check-process-definitions: false\n async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', '2117a96ba08e8fd0f66825e87416af27', '2010-05-05 00:00:00', '2022-08-05 13:10:58', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
215 | +INSERT INTO `his_config_info` VALUES (2, 88, 'jeecg.yaml', 'DEFAULT_GROUP', '', 'server:\n tomcat:\n max-swallow-size: -1\n error:\n include-exception: true\n include-stacktrace: ALWAYS\n include-message: ALWAYS\n compression:\n enabled: true\n min-response-size: 1024\n mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*\nmanagement:\n health:\n mail:\n enabled: false\n endpoints:\n web:\n exposure:\n include: \"*\"\n health:\n sensitive: true\n endpoint:\n health:\n show-details: ALWAYS\nspring:\n servlet:\n multipart:\n max-file-size: 10MB\n max-request-size: 10MB\n mail:\n host: smtp.163.com\n username: jeecgos@163.com\n password: ??\n properties:\n mail:\n smtp:\n auth: true\n starttls:\n enable: true\n required: true\n quartz:\n job-store-type: jdbc\n initialize-schema: embedded\n auto-startup: false\n jackson:\n date-format: yyyy-MM-dd HH:mm:ss\n time-zone: GMT+8\n aop:\n proxy-target-class: true\n activiti:\n check-process-definitions: false\n async-executor-activate: false\n job-executor-activate: false\n jpa:\n open-in-view: false\n freemarker:\n suffix: .ftl\n content-type: text/html\n charset: UTF-8\n cache: false\n prefer-file-system-access: false\n template-loader-path:\n - classpath:/templates\n mvc:\n static-path-pattern: /**\n pathmatch:\n matching-strategy: ant_path_matcher\n resource:\n static-locations: classpath:/static/,classpath:/public/\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\nmybatis-plus:\n mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml\n global-config:\n banner: false\n db-config:\n id-type: ASSIGN_ID\n table-underline: true\n configuration:\n call-setters-on-nulls: true', 'a1effef2c22a7d2846f84728aa29ecd4', '2010-05-05 00:00:00', '2022-08-05 13:12:21', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
216 | +INSERT INTO `his_config_info` VALUES (1, 89, 'jeecg-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,wall,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n master:\n url: jdbc:mysql://jeecg-boot-mysql:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n redis:\n database: 0\n host: jeecg-boot-redis\n password:\n port: 6379\n rabbitmq:\n host: jeecg-boot-rabbitmq\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n concurrency: 1\n max-concurrency: 1\n retry:\n enabled: true\nminidao:\n base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*\njeecg:\n signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a\n signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys\n uploadType: local\n domainUrl:\n pc: http://localhost:3100\n app: http://localhost:8051\n path:\n upload: /opt/upFiles\n webapp: /opt/webapp\n shiro:\n excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n desform:\n theme-color: \"#1890ff\"\n upload-type: system\n map:\n baidu: ??\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeecgdev\n staticDomain: ??\n elasticsearch:\n cluster-name: jeecg-ES\n cluster-nodes: jeecg-boot-es:9200\n check-enabled: false\n file-view-domain: 127.0.0.1:8012\n minio:\n minio_url: http://minio.jeecg.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n jmreport:\n mode: dev\n is_verify_token: false\n verify_methods: remove,delete,save,add,update\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n xxljob:\n enabled: false\n adminAddresses: http://jeecg-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jeecg/job/jobhandler/\n logRetentionDays: 30\n redisson:\n address: jeecg-boot-redis:6379\n password:\n type: STANDALONE\n enabled: true\nlogging:\n level:\n org.jeecg.modules.system.mapper : info\ncas:\n prefixUrl: http://localhost:8888/cas\nknife4j:\n production: false\n basic:\n enable: false\n username: jeecg\n password: jeecg1314\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/wechat_enterprise/callback\n agent-id: ??\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jeecg-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h\nthird-app:\n enabled: false\n type:\n WECHAT_ENTERPRISE:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??\n DINGTALK:\n enabled: false\n client-id: ??\n client-secret: ??\n agent-id: ??', '53b1c1130dff673311ad863b4ce67c8e', '2010-05-05 00:00:00', '2022-08-06 07:10:17', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
217 | +INSERT INTO `his_config_info` VALUES (20, 90, 'jeecg-gateway-dev.yaml', 'DEFAULT_GROUP', '', 'jeecg:\n route:\n config:\n #mode:database nacos yml\n data-type: database\n group: DEFAULT_GROUP\n data-id: jeecg-gateway-router\nspring:\n redis:\n database: 0\n host: jeecg-boot-redis\n port: 6379\n password:', 'b08a4c456f508fdd0fc347305da39a9e', '2010-05-05 00:00:00', '2022-08-06 07:11:34', 'nacos', '0:0:0:0:0:0:0:1', 'U', ''); | ||
218 | + | ||
219 | +-- ---------------------------- | ||
220 | +-- Table structure for permissions | ||
221 | +-- ---------------------------- | ||
222 | +DROP TABLE IF EXISTS `permissions`; | ||
223 | +CREATE TABLE `permissions` ( | ||
224 | + `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||
225 | + `resource` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||
226 | + `action` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||
227 | + UNIQUE INDEX `uk_role_permission`(`role`, `resource`, `action`) USING BTREE | ||
228 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; | ||
229 | + | ||
230 | +-- ---------------------------- | ||
231 | +-- Records of permissions | ||
232 | +-- ---------------------------- | ||
233 | + | ||
234 | +-- ---------------------------- | ||
235 | +-- Table structure for roles | ||
236 | +-- ---------------------------- | ||
237 | +DROP TABLE IF EXISTS `roles`; | ||
238 | +CREATE TABLE `roles` ( | ||
239 | + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||
240 | + `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||
241 | + UNIQUE INDEX `uk_username_role`(`username`, `role`) USING BTREE | ||
242 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; | ||
243 | + | ||
244 | +-- ---------------------------- | ||
245 | +-- Records of roles | ||
246 | +-- ---------------------------- | ||
247 | +INSERT INTO `roles` VALUES ('nacos', 'ROLE_ADMIN'); | ||
248 | + | ||
249 | +-- ---------------------------- | ||
250 | +-- Table structure for tenant_capacity | ||
251 | +-- ---------------------------- | ||
252 | +DROP TABLE IF EXISTS `tenant_capacity`; | ||
253 | +CREATE TABLE `tenant_capacity` ( | ||
254 | + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', | ||
255 | + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID', | ||
256 | + `quota` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值', | ||
257 | + `usage` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量', | ||
258 | + `max_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', | ||
259 | + `max_aggr_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数', | ||
260 | + `max_aggr_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', | ||
261 | + `max_history_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量', | ||
262 | + `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', | ||
263 | + `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', | ||
264 | + PRIMARY KEY (`id`) USING BTREE, | ||
265 | + UNIQUE INDEX `uk_tenant_id`(`tenant_id`) USING BTREE | ||
266 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '租户容量信息表' ROW_FORMAT = DYNAMIC; | ||
267 | + | ||
268 | +-- ---------------------------- | ||
269 | +-- Records of tenant_capacity | ||
270 | +-- ---------------------------- | ||
271 | + | ||
272 | +-- ---------------------------- | ||
273 | +-- Table structure for tenant_info | ||
274 | +-- ---------------------------- | ||
275 | +DROP TABLE IF EXISTS `tenant_info`; | ||
276 | +CREATE TABLE `tenant_info` ( | ||
277 | + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', | ||
278 | + `kp` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'kp', | ||
279 | + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id', | ||
280 | + `tenant_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_name', | ||
281 | + `tenant_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tenant_desc', | ||
282 | + `create_source` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'create_source', | ||
283 | + `gmt_create` bigint(20) NOT NULL COMMENT '创建时间', | ||
284 | + `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间', | ||
285 | + PRIMARY KEY (`id`) USING BTREE, | ||
286 | + UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp`, `tenant_id`) USING BTREE, | ||
287 | + INDEX `idx_tenant_id`(`tenant_id`) USING BTREE | ||
288 | +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_info' ROW_FORMAT = DYNAMIC; | ||
289 | + | ||
290 | +-- ---------------------------- | ||
291 | +-- Records of tenant_info | ||
292 | +-- ---------------------------- | ||
293 | +INSERT INTO `tenant_info` VALUES (1, '1', 'ac14ab82-51f8-4f0c-aa5b-25fb8384bfb6', 'jeecg', 'jeecg 测试命名空间', 'nacos', 1653291038942, 1653291038942); | ||
294 | + | ||
295 | +-- ---------------------------- | ||
296 | +-- Table structure for users | ||
297 | +-- ---------------------------- | ||
298 | +DROP TABLE IF EXISTS `users`; | ||
299 | +CREATE TABLE `users` ( | ||
300 | + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||
301 | + `password` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||
302 | + `enabled` tinyint(1) NOT NULL, | ||
303 | + PRIMARY KEY (`username`) USING BTREE | ||
304 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC; | ||
305 | + | ||
306 | +-- ---------------------------- | ||
307 | +-- Records of users | ||
308 | +-- ---------------------------- | ||
309 | +INSERT INTO `users` VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', 1); | ||
310 | + | ||
311 | +SET FOREIGN_KEY_CHECKS = 1; |
db/tables_xxl_job.sql
0 → 100644
1 | +# | ||
2 | +# XXL-JOB v2.2.0 | ||
3 | +# Copyright (c) 2015-present, xuxueli. | ||
4 | + | ||
5 | +CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_general_ci; | ||
6 | +use `xxl_job`; | ||
7 | + | ||
8 | +SET NAMES utf8mb4; | ||
9 | + | ||
10 | +CREATE TABLE `xxl_job_info` ( | ||
11 | + `id` int(11) NOT NULL AUTO_INCREMENT, | ||
12 | + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', | ||
13 | + `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON', | ||
14 | + `job_desc` varchar(255) NOT NULL, | ||
15 | + `add_time` datetime DEFAULT NULL, | ||
16 | + `update_time` datetime DEFAULT NULL, | ||
17 | + `author` varchar(64) DEFAULT NULL COMMENT '作者', | ||
18 | + `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件', | ||
19 | + `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略', | ||
20 | + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', | ||
21 | + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', | ||
22 | + `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略', | ||
23 | + `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒', | ||
24 | + `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', | ||
25 | + `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型', | ||
26 | + `glue_source` mediumtext COMMENT 'GLUE源代码', | ||
27 | + `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注', | ||
28 | + `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间', | ||
29 | + `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔', | ||
30 | + `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行', | ||
31 | + `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间', | ||
32 | + `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间', | ||
33 | + PRIMARY KEY (`id`) | ||
34 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | ||
35 | + | ||
36 | +CREATE TABLE `xxl_job_log` ( | ||
37 | + `id` bigint(20) NOT NULL AUTO_INCREMENT, | ||
38 | + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', | ||
39 | + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', | ||
40 | + `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址', | ||
41 | + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', | ||
42 | + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', | ||
43 | + `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2', | ||
44 | + `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', | ||
45 | + `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间', | ||
46 | + `trigger_code` int(11) NOT NULL COMMENT '调度-结果', | ||
47 | + `trigger_msg` text COMMENT '调度-日志', | ||
48 | + `handle_time` datetime DEFAULT NULL COMMENT '执行-时间', | ||
49 | + `handle_code` int(11) NOT NULL COMMENT '执行-状态', | ||
50 | + `handle_msg` text COMMENT '执行-日志', | ||
51 | + `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败', | ||
52 | + PRIMARY KEY (`id`), | ||
53 | + KEY `I_trigger_time` (`trigger_time`), | ||
54 | + KEY `I_handle_code` (`handle_code`) | ||
55 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | ||
56 | + | ||
57 | +CREATE TABLE `xxl_job_log_report` ( | ||
58 | + `id` int(11) NOT NULL AUTO_INCREMENT, | ||
59 | + `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间', | ||
60 | + `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量', | ||
61 | + `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量', | ||
62 | + `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量', | ||
63 | + PRIMARY KEY (`id`), | ||
64 | + UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE | ||
65 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | ||
66 | + | ||
67 | +CREATE TABLE `xxl_job_logglue` ( | ||
68 | + `id` int(11) NOT NULL AUTO_INCREMENT, | ||
69 | + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', | ||
70 | + `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型', | ||
71 | + `glue_source` mediumtext COMMENT 'GLUE源代码', | ||
72 | + `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注', | ||
73 | + `add_time` datetime DEFAULT NULL, | ||
74 | + `update_time` datetime DEFAULT NULL, | ||
75 | + PRIMARY KEY (`id`) | ||
76 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | ||
77 | + | ||
78 | +CREATE TABLE `xxl_job_registry` ( | ||
79 | + `id` int(11) NOT NULL AUTO_INCREMENT, | ||
80 | + `registry_group` varchar(50) NOT NULL, | ||
81 | + `registry_key` varchar(255) NOT NULL, | ||
82 | + `registry_value` varchar(255) NOT NULL, | ||
83 | + `update_time` datetime DEFAULT NULL, | ||
84 | + PRIMARY KEY (`id`), | ||
85 | + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) | ||
86 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | ||
87 | + | ||
88 | +CREATE TABLE `xxl_job_group` ( | ||
89 | + `id` int(11) NOT NULL AUTO_INCREMENT, | ||
90 | + `app_name` varchar(64) NOT NULL COMMENT '执行器AppName', | ||
91 | + `title` varchar(12) NOT NULL COMMENT '执行器名称', | ||
92 | + `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入', | ||
93 | + `address_list` varchar(512) DEFAULT NULL COMMENT '执行器地址列表,多地址逗号分隔', | ||
94 | + PRIMARY KEY (`id`) | ||
95 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | ||
96 | + | ||
97 | +CREATE TABLE `xxl_job_user` ( | ||
98 | + `id` int(11) NOT NULL AUTO_INCREMENT, | ||
99 | + `username` varchar(50) NOT NULL COMMENT '账号', | ||
100 | + `password` varchar(50) NOT NULL COMMENT '密码', | ||
101 | + `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员', | ||
102 | + `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割', | ||
103 | + PRIMARY KEY (`id`), | ||
104 | + UNIQUE KEY `i_username` (`username`) USING BTREE | ||
105 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | ||
106 | + | ||
107 | +CREATE TABLE `xxl_job_lock` ( | ||
108 | + `lock_name` varchar(50) NOT NULL COMMENT '锁名称', | ||
109 | + PRIMARY KEY (`lock_name`) | ||
110 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | ||
111 | + | ||
112 | + | ||
113 | +INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL); | ||
114 | +INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_cron`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '0 0 0 * * ? *', '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', ''); | ||
115 | +INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL); | ||
116 | +INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock'); | ||
117 | + | ||
118 | +commit; | ||
119 | + |
db/其他数据库/jeecgboot-oracle11g.dmp
0 → 100644
No preview for this file type
db/其他数据库/jeecgboot-oracle11g.sql
0 → 100644
This diff could not be displayed because it is too large.
db/其他数据库/jeecgboot-sqlserver2019.sql
0 → 100644
This diff could not be displayed because it is too large.
db/其他数据库/oracle11g_dmp说明.txt
0 → 100644
db/增量SQL/3.4.4到3.5.0的菜单升级脚本.sql
0 → 100644
1 | +-- 升级说明:系统敏感接口加了权限注解,此部分是补请求注解配置 | ||
2 | + | ||
3 | +-- author: wangshuai---date:20221118 -for: [VUEN-2735] jeecgboot敏感接口权限加注解 vue3 | ||
4 | +-- 用户管理 | ||
5 | +UPDATE sys_permission SET perms = 'system:user:changepwd' WHERE id = '1588513553652436993'; | ||
6 | + | ||
7 | +UPDATE sys_permission SET name = '用户导入', perms = 'system:user:import' WHERE id = 'f15543b0263cf6c5fac85afdd3eba3f2'; | ||
8 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593185714482880514', '3f915b2769fc80648e92d04e84ca059d', '用户导出', NULL, NULL, 0, NULL, NULL, 2, 'system:user:export', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 18:14:09', NULL, NULL, 0, 0, '1', 0); | ||
9 | +-- 数据字典子项 | ||
10 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593160905216663554', '1438782641187074050', '字典子项新增', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:35:34', NULL, NULL, 0, 0, '1', 0); | ||
11 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593160959633563650', '1438782641187074050', '字典子项编辑', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:35:47', NULL, NULL, 0, 0, '1', 0); | ||
12 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161025790320641', '1438782641187074050', '字典子项删除', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:36:03', NULL, NULL, 0, 0, '1', 0); | ||
13 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161089787011074', '1438782641187074050', '字典子项批量删除', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:36:18', NULL, NULL, 0, 0, '1', 0); | ||
14 | + | ||
15 | +-- 定时任务 | ||
16 | +UPDATE sys_permission SET is_leaf = 0 WHERE id = '1439488251473993730'; | ||
17 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161421350936578', '1439488251473993730', '添加定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:37:37', NULL, NULL, 0, 0, '1', 0); | ||
18 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161483627962370', '1439488251473993730', '更新定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:37:52', NULL, NULL, 0, 0, '1', 0); | ||
19 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161551202394114', '1439488251473993730', '删除定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:08', NULL, NULL, 0, 0, '1', 0); | ||
20 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161608362369026', '1439488251473993730', '批量删除定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:22', NULL, NULL, 0, 0, '1', 0); | ||
21 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161657385394177', '1439488251473993730', '停止定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:pause', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:33', NULL, NULL, 0, 0, '1', 0); | ||
22 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161697348722689', '1439488251473993730', '启动定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:resume', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:43', NULL, NULL, 0, 0, '1', 0); | ||
23 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161743607701505', '1439488251473993730', '立即执行定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:execute', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:54', NULL, NULL, 0, 0, '1', 0); | ||
24 | + | ||
25 | +-- oos上传 | ||
26 | +UPDATE sys_permission SET is_leaf = 0 WHERE id = '1442055284830769154'; | ||
27 | + | ||
28 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593173018886709250', '1442055284830769154', '文件oos上传', NULL, NULL, 0, NULL, NULL, 2, 'system:ossFile:upload', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 17:23:42', NULL, NULL, 0, 0, '1', 0); | ||
29 | +-- author: wangshuai---date:20221118 -for: [VUEN-2735] jeecgboot敏感接口权限加注解 vue3 | ||
30 | + | ||
31 | +-- author: wangshuai---date:20221118 -for: [VUEN-2735] jeecgboot敏感接口权限加注解 vue2 | ||
32 | +-- 用户管理 | ||
33 | +UPDATE sys_permission_v2 SET perms = 'system:user:changepwd' WHERE id = '1588513553652436993'; | ||
34 | +UPDATE sys_permission_v2 SET name = '用户导入', perms = 'system:user:import' WHERE id = 'f15543b0263cf6c5fac85afdd3eba3f2'; | ||
35 | +UPDATE sys_permission_v2 SET perms = 'system:user:export' WHERE id = '1305812030117220354'; | ||
36 | + | ||
37 | +-- 数据字典子项 | ||
38 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593160905216663554', 'f1cb187abf927c88b89470d08615f5ac', '字典子项新增', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:35:34', NULL, NULL, 0, 0, '1', 0); | ||
39 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593160959633563650', 'f1cb187abf927c88b89470d08615f5ac', '字典子项编辑', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:35:47', NULL, NULL, 0, 0, '1', 0); | ||
40 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161025790320641', 'f1cb187abf927c88b89470d08615f5ac', '字典子项删除', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:36:03', NULL, NULL, 0, 0, '1', 0); | ||
41 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161089787011074', 'f1cb187abf927c88b89470d08615f5ac', '字典子项批量删除', NULL, NULL, 0, NULL, NULL, 2, 'system:dict:item:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:36:18', NULL, NULL, 0, 0, '1', 0); | ||
42 | + | ||
43 | +-- 定时任务 | ||
44 | +UPDATE sys_permission_v2 SET is_leaf = 0 WHERE id = 'b1cb0a3fedf7ed0e4653cb5a229837ee'; | ||
45 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161421350936578', 'b1cb0a3fedf7ed0e4653cb5a229837ee', '添加定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:37:37', NULL, NULL, 0, 0, '1', 0); | ||
46 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161483627962370', 'b1cb0a3fedf7ed0e4653cb5a229837ee', '更新定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:37:52', NULL, NULL, 0, 0, '1', 0); | ||
47 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161551202394114', 'b1cb0a3fedf7ed0e4653cb5a229837ee', '删除定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:08', NULL, NULL, 0, 0, '1', 0); | ||
48 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161608362369026', 'b1cb0a3fedf7ed0e4653cb5a229837ee', '批量删除定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:22', NULL, NULL, 0, 0, '1', 0); | ||
49 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161657385394177', 'b1cb0a3fedf7ed0e4653cb5a229837ee', '停止定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:pause', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:33', NULL, NULL, 0, 0, '1', 0); | ||
50 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161697348722689', 'b1cb0a3fedf7ed0e4653cb5a229837ee', '启动定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:resume', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:43', NULL, NULL, 0, 0, '1', 0); | ||
51 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593161743607701505', 'b1cb0a3fedf7ed0e4653cb5a229837ee', '立即执行定时任务', NULL, NULL, 0, NULL, NULL, 2, 'system:quartzJob:execute', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 16:38:54', NULL, NULL, 0, 0, '1', 0); | ||
52 | + | ||
53 | +-- oos上传 | ||
54 | +UPDATE sys_permission_v2 SET is_leaf = 0 WHERE id = '1166535831146504193'; | ||
55 | + | ||
56 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1593173018886709250', '1166535831146504193', '文件oos上传', NULL, NULL, 0, NULL, NULL, 2, 'system:ossFile:upload', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-17 17:23:42', NULL, NULL, 0, 0, '1', 0); | ||
57 | + | ||
58 | +-- author: wangshuai---date:20221118 -for: [VUEN-2735] jeecgboot敏感接口权限加注解 vue2 | ||
59 | + | ||
60 | +-- author: wangshuai---date:20221126 -for:首页用户设置用户编辑敏感权限 | ||
61 | +UPDATE sys_permission SET parent_id = 'd7d6e2e4e2934f2c9385a623fd98c6f3', name = '用户设置', url = '/system/usersetting', component = 'system/usersetting/UserSetting', is_route = 1, component_name = '', redirect = NULL, menu_type = 1, perms = NULL, perms_type = '0', sort_no = 12.00, always_show = 0, icon = 'ant-design:setting-twotone', is_leaf = 0, keep_alive = 0, hidden = 0, hide_tab = 0, description = NULL, create_by = 'admin', create_time = '2022-11-25 22:01:08', update_by = 'admin', update_time = '2022-11-26 10:50:07', del_flag = 0, rule_flag = 0, status = NULL, internal_or_external = 0 WHERE id = '1596141938193747970'; | ||
62 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1596335805278990338', '1596141938193747970', '账户设置用户编辑权限', NULL, NULL, 0, NULL, NULL, 2, 'system:user:setting:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-26 10:51:29', NULL, NULL, 0, 0, '1', 0); | ||
63 | +-- author: wangshuai---date:20221126 -for:首页用户设置用户编辑敏感权限 | ||
64 | + | ||
65 | + | ||
66 | + | ||
67 | +-- 租户邀请用户按钮权限菜单 | ||
68 | +UPDATE sys_permission SET is_leaf = 0 WHERE id = '1280350452934307841'; | ||
69 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1600105607009165314', '1280350452934307841', '邀请用户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:invitation:user', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-06 20:31:20', NULL, NULL, 0, 0, '1', 0); | ||
70 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1600108123037917186', '1280350452934307841', '通过租户id获取用户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:user:list', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-06 20:41:20', NULL, NULL, 0, 0, '1', 0); | ||
71 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1600129606082650113', '1280350452934307841', '租户请离', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:leave', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-06 22:06:42', NULL, NULL, 0, 0, '1', 0); | ||
72 | +-- author: wangshuai---date:20221209--for:租户改造新增字段、菜单权限、字典----- | ||
73 | + | ||
74 | + | ||
75 | + | ||
76 | +-- -author:scott---date:2022-12-30---for:增加查询全部用户接口、原用户接口改成租户下的用户接口,支持租户隔离--- | ||
77 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) | ||
78 | +VALUES ('1592135223910765570', '3f915b2769fc80648e92d04e84ca059d', '查询全部用户', NULL, NULL, 0, NULL, NULL, 2, 'system:user:listAll', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); | ||
79 | + | ||
80 | +INSERT INTO `sys_permission` (`id`, `parent_id`, `name`, `url`, `component`, `is_route`, `component_name`, `redirect`, `menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_leaf`, `keep_alive`, `hidden`, `hide_tab`, `description`, `create_by`, `create_time`, `update_by`, `update_time`, `del_flag`, `rule_flag`, `status`, `internal_or_external`) | ||
81 | +VALUES ('119213522910765570', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '租户用户', '/system/user/tenantUserList', 'system/user/TenantUserList', 1, NULL, NULL, 1, NULL, NULL, 3.2, 0, 'ant-design:user', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2022-12-30 10:11:27', 0, 0, NULL, 0); | ||
82 | +-- -author:scott---date:2022-12-30---for:增加查询全部用户接口、原用户接口改成租户下的用户接口,支持租户隔离--- | ||
83 | + | ||
84 | + | ||
85 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1609123240547344385', '1280350452934307841', '产品包分页列表查询', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:packList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-31 17:44:11', NULL, NULL, 0, 0, '1', 0); | ||
86 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1609123437247619074', '1280350452934307841', '创建租户产品包', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:add:pack', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-31 17:44:58', 'admin', '2022-12-31 20:27:56', 0, 0, '1', 0); | ||
87 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1609164542165012482', '1280350452934307841', '编辑租户产品包', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:edit:pack', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-31 20:28:18', NULL, NULL, 0, 0, '1', 0); | ||
88 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1609164635442139138', '1280350452934307841', '批量删除租户产品包', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:delete:pack', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-12-31 20:28:41', NULL, NULL, 0, 0, '1', 0); | ||
89 | +-- -author:wangshuai---date:2023-01-04---for: 产品包升级sql | ||
90 | + | ||
91 | + | ||
92 | +-- 新增接口权限菜单:分页获取租户用户数据/通过用户id获取租户列表/更新用户租户关系状态/注销租户 | ||
93 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620416187969538', '1280350452934307841', '分页获取租户用户数据', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:tenantPageList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:07:04', NULL, NULL, 0, 0, '1', 0); | ||
94 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620600003342337', '1280350452934307841', '通过用户id获取租户列表', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:getTenantListByUserId', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:07:48', NULL, NULL, 0, 0, '1', 0); | ||
95 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620654621569026', '1280350452934307841', '更新用户租户关系状态', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:updateUserTenantStatus', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:08:01', NULL, NULL, 0, 0, '1', 0); | ||
96 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620772498288641', '1280350452934307841', '注销租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:cancelTenant', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:08:29', NULL, NULL, 0, 0, '1', 0); | ||
97 | +-- author:wangshuai---date:2023-01-09---for: 关系表状态修改/租户表增加逻辑删除/新增接口权限菜单 | ||
98 | + | ||
99 | +-- author:scott---date:2023-01-09---for: 租户修改注解权限 | ||
100 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) | ||
101 | +VALUES ('1612438989792034818', '1280350452934307841', '编辑租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-07 15:08:29', NULL, NULL, 0, 0, '1', 0); | ||
102 | +-- author:scott---date:2023-01-09---for: 租户修改注解权限 | ||
103 | + | ||
104 | +-- -author:scott---date:2023-01-11--for:租户安全加强,因为id规则暴露了,很不安全 | ||
105 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611620772498218641', '1280350452934307841', '查询租户列表', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:list', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); | ||
106 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1621620772498288641', '1280350452934307841', '添加租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); | ||
107 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1611650772498288641', '1280350452934307841', '删除租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); | ||
108 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1613620712498288641', '1280350452934307841', '批量删除租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); | ||
109 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES | ||
110 | + ('1697220712498288641', '1280350452934307841', '根据ids查询租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:queryList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 15:08:29', NULL, NULL, 0, 0, '1', 0); | ||
111 | +-- -author:scott---date:2023-01-11--for:租户安全加强,因为id规则暴露了,很不安全 | ||
112 | + | ||
113 | + | ||
114 | +-- -author:scott---date:2023-01-11--for:增加一个查询全部角色,不做租户隔离的接口 | ||
115 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1592120224120850434', '190c2b43bec6a5f7a4194a85db67d96a', '查询全部角色不租户隔离', NULL, NULL, 0, NULL, NULL, 2, 'system:role:queryallNoByTenant', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-11 19:41:18', NULL, NULL, 0, 0, '1', 0); | ||
116 | +-- -author:scott---date:2023-01-11--for:增加一个查询全部角色,不做租户隔离的接口 | ||
117 | + | ||
118 | + | ||
119 | + | ||
120 | +-- -author:scott---date:2023-01-31--for:用户敏感接口【通过id获取用户信息、通过id查询用户角色】,加权限 | ||
121 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1d592115213910765570', '3f915b2769fc80648e92d04e84ca059d', '通过ID查询用户拥有的角色', NULL, NULL, 0, NULL, NULL, 2, 'system:user:queryUserRole', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); | ||
122 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('15c92115213910765570', '3f915b2769fc80648e92d04e84ca059d', '通过ID查询用户信息接口', NULL, NULL, 0, NULL, NULL, 2, 'system:user:queryById', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); | ||
123 | + | ||
124 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('159d2115213910765570', '3f915b2769fc80648e92d04e84ca059d', '通过ID查询用户拥有的角色', NULL, NULL, 0, NULL, NULL, 2, 'system:user:queryUserRole', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); | ||
125 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('15s92115213910765570', '3f915b2769fc80648e92d04e84ca059d', '通过ID查询用户信息接口', NULL, NULL, 0, NULL, NULL, 2, 'system:user:queryById', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-14 19:20:22', NULL, NULL, 0, 0, '1', 0); | ||
126 | +-- -author:scott---date:2023-01-31--for:用户敏感接口【通过id获取用户信息、通过id查询用户角色】,加权限 | ||
127 | + | ||
128 | + | ||
129 | + | ||
130 | +-- -author:wangshuai---date:2023-02-02--for:[QQYUN-3959]新增回收站接口权限 | ||
131 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620261087828418562', '1280350452934307841', '获取租户删除的列表', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:recycleBinPageList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 11:22:01', NULL, NULL, 0, 0, '1', 0); | ||
132 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620305415648989186', '1280350452934307841', '彻底删除租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:deleteTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 14:18:10', 'admin', '2023-01-31 14:19:51', 0, 0, '1', 0); | ||
133 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620327825894981634', '1280350452934307841', '租户还原', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:revertTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 15:47:13', NULL, NULL, 0, 0, '1', 0); | ||
134 | +-- -author:wangshuai---date:2023-02-02--for:[QQYUN-3959]新增回收站接口权限 | ||
135 | + | ||
136 | + | ||
137 | +-- -author:wangshuai---date:2023-02-02--for:[QQYUN-3959]vue2菜单新增租户回收站接口权限 | ||
138 | +UPDATE sys_permission_v2 SET is_leaf = 0 WHERE id = '1280350452934307841'; | ||
139 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620261087828418562', '1280350452934307841', '获取租户删除的列表', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:recycleBinPageList', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 11:22:01', NULL, NULL, 0, 0, '1', 0); | ||
140 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620305415648989186', '1280350452934307841', '彻底删除租户', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:deleteTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 14:18:10', 'admin', '2023-01-31 14:19:51', 0, 0, '1', 0); | ||
141 | +INSERT INTO sys_permission_v2(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1620327825894981634', '1280350452934307841', '租户还原', NULL, NULL, 0, NULL, NULL, 2, 'system:tenant:revertTenantLogic', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-01-31 15:47:13', NULL, NULL, 0, 0, '1', 0); | ||
142 | +-- -author:wangshuai---date:2023-02-02--for:[QQYUN-3959]vue2菜单新增租户回收站接口权限 | ||
143 | + | ||
144 | + | ||
145 | + | ||
146 | + | ||
147 | +-- author:wangshuai ---date:2022-11-23 for:新增在线用户菜单---- | ||
148 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1594930803956920321', '1439398677984878593', '在线用户', '/system/onlineuser', 'system/onlineuser/OnlineUserList', 1, '', NULL, 1, NULL, '0', 12.00, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-22 13:48:31', 'admin', '2022-11-23 19:35:10', 0, 0, NULL, 0); | ||
149 | +-- author:wangshuai ---date:2022-11-23 for:新增在线用户菜单---- | ||
150 | + | ||
151 | +-- author:wangshuai ---date:2022-11-25 for:新增用户设置菜单---- | ||
152 | +INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external) VALUES ('1596141938193747970', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '用户设置', '/system/usersetting', 'system/usersetting/UserSetting', 1, '', NULL, 1, NULL, '0', 12.00, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2022-11-25 22:01:08', 'admin', '2022-11-25 22:01:21', 0, 0, NULL, 0); | ||
153 | +-- author:wangshuai ---date:2022-11-25 for:新增用户设置菜单---- | ||
154 | + | ||
155 | +-- author:scott ---date:2022-11-29 for:新增租户角色功能---- | ||
156 | +INSERT INTO `sys_permission` (`id`, `parent_id`, `name`, `url`, `component`, `is_route`, `component_name`, `redirect`, `menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_leaf`, `keep_alive`, `hidden`, `hide_tab`, `description`, `create_by`, `create_time`, `update_by`, `update_time`, `del_flag`, `rule_flag`, `status`, `internal_or_external`) VALUES ('1597419994965786625', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '租户角色', '/system/role/TenantRoleList', 'system/role/TenantRoleList', 1, '', NULL, 1, NULL, '0', 3.10, 0, 'ant-design:line-height-outlined', 1, 0, 0, 0, NULL, 'admin', '2022-11-29 10:39:40', 'admin', '2022-11-29 11:08:05', 0, 0, NULL, 0); | ||
157 | +-- author:scott ---date:2022-11-29 for:新增租户角色功能---- | ||
158 | + | ||
159 | +-- author:wangshuai ---date:2022-11-30 for:用户设置菜单路由隐藏---- | ||
160 | +UPDATE sys_permission SET hidden = 1 WHERE id = '1596141938193747970'; | ||
161 | +-- author:wangshuai ---date:2022-11-30 for:用户设置菜单路由隐藏---- |
db/增量SQL/3.4.4到3.5.0表结构升级脚本.sql
0 → 100644
1 | +-- author: scott---date:20221009 -for: 乐观锁测试 | ||
2 | +ALTER TABLE `demo` | ||
3 | +ADD COLUMN `update_count` int NULL COMMENT '乐观锁测试' AFTER `tenant_id`; | ||
4 | +-- author: scott---date:20221009 -for: 乐观锁测试 | ||
5 | + | ||
6 | +-- author: scott---date:20221108 -for:VUEN-2064 改造登录选择部门和租户逻辑 | ||
7 | +ALTER TABLE `sys_user` | ||
8 | +ADD COLUMN `login_tenant_id` int NULL COMMENT '上次登录选择租户ID' AFTER `client_id`; | ||
9 | +-- author: scott---date:20221108 -for:VUEN-2064 改造登录选择部门和租户逻辑 | ||
10 | + | ||
11 | +-- author: scott---date:20221129-for: 系统管理模块支持多租户机制,默认加字段[tenant_id]----- | ||
12 | +ALTER TABLE `sys_depart` | ||
13 | +ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT '租户ID'; | ||
14 | + | ||
15 | +ALTER TABLE `sys_role` | ||
16 | +ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT '租户ID'; | ||
17 | + | ||
18 | +ALTER TABLE `sys_dict` | ||
19 | +ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT '租户ID'; | ||
20 | + | ||
21 | +ALTER TABLE `sys_position` | ||
22 | +ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT '租户ID'; | ||
23 | + | ||
24 | +ALTER TABLE `sys_category` | ||
25 | +ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT '租户ID'; | ||
26 | + | ||
27 | +ALTER TABLE `sys_data_source` | ||
28 | +ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT '租户ID'; | ||
29 | + | ||
30 | +ALTER TABLE `sys_announcement` | ||
31 | +ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT '租户ID'; | ||
32 | + | ||
33 | +ALTER TABLE `sys_user_role` | ||
34 | +ADD COLUMN `tenant_id` int(10) NULL DEFAULT 0 COMMENT '租户ID'; | ||
35 | +-- author: scott---date:20221129--for:系统管理模块支持多租户机制,默认加字段[tenant_id]----- | ||
36 | + | ||
37 | +-- author: wangshuai---date:20221209--for:租户改造新增字段、菜单权限、字典----- | ||
38 | +ALTER TABLE sys_tenant | ||
39 | +ADD COLUMN trade varchar(10) NULL COMMENT '所属行业' AFTER status, | ||
40 | +ADD COLUMN company_size varchar(10) NULL COMMENT '公司规模' AFTER trade, | ||
41 | +ADD COLUMN company_address varchar(100) NULL COMMENT '公司地址' AFTER company_size, | ||
42 | +ADD COLUMN company_logo varchar(200) NULL COMMENT '公司logo' AFTER company_address; | ||
43 | + | ||
44 | +-- 所属行业字典 | ||
45 | +INSERT INTO sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type, tenant_id) VALUES ('1600042215909134338', '所属行业', 'trade', '行业', 0, 'admin', '2022-12-06 16:19:26', 'admin', '2022-12-06 16:20:50', 0, 0); | ||
46 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600042651777011713', '1600042215909134338', '信息传输、软件和信息技术服务业', '1', NULL, 1, 1, 'admin', '2022-12-06 16:21:10', 'admin', '2022-12-06 16:21:27'); | ||
47 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600042736254488578', '1600042215909134338', '制造业', '2', NULL, 1, 1, 'admin', '2022-12-06 16:21:30', NULL, NULL); | ||
48 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600042785646612481', '1600042215909134338', '租赁和商务服务业', '3', NULL, 1, 1, 'admin', '2022-12-06 16:21:42', NULL, NULL); | ||
49 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600042835433000961', '1600042215909134338', '教育', '4', NULL, 1, 1, 'admin', '2022-12-06 16:21:54', NULL, NULL); | ||
50 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600042892072882177', '1600042215909134338', '金融业', '5', NULL, 1, 1, 'admin', '2022-12-06 16:22:07', NULL, NULL); | ||
51 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600042975539531778', '1600042215909134338', '建筑业', '6', NULL, 1, 1, 'admin', '2022-12-06 16:22:27', 'admin', '2022-12-06 16:22:32'); | ||
52 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043052177854466', '1600042215909134338', '科学研究和技术服务业', '7', NULL, 1, 1, 'admin', '2022-12-06 16:22:46', NULL, NULL); | ||
53 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043101976825857', '1600042215909134338', '批发和零售业', '8', NULL, 1, 1, 'admin', '2022-12-06 16:22:58', NULL, NULL); | ||
54 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043157069008898', '1600042215909134338', '住宿和餐饮业', '9', NULL, 1, 1, 'admin', '2022-12-06 16:23:11', NULL, NULL); | ||
55 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043203105689601', '1600042215909134338', '电子商务', '10', NULL, 1, 1, 'admin', '2022-12-06 16:23:22', NULL, NULL); | ||
56 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043277504253953', '1600042215909134338', '线下零售与服务业', '11', NULL, 1, 1, 'admin', '2022-12-06 16:23:39', NULL, NULL); | ||
57 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043334618091521', '1600042215909134338', '文化、体育和娱乐业', '12', NULL, 1, 1, 'admin', '2022-12-06 16:23:53', NULL, NULL); | ||
58 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043401030701058', '1600042215909134338', '房地产业', '13', NULL, 1, 1, 'admin', '2022-12-06 16:24:09', NULL, NULL); | ||
59 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043476440092673', '1600042215909134338', '交通运输、仓储和邮政业', '14', NULL, 1, 1, 'admin', '2022-12-06 16:24:27', NULL, NULL); | ||
60 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043553837584386', '1600042215909134338', '卫生和社会工作', '15', NULL, 1, 1, 'admin', '2022-12-06 16:24:45', NULL, NULL); | ||
61 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043628793991170', '1600042215909134338', '公共管理、社会保障和社会组织', '16', NULL, 1, 1, 'admin', '2022-12-06 16:25:03', NULL, NULL); | ||
62 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043675329794050', '1600042215909134338', '电力、热力、燃气及水生产和供应业', '18', NULL, 1, 1, 'admin', '2022-12-06 16:25:14', NULL, NULL); | ||
63 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043734607892482', '1600042215909134338', '水利、环境和公共设施管理业', '19', NULL, 1, 1, 'admin', '2022-12-06 16:25:28', NULL, NULL); | ||
64 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043783068880897', '1600042215909134338', '居民服务、修理和其他服务业', '20', NULL, 1, 1, 'admin', '2022-12-06 16:25:40', NULL, NULL); | ||
65 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043822679887874', '1600042215909134338', '政府机构', '21', NULL, 1, 1, 'admin', '2022-12-06 16:25:49', NULL, NULL); | ||
66 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043859539431426', '1600042215909134338', '农、林、牧、渔业', '22', NULL, 1, 1, 'admin', '2022-12-06 16:25:58', NULL, NULL); | ||
67 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043907551629313', '1600042215909134338', '采矿业', '23', NULL, 1, 1, 'admin', '2022-12-06 16:26:10', NULL, NULL); | ||
68 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043955731599362', '1600042215909134338', '国际组织', '24', NULL, 1, 1, 'admin', '2022-12-06 16:26:21', NULL, NULL); | ||
69 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600043991685173249', '1600042215909134338', '其他', '25', NULL, 1, 1, 'admin', '2022-12-06 16:26:30', NULL, NULL); | ||
70 | + | ||
71 | +-- 公司规模字典 | ||
72 | +INSERT INTO sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type, tenant_id) VALUES ('1600044537800331266', '公司规模', 'company_size', '公司规模', 0, 'admin', '2022-12-06 16:28:40', 'admin', '2022-12-06 16:30:23', 0, 0); | ||
73 | + | ||
74 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600044644096577538', '1600044537800331266', '20人以下', '1', NULL, 1, 1, 'admin', '2022-12-06 16:29:05', NULL, NULL); | ||
75 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600044698618335233', '1600044537800331266', '21-99人', '2', NULL, 1, 1, 'admin', '2022-12-06 16:29:18', NULL, NULL); | ||
76 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600044744172670978', '1600044537800331266', '100-499人', '3', NULL, 1, 1, 'admin', '2022-12-06 16:29:29', NULL, NULL); | ||
77 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600044792306503681', '1600044537800331266', '500-999人', '4', NULL, 1, 1, 'admin', '2022-12-06 16:29:41', NULL, NULL); | ||
78 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600044861302804481', '1600044537800331266', '1000-9999人', '5', NULL, 1, 1, 'admin', '2022-12-06 16:29:57', NULL, NULL); | ||
79 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1600044924313833473', '1600044537800331266', '10000人以上', '6', NULL, 1, 1, 'admin', '2022-12-06 16:30:12', NULL, NULL); | ||
80 | + | ||
81 | + | ||
82 | + | ||
83 | +-- author: scott---date:20221227--for:字典增加应用ID----- | ||
84 | +ALTER TABLE `sys_dict` | ||
85 | +ADD COLUMN `low_app_id` varchar(32) NULL COMMENT '低代码应用ID' AFTER `tenant_id`; | ||
86 | +-- author: scott---date:20221227--for:字典增加应用ID----- | ||
87 | + | ||
88 | +-- author: scott---date:20221227--for:租户ID改成10位整数----- | ||
89 | +ALTER TABLE `sys_tenant` | ||
90 | +MODIFY COLUMN `id` int(10) NOT NULL COMMENT '租户编码' FIRST; | ||
91 | +-- author: scott---date:20221227--for:租户ID改成10位整数----- | ||
92 | + | ||
93 | +-- author: wangshuai---date:20221229--for:[QQYUN-3608]租户逻辑改造----- | ||
94 | +-- 新增租户中间表 | ||
95 | +CREATE TABLE sys_user_tenant( | ||
96 | + id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键id', | ||
97 | + user_id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户id', | ||
98 | + tenant_id int(10) NULL DEFAULT NULL COMMENT '租户id', | ||
99 | + status varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态(0 冻结 1 正常)', | ||
100 | + create_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人登录名称', | ||
101 | + create_time datetime(0) NULL DEFAULT NULL COMMENT '创建日期', | ||
102 | + update_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人登录名称', | ||
103 | + update_time datetime(0) NULL DEFAULT NULL COMMENT '更新日期', | ||
104 | + PRIMARY KEY (id) USING BTREE | ||
105 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户租户关系表' ROW_FORMAT = Dynamic; | ||
106 | + | ||
107 | +-- 职级字典 | ||
108 | +INSERT INTO sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type, tenant_id) VALUES ('1606645341269299201', '职级', 'company_rank', '公司职级', 0, 'admin', '2022-12-24 21:37:54', 'admin', '2022-12-24 21:38:25', 0, 0); | ||
109 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606645562573361153', '1606645341269299201', '总裁/总经理/CEO', '1', NULL, 1, 1, 'admin', '2022-12-24 21:38:47', NULL, NULL); | ||
110 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606645619930468354', '1606645341269299201', '副总裁/副总经理/VP', '2', NULL, 2, 1, 'admin', '2022-12-24 21:39:00', 'admin', '2022-12-24 21:40:00'); | ||
111 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606645660241924097', '1606645341269299201', '总监/主管/经理', '3', NULL, 3, 1, 'admin', '2022-12-24 21:39:10', 'admin', '2022-12-24 21:39:41'); | ||
112 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606645696715591682', '1606645341269299201', '员工/专员/执行', '4', NULL, 4, 1, 'admin', '2022-12-24 21:39:19', 'admin', '2022-12-24 21:39:37'); | ||
113 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606645744023146497', '1606645341269299201', '其他', '5', NULL, 5, 1, 'admin', '2022-12-24 21:39:30', NULL, NULL); | ||
114 | +-- 部门字典 | ||
115 | +INSERT INTO sys_dict(id, dict_name, dict_code, description, del_flag, create_by, create_time, update_by, update_time, type, tenant_id) VALUES ('1606646440684457986', '公司部门', 'company_department', '公司部门', 0, 'admin', '2022-12-24 21:42:16', NULL, NULL, 0, 0); | ||
116 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606647668965412866', '1606646440684457986', '总经办', '1', NULL, 1, 1, 'admin', '2022-12-24 21:47:09', NULL, NULL); | ||
117 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606647703098658817', '1606646440684457986', '技术/IT/研发', '2', NULL, 2, 1, 'admin', '2022-12-24 21:47:17', NULL, NULL); | ||
118 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606647737919770625', '1606646440684457986', '产品/设计', '3', NULL, 3, 1, 'admin', '2022-12-24 21:47:25', NULL, NULL); | ||
119 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606647789614567425', '1606646440684457986', '销售/市场/运营', '4', '', 4, 1, 'admin', '2022-12-24 21:47:38', NULL, NULL); | ||
120 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606647827921145857', '1606646440684457986', '人事/财务/行政', '5', NULL, 5, 1, 'admin', '2022-12-24 21:47:47', NULL, NULL); | ||
121 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606647860955484162', '1606646440684457986', '资源/仓储/采购', '6', NULL, 6, 1, 'admin', '2022-12-24 21:47:55', NULL, NULL); | ||
122 | +INSERT INTO sys_dict_item(id, dict_id, item_text, item_value, description, sort_order, status, create_by, create_time, update_by, update_time) VALUES ('1606647915473047553', '1606646440684457986', '其他', '7', NULL, 7, 1, 'admin', '2022-12-24 21:48:08', NULL, NULL); | ||
123 | + | ||
124 | +-- 租户新增字段 | ||
125 | +ALTER TABLE sys_tenant | ||
126 | +ADD COLUMN house_number varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '门牌号' AFTER company_logo, | ||
127 | +ADD COLUMN work_place varchar(100) CHARACTER SET utf32 COLLATE utf32_general_ci NULL DEFAULT NULL COMMENT '工作地点' AFTER house_number, | ||
128 | +ADD COLUMN secondary_domain varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '二级域名' AFTER work_place, | ||
129 | +ADD COLUMN login_bkgd_img varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录背景图片' AFTER secondary_domain, | ||
130 | +ADD COLUMN position varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '职级' AFTER login_bkgd_img, | ||
131 | +ADD COLUMN department varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门' AFTER position; | ||
132 | + | ||
133 | +-- 移除用户多租户id | ||
134 | +ALTER TABLE sys_user | ||
135 | +DROP COLUMN rel_tenant_ids; | ||
136 | +-- author: wangshuai---date:20221229--for:[QQYUN-3608]租户逻辑改造----- | ||
137 | + | ||
138 | +-- author: wangshuai---date:20221229--for:租户表创建查询索引,避免数据量大查询慢----- | ||
139 | +ALTER TABLE sys_user_tenant | ||
140 | +ADD INDEX idx_sut_user_id(user_id) USING BTREE, | ||
141 | +ADD INDEX idx_sut_tenant_id(tenant_id) USING BTREE; | ||
142 | +-- author: wangshuai---date:20221229--for:租户表创建查询索引,避免数据量大查询慢----- | ||
143 | + | ||
144 | + | ||
145 | +-- -author:wangshuai---date:2023-01-04---for: 产品包升级sql | ||
146 | +CREATE TABLE sys_pack_permission ( | ||
147 | + id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键编号', | ||
148 | + pack_id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '租户产品包名称', | ||
149 | + permission_id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '菜单id', | ||
150 | + create_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', | ||
151 | + create_time date NULL DEFAULT NULL COMMENT '创建时间', | ||
152 | + update_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', | ||
153 | + update_time date NULL DEFAULT NULL COMMENT '更新时间', | ||
154 | + PRIMARY KEY (id) USING BTREE | ||
155 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '租户产品包和菜单关系表' ROW_FORMAT = Dynamic; | ||
156 | + | ||
157 | +CREATE TABLE sys_tenant_pack ( | ||
158 | + id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键id', | ||
159 | + tenant_id int(10) NULL DEFAULT NULL COMMENT '租户id', | ||
160 | + pack_name varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '产品包名', | ||
161 | + status varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '开启状态(0 未开启 1开启)', | ||
162 | + remarks varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', | ||
163 | + create_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', | ||
164 | + create_time date NULL DEFAULT NULL COMMENT '创建时间', | ||
165 | + update_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', | ||
166 | + update_time date NULL DEFAULT NULL COMMENT '更新时间', | ||
167 | + PRIMARY KEY (id) USING BTREE | ||
168 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '租户产品包' ROW_FORMAT = Dynamic; | ||
169 | + | ||
170 | + | ||
171 | + | ||
172 | +-- author:wangshuai---date:2023-01-09---for: 关系表状态修改/租户表增加逻辑删除/新增接口权限菜单 | ||
173 | +-- 关系表状态修改 | ||
174 | +ALTER TABLE sys_user_tenant | ||
175 | +MODIFY COLUMN status varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态(1 正常 2 冻结 3 待审核 4 拒绝)' AFTER tenant_id; | ||
176 | + | ||
177 | +-- 租户表增加逻辑删除 | ||
178 | +ALTER TABLE sys_tenant | ||
179 | +ADD COLUMN del_flag tinyint(1) NULL DEFAULT NULL COMMENT '删除状态(0-正常,1-已删除)' AFTER department; | ||
180 | + | ||
181 | +ALTER TABLE `sys_tenant` | ||
182 | +MODIFY COLUMN `del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除状态(0-正常,1-已删除)' AFTER `department`; | ||
183 | + | ||
184 | +-- 需要将租户删除状态改成0正常,否则可能导致数据出不来 | ||
185 | +update sys_tenant set del_flag = 0; | ||
186 | + | ||
187 | + | ||
188 | +-- -author:wangshuai---date:2023-01-11--for:【QQYUN-3938】租户表加修改人、修改时间 | ||
189 | +ALTER TABLE sys_tenant | ||
190 | +ADD COLUMN update_by varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人' AFTER del_flag, | ||
191 | +ADD COLUMN update_time datetime(0) NULL DEFAULT NULL COMMENT '更新时间' AFTER update_by; | ||
192 | +-- -author:wangshuai---date:2023-01-11--for:【QQYUN-3938】租户表加修改人、修改时间 | ||
193 | + | ||
194 | +-- -author:wangshuai---date:2023-01-11--for:用户租户修改离职状态 | ||
195 | +ALTER TABLE sys_user_tenant | ||
196 | +MODIFY COLUMN status varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态(1 正常 2 离职 3 待审核 4 审核未通过)' AFTER tenant_id; | ||
197 | +-- -author:wangshuai---date:2023-01-11--for:用户租户修改离职状态 | ||
198 | + | ||
199 | + | ||
200 | + | ||
201 | +-- -author:wangshuai---date:2023-02-02--for:[QQYUN-3988]租户产品包表改名 | ||
202 | +ALTER TABLE sys_pack_permission RENAME sys_tenant_pack_perms; | ||
203 | +-- -author:wangshuai---date:2023-02-02--for:[QQYUN-3988]租户产品包表改名 | ||
204 | + | ||
205 | +-- -author:zyf---date:2023-02-02--for:添加流程离职入职状态 | ||
206 | +ALTER TABLE sys_user | ||
207 | +ADD COLUMN bpm_status varchar(2) NULL DEFAULT NULL COMMENT '流程入职离职状态'; | ||
208 | +-- -author:zyf---date:2023-02-02--for:添加流程离职入职状态 | ||
209 | + | ||
210 | +-- -author:scott---date:2023-02-08--for:尽量不要用大字段,会出问题 | ||
211 | +ALTER TABLE `sys_user` | ||
212 | +MODIFY COLUMN `depart_ids` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '负责部门' AFTER `user_identity`; | ||
213 | +-- -author:scott---date:2023-02-08--for:尽量不要用大字段,会出问题 | ||
214 | + | ||
215 | +-- -author:wangshuai---date:2023-02-16--for:[QQYUN-4163]部门新增是否叶子结点 | ||
216 | +ALTER TABLE sys_depart | ||
217 | +ADD COLUMN iz_leaf tinyint(1) NULL DEFAULT 0 COMMENT '是否有叶子节点: 1是0否' AFTER tenant_id; | ||
218 | +-- 更新父级部门不为叶子结点 | ||
219 | +update sys_depart set iz_leaf = 0 where id in ( select a.parent_id from (select parent_id from sys_depart where parent_id!='' and parent_id is not null) as a); | ||
220 | +-- -author:wangshuai---date:2023-02-16--for:[QQYUN-4163]部门新增是否叶子结点 | ||
221 | + | ||
222 | + | ||
223 | +-- -author: taoyan---date:2023-02-17--for:QQYUN-3851【租户】租户管理员功能 | ||
224 | +ALTER TABLE `sys_tenant_pack` | ||
225 | +ADD COLUMN `pack_code` varchar(50) NULL COMMENT '编码,默认添加的三个管理员需要设置编码' AFTER `update_time`; | ||
226 | + | ||
227 | +ALTER TABLE `sys_log` | ||
228 | +ADD COLUMN `tenant_id` int(10) NULL COMMENT '租户ID' AFTER `update_time`; | ||
229 | + | ||
230 | + | ||
231 | +CREATE TABLE `sys_tenant_pack_user` ( | ||
232 | + `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, | ||
233 | + `pack_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '租户产品包ID', | ||
234 | + `user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户ID', | ||
235 | + `tenant_id` int(10) NULL DEFAULT NULL COMMENT '租户ID', | ||
236 | + `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', | ||
237 | + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', | ||
238 | + `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', | ||
239 | + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', | ||
240 | + PRIMARY KEY (`id`) USING BTREE | ||
241 | +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '租户套餐人员表' ROW_FORMAT = Dynamic; | ||
242 | + | ||
243 | +ALTER TABLE `sys_tenant_pack_user` | ||
244 | +ADD COLUMN `status` int(3) NULL COMMENT '状态 正常状态1 申请状态0' AFTER `update_time`; | ||
245 | + | ||
246 | +ALTER TABLE `sys_tenant` | ||
247 | +ADD COLUMN `apply_status` int(3) NULL COMMENT '允许申请管理员 1允许 0不允许' AFTER `update_time`; | ||
248 | +update sys_tenant set apply_status = 1; | ||
249 | + | ||
250 | +ALTER TABLE `sys_log` | ||
251 | +MODIFY COLUMN `log_type` int(3) NULL DEFAULT NULL COMMENT '日志类型(1登录日志,2操作日志, 3.租户操作日志)' AFTER `id`; | ||
252 | +-- -author: taoyan---date:2023-02-17--for:QQYUN-3851【租户】租户管理员功能 | ||
253 | + | ||
254 | + | ||
255 | + | ||
256 | + | ||
257 | + |
db/增量SQL/版本升级说明.txt
0 → 100644
1 | +版本升级方法? | ||
2 | + | ||
3 | + JeecgBoot属于平台级产品,每次升级改动内容较多,目前做不到平滑升级。 | ||
4 | + | ||
5 | + 这里给用户的升级建议是这样的: | ||
6 | + 1.代码升级 => 本地版本通过svn或者git做好主干,在分支上做业务开发,jeecg每次版本发布,可以手工覆盖主干的代码,对比代码进行提交; | ||
7 | + 2.数据库升级 => 针对数据库我们每次发布会提供增量升级SQL,可以通过增量SQL实现数据库的升级。 | ||
8 | + 3.兼容问题 => 每次版本发布会针对不兼容地方标注说明,需要手工修改不兼容的代码。 | ||
9 | + | ||
10 | + 注意: 升级sql目前只提供mysql版本,执行完脚步后,新菜单需要手工进行角色授权,刷新首页才会出现。 |
docker-compose.yml
0 → 100644
1 | +version: '2' | ||
2 | +services: | ||
3 | + jeecg-boot-mysql: | ||
4 | + build: | ||
5 | + context: ./db | ||
6 | + environment: | ||
7 | + MYSQL_ROOT_PASSWORD: root | ||
8 | + MYSQL_ROOT_HOST: '%' | ||
9 | + TZ: Asia/Shanghai | ||
10 | + restart: always | ||
11 | + container_name: jeecg-boot-mysql | ||
12 | + image: jeecg-boot-mysql | ||
13 | + command: | ||
14 | + --character-set-server=utf8mb4 | ||
15 | + --collation-server=utf8mb4_general_ci | ||
16 | + --explicit_defaults_for_timestamp=true | ||
17 | + --lower_case_table_names=1 | ||
18 | + --max_allowed_packet=128M | ||
19 | + --default-authentication-plugin=caching_sha2_password | ||
20 | + ports: | ||
21 | + - 3306:3306 | ||
22 | + | ||
23 | + jeecg-boot-redis: | ||
24 | + image: redis:5.0 | ||
25 | + ports: | ||
26 | + - 6379:6379 | ||
27 | + restart: always | ||
28 | + hostname: jeecg-boot-redis | ||
29 | + container_name: jeecg-boot-redis | ||
30 | + | ||
31 | + jeecg-boot-system: | ||
32 | + build: | ||
33 | + context: ./jeecg-module-system/jeecg-system-start | ||
34 | + restart: on-failure | ||
35 | + depends_on: | ||
36 | + - jeecg-boot-mysql | ||
37 | + - jeecg-boot-redis | ||
38 | + container_name: jeecg-boot-system | ||
39 | + image: jeecg-boot-system | ||
40 | + hostname: jeecg-boot-system | ||
41 | + ports: | ||
42 | + - 8080:8080 |
jeecg-boot-base-core/lib/HbcaSdk.jar
0 → 100644
No preview for this file type
jeecg-boot-base-core/pom.xml
0 → 100644
1 | +<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
2 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
3 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
4 | + <parent> | ||
5 | + <groupId>org.jeecgframework.boot</groupId> | ||
6 | + <artifactId>jeecg-boot-parent</artifactId> | ||
7 | + <version>3.5.0</version> | ||
8 | + </parent> | ||
9 | + <modelVersion>4.0.0</modelVersion> | ||
10 | + <artifactId>jeecg-boot-base-core</artifactId> | ||
11 | + | ||
12 | + <repositories> | ||
13 | + <repository> | ||
14 | + <id>aliyun</id> | ||
15 | + <name>aliyun Repository</name> | ||
16 | + <url>https://maven.aliyun.com/repository/public</url> | ||
17 | + <snapshots> | ||
18 | + <enabled>false</enabled> | ||
19 | + </snapshots> | ||
20 | + </repository> | ||
21 | + <repository> | ||
22 | + <id>jeecg</id> | ||
23 | + <name>jeecg Repository</name> | ||
24 | + <url>https://maven.jeecg.org/nexus/content/repositories/jeecg</url> | ||
25 | + <snapshots> | ||
26 | + <enabled>false</enabled> | ||
27 | + </snapshots> | ||
28 | + </repository> | ||
29 | + <repository> | ||
30 | + <id>jeecg-snapshots</id> | ||
31 | + <name>jeecg-snapshots Repository</name> | ||
32 | + <url>https://oss.sonatype.org/content/repositories/snapshots</url> | ||
33 | + <releases> | ||
34 | + <enabled>false</enabled> | ||
35 | + </releases> | ||
36 | + <snapshots> | ||
37 | + <enabled>true</enabled> | ||
38 | + </snapshots> | ||
39 | + </repository> | ||
40 | + </repositories> | ||
41 | + | ||
42 | + <dependencies> | ||
43 | + <!--jeecg-tools--> | ||
44 | + <dependency> | ||
45 | + <groupId>org.jeecgframework.boot</groupId> | ||
46 | + <artifactId>jeecg-boot-common</artifactId> | ||
47 | + </dependency> | ||
48 | + <!--集成springmvc框架并实现自动配置 --> | ||
49 | + <dependency> | ||
50 | + <groupId>org.springframework.boot</groupId> | ||
51 | + <artifactId>spring-boot-starter-web</artifactId> | ||
52 | + </dependency> | ||
53 | + <!-- websocket --> | ||
54 | + <dependency> | ||
55 | + <groupId>org.springframework.boot</groupId> | ||
56 | + <artifactId>spring-boot-starter-websocket</artifactId> | ||
57 | + </dependency> | ||
58 | + <dependency> | ||
59 | + <groupId>org.springframework.boot</groupId> | ||
60 | + <artifactId>spring-boot-starter-mail</artifactId> | ||
61 | + </dependency> | ||
62 | + <dependency> | ||
63 | + <groupId>org.springframework.boot</groupId> | ||
64 | + <artifactId>spring-boot-starter-aop</artifactId> | ||
65 | + </dependency> | ||
66 | + <dependency> | ||
67 | + <groupId>org.springframework.boot</groupId> | ||
68 | + <artifactId>spring-boot-starter-actuator</artifactId> | ||
69 | + </dependency> | ||
70 | + <!--springboot2.3+ 需引入validation对应的包--> | ||
71 | + <dependency> | ||
72 | + <groupId>org.springframework.boot</groupId> | ||
73 | + <artifactId>spring-boot-starter-validation</artifactId> | ||
74 | + </dependency> | ||
75 | + <!--springboot2.6+解决metrics端点不显示jvm信息的问题--> | ||
76 | + <dependency> | ||
77 | + <groupId>io.micrometer</groupId> | ||
78 | + <artifactId>micrometer-registry-prometheus</artifactId> | ||
79 | + </dependency> | ||
80 | + | ||
81 | + <!-- commons --> | ||
82 | + <dependency> | ||
83 | + <groupId>commons-io</groupId> | ||
84 | + <artifactId>commons-io</artifactId> | ||
85 | + <version>${commons.version}</version> | ||
86 | + </dependency> | ||
87 | + <dependency> | ||
88 | + <groupId>commons-lang</groupId> | ||
89 | + <artifactId>commons-lang</artifactId> | ||
90 | + <version>${commons.version}</version> | ||
91 | + </dependency> | ||
92 | + <!-- freemarker --> | ||
93 | + <dependency> | ||
94 | + <groupId>org.springframework.boot</groupId> | ||
95 | + <artifactId>spring-boot-starter-freemarker</artifactId> | ||
96 | + </dependency> | ||
97 | + | ||
98 | + <!-- mybatis-plus --> | ||
99 | + <dependency> | ||
100 | + <groupId>com.baomidou</groupId> | ||
101 | + <artifactId>mybatis-plus-boot-starter</artifactId> | ||
102 | + <version>${mybatis-plus.version}</version> | ||
103 | + </dependency> | ||
104 | + | ||
105 | + <!-- druid --> | ||
106 | + <dependency> | ||
107 | + <groupId>com.alibaba</groupId> | ||
108 | + <artifactId>druid-spring-boot-starter</artifactId> | ||
109 | + <version>${druid.version}</version> | ||
110 | + </dependency> | ||
111 | + | ||
112 | + <!-- 动态数据源 --> | ||
113 | + <dependency> | ||
114 | + <groupId>com.baomidou</groupId> | ||
115 | + <artifactId>dynamic-datasource-spring-boot-starter</artifactId> | ||
116 | + <version>${dynamic-datasource-spring-boot-starter.version}</version> | ||
117 | + </dependency> | ||
118 | + | ||
119 | + <!-- 数据库驱动 --> | ||
120 | + <!--mysql--> | ||
121 | + <dependency> | ||
122 | + <groupId>mysql</groupId> | ||
123 | + <artifactId>mysql-connector-java</artifactId> | ||
124 | + <version>${mysql-connector-java.version}</version> | ||
125 | + <scope>runtime</scope> | ||
126 | + </dependency> | ||
127 | + <!-- sqlserver--> | ||
128 | + <dependency> | ||
129 | + <groupId>com.microsoft.sqlserver</groupId> | ||
130 | + <artifactId>sqljdbc4</artifactId> | ||
131 | + <version>${sqljdbc4.version}</version> | ||
132 | + <scope>runtime</scope> | ||
133 | + </dependency> | ||
134 | + <!-- oracle驱动 --> | ||
135 | + <dependency> | ||
136 | + <groupId>com.oracle</groupId> | ||
137 | + <artifactId>ojdbc6</artifactId> | ||
138 | + <version>${ojdbc6.version}</version> | ||
139 | + <scope>runtime</scope> | ||
140 | + </dependency> | ||
141 | + <!-- postgresql驱动 --> | ||
142 | + <dependency> | ||
143 | + <groupId>org.postgresql</groupId> | ||
144 | + <artifactId>postgresql</artifactId> | ||
145 | + <version>${postgresql.version}</version> | ||
146 | + <scope>runtime</scope> | ||
147 | + </dependency> | ||
148 | + | ||
149 | + <!-- Quartz定时任务 --> | ||
150 | + <dependency> | ||
151 | + <groupId>org.springframework.boot</groupId> | ||
152 | + <artifactId>spring-boot-starter-quartz</artifactId> | ||
153 | + </dependency> | ||
154 | + | ||
155 | + <!--JWT--> | ||
156 | + <dependency> | ||
157 | + <groupId>com.auth0</groupId> | ||
158 | + <artifactId>java-jwt</artifactId> | ||
159 | + <version>${java-jwt.version}</version> | ||
160 | + </dependency> | ||
161 | + | ||
162 | + <!--shiro--> | ||
163 | + <dependency> | ||
164 | + <groupId>org.apache.shiro</groupId> | ||
165 | + <artifactId>shiro-spring-boot-starter</artifactId> | ||
166 | + <version>${shiro.version}</version> | ||
167 | + </dependency> | ||
168 | + <!-- shiro-redis --> | ||
169 | + <dependency> | ||
170 | + <groupId>org.crazycake</groupId> | ||
171 | + <artifactId>shiro-redis</artifactId> | ||
172 | + <version>${shiro-redis.version}</version> | ||
173 | + <exclusions> | ||
174 | + <exclusion> | ||
175 | + <groupId>org.apache.shiro</groupId> | ||
176 | + <artifactId>shiro-core</artifactId> | ||
177 | + </exclusion> | ||
178 | + </exclusions> | ||
179 | + </dependency> | ||
180 | + | ||
181 | + <!-- knife4j --> | ||
182 | + <dependency> | ||
183 | + <groupId>com.github.xiaoymin</groupId> | ||
184 | + <artifactId>knife4j-spring-boot-starter</artifactId> | ||
185 | + <version>${knife4j-spring-boot-starter.version}</version> | ||
186 | + </dependency> | ||
187 | + | ||
188 | + <!-- 代码生成器 --> | ||
189 | + <!-- 如下载失败,请参考此文档 http://doc.jeecg.com/2043876 --> | ||
190 | + <dependency> | ||
191 | + <groupId>org.jeecgframework.boot</groupId> | ||
192 | + <artifactId>codegenerate</artifactId> | ||
193 | + <version>${codegenerate.version}</version> | ||
194 | + </dependency> | ||
195 | + | ||
196 | + <!-- AutoPoi Excel工具类--> | ||
197 | + <dependency> | ||
198 | + <groupId>org.jeecgframework</groupId> | ||
199 | + <artifactId>autopoi-web</artifactId> | ||
200 | + <version>${autopoi-web.version}</version> | ||
201 | + <exclusions> | ||
202 | + <exclusion> | ||
203 | + <groupId>commons-codec</groupId> | ||
204 | + <artifactId>commons-codec</artifactId> | ||
205 | + </exclusion> | ||
206 | + <exclusion> | ||
207 | + <artifactId>xercesImpl</artifactId> | ||
208 | + <groupId>xerces</groupId> | ||
209 | + </exclusion> | ||
210 | + </exclusions> | ||
211 | + </dependency> | ||
212 | + <dependency> | ||
213 | + <groupId>xerces</groupId> | ||
214 | + <artifactId>xercesImpl</artifactId> | ||
215 | + <version>2.12.2</version> | ||
216 | + <optional>true</optional> | ||
217 | + </dependency> | ||
218 | + | ||
219 | + <!-- mini文件存储服务 --> | ||
220 | + <dependency> | ||
221 | + <groupId>io.minio</groupId> | ||
222 | + <artifactId>minio</artifactId> | ||
223 | + </dependency> | ||
224 | + | ||
225 | + <!-- 阿里云短信 --> | ||
226 | + <dependency> | ||
227 | + <groupId>com.aliyun</groupId> | ||
228 | + <artifactId>aliyun-java-sdk-dysmsapi</artifactId> | ||
229 | + <version>${aliyun-java-sdk-dysmsapi.version}</version> | ||
230 | + </dependency> | ||
231 | + <!-- aliyun oss --> | ||
232 | + <dependency> | ||
233 | + <groupId>com.aliyun.oss</groupId> | ||
234 | + <artifactId>aliyun-sdk-oss</artifactId> | ||
235 | + <version>${aliyun.oss.version}</version> | ||
236 | + </dependency> | ||
237 | + <!-- 第三方登录 --> | ||
238 | + <dependency> | ||
239 | + <groupId>com.xkcoding.justauth</groupId> | ||
240 | + <artifactId>justauth-spring-boot-starter</artifactId> | ||
241 | + </dependency> | ||
242 | + <dependency> | ||
243 | + <groupId>com.squareup.okhttp3</groupId> | ||
244 | + <artifactId>okhttp</artifactId> | ||
245 | + </dependency> | ||
246 | + <!-- 解决okhttp引用了kotlin,应用启动有警告日志问题 --> | ||
247 | + <dependency> | ||
248 | + <groupId>com.fasterxml.jackson.module</groupId> | ||
249 | + <artifactId>jackson-module-kotlin</artifactId> | ||
250 | + </dependency> | ||
251 | + <dependency> | ||
252 | + <groupId>commons-fileupload</groupId> | ||
253 | + <artifactId>commons-fileupload</artifactId> | ||
254 | + </dependency> | ||
255 | + | ||
256 | + <!-- 引入外部加密包 --> | ||
257 | + <dependency> | ||
258 | + <groupId>HbcaSdk</groupId> | ||
259 | + <artifactId>HbcaSdk</artifactId> | ||
260 | + <version>1.0</version> | ||
261 | + <scope>system</scope> | ||
262 | + <systemPath>${project.basedir}/lib/HbcaSdk.jar</systemPath> | ||
263 | + </dependency> | ||
264 | + </dependencies> | ||
265 | + | ||
266 | +</project> |
1 | +package org.jeecg.common.api; | ||
2 | + | ||
3 | +import org.jeecg.common.system.vo.*; | ||
4 | + | ||
5 | +import java.util.List; | ||
6 | +import java.util.Map; | ||
7 | +import java.util.Set; | ||
8 | + | ||
9 | +/** | ||
10 | + * 通用api | ||
11 | + * @author: jeecg-boot | ||
12 | + */ | ||
13 | +public interface CommonAPI { | ||
14 | + | ||
15 | + /** | ||
16 | + * 1查询用户角色信息 | ||
17 | + * @param username | ||
18 | + * @return | ||
19 | + */ | ||
20 | + Set<String> queryUserRoles(String username); | ||
21 | + | ||
22 | + | ||
23 | + /** | ||
24 | + * 2查询用户权限信息 | ||
25 | + * @param username | ||
26 | + * @return | ||
27 | + */ | ||
28 | + Set<String> queryUserAuths(String username); | ||
29 | + | ||
30 | + /** | ||
31 | + * 3根据 id 查询数据库中存储的 DynamicDataSourceModel | ||
32 | + * | ||
33 | + * @param dbSourceId | ||
34 | + * @return | ||
35 | + */ | ||
36 | + DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId); | ||
37 | + | ||
38 | + /** | ||
39 | + * 4根据 code 查询数据库中存储的 DynamicDataSourceModel | ||
40 | + * | ||
41 | + * @param dbSourceCode | ||
42 | + * @return | ||
43 | + */ | ||
44 | + DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode); | ||
45 | + | ||
46 | + /** | ||
47 | + * 5根据用户账号查询用户信息 | ||
48 | + * @param username | ||
49 | + * @return | ||
50 | + */ | ||
51 | + public LoginUser getUserByName(String username); | ||
52 | + | ||
53 | + | ||
54 | + /** | ||
55 | + * 6字典表的 翻译 | ||
56 | + * @param table | ||
57 | + * @param text | ||
58 | + * @param code | ||
59 | + * @param key | ||
60 | + * @return | ||
61 | + */ | ||
62 | + String translateDictFromTable(String table, String text, String code, String key); | ||
63 | + | ||
64 | + /** | ||
65 | + * 7普通字典的翻译 | ||
66 | + * @param code | ||
67 | + * @param key | ||
68 | + * @return | ||
69 | + */ | ||
70 | + String translateDict(String code, String key); | ||
71 | + | ||
72 | + /** | ||
73 | + * 8查询数据权限 | ||
74 | + * @param component 组件 | ||
75 | + * @param username 用户名 | ||
76 | + * @param requestPath 前段请求地址 | ||
77 | + * @return | ||
78 | + */ | ||
79 | + List<SysPermissionDataRuleModel> queryPermissionDataRule(String component, String requestPath, String username); | ||
80 | + | ||
81 | + | ||
82 | + /** | ||
83 | + * 9查询用户信息 | ||
84 | + * @param username | ||
85 | + * @return | ||
86 | + */ | ||
87 | + SysUserCacheInfo getCacheUser(String username); | ||
88 | + | ||
89 | + /** | ||
90 | + * 10获取数据字典 | ||
91 | + * @param code | ||
92 | + * @return | ||
93 | + */ | ||
94 | + public List<DictModel> queryDictItemsByCode(String code); | ||
95 | + | ||
96 | + /** | ||
97 | + * 获取有效的数据字典项 | ||
98 | + * @param code | ||
99 | + * @return | ||
100 | + */ | ||
101 | + public List<DictModel> queryEnableDictItemsByCode(String code); | ||
102 | + | ||
103 | + /** | ||
104 | + * 13获取表数据字典 | ||
105 | + * @param table | ||
106 | + * @param text | ||
107 | + * @param code | ||
108 | + * @return | ||
109 | + */ | ||
110 | + List<DictModel> queryTableDictItemsByCode(String table, String text, String code); | ||
111 | + | ||
112 | + /** | ||
113 | + * 14 普通字典的翻译,根据多个dictCode和多条数据,多个以逗号分割 | ||
114 | + * @param dictCodes 例如:user_status,sex | ||
115 | + * @param keys 例如:1,2,0 | ||
116 | + * @return | ||
117 | + */ | ||
118 | + Map<String, List<DictModel>> translateManyDict(String dictCodes, String keys); | ||
119 | + | ||
120 | + /** | ||
121 | + * 15 字典表的 翻译,可批量 | ||
122 | + * @param table | ||
123 | + * @param text | ||
124 | + * @param code | ||
125 | + * @param keys 多个用逗号分割 | ||
126 | + * @return | ||
127 | + */ | ||
128 | + List<DictModel> translateDictFromTableByKeys(String table, String text, String code, String keys); | ||
129 | + | ||
130 | +} |
1 | +package org.jeecg.common.api.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +/** | ||
6 | + * @Author taoYan | ||
7 | + * @Date 2022/7/26 14:44 | ||
8 | + **/ | ||
9 | +@Data | ||
10 | +public class DataLogDTO { | ||
11 | + | ||
12 | + private String tableName; | ||
13 | + | ||
14 | + private String dataId; | ||
15 | + | ||
16 | + private String content; | ||
17 | + | ||
18 | + private String type; | ||
19 | + | ||
20 | + public DataLogDTO(){ | ||
21 | + | ||
22 | + } | ||
23 | + | ||
24 | + public DataLogDTO(String tableName, String dataId, String content, String type) { | ||
25 | + this.tableName = tableName; | ||
26 | + this.dataId = dataId; | ||
27 | + this.content = content; | ||
28 | + this.type = type; | ||
29 | + } | ||
30 | + | ||
31 | + public DataLogDTO(String tableName, String dataId, String type) { | ||
32 | + this.tableName = tableName; | ||
33 | + this.dataId = dataId; | ||
34 | + this.type = type; | ||
35 | + } | ||
36 | +} |
1 | +package org.jeecg.common.api.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +import javax.servlet.http.HttpServletResponse; | ||
6 | +import java.io.Serializable; | ||
7 | + | ||
8 | +/** | ||
9 | + * 文件下载 | ||
10 | + * cloud api 用到的接口传输对象 | ||
11 | + * @author: jeecg-boot | ||
12 | + */ | ||
13 | +@Data | ||
14 | +public class FileDownDTO implements Serializable { | ||
15 | + | ||
16 | + private static final long serialVersionUID = 6749126258686446019L; | ||
17 | + | ||
18 | + private String filePath; | ||
19 | + private String uploadpath; | ||
20 | + private String uploadType; | ||
21 | + private HttpServletResponse response; | ||
22 | + | ||
23 | + public FileDownDTO(){} | ||
24 | + | ||
25 | + public FileDownDTO(String filePath, String uploadpath, String uploadType,HttpServletResponse response){ | ||
26 | + this.filePath = filePath; | ||
27 | + this.uploadpath = uploadpath; | ||
28 | + this.uploadType = uploadType; | ||
29 | + this.response = response; | ||
30 | + } | ||
31 | +} |
1 | +package org.jeecg.common.api.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | +import org.springframework.web.multipart.MultipartFile; | ||
5 | + | ||
6 | +import java.io.Serializable; | ||
7 | + | ||
8 | +/** | ||
9 | + * 文件上传 | ||
10 | + * cloud api 用到的接口传输对象 | ||
11 | + * @author: jeecg-boot | ||
12 | + */ | ||
13 | +@Data | ||
14 | +public class FileUploadDTO implements Serializable { | ||
15 | + | ||
16 | + private static final long serialVersionUID = -4111953058578954386L; | ||
17 | + | ||
18 | + private MultipartFile file; | ||
19 | + | ||
20 | + private String bizPath; | ||
21 | + | ||
22 | + private String uploadType; | ||
23 | + | ||
24 | + private String customBucket; | ||
25 | + | ||
26 | + public FileUploadDTO(){ | ||
27 | + | ||
28 | + } | ||
29 | + | ||
30 | + /** | ||
31 | + * 简单上传 构造器1 | ||
32 | + * @param file | ||
33 | + * @param bizPath | ||
34 | + * @param uploadType | ||
35 | + */ | ||
36 | + public FileUploadDTO(MultipartFile file,String bizPath,String uploadType){ | ||
37 | + this.file = file; | ||
38 | + this.bizPath = bizPath; | ||
39 | + this.uploadType = uploadType; | ||
40 | + } | ||
41 | + | ||
42 | + /** | ||
43 | + * 申明桶 文件上传 构造器2 | ||
44 | + * @param file | ||
45 | + * @param bizPath | ||
46 | + * @param uploadType | ||
47 | + * @param customBucket | ||
48 | + */ | ||
49 | + public FileUploadDTO(MultipartFile file,String bizPath,String uploadType,String customBucket){ | ||
50 | + this.file = file; | ||
51 | + this.bizPath = bizPath; | ||
52 | + this.uploadType = uploadType; | ||
53 | + this.customBucket = customBucket; | ||
54 | + } | ||
55 | + | ||
56 | +} |
1 | +package org.jeecg.common.api.dto; | ||
2 | +import com.baomidou.mybatisplus.annotation.TableField; | ||
3 | +import io.swagger.annotations.ApiModelProperty; | ||
4 | +import lombok.Data; | ||
5 | +import org.jeecg.common.system.vo.LoginUser; | ||
6 | +import java.io.Serializable; | ||
7 | +import java.util.Date; | ||
8 | + | ||
9 | +/** | ||
10 | + * 日志对象 | ||
11 | + * cloud api 用到的接口传输对象 | ||
12 | + * @author: jeecg-boot | ||
13 | + */ | ||
14 | +@Data | ||
15 | +public class LogDTO implements Serializable { | ||
16 | + | ||
17 | + private static final long serialVersionUID = 8482720462943906924L; | ||
18 | + | ||
19 | + /**内容*/ | ||
20 | + private String logContent; | ||
21 | + | ||
22 | + /**日志类型(0:操作日志;1:登录日志;2:定时任务) */ | ||
23 | + private Integer logType; | ||
24 | + | ||
25 | + /**操作类型(1:添加;2:修改;3:删除;) */ | ||
26 | + private Integer operateType; | ||
27 | + | ||
28 | + /**登录用户 */ | ||
29 | + private LoginUser loginUser; | ||
30 | + | ||
31 | + private String id; | ||
32 | + private String createBy; | ||
33 | + private Date createTime; | ||
34 | + private Long costTime; | ||
35 | + private String ip; | ||
36 | + | ||
37 | + /**请求参数 */ | ||
38 | + private String requestParam; | ||
39 | + | ||
40 | + /**请求类型*/ | ||
41 | + private String requestType; | ||
42 | + | ||
43 | + /**请求路径*/ | ||
44 | + private String requestUrl; | ||
45 | + | ||
46 | + /**请求方法 */ | ||
47 | + private String method; | ||
48 | + | ||
49 | + /**操作人用户名称*/ | ||
50 | + private String username; | ||
51 | + | ||
52 | + /**操作人用户账户*/ | ||
53 | + private String userid; | ||
54 | + | ||
55 | + /** | ||
56 | + * 租户ID | ||
57 | + */ | ||
58 | + private Integer tenantId; | ||
59 | + | ||
60 | + | ||
61 | + /**日志内容完整性*/ | ||
62 | + @ApiModelProperty(value = "日志内容完整性") | ||
63 | + private java.lang.String logContentValid; | ||
64 | + | ||
65 | + /**操作用户账号完整性*/ | ||
66 | + @ApiModelProperty(value = "操作用户账号完整性") | ||
67 | + private java.lang.String useridValid; | ||
68 | + | ||
69 | + /**操作用户名称完整性*/ | ||
70 | + @ApiModelProperty(value = "操作用户名称完整性") | ||
71 | + private java.lang.String usernameValid; | ||
72 | + | ||
73 | + /**ip完整性*/ | ||
74 | + @ApiModelProperty(value = "ip完整性") | ||
75 | + private java.lang.String ipValid; | ||
76 | + | ||
77 | + /**创建时间完整性*/ | ||
78 | + @ApiModelProperty(value = "创建时间完整性") | ||
79 | + private java.lang.String createTimeValid; | ||
80 | + | ||
81 | + | ||
82 | + public LogDTO(){ | ||
83 | + | ||
84 | + } | ||
85 | + | ||
86 | + public LogDTO(String logContent, Integer logType, Integer operatetype){ | ||
87 | + this.logContent = logContent; | ||
88 | + this.logType = logType; | ||
89 | + this.operateType = operatetype; | ||
90 | + } | ||
91 | + | ||
92 | + public LogDTO(String logContent, Integer logType, Integer operatetype, LoginUser loginUser){ | ||
93 | + this.logContent = logContent; | ||
94 | + this.logType = logType; | ||
95 | + this.operateType = operatetype; | ||
96 | + this.loginUser = loginUser; | ||
97 | + } | ||
98 | +} |
1 | +package org.jeecg.common.api.dto; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +import java.io.Serializable; | ||
6 | +import java.util.List; | ||
7 | + | ||
8 | +/** | ||
9 | + * online 拦截器权限判断 | ||
10 | + * cloud api 用到的接口传输对象 | ||
11 | + * @author: jeecg-boot | ||
12 | + */ | ||
13 | +@Data | ||
14 | +public class OnlineAuthDTO implements Serializable { | ||
15 | + private static final long serialVersionUID = 1771827545416418203L; | ||
16 | + | ||
17 | + | ||
18 | + /** | ||
19 | + * 用户名 | ||
20 | + */ | ||
21 | + private String username; | ||
22 | + | ||
23 | + /** | ||
24 | + * 可能的请求地址 | ||
25 | + */ | ||
26 | + private List<String> possibleUrl; | ||
27 | + | ||
28 | + /** | ||
29 | + * online开发的菜单地址 | ||
30 | + */ | ||
31 | + private String onlineFormUrl; | ||
32 | + | ||
33 | + public OnlineAuthDTO(){ | ||
34 | + | ||
35 | + } | ||
36 | + | ||
37 | + public OnlineAuthDTO(String username, List<String> possibleUrl, String onlineFormUrl){ | ||
38 | + this.username = username; | ||
39 | + this.possibleUrl = possibleUrl; | ||
40 | + this.onlineFormUrl = onlineFormUrl; | ||
41 | + } | ||
42 | +} |
1 | +package org.jeecg.common.api.dto.message; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +import java.io.Serializable; | ||
6 | + | ||
7 | +/** | ||
8 | + * 带业务参数的消息 | ||
9 | +* | ||
10 | +* @author: taoyan | ||
11 | +* @date: 2022/8/17 | ||
12 | +*/ | ||
13 | +@Data | ||
14 | +public class BusMessageDTO extends MessageDTO implements Serializable { | ||
15 | + | ||
16 | + private static final long serialVersionUID = 9104793287983367669L; | ||
17 | + /** | ||
18 | + * 业务类型 | ||
19 | + */ | ||
20 | + private String busType; | ||
21 | + | ||
22 | + /** | ||
23 | + * 业务id | ||
24 | + */ | ||
25 | + private String busId; | ||
26 | + | ||
27 | + public BusMessageDTO(){ | ||
28 | + | ||
29 | + } | ||
30 | + | ||
31 | + /** | ||
32 | + * 构造 带业务参数的消息 | ||
33 | + * @param fromUser | ||
34 | + * @param toUser | ||
35 | + * @param title | ||
36 | + * @param msgContent | ||
37 | + * @param msgCategory | ||
38 | + * @param busType | ||
39 | + * @param busId | ||
40 | + */ | ||
41 | + public BusMessageDTO(String fromUser, String toUser, String title, String msgContent, String msgCategory, String busType, String busId){ | ||
42 | + super(fromUser, toUser, title, msgContent, msgCategory); | ||
43 | + this.busId = busId; | ||
44 | + this.busType = busType; | ||
45 | + } | ||
46 | +} |
jeecg-boot-base-core/src/main/java/org/jeecg/common/api/dto/message/BusTemplateMessageDTO.java
0 → 100644
1 | +package org.jeecg.common.api.dto.message; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +import java.io.Serializable; | ||
6 | +import java.util.Map; | ||
7 | + | ||
8 | +/** | ||
9 | + * 带业务参数的模板消息 | ||
10 | + * @author: jeecg-boot | ||
11 | + */ | ||
12 | +@Data | ||
13 | +public class BusTemplateMessageDTO extends TemplateMessageDTO implements Serializable { | ||
14 | + | ||
15 | + private static final long serialVersionUID = -4277810906346929459L; | ||
16 | + | ||
17 | + /** | ||
18 | + * 业务类型 | ||
19 | + */ | ||
20 | + private String busType; | ||
21 | + | ||
22 | + /** | ||
23 | + * 业务id | ||
24 | + */ | ||
25 | + private String busId; | ||
26 | + | ||
27 | + public BusTemplateMessageDTO(){ | ||
28 | + | ||
29 | + } | ||
30 | + | ||
31 | + /** | ||
32 | + * 构造 带业务参数的模板消息 | ||
33 | + * @param fromUser | ||
34 | + * @param toUser | ||
35 | + * @param title | ||
36 | + * @param templateParam | ||
37 | + * @param templateCode | ||
38 | + * @param busType | ||
39 | + * @param busId | ||
40 | + */ | ||
41 | + public BusTemplateMessageDTO(String fromUser, String toUser, String title, Map<String, String> templateParam, String templateCode, String busType, String busId){ | ||
42 | + super(fromUser, toUser, title, templateParam, templateCode); | ||
43 | + this.busId = busId; | ||
44 | + this.busType = busType; | ||
45 | + } | ||
46 | +} |
1 | +package org.jeecg.common.api.dto.message; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | +import org.jeecg.common.constant.CommonConstant; | ||
5 | + | ||
6 | +import java.io.Serializable; | ||
7 | +import java.util.Map; | ||
8 | + | ||
9 | +/** | ||
10 | + * 普通消息 | ||
11 | + * @author: jeecg-boot | ||
12 | + */ | ||
13 | +@Data | ||
14 | +public class MessageDTO implements Serializable { | ||
15 | + private static final long serialVersionUID = -5690444483968058442L; | ||
16 | + | ||
17 | + /** | ||
18 | + * 发送人(用户登录账户) | ||
19 | + */ | ||
20 | + protected String fromUser; | ||
21 | + | ||
22 | + /** | ||
23 | + * 发送给(用户登录账户) | ||
24 | + */ | ||
25 | + protected String toUser; | ||
26 | + | ||
27 | + /** | ||
28 | + * 发送给所有人 | ||
29 | + */ | ||
30 | + protected Boolean toAll; | ||
31 | + | ||
32 | + /** | ||
33 | + * 消息主题 | ||
34 | + */ | ||
35 | + protected String title; | ||
36 | + | ||
37 | + /** | ||
38 | + * 消息内容 | ||
39 | + */ | ||
40 | + protected String content; | ||
41 | + | ||
42 | + /** | ||
43 | + * 消息类型 1:消息 2:系统消息 | ||
44 | + */ | ||
45 | + protected String category; | ||
46 | + | ||
47 | + //----------------------------------------------------------------------- | ||
48 | + //update-begin---author:taoyan ---date:20220705 for:支持自定义推送类型,邮件、钉钉、企业微信、系统消息----------- | ||
49 | + | ||
50 | + /** | ||
51 | + * 模板消息对应的模板编码 | ||
52 | + */ | ||
53 | + protected String templateCode; | ||
54 | + /** | ||
55 | + * 消息类型:org.jeecg.common.constant.enums.MessageTypeEnum | ||
56 | + * XT("system", "系统消息") | ||
57 | + * YJ("email", "邮件消息") | ||
58 | + * DD("dingtalk", "钉钉消息") | ||
59 | + * QYWX("wechat_enterprise", "企业微信") | ||
60 | + */ | ||
61 | + protected String type; | ||
62 | + | ||
63 | + /** | ||
64 | + * 是否发送Markdown格式的消息 | ||
65 | + */ | ||
66 | + protected boolean isMarkdown; | ||
67 | + | ||
68 | + /** | ||
69 | + * 解析模板内容 对应的数据 | ||
70 | + */ | ||
71 | + protected Map<String, Object> data; | ||
72 | + //update-end---author:taoyan ---date::20220705 for:支持自定义推送类型,邮件、钉钉、企业微信、系统消息----------- | ||
73 | + //----------------------------------------------------------------------- | ||
74 | + | ||
75 | + | ||
76 | + /** | ||
77 | + * 抄送人 | ||
78 | + */ | ||
79 | + private String copyToUser; | ||
80 | + | ||
81 | + public MessageDTO(){ | ||
82 | + } | ||
83 | + | ||
84 | + /** | ||
85 | + * 构造器1 系统消息 | ||
86 | + */ | ||
87 | + public MessageDTO(String fromUser,String toUser,String title, String content){ | ||
88 | + this.fromUser = fromUser; | ||
89 | + this.toUser = toUser; | ||
90 | + this.title = title; | ||
91 | + this.content = content; | ||
92 | + //默认 都是2系统消息 | ||
93 | + this.category = CommonConstant.MSG_CATEGORY_2; | ||
94 | + } | ||
95 | + | ||
96 | + /** | ||
97 | + * 构造器2 支持设置category 1:消息 2:系统消息 | ||
98 | + */ | ||
99 | + public MessageDTO(String fromUser,String toUser,String title, String content, String category){ | ||
100 | + this.fromUser = fromUser; | ||
101 | + this.toUser = toUser; | ||
102 | + this.title = title; | ||
103 | + this.content = content; | ||
104 | + this.category = category; | ||
105 | + } | ||
106 | + | ||
107 | + public boolean isMarkdown() { | ||
108 | + return this.isMarkdown; | ||
109 | + } | ||
110 | + | ||
111 | + public void setIsMarkdown(boolean isMarkdown) { | ||
112 | + this.isMarkdown = isMarkdown; | ||
113 | + } | ||
114 | +} |
1 | +package org.jeecg.common.api.dto.message; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | + | ||
5 | +import java.io.Serializable; | ||
6 | +import java.util.Map; | ||
7 | + | ||
8 | +/** | ||
9 | + * 消息模板dto | ||
10 | + * @author: jeecg-boot | ||
11 | + */ | ||
12 | +@Data | ||
13 | +public class TemplateDTO implements Serializable { | ||
14 | + | ||
15 | + private static final long serialVersionUID = 5848247133907528650L; | ||
16 | + | ||
17 | + /** | ||
18 | + * 模板编码 | ||
19 | + */ | ||
20 | + protected String templateCode; | ||
21 | + | ||
22 | + /** | ||
23 | + * 模板参数 | ||
24 | + */ | ||
25 | + protected Map<String, String> templateParam; | ||
26 | + | ||
27 | + /** | ||
28 | + * 构造器 通过设置模板参数和模板编码 作为参数获取消息内容 | ||
29 | + */ | ||
30 | + public TemplateDTO(String templateCode, Map<String, String> templateParam){ | ||
31 | + this.templateCode = templateCode; | ||
32 | + this.templateParam = templateParam; | ||
33 | + } | ||
34 | + | ||
35 | + public TemplateDTO(){ | ||
36 | + | ||
37 | + } | ||
38 | +} |
jeecg-boot-base-core/src/main/java/org/jeecg/common/api/dto/message/TemplateMessageDTO.java
0 → 100644
1 | +package org.jeecg.common.api.dto.message; | ||
2 | + | ||
3 | +import lombok.Data; | ||
4 | +import java.io.Serializable; | ||
5 | +import java.util.Map; | ||
6 | + | ||
7 | +/** | ||
8 | + * 模板消息 | ||
9 | + * @author: jeecg-boot | ||
10 | + */ | ||
11 | +@Data | ||
12 | +public class TemplateMessageDTO extends TemplateDTO implements Serializable { | ||
13 | + | ||
14 | + private static final long serialVersionUID = 411137565170647585L; | ||
15 | + | ||
16 | + | ||
17 | + /** | ||
18 | + * 发送人(用户登录账户) | ||
19 | + */ | ||
20 | + protected String fromUser; | ||
21 | + | ||
22 | + /** | ||
23 | + * 发送给(用户登录账户) | ||
24 | + */ | ||
25 | + protected String toUser; | ||
26 | + | ||
27 | + /** | ||
28 | + * 消息主题 | ||
29 | + */ | ||
30 | + protected String title; | ||
31 | + | ||
32 | + | ||
33 | + public TemplateMessageDTO(){ | ||
34 | + | ||
35 | + } | ||
36 | + | ||
37 | + /** | ||
38 | + * 构造器1 发模板消息用 | ||
39 | + */ | ||
40 | + public TemplateMessageDTO(String fromUser, String toUser,String title, Map<String, String> templateParam, String templateCode){ | ||
41 | + super(templateCode, templateParam); | ||
42 | + this.fromUser = fromUser; | ||
43 | + this.toUser = toUser; | ||
44 | + this.title = title; | ||
45 | + } | ||
46 | + | ||
47 | + | ||
48 | + | ||
49 | +} |
1 | +package org.jeecg.common.api.vo; | ||
2 | + | ||
3 | +import com.fasterxml.jackson.annotation.JsonIgnore; | ||
4 | +import io.swagger.annotations.ApiModel; | ||
5 | +import io.swagger.annotations.ApiModelProperty; | ||
6 | +import lombok.Data; | ||
7 | +import org.jeecg.common.constant.CommonConstant; | ||
8 | + | ||
9 | +import java.io.Serializable; | ||
10 | + | ||
11 | +/** | ||
12 | + * 接口返回数据格式 | ||
13 | + * @author scott | ||
14 | + * @email jeecgos@163.com | ||
15 | + * @date 2019年1月19日 | ||
16 | + */ | ||
17 | +@Data | ||
18 | +@ApiModel(value="接口返回对象", description="接口返回对象") | ||
19 | +public class Result<T> implements Serializable { | ||
20 | + | ||
21 | + private static final long serialVersionUID = 1L; | ||
22 | + | ||
23 | + /** | ||
24 | + * 成功标志 | ||
25 | + */ | ||
26 | + @ApiModelProperty(value = "成功标志") | ||
27 | + private boolean success = true; | ||
28 | + | ||
29 | + /** | ||
30 | + * 返回处理消息 | ||
31 | + */ | ||
32 | + @ApiModelProperty(value = "返回处理消息") | ||
33 | + private String message = ""; | ||
34 | + | ||
35 | + /** | ||
36 | + * 返回代码 | ||
37 | + */ | ||
38 | + @ApiModelProperty(value = "返回代码") | ||
39 | + private Integer code = 0; | ||
40 | + | ||
41 | + /** | ||
42 | + * 返回数据对象 data | ||
43 | + */ | ||
44 | + @ApiModelProperty(value = "返回数据对象") | ||
45 | + private T result; | ||
46 | + | ||
47 | + /** | ||
48 | + * 时间戳 | ||
49 | + */ | ||
50 | + @ApiModelProperty(value = "时间戳") | ||
51 | + private long timestamp = System.currentTimeMillis(); | ||
52 | + | ||
53 | + public Result() { | ||
54 | + } | ||
55 | + | ||
56 | + /** | ||
57 | + * 兼容VUE3版token失效不跳转登录页面 | ||
58 | + * @param code | ||
59 | + * @param message | ||
60 | + */ | ||
61 | + public Result(Integer code, String message) { | ||
62 | + this.code = code; | ||
63 | + this.message = message; | ||
64 | + } | ||
65 | + | ||
66 | + public Result<T> success(String message) { | ||
67 | + this.message = message; | ||
68 | + this.code = CommonConstant.SC_OK_200; | ||
69 | + this.success = true; | ||
70 | + return this; | ||
71 | + } | ||
72 | + | ||
73 | + public static<T> Result<T> ok() { | ||
74 | + Result<T> r = new Result<T>(); | ||
75 | + r.setSuccess(true); | ||
76 | + r.setCode(CommonConstant.SC_OK_200); | ||
77 | + return r; | ||
78 | + } | ||
79 | + | ||
80 | + public static<T> Result<T> ok(String msg) { | ||
81 | + Result<T> r = new Result<T>(); | ||
82 | + r.setSuccess(true); | ||
83 | + r.setCode(CommonConstant.SC_OK_200); | ||
84 | + //Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D | ||
85 | + r.setResult((T) msg); | ||
86 | + r.setMessage(msg); | ||
87 | + return r; | ||
88 | + } | ||
89 | + | ||
90 | + public static<T> Result<T> ok(T data) { | ||
91 | + Result<T> r = new Result<T>(); | ||
92 | + r.setSuccess(true); | ||
93 | + r.setCode(CommonConstant.SC_OK_200); | ||
94 | + r.setResult(data); | ||
95 | + return r; | ||
96 | + } | ||
97 | + | ||
98 | + public static<T> Result<T> OK() { | ||
99 | + Result<T> r = new Result<T>(); | ||
100 | + r.setSuccess(true); | ||
101 | + r.setCode(CommonConstant.SC_OK_200); | ||
102 | + return r; | ||
103 | + } | ||
104 | + | ||
105 | + /** | ||
106 | + * 此方法是为了兼容升级所创建 | ||
107 | + * | ||
108 | + * @param msg | ||
109 | + * @param <T> | ||
110 | + * @return | ||
111 | + */ | ||
112 | + public static<T> Result<T> OK(String msg) { | ||
113 | + Result<T> r = new Result<T>(); | ||
114 | + r.setSuccess(true); | ||
115 | + r.setCode(CommonConstant.SC_OK_200); | ||
116 | + r.setMessage(msg); | ||
117 | + //Result OK(String msg)方法会造成兼容性问题 issues/I4IP3D | ||
118 | + r.setResult((T) msg); | ||
119 | + return r; | ||
120 | + } | ||
121 | + | ||
122 | + public static<T> Result<T> OK(T data) { | ||
123 | + Result<T> r = new Result<T>(); | ||
124 | + r.setSuccess(true); | ||
125 | + r.setCode(CommonConstant.SC_OK_200); | ||
126 | + r.setResult(data); | ||
127 | + return r; | ||
128 | + } | ||
129 | + | ||
130 | + public static<T> Result<T> OK(String msg, T data) { | ||
131 | + Result<T> r = new Result<T>(); | ||
132 | + r.setSuccess(true); | ||
133 | + r.setCode(CommonConstant.SC_OK_200); | ||
134 | + r.setMessage(msg); | ||
135 | + r.setResult(data); | ||
136 | + return r; | ||
137 | + } | ||
138 | + | ||
139 | + public static<T> Result<T> error(String msg, T data) { | ||
140 | + Result<T> r = new Result<T>(); | ||
141 | + r.setSuccess(false); | ||
142 | + r.setCode(CommonConstant.SC_INTERNAL_SERVER_ERROR_500); | ||
143 | + r.setMessage(msg); | ||
144 | + r.setResult(data); | ||
145 | + return r; | ||
146 | + } | ||
147 | + | ||
148 | + public static<T> Result<T> error(String msg) { | ||
149 | + return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg); | ||
150 | + } | ||
151 | + | ||
152 | + public static<T> Result<T> error(int code, String msg) { | ||
153 | + Result<T> r = new Result<T>(); | ||
154 | + r.setCode(code); | ||
155 | + r.setMessage(msg); | ||
156 | + r.setSuccess(false); | ||
157 | + return r; | ||
158 | + } | ||
159 | + | ||
160 | + public Result<T> error500(String message) { | ||
161 | + this.message = message; | ||
162 | + this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; | ||
163 | + this.success = false; | ||
164 | + return this; | ||
165 | + } | ||
166 | + | ||
167 | + /** | ||
168 | + * 无权限访问返回结果 | ||
169 | + */ | ||
170 | + public static<T> Result<T> noauth(String msg) { | ||
171 | + return error(CommonConstant.SC_JEECG_NO_AUTHZ, msg); | ||
172 | + } | ||
173 | + | ||
174 | + @JsonIgnore | ||
175 | + private String onlTable; | ||
176 | + | ||
177 | +} |
1 | +package org.jeecg.common.aspect; | ||
2 | + | ||
3 | +import com.alibaba.fastjson.JSONObject; | ||
4 | +import com.alibaba.fastjson.serializer.PropertyFilter; | ||
5 | +import org.apache.shiro.SecurityUtils; | ||
6 | +import org.aspectj.lang.JoinPoint; | ||
7 | +import org.aspectj.lang.ProceedingJoinPoint; | ||
8 | +import org.aspectj.lang.annotation.Around; | ||
9 | +import org.aspectj.lang.annotation.Aspect; | ||
10 | +import org.aspectj.lang.annotation.Pointcut; | ||
11 | +import org.aspectj.lang.reflect.MethodSignature; | ||
12 | +import org.jeecg.common.api.dto.LogDTO; | ||
13 | +import org.jeecg.common.api.vo.Result; | ||
14 | +import org.jeecg.common.aspect.annotation.AutoLog; | ||
15 | +import org.jeecg.common.constant.CommonConstant; | ||
16 | +import org.jeecg.common.constant.enums.ModuleType; | ||
17 | +import org.jeecg.common.constant.enums.OperateTypeEnum; | ||
18 | +import org.jeecg.modules.base.service.BaseCommonService; | ||
19 | +import org.jeecg.common.system.vo.LoginUser; | ||
20 | +import org.jeecg.common.util.IpUtils; | ||
21 | +import org.jeecg.common.util.SpringContextUtils; | ||
22 | +import org.jeecg.common.util.oConvertUtils; | ||
23 | +import org.springframework.core.LocalVariableTableParameterNameDiscoverer; | ||
24 | +import org.springframework.stereotype.Component; | ||
25 | +import org.springframework.validation.BindingResult; | ||
26 | +import org.springframework.web.multipart.MultipartFile; | ||
27 | +import javax.annotation.Resource; | ||
28 | +import javax.servlet.ServletRequest; | ||
29 | +import javax.servlet.ServletResponse; | ||
30 | +import javax.servlet.http.HttpServletRequest; | ||
31 | +import java.lang.reflect.Method; | ||
32 | +import java.util.Date; | ||
33 | + | ||
34 | + | ||
35 | +/** | ||
36 | + * 系统日志,切面处理类 | ||
37 | + * | ||
38 | + * @Author scott | ||
39 | + * @email jeecgos@163.com | ||
40 | + * @Date 2018年1月14日 | ||
41 | + */ | ||
42 | +@Aspect | ||
43 | +@Component | ||
44 | +public class AutoLogAspect { | ||
45 | + | ||
46 | + @Resource | ||
47 | + private BaseCommonService baseCommonService; | ||
48 | + | ||
49 | + @Pointcut("@annotation(org.jeecg.common.aspect.annotation.AutoLog)") | ||
50 | + public void logPointCut() { | ||
51 | + | ||
52 | + } | ||
53 | + | ||
54 | + @Around("logPointCut()") | ||
55 | + public Object around(ProceedingJoinPoint point) throws Throwable { | ||
56 | + long beginTime = System.currentTimeMillis(); | ||
57 | + //执行方法 | ||
58 | + Object result = point.proceed(); | ||
59 | + //执行时长(毫秒) | ||
60 | + long time = System.currentTimeMillis() - beginTime; | ||
61 | + | ||
62 | + //保存日志 | ||
63 | + saveSysLog(point, time, result); | ||
64 | + | ||
65 | + return result; | ||
66 | + } | ||
67 | + | ||
68 | + private void saveSysLog(ProceedingJoinPoint joinPoint, long time, Object obj) { | ||
69 | + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); | ||
70 | + Method method = signature.getMethod(); | ||
71 | + | ||
72 | + LogDTO dto = new LogDTO(); | ||
73 | + AutoLog syslog = method.getAnnotation(AutoLog.class); | ||
74 | + if(syslog != null){ | ||
75 | + //update-begin-author:taoyan date: | ||
76 | + String content = syslog.value(); | ||
77 | + if(syslog.module()== ModuleType.ONLINE){ | ||
78 | + content = getOnlineLogContent(obj, content); | ||
79 | + } | ||
80 | + //注解上的描述,操作日志内容 | ||
81 | + dto.setLogType(syslog.logType()); | ||
82 | + dto.setLogContent(content); | ||
83 | + } | ||
84 | + | ||
85 | + //请求的方法名 | ||
86 | + String className = joinPoint.getTarget().getClass().getName(); | ||
87 | + String methodName = signature.getName(); | ||
88 | + dto.setMethod(className + "." + methodName + "()"); | ||
89 | + | ||
90 | + | ||
91 | + //设置操作类型 | ||
92 | + if (CommonConstant.LOG_TYPE_2 == dto.getLogType()) { | ||
93 | + dto.setOperateType(getOperateType(methodName, syslog.operateType())); | ||
94 | + } | ||
95 | + | ||
96 | + //获取request | ||
97 | + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); | ||
98 | + //请求的参数 | ||
99 | + dto.setRequestParam(getReqestParams(request,joinPoint)); | ||
100 | + //设置IP地址 | ||
101 | + dto.setIp(IpUtils.getIpAddr(request)); | ||
102 | + //获取登录用户信息 | ||
103 | + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); | ||
104 | + if(sysUser!=null){ | ||
105 | + dto.setUserid(sysUser.getUsername()); | ||
106 | + dto.setUsername(sysUser.getRealname()); | ||
107 | + | ||
108 | + } | ||
109 | + //耗时 | ||
110 | + dto.setCostTime(time); | ||
111 | + dto.setCreateTime(new Date()); | ||
112 | + //保存系统日志 | ||
113 | + baseCommonService.addLog(dto); | ||
114 | + } | ||
115 | + | ||
116 | + | ||
117 | + /** | ||
118 | + * 获取操作类型 | ||
119 | + */ | ||
120 | + private int getOperateType(String methodName,int operateType) { | ||
121 | + if (operateType > 0) { | ||
122 | + return operateType; | ||
123 | + } | ||
124 | + //update-begin---author:wangshuai ---date:20220331 for:阿里云代码扫描规范(不允许任何魔法值出现在代码中)------------ | ||
125 | + return OperateTypeEnum.getTypeByMethodName(methodName); | ||
126 | + //update-end---author:wangshuai ---date:20220331 for:阿里云代码扫描规范(不允许任何魔法值出现在代码中)------------ | ||
127 | + } | ||
128 | + | ||
129 | + /** | ||
130 | + * @Description: 获取请求参数 | ||
131 | + * @author: scott | ||
132 | + * @date: 2020/4/16 0:10 | ||
133 | + * @param request: request | ||
134 | + * @param joinPoint: joinPoint | ||
135 | + * @Return: java.lang.String | ||
136 | + */ | ||
137 | + private String getReqestParams(HttpServletRequest request, JoinPoint joinPoint) { | ||
138 | + String httpMethod = request.getMethod(); | ||
139 | + String params = ""; | ||
140 | + if (CommonConstant.HTTP_POST.equals(httpMethod) || CommonConstant.HTTP_PUT.equals(httpMethod) || CommonConstant.HTTP_PATCH.equals(httpMethod)) { | ||
141 | + Object[] paramsArray = joinPoint.getArgs(); | ||
142 | + // java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) | ||
143 | + // https://my.oschina.net/mengzhang6/blog/2395893 | ||
144 | + Object[] arguments = new Object[paramsArray.length]; | ||
145 | + for (int i = 0; i < paramsArray.length; i++) { | ||
146 | + if (paramsArray[i] instanceof BindingResult || paramsArray[i] instanceof ServletRequest || paramsArray[i] instanceof ServletResponse || paramsArray[i] instanceof MultipartFile) { | ||
147 | + //ServletRequest不能序列化,从入参里排除,否则报异常:java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) | ||
148 | + //ServletResponse不能序列化 从入参里排除,否则报异常:java.lang.IllegalStateException: getOutputStream() has already been called for this response | ||
149 | + continue; | ||
150 | + } | ||
151 | + arguments[i] = paramsArray[i]; | ||
152 | + } | ||
153 | + //update-begin-author:taoyan date:20200724 for:日志数据太长的直接过滤掉 | ||
154 | + PropertyFilter profilter = new PropertyFilter() { | ||
155 | + @Override | ||
156 | + public boolean apply(Object o, String name, Object value) { | ||
157 | + int length = 500; | ||
158 | + if(value!=null && value.toString().length()>length){ | ||
159 | + return false; | ||
160 | + } | ||
161 | + return true; | ||
162 | + } | ||
163 | + }; | ||
164 | + params = JSONObject.toJSONString(arguments, profilter); | ||
165 | + //update-end-author:taoyan date:20200724 for:日志数据太长的直接过滤掉 | ||
166 | + } else { | ||
167 | + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); | ||
168 | + Method method = signature.getMethod(); | ||
169 | + // 请求的方法参数值 | ||
170 | + Object[] args = joinPoint.getArgs(); | ||
171 | + // 请求的方法参数名称 | ||
172 | + LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer(); | ||
173 | + String[] paramNames = u.getParameterNames(method); | ||
174 | + if (args != null && paramNames != null) { | ||
175 | + for (int i = 0; i < args.length; i++) { | ||
176 | + params += " " + paramNames[i] + ": " + args[i]; | ||
177 | + } | ||
178 | + } | ||
179 | + } | ||
180 | + return params; | ||
181 | + } | ||
182 | + | ||
183 | + /** | ||
184 | + * online日志内容拼接 | ||
185 | + * @param obj | ||
186 | + * @param content | ||
187 | + * @return | ||
188 | + */ | ||
189 | + private String getOnlineLogContent(Object obj, String content){ | ||
190 | + if (Result.class.isInstance(obj)){ | ||
191 | + Result res = (Result)obj; | ||
192 | + String msg = res.getMessage(); | ||
193 | + String tableName = res.getOnlTable(); | ||
194 | + if(oConvertUtils.isNotEmpty(tableName)){ | ||
195 | + content+=",表名:"+tableName; | ||
196 | + } | ||
197 | + if(res.isSuccess()){ | ||
198 | + content+= ","+(oConvertUtils.isEmpty(msg)?"操作成功":msg); | ||
199 | + }else{ | ||
200 | + content+= ","+(oConvertUtils.isEmpty(msg)?"操作失败":msg); | ||
201 | + } | ||
202 | + } | ||
203 | + return content; | ||
204 | + } | ||
205 | + | ||
206 | + | ||
207 | + /* private void saveSysLog(ProceedingJoinPoint joinPoint, long time, Object obj) { | ||
208 | + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); | ||
209 | + Method method = signature.getMethod(); | ||
210 | + | ||
211 | + SysLog sysLog = new SysLog(); | ||
212 | + AutoLog syslog = method.getAnnotation(AutoLog.class); | ||
213 | + if(syslog != null){ | ||
214 | + //update-begin-author:taoyan date: | ||
215 | + String content = syslog.value(); | ||
216 | + if(syslog.module()== ModuleType.ONLINE){ | ||
217 | + content = getOnlineLogContent(obj, content); | ||
218 | + } | ||
219 | + //注解上的描述,操作日志内容 | ||
220 | + sysLog.setLogContent(content); | ||
221 | + sysLog.setLogType(syslog.logType()); | ||
222 | + } | ||
223 | + | ||
224 | + //请求的方法名 | ||
225 | + String className = joinPoint.getTarget().getClass().getName(); | ||
226 | + String methodName = signature.getName(); | ||
227 | + sysLog.setMethod(className + "." + methodName + "()"); | ||
228 | + | ||
229 | + | ||
230 | + //设置操作类型 | ||
231 | + if (sysLog.getLogType() == CommonConstant.LOG_TYPE_2) { | ||
232 | + sysLog.setOperateType(getOperateType(methodName, syslog.operateType())); | ||
233 | + } | ||
234 | + | ||
235 | + //获取request | ||
236 | + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); | ||
237 | + //请求的参数 | ||
238 | + sysLog.setRequestParam(getReqestParams(request,joinPoint)); | ||
239 | + | ||
240 | + //设置IP地址 | ||
241 | + sysLog.setIp(IPUtils.getIpAddr(request)); | ||
242 | + | ||
243 | + //获取登录用户信息 | ||
244 | + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); | ||
245 | + if(sysUser!=null){ | ||
246 | + sysLog.setUserid(sysUser.getUsername()); | ||
247 | + sysLog.setUsername(sysUser.getRealname()); | ||
248 | + | ||
249 | + } | ||
250 | + //耗时 | ||
251 | + sysLog.setCostTime(time); | ||
252 | + sysLog.setCreateTime(new Date()); | ||
253 | + //保存系统日志 | ||
254 | + sysLogService.save(sysLog); | ||
255 | + }*/ | ||
256 | +} |
1 | +package org.jeecg.common.aspect; | ||
2 | + | ||
3 | +import com.alibaba.fastjson.JSON; | ||
4 | +import com.alibaba.fastjson.JSONObject; | ||
5 | +import com.alibaba.fastjson.parser.Feature; | ||
6 | +import com.baomidou.mybatisplus.core.metadata.IPage; | ||
7 | +import com.fasterxml.jackson.core.JsonProcessingException; | ||
8 | +import com.fasterxml.jackson.databind.ObjectMapper; | ||
9 | +import lombok.extern.slf4j.Slf4j; | ||
10 | +import org.aspectj.lang.ProceedingJoinPoint; | ||
11 | +import org.aspectj.lang.annotation.Around; | ||
12 | +import org.aspectj.lang.annotation.Aspect; | ||
13 | +import org.aspectj.lang.annotation.Pointcut; | ||
14 | +import org.jeecg.common.api.CommonAPI; | ||
15 | +import org.jeecg.common.api.vo.Result; | ||
16 | +import org.jeecg.common.aspect.annotation.Dict; | ||
17 | +import org.jeecg.common.constant.CommonConstant; | ||
18 | +import org.jeecg.common.system.vo.DictModel; | ||
19 | +import org.jeecg.common.util.oConvertUtils; | ||
20 | +import org.springframework.beans.factory.annotation.Autowired; | ||
21 | +import org.springframework.context.annotation.Lazy; | ||
22 | +import org.springframework.data.redis.core.RedisTemplate; | ||
23 | +import org.springframework.stereotype.Component; | ||
24 | +import org.springframework.util.StringUtils; | ||
25 | + | ||
26 | +import java.lang.reflect.Field; | ||
27 | +import java.util.*; | ||
28 | +import java.util.concurrent.TimeUnit; | ||
29 | +import java.util.stream.Collectors; | ||
30 | + | ||
31 | +/** | ||
32 | + * @Description: 字典aop类 | ||
33 | + * @Author: dangzhenghui | ||
34 | + * @Date: 2019-3-17 21:50 | ||
35 | + * @Version: 1.0 | ||
36 | + */ | ||
37 | +@Aspect | ||
38 | +@Component | ||
39 | +@Slf4j | ||
40 | +public class DictAspect { | ||
41 | + @Lazy | ||
42 | + @Autowired | ||
43 | + private CommonAPI commonApi; | ||
44 | + @Autowired | ||
45 | + public RedisTemplate redisTemplate; | ||
46 | + | ||
47 | + @Autowired | ||
48 | + private ObjectMapper objectMapper; | ||
49 | + | ||
50 | + private static final String JAVA_UTIL_DATE = "java.util.Date"; | ||
51 | + | ||
52 | + /** | ||
53 | + * 定义切点Pointcut | ||
54 | + */ | ||
55 | + @Pointcut("execution(public * org.jeecg.modules..*.*Controller.*(..)) || @annotation(org.jeecg.common.aspect.annotation.AutoDict)") | ||
56 | + public void excudeService() { | ||
57 | + } | ||
58 | + | ||
59 | + @Around("excudeService()") | ||
60 | + public Object doAround(ProceedingJoinPoint pjp) throws Throwable { | ||
61 | + long time1=System.currentTimeMillis(); | ||
62 | + Object result = pjp.proceed(); | ||
63 | + long time2=System.currentTimeMillis(); | ||
64 | + log.debug("获取JSON数据 耗时:"+(time2-time1)+"ms"); | ||
65 | + long start=System.currentTimeMillis(); | ||
66 | + result=this.parseDictText(result); | ||
67 | + long end=System.currentTimeMillis(); | ||
68 | + log.debug("注入字典到JSON数据 耗时"+(end-start)+"ms"); | ||
69 | + return result; | ||
70 | + } | ||
71 | + | ||
72 | + /** | ||
73 | + * 本方法针对返回对象为Result 的IPage的分页列表数据进行动态字典注入 | ||
74 | + * 字典注入实现 通过对实体类添加注解@dict 来标识需要的字典内容,字典分为单字典code即可 ,table字典 code table text配合使用与原来jeecg的用法相同 | ||
75 | + * 示例为SysUser 字段为sex 添加了注解@Dict(dicCode = "sex") 会在字典服务立马查出来对应的text 然后在请求list的时候将这个字典text,已字段名称加_dictText形式返回到前端 | ||
76 | + * 例输入当前返回值的就会多出一个sex_dictText字段 | ||
77 | + * { | ||
78 | + * sex:1, | ||
79 | + * sex_dictText:"男" | ||
80 | + * } | ||
81 | + * 前端直接取值sext_dictText在table里面无需再进行前端的字典转换了 | ||
82 | + * customRender:function (text) { | ||
83 | + * if(text==1){ | ||
84 | + * return "男"; | ||
85 | + * }else if(text==2){ | ||
86 | + * return "女"; | ||
87 | + * }else{ | ||
88 | + * return text; | ||
89 | + * } | ||
90 | + * } | ||
91 | + * 目前vue是这么进行字典渲染到table上的多了就很麻烦了 这个直接在服务端渲染完成前端可以直接用 | ||
92 | + * @param result | ||
93 | + */ | ||
94 | + private Object parseDictText(Object result) { | ||
95 | + if (result instanceof Result) { | ||
96 | + if (((Result) result).getResult() instanceof IPage) { | ||
97 | + List<JSONObject> items = new ArrayList<>(); | ||
98 | + | ||
99 | + //step.1 筛选出加了 Dict 注解的字段列表 | ||
100 | + List<Field> dictFieldList = new ArrayList<>(); | ||
101 | + // 字典数据列表, key = 字典code,value=数据列表 | ||
102 | + Map<String, List<String>> dataListMap = new HashMap<>(5); | ||
103 | + //取出结果集 | ||
104 | + List<Object> records=((IPage) ((Result) result).getResult()).getRecords(); | ||
105 | + //update-begin--Author:zyf -- Date:20220606 ----for:【VUEN-1230】 判断是否含有字典注解,没有注解返回----- | ||
106 | + Boolean hasDict= checkHasDict(records); | ||
107 | + if(!hasDict){ | ||
108 | + return result; | ||
109 | + } | ||
110 | + | ||
111 | + log.debug(" __ 进入字典翻译切面 DictAspect —— " ); | ||
112 | + //update-end--Author:zyf -- Date:20220606 ----for:【VUEN-1230】 判断是否含有字典注解,没有注解返回----- | ||
113 | + for (Object record : records) { | ||
114 | + String json="{}"; | ||
115 | + try { | ||
116 | + //update-begin--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错----- | ||
117 | + //解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat | ||
118 | + json = objectMapper.writeValueAsString(record); | ||
119 | + //update-end--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错----- | ||
120 | + } catch (JsonProcessingException e) { | ||
121 | + log.error("json解析失败"+e.getMessage(),e); | ||
122 | + } | ||
123 | + //update-begin--Author:scott -- Date:20211223 ----for:【issues/3303】restcontroller返回json数据后key顺序错乱 ----- | ||
124 | + JSONObject item = JSONObject.parseObject(json, Feature.OrderedField); | ||
125 | + //update-end--Author:scott -- Date:20211223 ----for:【issues/3303】restcontroller返回json数据后key顺序错乱 ----- | ||
126 | + | ||
127 | + //update-begin--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ | ||
128 | + //for (Field field : record.getClass().getDeclaredFields()) { | ||
129 | + // 遍历所有字段,把字典Code取出来,放到 map 里 | ||
130 | + for (Field field : oConvertUtils.getAllFields(record)) { | ||
131 | + String value = item.getString(field.getName()); | ||
132 | + if (oConvertUtils.isEmpty(value)) { | ||
133 | + continue; | ||
134 | + } | ||
135 | + //update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ | ||
136 | + if (field.getAnnotation(Dict.class) != null) { | ||
137 | + if (!dictFieldList.contains(field)) { | ||
138 | + dictFieldList.add(field); | ||
139 | + } | ||
140 | + String code = field.getAnnotation(Dict.class).dicCode(); | ||
141 | + String text = field.getAnnotation(Dict.class).dicText(); | ||
142 | + String table = field.getAnnotation(Dict.class).dictTable(); | ||
143 | + | ||
144 | + List<String> dataList; | ||
145 | + String dictCode = code; | ||
146 | + if (!StringUtils.isEmpty(table)) { | ||
147 | + dictCode = String.format("%s,%s,%s", table, text, code); | ||
148 | + } | ||
149 | + dataList = dataListMap.computeIfAbsent(dictCode, k -> new ArrayList<>()); | ||
150 | + this.listAddAllDeduplicate(dataList, Arrays.asList(value.split(","))); | ||
151 | + } | ||
152 | + //date类型默认转换string格式化日期 | ||
153 | + //update-begin--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错----- | ||
154 | + //if (JAVA_UTIL_DATE.equals(field.getType().getName())&&field.getAnnotation(JsonFormat.class)==null&&item.get(field.getName())!=null){ | ||
155 | + //SimpleDateFormat aDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | ||
156 | + // item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName())))); | ||
157 | + //} | ||
158 | + //update-end--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错----- | ||
159 | + } | ||
160 | + items.add(item); | ||
161 | + } | ||
162 | + | ||
163 | + //step.2 调用翻译方法,一次性翻译 | ||
164 | + Map<String, List<DictModel>> translText = this.translateAllDict(dataListMap); | ||
165 | + | ||
166 | + //step.3 将翻译结果填充到返回结果里 | ||
167 | + for (JSONObject record : items) { | ||
168 | + for (Field field : dictFieldList) { | ||
169 | + String code = field.getAnnotation(Dict.class).dicCode(); | ||
170 | + String text = field.getAnnotation(Dict.class).dicText(); | ||
171 | + String table = field.getAnnotation(Dict.class).dictTable(); | ||
172 | + | ||
173 | + String fieldDictCode = code; | ||
174 | + if (!StringUtils.isEmpty(table)) { | ||
175 | + fieldDictCode = String.format("%s,%s,%s", table, text, code); | ||
176 | + } | ||
177 | + | ||
178 | + String value = record.getString(field.getName()); | ||
179 | + if (oConvertUtils.isNotEmpty(value)) { | ||
180 | + List<DictModel> dictModels = translText.get(fieldDictCode); | ||
181 | + if(dictModels==null || dictModels.size()==0){ | ||
182 | + continue; | ||
183 | + } | ||
184 | + | ||
185 | + String textValue = this.translDictText(dictModels, value); | ||
186 | + log.debug(" 字典Val : " + textValue); | ||
187 | + log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue); | ||
188 | + | ||
189 | + // TODO-sun 测试输出,待删 | ||
190 | + log.debug(" ---- dictCode: " + fieldDictCode); | ||
191 | + log.debug(" ---- value: " + value); | ||
192 | + log.debug(" ----- text: " + textValue); | ||
193 | + log.debug(" ---- dictModels: " + JSON.toJSONString(dictModels)); | ||
194 | + | ||
195 | + record.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue); | ||
196 | + } | ||
197 | + } | ||
198 | + } | ||
199 | + | ||
200 | + ((IPage) ((Result) result).getResult()).setRecords(items); | ||
201 | + } | ||
202 | + | ||
203 | + } | ||
204 | + return result; | ||
205 | + } | ||
206 | + | ||
207 | + /** | ||
208 | + * list 去重添加 | ||
209 | + */ | ||
210 | + private void listAddAllDeduplicate(List<String> dataList, List<String> addList) { | ||
211 | + // 筛选出dataList中没有的数据 | ||
212 | + List<String> filterList = addList.stream().filter(i -> !dataList.contains(i)).collect(Collectors.toList()); | ||
213 | + dataList.addAll(filterList); | ||
214 | + } | ||
215 | + | ||
216 | + /** | ||
217 | + * 一次性把所有的字典都翻译了 | ||
218 | + * 1. 所有的普通数据字典的所有数据只执行一次SQL | ||
219 | + * 2. 表字典相同的所有数据只执行一次SQL | ||
220 | + * @param dataListMap | ||
221 | + * @return | ||
222 | + */ | ||
223 | + private Map<String, List<DictModel>> translateAllDict(Map<String, List<String>> dataListMap) { | ||
224 | + // 翻译后的字典文本,key=dictCode | ||
225 | + Map<String, List<DictModel>> translText = new HashMap<>(5); | ||
226 | + // 需要翻译的数据(有些可以从redis缓存中获取,就不走数据库查询) | ||
227 | + List<String> needTranslData = new ArrayList<>(); | ||
228 | + //step.1 先通过redis中获取缓存字典数据 | ||
229 | + for (String dictCode : dataListMap.keySet()) { | ||
230 | + List<String> dataList = dataListMap.get(dictCode); | ||
231 | + if (dataList.size() == 0) { | ||
232 | + continue; | ||
233 | + } | ||
234 | + // 表字典需要翻译的数据 | ||
235 | + List<String> needTranslDataTable = new ArrayList<>(); | ||
236 | + for (String s : dataList) { | ||
237 | + String data = s.trim(); | ||
238 | + if (data.length() == 0) { | ||
239 | + continue; //跳过循环 | ||
240 | + } | ||
241 | + if (dictCode.contains(",")) { | ||
242 | + String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, data); | ||
243 | + if (redisTemplate.hasKey(keyString)) { | ||
244 | + try { | ||
245 | + String text = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); | ||
246 | + List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); | ||
247 | + list.add(new DictModel(data, text)); | ||
248 | + } catch (Exception e) { | ||
249 | + log.warn(e.getMessage()); | ||
250 | + } | ||
251 | + } else if (!needTranslDataTable.contains(data)) { | ||
252 | + // 去重添加 | ||
253 | + needTranslDataTable.add(data); | ||
254 | + } | ||
255 | + } else { | ||
256 | + String keyString = String.format("sys:cache:dict::%s:%s", dictCode, data); | ||
257 | + if (redisTemplate.hasKey(keyString)) { | ||
258 | + try { | ||
259 | + String text = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); | ||
260 | + List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); | ||
261 | + list.add(new DictModel(data, text)); | ||
262 | + } catch (Exception e) { | ||
263 | + log.warn(e.getMessage()); | ||
264 | + } | ||
265 | + } else if (!needTranslData.contains(data)) { | ||
266 | + // 去重添加 | ||
267 | + needTranslData.add(data); | ||
268 | + } | ||
269 | + } | ||
270 | + | ||
271 | + } | ||
272 | + //step.2 调用数据库翻译表字典 | ||
273 | + if (needTranslDataTable.size() > 0) { | ||
274 | + String[] arr = dictCode.split(","); | ||
275 | + String table = arr[0], text = arr[1], code = arr[2]; | ||
276 | + String values = String.join(",", needTranslDataTable); | ||
277 | + log.debug("translateDictFromTableByKeys.dictCode:" + dictCode); | ||
278 | + log.debug("translateDictFromTableByKeys.values:" + values); | ||
279 | + List<DictModel> texts = commonApi.translateDictFromTableByKeys(table, text, code, values); | ||
280 | + log.debug("translateDictFromTableByKeys.result:" + texts); | ||
281 | + List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); | ||
282 | + list.addAll(texts); | ||
283 | + | ||
284 | + // 做 redis 缓存 | ||
285 | + for (DictModel dict : texts) { | ||
286 | + String redisKey = String.format("sys:cache:dictTable::SimpleKey [%s,%s]", dictCode, dict.getValue()); | ||
287 | + try { | ||
288 | + // update-begin-author:taoyan date:20211012 for: 字典表翻译注解缓存未更新 issues/3061 | ||
289 | + // 保留5分钟 | ||
290 | + redisTemplate.opsForValue().set(redisKey, dict.getText(), 300, TimeUnit.SECONDS); | ||
291 | + // update-end-author:taoyan date:20211012 for: 字典表翻译注解缓存未更新 issues/3061 | ||
292 | + } catch (Exception e) { | ||
293 | + log.warn(e.getMessage(), e); | ||
294 | + } | ||
295 | + } | ||
296 | + } | ||
297 | + } | ||
298 | + | ||
299 | + //step.3 调用数据库进行翻译普通字典 | ||
300 | + if (needTranslData.size() > 0) { | ||
301 | + List<String> dictCodeList = Arrays.asList(dataListMap.keySet().toArray(new String[]{})); | ||
302 | + // 将不包含逗号的字典code筛选出来,因为带逗号的是表字典,而不是普通的数据字典 | ||
303 | + List<String> filterDictCodes = dictCodeList.stream().filter(key -> !key.contains(",")).collect(Collectors.toList()); | ||
304 | + String dictCodes = String.join(",", filterDictCodes); | ||
305 | + String values = String.join(",", needTranslData); | ||
306 | + log.debug("translateManyDict.dictCodes:" + dictCodes); | ||
307 | + log.debug("translateManyDict.values:" + values); | ||
308 | + Map<String, List<DictModel>> manyDict = commonApi.translateManyDict(dictCodes, values); | ||
309 | + log.debug("translateManyDict.result:" + manyDict); | ||
310 | + for (String dictCode : manyDict.keySet()) { | ||
311 | + List<DictModel> list = translText.computeIfAbsent(dictCode, k -> new ArrayList<>()); | ||
312 | + List<DictModel> newList = manyDict.get(dictCode); | ||
313 | + list.addAll(newList); | ||
314 | + | ||
315 | + // 做 redis 缓存 | ||
316 | + for (DictModel dict : newList) { | ||
317 | + String redisKey = String.format("sys:cache:dict::%s:%s", dictCode, dict.getValue()); | ||
318 | + try { | ||
319 | + redisTemplate.opsForValue().set(redisKey, dict.getText()); | ||
320 | + } catch (Exception e) { | ||
321 | + log.warn(e.getMessage(), e); | ||
322 | + } | ||
323 | + } | ||
324 | + } | ||
325 | + } | ||
326 | + return translText; | ||
327 | + } | ||
328 | + | ||
329 | + /** | ||
330 | + * 字典值替换文本 | ||
331 | + * | ||
332 | + * @param dictModels | ||
333 | + * @param values | ||
334 | + * @return | ||
335 | + */ | ||
336 | + private String translDictText(List<DictModel> dictModels, String values) { | ||
337 | + List<String> result = new ArrayList<>(); | ||
338 | + | ||
339 | + // 允许多个逗号分隔,允许传数组对象 | ||
340 | + String[] splitVal = values.split(","); | ||
341 | + for (String val : splitVal) { | ||
342 | + String dictText = val; | ||
343 | + for (DictModel dict : dictModels) { | ||
344 | + if (val.equals(dict.getValue())) { | ||
345 | + dictText = dict.getText(); | ||
346 | + break; | ||
347 | + } | ||
348 | + } | ||
349 | + result.add(dictText); | ||
350 | + } | ||
351 | + return String.join(",", result); | ||
352 | + } | ||
353 | + | ||
354 | + /** | ||
355 | + * 翻译字典文本 | ||
356 | + * @param code | ||
357 | + * @param text | ||
358 | + * @param table | ||
359 | + * @param key | ||
360 | + * @return | ||
361 | + */ | ||
362 | + @Deprecated | ||
363 | + private String translateDictValue(String code, String text, String table, String key) { | ||
364 | + if(oConvertUtils.isEmpty(key)) { | ||
365 | + return null; | ||
366 | + } | ||
367 | + StringBuffer textValue=new StringBuffer(); | ||
368 | + String[] keys = key.split(","); | ||
369 | + for (String k : keys) { | ||
370 | + String tmpValue = null; | ||
371 | + log.debug(" 字典 key : "+ k); | ||
372 | + if (k.trim().length() == 0) { | ||
373 | + continue; //跳过循环 | ||
374 | + } | ||
375 | + //update-begin--Author:scott -- Date:20210531 ----for: !56 优化微服务应用下存在表字段需要字典翻译时加载缓慢问题----- | ||
376 | + if (!StringUtils.isEmpty(table)){ | ||
377 | + log.debug("--DictAspect------dicTable="+ table+" ,dicText= "+text+" ,dicCode="+code); | ||
378 | + String keyString = String.format("sys:cache:dictTable::SimpleKey [%s,%s,%s,%s]",table,text,code,k.trim()); | ||
379 | + if (redisTemplate.hasKey(keyString)){ | ||
380 | + try { | ||
381 | + tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); | ||
382 | + } catch (Exception e) { | ||
383 | + log.warn(e.getMessage()); | ||
384 | + } | ||
385 | + }else { | ||
386 | + tmpValue= commonApi.translateDictFromTable(table,text,code,k.trim()); | ||
387 | + } | ||
388 | + }else { | ||
389 | + String keyString = String.format("sys:cache:dict::%s:%s",code,k.trim()); | ||
390 | + if (redisTemplate.hasKey(keyString)){ | ||
391 | + try { | ||
392 | + tmpValue = oConvertUtils.getString(redisTemplate.opsForValue().get(keyString)); | ||
393 | + } catch (Exception e) { | ||
394 | + log.warn(e.getMessage()); | ||
395 | + } | ||
396 | + }else { | ||
397 | + tmpValue = commonApi.translateDict(code, k.trim()); | ||
398 | + } | ||
399 | + } | ||
400 | + //update-end--Author:scott -- Date:20210531 ----for: !56 优化微服务应用下存在表字段需要字典翻译时加载缓慢问题----- | ||
401 | + | ||
402 | + if (tmpValue != null) { | ||
403 | + if (!"".equals(textValue.toString())) { | ||
404 | + textValue.append(","); | ||
405 | + } | ||
406 | + textValue.append(tmpValue); | ||
407 | + } | ||
408 | + | ||
409 | + } | ||
410 | + return textValue.toString(); | ||
411 | + } | ||
412 | + | ||
413 | + /** | ||
414 | + * 检测返回结果集中是否包含Dict注解 | ||
415 | + * @param records | ||
416 | + * @return | ||
417 | + */ | ||
418 | + private Boolean checkHasDict(List<Object> records){ | ||
419 | + if(oConvertUtils.isNotEmpty(records) && records.size()>0){ | ||
420 | + for (Field field : oConvertUtils.getAllFields(records.get(0))) { | ||
421 | + if (oConvertUtils.isNotEmpty(field.getAnnotation(Dict.class))) { | ||
422 | + return true; | ||
423 | + } | ||
424 | + } | ||
425 | + } | ||
426 | + return false; | ||
427 | + } | ||
428 | + | ||
429 | +} |
1 | +package org.jeecg.common.aspect; | ||
2 | + | ||
3 | +import lombok.extern.slf4j.Slf4j; | ||
4 | +import org.aspectj.lang.ProceedingJoinPoint; | ||
5 | +import org.aspectj.lang.annotation.Around; | ||
6 | +import org.aspectj.lang.annotation.Aspect; | ||
7 | +import org.aspectj.lang.annotation.Pointcut; | ||
8 | +import org.aspectj.lang.reflect.MethodSignature; | ||
9 | +import org.jeecg.common.api.CommonAPI; | ||
10 | +import org.jeecg.common.aspect.annotation.PermissionData; | ||
11 | +import org.jeecg.common.constant.CommonConstant; | ||
12 | +import org.jeecg.common.constant.SymbolConstant; | ||
13 | +import org.jeecg.common.system.query.QueryRuleEnum; | ||
14 | +import org.jeecg.common.system.util.JeecgDataAutorUtils; | ||
15 | +import org.jeecg.common.system.util.JwtUtil; | ||
16 | +import org.jeecg.common.system.vo.SysPermissionDataRuleModel; | ||
17 | +import org.jeecg.common.system.vo.SysUserCacheInfo; | ||
18 | +import org.jeecg.common.util.SpringContextUtils; | ||
19 | +import org.jeecg.common.util.oConvertUtils; | ||
20 | +import org.springframework.beans.factory.annotation.Autowired; | ||
21 | +import org.springframework.context.annotation.Lazy; | ||
22 | +import org.springframework.stereotype.Component; | ||
23 | + | ||
24 | +import javax.servlet.http.HttpServletRequest; | ||
25 | +import java.lang.reflect.Method; | ||
26 | +import java.util.List; | ||
27 | + | ||
28 | +/** | ||
29 | + * 数据权限切面处理类 | ||
30 | + * 当被请求的方法有注解PermissionData时,会在往当前request中写入数据权限信息 | ||
31 | + * @Date 2019年4月10日 | ||
32 | + * @Version: 1.0 | ||
33 | + * @author: jeecg-boot | ||
34 | + */ | ||
35 | +@Aspect | ||
36 | +@Component | ||
37 | +@Slf4j | ||
38 | +public class PermissionDataAspect { | ||
39 | + @Lazy | ||
40 | + @Autowired | ||
41 | + private CommonAPI commonApi; | ||
42 | + | ||
43 | + private static final String SPOT_DO = ".do"; | ||
44 | + | ||
45 | + @Pointcut("@annotation(org.jeecg.common.aspect.annotation.PermissionData)") | ||
46 | + public void pointCut() { | ||
47 | + | ||
48 | + } | ||
49 | + | ||
50 | + @Around("pointCut()") | ||
51 | + public Object arround(ProceedingJoinPoint point) throws Throwable{ | ||
52 | + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); | ||
53 | + MethodSignature signature = (MethodSignature) point.getSignature(); | ||
54 | + Method method = signature.getMethod(); | ||
55 | + PermissionData pd = method.getAnnotation(PermissionData.class); | ||
56 | + String component = pd.pageComponent(); | ||
57 | + String requestMethod = request.getMethod(); | ||
58 | + String requestPath = request.getRequestURI().substring(request.getContextPath().length()); | ||
59 | + requestPath = filterUrl(requestPath); | ||
60 | + //update-begin-author:taoyan date:20211027 for:JTC-132【online报表权限】online报表带参数的菜单配置数据权限无效 | ||
61 | + //先判断是否online报表请求 | ||
62 | + // TODO 参数顺序调整有隐患 | ||
63 | + if(requestPath.indexOf(UrlMatchEnum.CGREPORT_DATA.getMatchUrl())>=0){ | ||
64 | + // 获取地址栏参数 | ||
65 | + String urlParamString = request.getParameter(CommonConstant.ONL_REP_URL_PARAM_STR); | ||
66 | + if(oConvertUtils.isNotEmpty(urlParamString)){ | ||
67 | + requestPath+="?"+urlParamString; | ||
68 | + } | ||
69 | + } | ||
70 | + //update-end-author:taoyan date:20211027 for:JTC-132【online报表权限】online报表带参数的菜单配置数据权限无效 | ||
71 | + log.info("拦截请求 >> {} ; 请求类型 >> {} . ", requestPath, requestMethod); | ||
72 | + String username = JwtUtil.getUserNameByToken(request); | ||
73 | + //查询数据权限信息 | ||
74 | + //TODO 微服务情况下也得支持缓存机制 | ||
75 | + List<SysPermissionDataRuleModel> dataRules = commonApi.queryPermissionDataRule(component, requestPath, username); | ||
76 | + if(dataRules!=null && dataRules.size()>0) { | ||
77 | + //临时存储 | ||
78 | + JeecgDataAutorUtils.installDataSearchConditon(request, dataRules); | ||
79 | + //TODO 微服务情况下也得支持缓存机制 | ||
80 | + SysUserCacheInfo userinfo = commonApi.getCacheUser(username); | ||
81 | + JeecgDataAutorUtils.installUserInfo(request, userinfo); | ||
82 | + } | ||
83 | + return point.proceed(); | ||
84 | + } | ||
85 | + | ||
86 | + private String filterUrl(String requestPath){ | ||
87 | + String url = ""; | ||
88 | + if(oConvertUtils.isNotEmpty(requestPath)){ | ||
89 | + url = requestPath.replace("\\", "/"); | ||
90 | + url = url.replace("//", "/"); | ||
91 | + if(url.indexOf(SymbolConstant.DOUBLE_SLASH)>=0){ | ||
92 | + url = filterUrl(url); | ||
93 | + } | ||
94 | + /*if(url.startsWith("/")){ | ||
95 | + url=url.substring(1); | ||
96 | + }*/ | ||
97 | + } | ||
98 | + return url; | ||
99 | + } | ||
100 | + | ||
101 | + /** | ||
102 | + * 获取请求地址 | ||
103 | + * @param request | ||
104 | + * @return | ||
105 | + */ | ||
106 | + @Deprecated | ||
107 | + private String getJgAuthRequsetPath(HttpServletRequest request) { | ||
108 | + String queryString = request.getQueryString(); | ||
109 | + String requestPath = request.getRequestURI(); | ||
110 | + if(oConvertUtils.isNotEmpty(queryString)){ | ||
111 | + requestPath += "?" + queryString; | ||
112 | + } | ||
113 | + // 去掉其他参数(保留一个参数) 例如:loginController.do?login | ||
114 | + if (requestPath.indexOf(SymbolConstant.AND) > -1) { | ||
115 | + requestPath = requestPath.substring(0, requestPath.indexOf("&")); | ||
116 | + } | ||
117 | + if(requestPath.indexOf(QueryRuleEnum.EQ.getValue())!=-1){ | ||
118 | + if(requestPath.indexOf(SPOT_DO)!=-1){ | ||
119 | + requestPath = requestPath.substring(0,requestPath.indexOf(".do")+3); | ||
120 | + }else{ | ||
121 | + requestPath = requestPath.substring(0,requestPath.indexOf("?")); | ||
122 | + } | ||
123 | + } | ||
124 | + // 去掉项目路径 | ||
125 | + requestPath = requestPath.substring(request.getContextPath().length() + 1); | ||
126 | + return filterUrl(requestPath); | ||
127 | + } | ||
128 | + | ||
129 | + @Deprecated | ||
130 | + private boolean moHuContain(List<String> list,String key){ | ||
131 | + for(String str : list){ | ||
132 | + if(key.contains(str)){ | ||
133 | + return true; | ||
134 | + } | ||
135 | + } | ||
136 | + return false; | ||
137 | + } | ||
138 | + | ||
139 | + | ||
140 | +} |
1 | +package org.jeecg.common.aspect; | ||
2 | + | ||
3 | +/** | ||
4 | + * @Author scott | ||
5 | + * @Date 2020/1/14 13:36 | ||
6 | + * @Description: 请求URL与菜单路由URL转换规则(方便于采用菜单路由URL来配置数据权限规则) | ||
7 | + */ | ||
8 | +public enum UrlMatchEnum { | ||
9 | + /**求URL与菜单路由URL转换规则 /online/cgform/api/getData/ */ | ||
10 | + CGFORM_DATA("/online/cgform/api/getData/", "/online/cgformList/"), | ||
11 | + /**求URL与菜单路由URL转换规则 /online/cgform/api/exportXls/ */ | ||
12 | + CGFORM_EXCEL_DATA("/online/cgform/api/exportXls/", "/online/cgformList/"), | ||
13 | + /**求URL与菜单路由URL转换规则 /online/cgform/api/getTreeData/ */ | ||
14 | + CGFORM_TREE_DATA("/online/cgform/api/getTreeData/", "/online/cgformList/"), | ||
15 | + /**求URL与菜单路由URL转换规则 /online/cgreport/api/getColumnsAndData/ */ | ||
16 | + CGREPORT_DATA("/online/cgreport/api/getColumnsAndData/", "/online/cgreport/"), | ||
17 | + /**求URL与菜单路由URL转换规则 /online/cgreport/api/exportXls/ */ | ||
18 | + CGREPORT_EXCEL_DATA("/online/cgreport/api/exportXls/", "/online/cgreport/"), | ||
19 | + /**求URL与菜单路由URL转换规则 /online/cgreport/api/exportManySheetXls/ */ | ||
20 | + CGREPORT_EXCEL_DATA2("/online/cgreport/api/exportManySheetXls/", "/online/cgreport/"); | ||
21 | + | ||
22 | + UrlMatchEnum(String url, String matchUrl) { | ||
23 | + this.url = url; | ||
24 | + this.matchUrl = matchUrl; | ||
25 | + } | ||
26 | + | ||
27 | + /** | ||
28 | + * Request 请求 URL前缀 | ||
29 | + */ | ||
30 | + private String url; | ||
31 | + /** | ||
32 | + * 菜单路由 URL前缀 (对应菜单路径) | ||
33 | + */ | ||
34 | + private String matchUrl; | ||
35 | + | ||
36 | + /** | ||
37 | + * 根据req url 获取到菜单配置路径(前端页面路由URL) | ||
38 | + * | ||
39 | + * @param url | ||
40 | + * @return | ||
41 | + */ | ||
42 | + public static String getMatchResultByUrl(String url) { | ||
43 | + //获取到枚举 | ||
44 | + UrlMatchEnum[] values = UrlMatchEnum.values(); | ||
45 | + //加强for循环进行遍历操作 | ||
46 | + for (UrlMatchEnum lr : values) { | ||
47 | + //如果遍历获取的type和参数type一致 | ||
48 | + if (url.indexOf(lr.url) != -1) { | ||
49 | + //返回type对象的desc | ||
50 | + return url.replace(lr.url, lr.matchUrl); | ||
51 | + } | ||
52 | + } | ||
53 | + return null; | ||
54 | + } | ||
55 | + | ||
56 | + public String getMatchUrl() { | ||
57 | + return matchUrl; | ||
58 | + } | ||
59 | + // public static void main(String[] args) { | ||
60 | +// /** | ||
61 | +// * 比如request真实请求URL: /online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a | ||
62 | +// * 转换匹配路由URL后(对应配置的菜单路径):/online/cgformList/81fcf7d8922d45069b0d5ba983612d3a | ||
63 | +// */ | ||
64 | +// System.out.println(UrlMatchEnum.getMatchResultByUrl("/online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a")); | ||
65 | +// } | ||
66 | +} |
1 | +package org.jeecg.common.aspect.annotation; | ||
2 | + | ||
3 | +import java.lang.annotation.*; | ||
4 | + | ||
5 | +/** | ||
6 | + * 通过此注解声明的接口,自动实现字典翻译 | ||
7 | + * | ||
8 | + * @Author scott | ||
9 | + * @email jeecgos@163.com | ||
10 | + * @Date 2022年01月05日 | ||
11 | + */ | ||
12 | +@Target(ElementType.METHOD) | ||
13 | +@Retention(RetentionPolicy.RUNTIME) | ||
14 | +@Documented | ||
15 | +public @interface AutoDict { | ||
16 | + | ||
17 | + /** | ||
18 | + * 暂时无用 | ||
19 | + * @return | ||
20 | + */ | ||
21 | + String value() default ""; | ||
22 | + | ||
23 | +} |
1 | +package org.jeecg.common.aspect.annotation; | ||
2 | + | ||
3 | +import org.jeecg.common.constant.CommonConstant; | ||
4 | +import org.jeecg.common.constant.enums.ModuleType; | ||
5 | + | ||
6 | +import java.lang.annotation.*; | ||
7 | + | ||
8 | +/** | ||
9 | + * 系统日志注解 | ||
10 | + * | ||
11 | + * @Author scott | ||
12 | + * @email jeecgos@163.com | ||
13 | + * @Date 2019年1月14日 | ||
14 | + */ | ||
15 | +@Target(ElementType.METHOD) | ||
16 | +@Retention(RetentionPolicy.RUNTIME) | ||
17 | +@Documented | ||
18 | +public @interface AutoLog { | ||
19 | + | ||
20 | + /** | ||
21 | + * 日志内容 | ||
22 | + * | ||
23 | + * @return | ||
24 | + */ | ||
25 | + String value() default ""; | ||
26 | + | ||
27 | + /** | ||
28 | + * 日志类型 | ||
29 | + * | ||
30 | + * @return 0:操作日志;1:登录日志;2:定时任务; | ||
31 | + */ | ||
32 | + int logType() default CommonConstant.LOG_TYPE_2; | ||
33 | + | ||
34 | + /** | ||
35 | + * 操作日志类型 | ||
36 | + * | ||
37 | + * @return (1查询,2添加,3修改,4删除) | ||
38 | + */ | ||
39 | + int operateType() default 0; | ||
40 | + | ||
41 | + /** | ||
42 | + * 模块类型 默认为common | ||
43 | + * @return | ||
44 | + */ | ||
45 | + ModuleType module() default ModuleType.COMMON; | ||
46 | +} |
1 | +package org.jeecg.common.aspect.annotation; | ||
2 | + | ||
3 | +import java.lang.annotation.*; | ||
4 | + | ||
5 | +import org.jeecg.common.constant.enums.LowAppAopEnum; | ||
6 | + | ||
7 | +/** | ||
8 | + * 自动注入low_app_id | ||
9 | + * | ||
10 | + * @Author scott | ||
11 | + * @email jeecgos@163.com | ||
12 | + * @Date 2022年01月05日 | ||
13 | + */ | ||
14 | +@Target(ElementType.METHOD) | ||
15 | +@Retention(RetentionPolicy.RUNTIME) | ||
16 | +@Documented | ||
17 | +public @interface AutoLowApp { | ||
18 | + | ||
19 | + /** | ||
20 | + * 切面类型(add、delete、db_import等其他操作) | ||
21 | + * | ||
22 | + * @return | ||
23 | + */ | ||
24 | + LowAppAopEnum action(); | ||
25 | + | ||
26 | + /** | ||
27 | + * 业务类型(cgform等) | ||
28 | + * | ||
29 | + * @return | ||
30 | + */ | ||
31 | + String bizType(); | ||
32 | + | ||
33 | +} |
1 | +package org.jeecg.common.aspect.annotation; | ||
2 | + | ||
3 | +import java.lang.annotation.ElementType; | ||
4 | +import java.lang.annotation.Retention; | ||
5 | +import java.lang.annotation.RetentionPolicy; | ||
6 | +import java.lang.annotation.Target; | ||
7 | + | ||
8 | +/** | ||
9 | + * 字典注解 | ||
10 | + * @author: dangzhenghui | ||
11 | + * @date: 2019年03月17日-下午9:37:16 | ||
12 | + */ | ||
13 | +@Target(ElementType.FIELD) | ||
14 | +@Retention(RetentionPolicy.RUNTIME) | ||
15 | +public @interface Dict { | ||
16 | + /** | ||
17 | + * 方法描述: 数据code | ||
18 | + * 作 者: dangzhenghui | ||
19 | + * 日 期: 2019年03月17日-下午9:37:16 | ||
20 | + * | ||
21 | + * @return 返回类型: String | ||
22 | + */ | ||
23 | + String dicCode(); | ||
24 | + | ||
25 | + /** | ||
26 | + * 方法描述: 数据Text | ||
27 | + * 作 者: dangzhenghui | ||
28 | + * 日 期: 2019年03月17日-下午9:37:16 | ||
29 | + * | ||
30 | + * @return 返回类型: String | ||
31 | + */ | ||
32 | + String dicText() default ""; | ||
33 | + | ||
34 | + /** | ||
35 | + * 方法描述: 数据字典表 | ||
36 | + * 作 者: dangzhenghui | ||
37 | + * 日 期: 2019年03月17日-下午9:37:16 | ||
38 | + * | ||
39 | + * @return 返回类型: String | ||
40 | + */ | ||
41 | + String dictTable() default ""; | ||
42 | +} |
1 | +package org.jeecg.common.aspect.annotation; | ||
2 | + | ||
3 | +import java.lang.annotation.*; | ||
4 | + | ||
5 | +/** | ||
6 | + * 动态table切换 | ||
7 | + * | ||
8 | + * @author :zyf | ||
9 | + * @date:2020-04-25 | ||
10 | + */ | ||
11 | +@Target(ElementType.METHOD) | ||
12 | +@Retention(RetentionPolicy.RUNTIME) | ||
13 | +@Documented | ||
14 | +public @interface DynamicTable { | ||
15 | + /** | ||
16 | + * 需要动态解析的表名 | ||
17 | + * @return | ||
18 | + */ | ||
19 | + String value(); | ||
20 | +} |
1 | +package org.jeecg.common.aspect.annotation; | ||
2 | + | ||
3 | +import java.lang.annotation.*; | ||
4 | + | ||
5 | +/** | ||
6 | + * online请求拦截专用注解 | ||
7 | + * @author: jeecg-boot | ||
8 | + */ | ||
9 | +@Retention(RetentionPolicy.RUNTIME) | ||
10 | +@Target({ElementType.TYPE,ElementType.METHOD}) | ||
11 | +@Documented | ||
12 | +public @interface OnlineAuth { | ||
13 | + | ||
14 | + /** | ||
15 | + * 请求关键字,在xxx/code之前的字符串 | ||
16 | + * @return | ||
17 | + */ | ||
18 | + String value(); | ||
19 | +} |
jeecg-boot-base-core/src/main/java/org/jeecg/common/aspect/annotation/PermissionData.java
0 → 100644
1 | +package org.jeecg.common.aspect.annotation; | ||
2 | + | ||
3 | +import java.lang.annotation.Documented; | ||
4 | +import java.lang.annotation.ElementType; | ||
5 | +import java.lang.annotation.Retention; | ||
6 | +import java.lang.annotation.RetentionPolicy; | ||
7 | +import java.lang.annotation.Target; | ||
8 | + | ||
9 | +/** | ||
10 | + * 数据权限注解 | ||
11 | + * @Author taoyan | ||
12 | + * @Date 2019年4月11日 | ||
13 | + */ | ||
14 | +@Retention(RetentionPolicy.RUNTIME) | ||
15 | +@Target({ElementType.TYPE,ElementType.METHOD}) | ||
16 | +@Documented | ||
17 | +public @interface PermissionData { | ||
18 | + /** | ||
19 | + * 暂时没用 | ||
20 | + * @return | ||
21 | + */ | ||
22 | + String value() default ""; | ||
23 | + | ||
24 | + | ||
25 | + /** | ||
26 | + * 配置菜单的组件路径,用于数据权限 | ||
27 | + */ | ||
28 | + String pageComponent() default ""; | ||
29 | +} |
1 | +package org.jeecg.common.constant; | ||
2 | + | ||
3 | +/** | ||
4 | + * @Description: 通用常量 | ||
5 | + * @author: jeecg-boot | ||
6 | + */ | ||
7 | +public interface CommonConstant { | ||
8 | + | ||
9 | + /** | ||
10 | + * 正常状态 | ||
11 | + */ | ||
12 | + Integer STATUS_NORMAL = 0; | ||
13 | + | ||
14 | + /** | ||
15 | + * 禁用状态 | ||
16 | + */ | ||
17 | + Integer STATUS_DISABLE = -1; | ||
18 | + | ||
19 | + /** | ||
20 | + * 删除标志 | ||
21 | + */ | ||
22 | + Integer DEL_FLAG_1 = 1; | ||
23 | + | ||
24 | + /** | ||
25 | + * 未删除 | ||
26 | + */ | ||
27 | + Integer DEL_FLAG_0 = 0; | ||
28 | + | ||
29 | + /** | ||
30 | + * 系统日志类型: 登录 | ||
31 | + */ | ||
32 | + int LOG_TYPE_1 = 1; | ||
33 | + | ||
34 | + /** | ||
35 | + * 系统日志类型: 操作 | ||
36 | + */ | ||
37 | + int LOG_TYPE_2 = 2; | ||
38 | + | ||
39 | + /** | ||
40 | + * 操作日志类型: 查询 | ||
41 | + */ | ||
42 | + int OPERATE_TYPE_1 = 1; | ||
43 | + | ||
44 | + /** | ||
45 | + * 操作日志类型: 添加 | ||
46 | + */ | ||
47 | + int OPERATE_TYPE_2 = 2; | ||
48 | + | ||
49 | + /** | ||
50 | + * 操作日志类型: 更新 | ||
51 | + */ | ||
52 | + int OPERATE_TYPE_3 = 3; | ||
53 | + | ||
54 | + /** | ||
55 | + * 操作日志类型: 删除 | ||
56 | + */ | ||
57 | + int OPERATE_TYPE_4 = 4; | ||
58 | + | ||
59 | + /** | ||
60 | + * 操作日志类型: 倒入 | ||
61 | + */ | ||
62 | + int OPERATE_TYPE_5 = 5; | ||
63 | + | ||
64 | + /** | ||
65 | + * 操作日志类型: 导出 | ||
66 | + */ | ||
67 | + int OPERATE_TYPE_6 = 6; | ||
68 | + | ||
69 | + | ||
70 | + /** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */ | ||
71 | + Integer SC_INTERNAL_SERVER_ERROR_500 = 500; | ||
72 | + /** {@code 200 OK} (HTTP/1.0 - RFC 1945) */ | ||
73 | + Integer SC_OK_200 = 200; | ||
74 | + | ||
75 | + /**访问权限认证未通过 510*/ | ||
76 | + Integer SC_JEECG_NO_AUTHZ=510; | ||
77 | + | ||
78 | + /** 登录用户Shiro权限缓存KEY前缀 */ | ||
79 | + public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:org.jeecg.config.shiro.ShiroRealm.authorizationCache:"; | ||
80 | + /** 登录用户Token令牌缓存KEY前缀 */ | ||
81 | + String PREFIX_USER_TOKEN = "prefix_user_token:"; | ||
82 | +// /** Token缓存时间:3600秒即一小时 */ | ||
83 | +// int TOKEN_EXPIRE_TIME = 3600; | ||
84 | + | ||
85 | + /** 登录二维码 */ | ||
86 | + String LOGIN_QRCODE_PRE = "QRCODELOGIN:"; | ||
87 | + String LOGIN_QRCODE = "LQ:"; | ||
88 | + /** 登录二维码token */ | ||
89 | + String LOGIN_QRCODE_TOKEN = "LQT:"; | ||
90 | + | ||
91 | + | ||
92 | + /** | ||
93 | + * 0:一级菜单 | ||
94 | + */ | ||
95 | + Integer MENU_TYPE_0 = 0; | ||
96 | + /** | ||
97 | + * 1:子菜单 | ||
98 | + */ | ||
99 | + Integer MENU_TYPE_1 = 1; | ||
100 | + /** | ||
101 | + * 2:按钮权限 | ||
102 | + */ | ||
103 | + Integer MENU_TYPE_2 = 2; | ||
104 | + | ||
105 | + /**通告对象类型(USER:指定用户,ALL:全体用户)*/ | ||
106 | + String MSG_TYPE_UESR = "USER"; | ||
107 | + String MSG_TYPE_ALL = "ALL"; | ||
108 | + | ||
109 | + /**发布状态(0未发布,1已发布,2已撤销)*/ | ||
110 | + String NO_SEND = "0"; | ||
111 | + String HAS_SEND = "1"; | ||
112 | + String HAS_CANCLE = "2"; | ||
113 | + | ||
114 | + /**阅读状态(0未读,1已读)*/ | ||
115 | + String HAS_READ_FLAG = "1"; | ||
116 | + String NO_READ_FLAG = "0"; | ||
117 | + | ||
118 | + /**优先级(L低,M中,H高)*/ | ||
119 | + String PRIORITY_L = "L"; | ||
120 | + String PRIORITY_M = "M"; | ||
121 | + String PRIORITY_H = "H"; | ||
122 | + | ||
123 | + /** | ||
124 | + * 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 | ||
125 | + */ | ||
126 | + String SMS_TPL_TYPE_0 = "0"; | ||
127 | + String SMS_TPL_TYPE_1 = "1"; | ||
128 | + String SMS_TPL_TYPE_2 = "2"; | ||
129 | + | ||
130 | + /** | ||
131 | + * 状态(0无效1有效) | ||
132 | + */ | ||
133 | + String STATUS_0 = "0"; | ||
134 | + String STATUS_1 = "1"; | ||
135 | + | ||
136 | + /** | ||
137 | + * 同步工作流引擎1同步0不同步 | ||
138 | + */ | ||
139 | + Integer ACT_SYNC_1 = 1; | ||
140 | + Integer ACT_SYNC_0 = 0; | ||
141 | + | ||
142 | + /** | ||
143 | + * 消息类型1:通知公告2:系统消息 | ||
144 | + */ | ||
145 | + String MSG_CATEGORY_1 = "1"; | ||
146 | + String MSG_CATEGORY_2 = "2"; | ||
147 | + | ||
148 | + /** | ||
149 | + * 是否配置菜单的数据权限 1是0否 | ||
150 | + */ | ||
151 | + Integer RULE_FLAG_0 = 0; | ||
152 | + Integer RULE_FLAG_1 = 1; | ||
153 | + | ||
154 | + /** | ||
155 | + * 是否用户已被冻结 1正常(解冻) 2冻结 3离职 | ||
156 | + */ | ||
157 | + Integer USER_UNFREEZE = 1; | ||
158 | + Integer USER_FREEZE = 2; | ||
159 | + Integer USER_QUIT = 3; | ||
160 | + | ||
161 | + /**字典翻译文本后缀*/ | ||
162 | + String DICT_TEXT_SUFFIX = "_dictText"; | ||
163 | + | ||
164 | + /** | ||
165 | + * 表单设计器主表类型 | ||
166 | + */ | ||
167 | + Integer DESIGN_FORM_TYPE_MAIN = 1; | ||
168 | + | ||
169 | + /** | ||
170 | + * 表单设计器子表表类型 | ||
171 | + */ | ||
172 | + Integer DESIGN_FORM_TYPE_SUB = 2; | ||
173 | + | ||
174 | + /** | ||
175 | + * 表单设计器URL授权通过 | ||
176 | + */ | ||
177 | + Integer DESIGN_FORM_URL_STATUS_PASSED = 1; | ||
178 | + | ||
179 | + /** | ||
180 | + * 表单设计器URL授权未通过 | ||
181 | + */ | ||
182 | + Integer DESIGN_FORM_URL_STATUS_NOT_PASSED = 2; | ||
183 | + | ||
184 | + /** | ||
185 | + * 表单设计器新增 Flag | ||
186 | + */ | ||
187 | + String DESIGN_FORM_URL_TYPE_ADD = "add"; | ||
188 | + /** | ||
189 | + * 表单设计器修改 Flag | ||
190 | + */ | ||
191 | + String DESIGN_FORM_URL_TYPE_EDIT = "edit"; | ||
192 | + /** | ||
193 | + * 表单设计器详情 Flag | ||
194 | + */ | ||
195 | + String DESIGN_FORM_URL_TYPE_DETAIL = "detail"; | ||
196 | + /** | ||
197 | + * 表单设计器复用数据 Flag | ||
198 | + */ | ||
199 | + String DESIGN_FORM_URL_TYPE_REUSE = "reuse"; | ||
200 | + /** | ||
201 | + * 表单设计器编辑 Flag (已弃用) | ||
202 | + */ | ||
203 | + String DESIGN_FORM_URL_TYPE_VIEW = "view"; | ||
204 | + | ||
205 | + /** | ||
206 | + * online参数值设置(是:Y, 否:N) | ||
207 | + */ | ||
208 | + String ONLINE_PARAM_VAL_IS_TURE = "Y"; | ||
209 | + String ONLINE_PARAM_VAL_IS_FALSE = "N"; | ||
210 | + | ||
211 | + /** | ||
212 | + * 文件上传类型(本地:local,Minio:minio,阿里云:alioss) | ||
213 | + */ | ||
214 | + String UPLOAD_TYPE_LOCAL = "local"; | ||
215 | + String UPLOAD_TYPE_MINIO = "minio"; | ||
216 | + String UPLOAD_TYPE_OSS = "alioss"; | ||
217 | + | ||
218 | + /** | ||
219 | + * 文档上传自定义桶名称 | ||
220 | + */ | ||
221 | + String UPLOAD_CUSTOM_BUCKET = "eoafile"; | ||
222 | + /** | ||
223 | + * 文档上传自定义路径 | ||
224 | + */ | ||
225 | + String UPLOAD_CUSTOM_PATH = "eoafile"; | ||
226 | + /** | ||
227 | + * 文件外链接有效天数 | ||
228 | + */ | ||
229 | + Integer UPLOAD_EFFECTIVE_DAYS = 1; | ||
230 | + | ||
231 | + /** | ||
232 | + * 员工身份 (1:普通员工 2:上级) | ||
233 | + */ | ||
234 | + Integer USER_IDENTITY_1 = 1; | ||
235 | + Integer USER_IDENTITY_2 = 2; | ||
236 | + | ||
237 | + /** sys_user 表 username 唯一键索引 */ | ||
238 | + String SQL_INDEX_UNIQ_SYS_USER_USERNAME = "uniq_sys_user_username"; | ||
239 | + /** sys_user 表 work_no 唯一键索引 */ | ||
240 | + String SQL_INDEX_UNIQ_SYS_USER_WORK_NO = "uniq_sys_user_work_no"; | ||
241 | + /** sys_user 表 phone 唯一键索引 */ | ||
242 | + String SQL_INDEX_UNIQ_SYS_USER_PHONE = "uniq_sys_user_phone"; | ||
243 | + /** 达梦数据库升提示。违反表[SYS_USER]唯一性约束 */ | ||
244 | + String SQL_INDEX_UNIQ_SYS_USER = "唯一性约束"; | ||
245 | + | ||
246 | + /** sys_user 表 email 唯一键索引 */ | ||
247 | + String SQL_INDEX_UNIQ_SYS_USER_EMAIL = "uniq_sys_user_email"; | ||
248 | + /** sys_quartz_job 表 job_class_name 唯一键索引 */ | ||
249 | + String SQL_INDEX_UNIQ_JOB_CLASS_NAME = "uniq_job_class_name"; | ||
250 | + /** sys_position 表 code 唯一键索引 */ | ||
251 | + String SQL_INDEX_UNIQ_CODE = "uniq_code"; | ||
252 | + /** sys_role 表 code 唯一键索引 */ | ||
253 | + String SQL_INDEX_UNIQ_SYS_ROLE_CODE = "uniq_sys_role_role_code"; | ||
254 | + /** sys_depart 表 code 唯一键索引 */ | ||
255 | + String SQL_INDEX_UNIQ_DEPART_ORG_CODE = "uniq_depart_org_code"; | ||
256 | + /** sys_category 表 code 唯一键索引 */ | ||
257 | + String SQL_INDEX_UNIQ_CATEGORY_CODE = "idx_sc_code"; | ||
258 | + /** | ||
259 | + * 在线聊天 是否为默认分组 | ||
260 | + */ | ||
261 | + String IM_DEFAULT_GROUP = "1"; | ||
262 | + /** | ||
263 | + * 在线聊天 图片文件保存路径 | ||
264 | + */ | ||
265 | + String IM_UPLOAD_CUSTOM_PATH = "biz/user_imgs"; | ||
266 | + /** | ||
267 | + * 在线聊天 用户状态 | ||
268 | + */ | ||
269 | + String IM_STATUS_ONLINE = "online"; | ||
270 | + | ||
271 | + /** | ||
272 | + * 在线聊天 SOCKET消息类型 | ||
273 | + */ | ||
274 | + String IM_SOCKET_TYPE = "chatMessage"; | ||
275 | + | ||
276 | + /** | ||
277 | + * 在线聊天 是否开启默认添加好友 1是 0否 | ||
278 | + */ | ||
279 | + String IM_DEFAULT_ADD_FRIEND = "1"; | ||
280 | + | ||
281 | + /** | ||
282 | + * 在线聊天 用户好友缓存前缀 | ||
283 | + */ | ||
284 | + String IM_PREFIX_USER_FRIEND_CACHE = "sys:cache:im:im_prefix_user_friend_"; | ||
285 | + | ||
286 | + /** | ||
287 | + * 考勤补卡业务状态 (1:同意 2:不同意) | ||
288 | + */ | ||
289 | + String SIGN_PATCH_BIZ_STATUS_1 = "1"; | ||
290 | + String SIGN_PATCH_BIZ_STATUS_2 = "2"; | ||
291 | + | ||
292 | + /** | ||
293 | + * 公文文档上传自定义路径 | ||
294 | + */ | ||
295 | + String UPLOAD_CUSTOM_PATH_OFFICIAL = "officialdoc"; | ||
296 | + /** | ||
297 | + * 公文文档下载自定义路径 | ||
298 | + */ | ||
299 | + String DOWNLOAD_CUSTOM_PATH_OFFICIAL = "officaldown"; | ||
300 | + | ||
301 | + /** | ||
302 | + * WPS存储值类别(1 code文号 2 text(WPS模板还是公文发文模板)) | ||
303 | + */ | ||
304 | + String WPS_TYPE_1="1"; | ||
305 | + String WPS_TYPE_2="2"; | ||
306 | + | ||
307 | + | ||
308 | + /**===============================================================================================*/ | ||
309 | + /** | ||
310 | + * ::非常重要:: | ||
311 | + * 注意:这四个常量值如果修改,需要与 jeecg-boot-starter/jeecg-boot-common/org.jeecg.config.FeignConfig 类中的值保持一致。 | ||
312 | + */ | ||
313 | + String X_ACCESS_TOKEN = "X-Access-Token"; | ||
314 | + String X_SIGN = "X-Sign"; | ||
315 | + String X_TIMESTAMP = "X-TIMESTAMP"; | ||
316 | + /** 租户请求头 更名为:X-Tenant-Id */ | ||
317 | + String TENANT_ID = "X-Tenant-Id"; | ||
318 | + /**===============================================================================================*/ | ||
319 | + | ||
320 | + String TOKEN_IS_INVALID_MSG = "Token失效,请重新登录!"; | ||
321 | + String X_FORWARDED_SCHEME = "X-Forwarded-Scheme"; | ||
322 | + | ||
323 | + | ||
324 | + /** | ||
325 | + * 微服务读取配置文件属性 服务地址 | ||
326 | + */ | ||
327 | + String CLOUD_SERVER_KEY = "spring.cloud.nacos.discovery.server-addr"; | ||
328 | + | ||
329 | + /** | ||
330 | + * 第三方登录 验证密码/创建用户 都需要设置一个操作码 防止被恶意调用 | ||
331 | + */ | ||
332 | + String THIRD_LOGIN_CODE = "third_login_code"; | ||
333 | + | ||
334 | + /** | ||
335 | + * 第三方APP同步方向:本地 --> 第三方APP | ||
336 | + */ | ||
337 | + String THIRD_SYNC_TO_APP = "SYNC_TO_APP"; | ||
338 | + /** | ||
339 | + * 第三方APP同步方向:第三方APP --> 本地 | ||
340 | + */ | ||
341 | + String THIRD_SYNC_TO_LOCAL = "SYNC_TO_LOCAL"; | ||
342 | + | ||
343 | + /** 系统通告消息状态:0=未发布 */ | ||
344 | + String ANNOUNCEMENT_SEND_STATUS_0 = "0"; | ||
345 | + /** 系统通告消息状态:1=已发布 */ | ||
346 | + String ANNOUNCEMENT_SEND_STATUS_1 = "1"; | ||
347 | + /** 系统通告消息状态:2=已撤销 */ | ||
348 | + String ANNOUNCEMENT_SEND_STATUS_2 = "2"; | ||
349 | + | ||
350 | + /**ONLINE 报表权限用 从request中获取地址栏后的参数*/ | ||
351 | + String ONL_REP_URL_PARAM_STR="onlRepUrlParamStr"; | ||
352 | + | ||
353 | + /**POST请求*/ | ||
354 | + String HTTP_POST = "POST"; | ||
355 | + | ||
356 | + /**PUT请求*/ | ||
357 | + String HTTP_PUT = "PUT"; | ||
358 | + | ||
359 | + /**PATCH请求*/ | ||
360 | + String HTTP_PATCH = "PATCH"; | ||
361 | + | ||
362 | + /**未知的*/ | ||
363 | + String UNKNOWN = "unknown"; | ||
364 | + | ||
365 | + /**字符串http*/ | ||
366 | + String STR_HTTP = "http"; | ||
367 | + | ||
368 | + /**String 类型的空值*/ | ||
369 | + String STRING_NULL = "null"; | ||
370 | + | ||
371 | + /**前端vue3版本Header参数名*/ | ||
372 | + String VERSION="X-Version"; | ||
373 | + | ||
374 | + /**存储在线程变量里的动态表名*/ | ||
375 | + String DYNAMIC_TABLE_NAME="DYNAMIC_TABLE_NAME"; | ||
376 | + /** | ||
377 | + * http:// http协议 | ||
378 | + */ | ||
379 | + String HTTP_PROTOCOL = "http://"; | ||
380 | + | ||
381 | + /** | ||
382 | + * https:// https协议 | ||
383 | + */ | ||
384 | + String HTTPS_PROTOCOL = "https://"; | ||
385 | + | ||
386 | + /** 部门表唯一key,id */ | ||
387 | + String DEPART_KEY_ID = "id"; | ||
388 | + /** 部门表唯一key,orgCode */ | ||
389 | + String DEPART_KEY_ORG_CODE = "orgCode"; | ||
390 | + | ||
391 | + /** | ||
392 | + * 发消息 会传递一些信息到map | ||
393 | + */ | ||
394 | + String NOTICE_MSG_SUMMARY = "NOTICE_MSG_SUMMARY"; | ||
395 | + | ||
396 | + /** | ||
397 | + * 发消息 会传递一个业务ID到map | ||
398 | + */ | ||
399 | + String NOTICE_MSG_BUS_ID = "NOTICE_MSG_BUS_ID"; | ||
400 | + | ||
401 | + /** | ||
402 | + * 邮箱消息中地址登录时地址后携带的token,需要替换成真实的token值 | ||
403 | + */ | ||
404 | + String LOGIN_TOKEN = "{LOGIN_TOKEN}"; | ||
405 | + | ||
406 | + /** | ||
407 | + * 模板消息中 跳转地址的对应的key | ||
408 | + */ | ||
409 | + String MSG_HREF_URL = "url"; | ||
410 | + | ||
411 | + /** | ||
412 | + * sys_data_log表的类型 用于区别评论区域的日志数据 | ||
413 | + */ | ||
414 | + String DATA_LOG_TYPE_COMMENT = "comment"; | ||
415 | + | ||
416 | + /** | ||
417 | + * sys_data_log表的类型 老的数据比较 类型都设置为json | ||
418 | + */ | ||
419 | + String DATA_LOG_TYPE_JSON = "json"; | ||
420 | + | ||
421 | + /** 消息模板:markdown */ | ||
422 | + String MSG_TEMPLATE_TYPE_MD = "5"; | ||
423 | + | ||
424 | + /** | ||
425 | + * 短信验证码redis-key的前缀 | ||
426 | + */ | ||
427 | + String PHONE_REDIS_KEY_PRE = "phone_msg"; | ||
428 | + | ||
429 | + /** | ||
430 | + * 是文件夹 | ||
431 | + */ | ||
432 | + String IT_IS_FOLDER = "1"; | ||
433 | + | ||
434 | + /** | ||
435 | + * 文件拥有者 | ||
436 | + */ | ||
437 | + String FILE_OWNER = "owner"; | ||
438 | + | ||
439 | + /** | ||
440 | + * 文件管理员 | ||
441 | + */ | ||
442 | + String FILE_ADMIN = "admin"; | ||
443 | + | ||
444 | + /** | ||
445 | + * 只允许编辑 | ||
446 | + */ | ||
447 | + String FILE_EDITABLE = "editable"; | ||
448 | + | ||
449 | + /** | ||
450 | + * 登录失败,用于记录失败次数的key | ||
451 | + */ | ||
452 | + String LOGIN_FAIL = "LOGIN_FAIL_"; | ||
453 | + | ||
454 | + /** | ||
455 | + * 入职事件 | ||
456 | + */ | ||
457 | + Integer BPM_USER_EVENT_ADD = 1; | ||
458 | + | ||
459 | + /** | ||
460 | + * 离职事件 | ||
461 | + */ | ||
462 | + Integer BPM_USER_EVENT_LEVEL = 2; | ||
463 | + | ||
464 | + /** | ||
465 | + * 用户租户状态(正常/已通过审核的) | ||
466 | + */ | ||
467 | + String USER_TENANT_NORMAL = "1"; | ||
468 | + | ||
469 | + /** | ||
470 | + * 用户租户状态(离职) | ||
471 | + */ | ||
472 | + String USER_TENANT_QUIT = "2"; | ||
473 | + | ||
474 | + /** | ||
475 | + * 用户租户状态(审核中) | ||
476 | + */ | ||
477 | + String USER_TENANT_UNDER_REVIEW = "3"; | ||
478 | + | ||
479 | + /** | ||
480 | + * 用户租户状态(拒绝) | ||
481 | + */ | ||
482 | + String USER_TENANT_REFUSE = "4"; | ||
483 | + | ||
484 | + /** | ||
485 | + * 不是叶子节点 | ||
486 | + */ | ||
487 | + Integer NOT_LEAF = 0; | ||
488 | + | ||
489 | + /** | ||
490 | + * 是叶子节点 | ||
491 | + */ | ||
492 | + Integer IS_LEAF = 1; | ||
493 | +} |
-
Please register or login to post a comment