| @@ -0,0 +1,25 @@ | |||
| # Compiled class file | |||
| *.class | |||
| # Log file | |||
| *.log | |||
| # BlueJ files | |||
| *.ctxt | |||
| # Mobile Tools for Java (J2ME) | |||
| .mtj.tmp/ | |||
| target | |||
| # Package Files # | |||
| *.jar | |||
| *.war | |||
| *.ear | |||
| *.zip | |||
| *.tar.gz | |||
| *.rar | |||
| *.iml | |||
| .idea | |||
| # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml | |||
| hs_err_pid* | |||
| @@ -0,0 +1,17 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <projectDescription> | |||
| <name>bdty-security</name> | |||
| <comment></comment> | |||
| <projects> | |||
| </projects> | |||
| <buildSpec> | |||
| <buildCommand> | |||
| <name>org.eclipse.m2e.core.maven2Builder</name> | |||
| <arguments> | |||
| </arguments> | |||
| </buildCommand> | |||
| </buildSpec> | |||
| <natures> | |||
| <nature>org.eclipse.m2e.core.maven2Nature</nature> | |||
| </natures> | |||
| </projectDescription> | |||
| @@ -0,0 +1,2 @@ | |||
| eclipse.preferences.version=1 | |||
| encoding/<project>=UTF-8 | |||
| @@ -0,0 +1,4 @@ | |||
| activeProfiles= | |||
| eclipse.preferences.version=1 | |||
| resolveWorkspaceProjects=true | |||
| version=1 | |||
| @@ -0,0 +1,191 @@ | |||
| Apache License | |||
| Version 2.0, January 2004 | |||
| http://www.apache.org/licenses/ | |||
| TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | |||
| 1. Definitions. | |||
| "License" shall mean the terms and conditions for use, reproduction, and | |||
| distribution as defined by Sections 1 through 9 of this document. | |||
| "Licensor" shall mean the copyright owner or entity authorized by the copyright | |||
| owner that is granting the License. | |||
| "Legal Entity" shall mean the union of the acting entity and all other entities | |||
| that control, are controlled by, or are under common control with that entity. | |||
| For the purposes of this definition, "control" means (i) the power, direct or | |||
| indirect, to cause the direction or management of such entity, whether by | |||
| contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the | |||
| outstanding shares, or (iii) beneficial ownership of such entity. | |||
| "You" (or "Your") shall mean an individual or Legal Entity exercising | |||
| permissions granted by this License. | |||
| "Source" form shall mean the preferred form for making modifications, including | |||
| but not limited to software source code, documentation source, and configuration | |||
| files. | |||
| "Object" form shall mean any form resulting from mechanical transformation or | |||
| translation of a Source form, including but not limited to compiled object code, | |||
| generated documentation, and conversions to other media types. | |||
| "Work" shall mean the work of authorship, whether in Source or Object form, made | |||
| available under the License, as indicated by a copyright notice that is included | |||
| in or attached to the work (an example is provided in the Appendix below). | |||
| "Derivative Works" shall mean any work, whether in Source or Object form, that | |||
| is based on (or derived from) the Work and for which the editorial revisions, | |||
| annotations, elaborations, or other modifications represent, as a whole, an | |||
| original work of authorship. For the purposes of this License, Derivative Works | |||
| shall not include works that remain separable from, or merely link (or bind by | |||
| name) to the interfaces of, the Work and Derivative Works thereof. | |||
| "Contribution" shall mean any work of authorship, including the original version | |||
| of the Work and any modifications or additions to that Work or Derivative Works | |||
| thereof, that is intentionally submitted to Licensor for inclusion in the Work | |||
| by the copyright owner or by an individual or Legal Entity authorized to submit | |||
| on behalf of the copyright owner. For the purposes of this definition, | |||
| "submitted" means any form of electronic, verbal, or written communication sent | |||
| to the Licensor or its representatives, including but not limited to | |||
| communication on electronic mailing lists, source code control systems, and | |||
| issue tracking systems that are managed by, or on behalf of, the Licensor for | |||
| the purpose of discussing and improving the Work, but excluding communication | |||
| that is conspicuously marked or otherwise designated in writing by the copyright | |||
| owner as "Not a Contribution." | |||
| "Contributor" shall mean Licensor and any individual or Legal Entity on behalf | |||
| of whom a Contribution has been received by Licensor and subsequently | |||
| incorporated within the Work. | |||
| 2. Grant of Copyright License. | |||
| Subject to the terms and conditions of this License, each Contributor hereby | |||
| grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, | |||
| irrevocable copyright license to reproduce, prepare Derivative Works of, | |||
| publicly display, publicly perform, sublicense, and distribute the Work and such | |||
| Derivative Works in Source or Object form. | |||
| 3. Grant of Patent License. | |||
| Subject to the terms and conditions of this License, each Contributor hereby | |||
| grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, | |||
| irrevocable (except as stated in this section) patent license to make, have | |||
| made, use, offer to sell, sell, import, and otherwise transfer the Work, where | |||
| such license applies only to those patent claims licensable by such Contributor | |||
| that are necessarily infringed by their Contribution(s) alone or by combination | |||
| of their Contribution(s) with the Work to which such Contribution(s) was | |||
| submitted. If You institute patent litigation against any entity (including a | |||
| cross-claim or counterclaim in a lawsuit) alleging that the Work or a | |||
| Contribution incorporated within the Work constitutes direct or contributory | |||
| patent infringement, then any patent licenses granted to You under this License | |||
| for that Work shall terminate as of the date such litigation is filed. | |||
| 4. Redistribution. | |||
| You may reproduce and distribute copies of the Work or Derivative Works thereof | |||
| in any medium, with or without modifications, and in Source or Object form, | |||
| provided that You meet the following conditions: | |||
| You must give any other recipients of the Work or Derivative Works a copy of | |||
| this License; and | |||
| You must cause any modified files to carry prominent notices stating that You | |||
| changed the files; and | |||
| You must retain, in the Source form of any Derivative Works that You distribute, | |||
| all copyright, patent, trademark, and attribution notices from the Source form | |||
| of the Work, excluding those notices that do not pertain to any part of the | |||
| Derivative Works; and | |||
| If the Work includes a "NOTICE" text file as part of its distribution, then any | |||
| Derivative Works that You distribute must include a readable copy of the | |||
| attribution notices contained within such NOTICE file, excluding those notices | |||
| that do not pertain to any part of the Derivative Works, in at least one of the | |||
| following places: within a NOTICE text file distributed as part of the | |||
| Derivative Works; within the Source form or documentation, if provided along | |||
| with the Derivative Works; or, within a display generated by the Derivative | |||
| Works, if and wherever such third-party notices normally appear. The contents of | |||
| the NOTICE file are for informational purposes only and do not modify the | |||
| License. You may add Your own attribution notices within Derivative Works that | |||
| You distribute, alongside or as an addendum to the NOTICE text from the Work, | |||
| provided that such additional attribution notices cannot be construed as | |||
| modifying the License. | |||
| You may add Your own copyright statement to Your modifications and may provide | |||
| additional or different license terms and conditions for use, reproduction, or | |||
| distribution of Your modifications, or for any such Derivative Works as a whole, | |||
| provided Your use, reproduction, and distribution of the Work otherwise complies | |||
| with the conditions stated in this License. | |||
| 5. Submission of Contributions. | |||
| Unless You explicitly state otherwise, any Contribution intentionally submitted | |||
| for inclusion in the Work by You to the Licensor shall be under the terms and | |||
| conditions of this License, without any additional terms or conditions. | |||
| Notwithstanding the above, nothing herein shall supersede or modify the terms of | |||
| any separate license agreement you may have executed with Licensor regarding | |||
| such Contributions. | |||
| 6. Trademarks. | |||
| This License does not grant permission to use the trade names, trademarks, | |||
| service marks, or product names of the Licensor, except as required for | |||
| reasonable and customary use in describing the origin of the Work and | |||
| reproducing the content of the NOTICE file. | |||
| 7. Disclaimer of Warranty. | |||
| Unless required by applicable law or agreed to in writing, Licensor provides the | |||
| Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, | |||
| including, without limitation, any warranties or conditions of TITLE, | |||
| NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are | |||
| solely responsible for determining the appropriateness of using or | |||
| redistributing the Work and assume any risks associated with Your exercise of | |||
| permissions under this License. | |||
| 8. Limitation of Liability. | |||
| In no event and under no legal theory, whether in tort (including negligence), | |||
| contract, or otherwise, unless required by applicable law (such as deliberate | |||
| and grossly negligent acts) or agreed to in writing, shall any Contributor be | |||
| liable to You for damages, including any direct, indirect, special, incidental, | |||
| or consequential damages of any character arising as a result of this License or | |||
| out of the use or inability to use the Work (including but not limited to | |||
| damages for loss of goodwill, work stoppage, computer failure or malfunction, or | |||
| any and all other commercial damages or losses), even if such Contributor has | |||
| been advised of the possibility of such damages. | |||
| 9. Accepting Warranty or Additional Liability. | |||
| While redistributing the Work or Derivative Works thereof, You may choose to | |||
| offer, and charge a fee for, acceptance of support, warranty, indemnity, or | |||
| other liability obligations and/or rights consistent with this License. However, | |||
| in accepting such obligations, You may act only on Your own behalf and on Your | |||
| sole responsibility, not on behalf of any other Contributor, and only if You | |||
| agree to indemnify, defend, and hold each Contributor harmless for any liability | |||
| incurred by, or claims asserted against, such Contributor by reason of your | |||
| accepting any such warranty or additional liability. | |||
| END OF TERMS AND CONDITIONS | |||
| APPENDIX: How to apply the Apache License to your work | |||
| To apply the Apache License to your work, attach the following boilerplate | |||
| notice, with the fields enclosed by brackets "{}" replaced with your own | |||
| identifying information. (Don't include the brackets!) The text should be | |||
| enclosed in the appropriate comment syntax for the file format. We also | |||
| recommend that a file or class name and description of purpose be included on | |||
| the same "printed page" as the copyright notice for easier identification within | |||
| third-party archives. | |||
| Copyright 2018 人人开源 | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| @@ -0,0 +1,128 @@ | |||
| ### 项目说明 | |||
| - renren-security是一个轻量级的,前后端分离的Java快速开发平台,能快速开发项目并交付【接私活利器】 | |||
| - 采用SpringBoot、Shiro、MyBatis-Plus、Vue3、TypeScript、Element Plus、Vue Router、Pinia、Axios、Vite框架,开发的一套权限系统,极低门槛,拿来即用。设计之初,就非常注重安全性,为企业系统保驾护航,让一切都变得如此简单。 | |||
| - 提供了代码生成器,只需编写30%左右代码,其余的代码交给系统自动生成,可快速完成开发任务 | |||
| - 支持MySQL、达梦、Oracle、SQL Server、PostgreSQL等主流数据库 | |||
| - 演示地址:http://demo.open.renren.io/renren-security (账号密码:admin/admin) | |||
| <br> | |||
| ### 微信交流群 | |||
| 我们提供了微信交流群,扫码下面的二维码,关注【人人开源】公众号,回复【加群】,即可根据提示加入微信群! | |||
| <br><br> | |||
|  | |||
| <br> | |||
| ### 具有如下特点 | |||
| - 友好的代码结构及注释,便于阅读及二次开发 | |||
| - 实现前后端分离,通过token进行数据交互,前端再也不用关注后端技术 | |||
| - 灵活的权限控制,可控制到页面或按钮,满足绝大部分的权限需求 | |||
| - 提供CrudService接口,对增删改查进行封装,代码更简洁 | |||
| - 页面交互使用Vue3.x,极大的提高了开发效率 | |||
| - 完善的部门管理及数据权限,通过注解实现数据权限的控制 | |||
| - 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击 | |||
| - 完善的代码生成机制,可在线生成entity、xml、dao、service、vue、sql代码,减少70%以上的开发任务 | |||
| - 引入quartz定时任务,可动态完成任务的添加、修改、删除、暂停、恢复及日志查看等功能 | |||
| - 引入Hibernate Validator校验框架,轻松实现后端校验 | |||
| - 引入云存储服务,已支持:七牛云、阿里云、腾讯云等 | |||
| - 引入swagger文档支持,方便编写API接口文档 | |||
| <br> | |||
| ### 数据权限设计思想 | |||
| - 用户管理、角色管理、部门管理,可操作本部门及子部门数据 | |||
| - 菜单管理、定时任务、参数管理、字典管理、系统日志,没有数据权限 | |||
| - 业务功能,按照用户数据权限,查询、操作数据【没有本部门数据权限,也能查询本人数据】 | |||
| <br> | |||
| **项目结构** | |||
| ``` | |||
| renren-security | |||
| ├─renren-common 公共模块 | |||
| │ | |||
| ├─renren-admin 管理后台 | |||
| │ ├─db 数据库SQL脚本 | |||
| │ │ | |||
| │ ├─modules 模块 | |||
| │ │ ├─job 定时任务 | |||
| │ │ ├─log 日志管理 | |||
| │ │ ├─oss 文件存储 | |||
| │ │ ├─security 安全模块 | |||
| │ │ └─sys 系统管理(核心) | |||
| │ │ | |||
| │ └─resources | |||
| │ ├─mapper MyBatis文件 | |||
| │ ├─public 静态资源 | |||
| │ └─application.yml 全局配置文件 | |||
| │ | |||
| │ | |||
| ├─renren-api API服务 | |||
| │ | |||
| ├─renren-generator 代码生成器 | |||
| │ └─resources | |||
| │ ├─mapper MyBatis文件 | |||
| │ ├─template 代码生成器模板(可增加或修改相应模板) | |||
| │ ├─application.yml 全局配置文件 | |||
| │ └─generator.properties 代码生成器,配置文件 | |||
| │ | |||
| ├─renren-ui Vue3前端工程 | |||
| ``` | |||
| <br> | |||
| **技术选型:** | |||
| - 核心框架:Spring Boot 2.7 | |||
| - 安全框架:Apache Shiro 1.12 | |||
| - 持久层框架:MyBatis 3.5 | |||
| - 定时器:Quartz 2.3 | |||
| - 数据库连接池:Druid 1.2 | |||
| - 日志管理:Logback | |||
| - 页面交互:Vue3.x | |||
| <br> | |||
| **软件需求** | |||
| - JDK1.8 | |||
| - Maven3.0+ | |||
| - MySQL8.0 | |||
| - Oracle 11g+ | |||
| - SQLServer 2012+ | |||
| - PostgreSQL 9.4+ | |||
| - 达梦8 | |||
| <br> | |||
| **本地部署** | |||
| - 通过git下载源码 | |||
| - idea、eclipse需安装lombok插件,不然会提示找不到entity的get set方法 | |||
| - 创建数据库renren_security,数据库编码为UTF-8 | |||
| - 执行db/mysql.sql文件,初始化数据 | |||
| - 修改application-dev.yml文件,更新MySQL账号和密码 | |||
| - 在renren-security目录下,执行mvn clean install | |||
| - Eclipse、IDEA运行AdminApplication.java,则可启动项目【renren-admin】 | |||
| - renren-admin访问路径:http://localhost:8080/renren-admin | |||
| - swagger文档路径:http://localhost:8080/renren-admin/doc.html | |||
| - 再启动前端项目,前端地址:https://gitee.com/renrenio/renren-ui | |||
| - 账号密码:admin/admin | |||
| <br> | |||
|  | |||
| <br> | |||
|  | |||
| <br> | |||
| ### 如何交流、反馈、参与贡献? | |||
| - 开发文档:https://www.renren.io/guide/security | |||
| - 官方社区:https://www.renren.io/community | |||
| - Gitee仓库:https://gitee.com/renrenio/renren-security | |||
| - [人人开源](https://www.renren.io):https://www.renren.io | |||
| - 如需关注项目最新动态,请Watch、Star项目,同时也是对项目最好的支持 | |||
| - 技术讨论、二次开发等咨询、问题和建议,请移步到官方社区,我会在第一时间进行解答和回复! | |||
| <br> | |||
| @@ -0,0 +1,31 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <classpath> | |||
| <classpathentry kind="src" output="target/classes" path="src/main/java"> | |||
| <attributes> | |||
| <attribute name="optional" value="true"/> | |||
| <attribute name="maven.pomderived" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> | |||
| <attributes> | |||
| <attribute name="maven.pomderived" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry kind="src" output="target/test-classes" path="src/test/java"> | |||
| <attributes> | |||
| <attribute name="optional" value="true"/> | |||
| <attribute name="maven.pomderived" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> | |||
| <attributes> | |||
| <attribute name="maven.pomderived" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | |||
| <attributes> | |||
| <attribute name="maven.pomderived" value="true"/> | |||
| </attributes> | |||
| </classpathentry> | |||
| <classpathentry kind="output" path="target/classes"/> | |||
| </classpath> | |||
| @@ -0,0 +1,29 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <projectDescription> | |||
| <name>bdty-admin</name> | |||
| <comment></comment> | |||
| <projects> | |||
| </projects> | |||
| <buildSpec> | |||
| <buildCommand> | |||
| <name>org.eclipse.wst.common.project.facet.core.builder</name> | |||
| <arguments> | |||
| </arguments> | |||
| </buildCommand> | |||
| <buildCommand> | |||
| <name>org.eclipse.jdt.core.javabuilder</name> | |||
| <arguments> | |||
| </arguments> | |||
| </buildCommand> | |||
| <buildCommand> | |||
| <name>org.eclipse.m2e.core.maven2Builder</name> | |||
| <arguments> | |||
| </arguments> | |||
| </buildCommand> | |||
| </buildSpec> | |||
| <natures> | |||
| <nature>org.eclipse.jdt.core.javanature</nature> | |||
| <nature>org.eclipse.m2e.core.maven2Nature</nature> | |||
| <nature>org.eclipse.wst.common.project.facet.core.nature</nature> | |||
| </natures> | |||
| </projectDescription> | |||
| @@ -0,0 +1,5 @@ | |||
| eclipse.preferences.version=1 | |||
| encoding//src/main/java=UTF-8 | |||
| encoding//src/main/resources=UTF-8 | |||
| encoding//src/test/java=UTF-8 | |||
| encoding/<project>=UTF-8 | |||
| @@ -0,0 +1,8 @@ | |||
| eclipse.preferences.version=1 | |||
| org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled | |||
| org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 | |||
| org.eclipse.jdt.core.compiler.compliance=1.8 | |||
| org.eclipse.jdt.core.compiler.problem.assertIdentifier=error | |||
| org.eclipse.jdt.core.compiler.problem.enumIdentifier=error | |||
| org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | |||
| org.eclipse.jdt.core.compiler.source=1.8 | |||
| @@ -0,0 +1,4 @@ | |||
| activeProfiles= | |||
| eclipse.preferences.version=1 | |||
| resolveWorkspaceProjects=true | |||
| version=1 | |||
| @@ -0,0 +1,4 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <faceted-project> | |||
| <installed facet="java" version="1.8"/> | |||
| </faceted-project> | |||
| @@ -0,0 +1,7 @@ | |||
| FROM java:8 | |||
| EXPOSE 8080 | |||
| VOLUME /tmp | |||
| ADD renren-admin.jar /app.jar | |||
| RUN bash -c 'touch /app.jar' | |||
| ENTRYPOINT ["java","-jar","/app.jar"] | |||
| @@ -0,0 +1,674 @@ | |||
| CREATE TABLE sys_user ( | |||
| id bigint NOT NULL, | |||
| username varchar(50) NOT NULL, | |||
| password varchar(100), | |||
| real_name varchar(50), | |||
| head_url varchar(200), | |||
| gender int, | |||
| email varchar(100), | |||
| mobile varchar(100), | |||
| dept_id bigint, | |||
| super_admin int, | |||
| status int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_user_username on sys_user(username); | |||
| CREATE INDEX idx_sys_user_create_date on sys_user(create_date); | |||
| COMMENT ON TABLE sys_user IS '用户管理'; | |||
| COMMENT ON COLUMN sys_user.id IS 'id'; | |||
| COMMENT ON COLUMN sys_user.username IS '用户名'; | |||
| COMMENT ON COLUMN sys_user.password IS '密码'; | |||
| COMMENT ON COLUMN sys_user.real_name IS '姓名'; | |||
| COMMENT ON COLUMN sys_user.head_url IS '头像'; | |||
| COMMENT ON COLUMN sys_user.gender IS '性别 0:男 1:女 2:保密'; | |||
| COMMENT ON COLUMN sys_user.email IS '邮箱'; | |||
| COMMENT ON COLUMN sys_user.mobile IS '手机号'; | |||
| COMMENT ON COLUMN sys_user.dept_id IS '部门ID'; | |||
| COMMENT ON COLUMN sys_user.super_admin IS '超级管理员 0:否 1:是'; | |||
| COMMENT ON COLUMN sys_user.status IS '状态 0:停用 1:正常'; | |||
| COMMENT ON COLUMN sys_user.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_user.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_user.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_user.update_date IS '更新时间'; | |||
| CREATE TABLE sys_dept ( | |||
| id bigint NOT NULL, | |||
| pid bigint, | |||
| pids varchar(500), | |||
| name varchar(50), | |||
| sort int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_dept_pid on sys_dept(pid); | |||
| CREATE INDEX idx_sys_dept_idx_sort on sys_dept(sort); | |||
| COMMENT ON TABLE sys_dept IS '部门管理'; | |||
| COMMENT ON COLUMN sys_dept.id IS 'id'; | |||
| COMMENT ON COLUMN sys_dept.pid IS '上级ID'; | |||
| COMMENT ON COLUMN sys_dept.pids IS '所有上级ID,用逗号分开'; | |||
| COMMENT ON COLUMN sys_dept.name IS '部门名称'; | |||
| COMMENT ON COLUMN sys_dept.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_dept.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_dept.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_dept.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_dept.update_date IS '更新时间'; | |||
| create table sys_role | |||
| ( | |||
| id bigint NOT NULL, | |||
| name varchar(50), | |||
| remark varchar(100), | |||
| dept_id bigint, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_dept_id on sys_role(dept_id); | |||
| COMMENT ON TABLE sys_role IS '角色管理'; | |||
| COMMENT ON COLUMN sys_role.id IS 'id'; | |||
| COMMENT ON COLUMN sys_role.name IS '角色名称'; | |||
| COMMENT ON COLUMN sys_role.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_role.dept_id IS '部门ID'; | |||
| COMMENT ON COLUMN sys_role.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_role.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_role.update_date IS '更新时间'; | |||
| create table sys_menu | |||
| ( | |||
| id bigint NOT NULL, | |||
| pid bigint, | |||
| name varchar(200), | |||
| url varchar(200), | |||
| permissions varchar(500), | |||
| menu_type int, | |||
| icon varchar(50), | |||
| sort int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_menu_pid on sys_menu(pid); | |||
| CREATE INDEX idx_sys_menu_sort on sys_menu(sort); | |||
| COMMENT ON TABLE sys_menu IS '菜单管理'; | |||
| COMMENT ON COLUMN sys_menu.id IS 'id'; | |||
| COMMENT ON COLUMN sys_menu.pid IS '上级ID,一级菜单为0'; | |||
| COMMENT ON COLUMN sys_menu.name IS '名称'; | |||
| COMMENT ON COLUMN sys_menu.url IS '菜单URL'; | |||
| COMMENT ON COLUMN sys_menu.permissions IS '授权(多个用逗号分隔,如:sys:user:list,sys:user:save)'; | |||
| COMMENT ON COLUMN sys_menu.menu_type IS '类型 0:菜单 1:按钮'; | |||
| COMMENT ON COLUMN sys_menu.icon IS '菜单图标'; | |||
| COMMENT ON COLUMN sys_menu.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_menu.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_menu.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_menu.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_menu.update_date IS '更新时间'; | |||
| create table sys_role_user | |||
| ( | |||
| id bigint NOT NULL, | |||
| role_id bigint, | |||
| user_id bigint, | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_user_role_id on sys_role_user(role_id); | |||
| CREATE INDEX idx_sys_role_user_user_id on sys_role_user(user_id); | |||
| COMMENT ON TABLE sys_role_user IS '角色用户关系'; | |||
| COMMENT ON COLUMN sys_role_user.role_id IS '角色ID'; | |||
| COMMENT ON COLUMN sys_role_user.user_id IS '用户ID'; | |||
| COMMENT ON COLUMN sys_role_user.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role_user.create_date IS '创建时间'; | |||
| create table sys_role_menu | |||
| ( | |||
| id bigint NOT NULL, | |||
| role_id bigint, | |||
| menu_id bigint, | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_menu_role_id on sys_role_menu(role_id); | |||
| CREATE INDEX idx_sys_role_menu_menu_id on sys_role_menu(menu_id); | |||
| COMMENT ON TABLE sys_role_menu IS '角色菜单关系'; | |||
| COMMENT ON COLUMN sys_role_menu.role_id IS '角色ID'; | |||
| COMMENT ON COLUMN sys_role_menu.menu_id IS '菜单ID'; | |||
| COMMENT ON COLUMN sys_role_menu.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role_menu.create_date IS '创建时间'; | |||
| create table sys_role_data_scope | |||
| ( | |||
| id bigint NOT NULL, | |||
| role_id bigint, | |||
| dept_id bigint, | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_data_scope_role_id on sys_role_data_scope(role_id); | |||
| COMMENT ON TABLE sys_role_data_scope IS '角色数据权限'; | |||
| COMMENT ON COLUMN sys_role_data_scope.role_id IS '角色ID'; | |||
| COMMENT ON COLUMN sys_role_data_scope.dept_id IS '部门ID'; | |||
| COMMENT ON COLUMN sys_role_data_scope.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role_data_scope.create_date IS '创建时间'; | |||
| create table sys_params | |||
| ( | |||
| id bigint NOT NULL, | |||
| param_code varchar(32), | |||
| param_value varchar(2000), | |||
| param_type int DEFAULT 1 NOT NULL, | |||
| remark varchar(200), | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_params_param_code on sys_params(param_code); | |||
| CREATE INDEX idx_sys_params_create_date on sys_params(create_date); | |||
| COMMENT ON TABLE sys_params IS '参数管理'; | |||
| COMMENT ON COLUMN sys_params.param_code IS '参数编码'; | |||
| COMMENT ON COLUMN sys_params.param_value IS '参数值'; | |||
| COMMENT ON COLUMN sys_params.param_type IS '类型 0:系统参数 1:非系统参数'; | |||
| COMMENT ON COLUMN sys_params.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_params.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_params.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_params.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_params.update_date IS '更新时间'; | |||
| create table sys_dict_type | |||
| ( | |||
| id bigint NOT NULL, | |||
| dict_type varchar(100), | |||
| dict_name varchar(255), | |||
| remark varchar(255), | |||
| sort int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_dict_type_dict_type on sys_dict_type(dict_type); | |||
| COMMENT ON TABLE sys_dict_type IS '字典类型'; | |||
| COMMENT ON COLUMN sys_dict_type.id IS 'id'; | |||
| COMMENT ON COLUMN sys_dict_type.dict_type IS '字典类型'; | |||
| COMMENT ON COLUMN sys_dict_type.dict_name IS '字典名称'; | |||
| COMMENT ON COLUMN sys_dict_type.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_dict_type.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_dict_type.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_dict_type.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_dict_type.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_dict_type.update_date IS '更新时间'; | |||
| create table sys_dict_data | |||
| ( | |||
| id bigint NOT NULL, | |||
| dict_type_id bigint NOT NULL, | |||
| dict_label varchar(255), | |||
| dict_value varchar(255), | |||
| remark varchar(255), | |||
| sort int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_dict_data_sort on sys_dict_data(sort); | |||
| CREATE UNIQUE INDEX uk_dict_type_value on sys_dict_data(dict_type_id, dict_value); | |||
| COMMENT ON TABLE sys_dict_data IS '字典数据'; | |||
| COMMENT ON COLUMN sys_dict_data.id IS 'id'; | |||
| COMMENT ON COLUMN sys_dict_data.dict_type_id IS '字典类型ID'; | |||
| COMMENT ON COLUMN sys_dict_data.dict_label IS '字典标签'; | |||
| COMMENT ON COLUMN sys_dict_data.dict_value IS '字典值'; | |||
| COMMENT ON COLUMN sys_dict_data.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_dict_data.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_dict_data.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_dict_data.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_dict_data.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_dict_data.update_date IS '更新时间'; | |||
| create table sys_log_login | |||
| ( | |||
| id bigint NOT NULL, | |||
| operation int, | |||
| status int, | |||
| user_agent varchar(500), | |||
| ip varchar(32), | |||
| creator_name varchar(50), | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_login_status on sys_log_login(status); | |||
| CREATE INDEX idx_login_create_date on sys_log_login(create_date); | |||
| COMMENT ON TABLE sys_log_login IS '登录日志'; | |||
| COMMENT ON COLUMN sys_log_login.id IS 'id'; | |||
| COMMENT ON COLUMN sys_log_login.operation IS '用户操作 0:用户登录 1:用户退出'; | |||
| COMMENT ON COLUMN sys_log_login.status IS '状态 0:失败 1:成功 2:账号已锁定'; | |||
| COMMENT ON COLUMN sys_log_login.user_agent IS '用户代理'; | |||
| COMMENT ON COLUMN sys_log_login.ip IS '操作IP'; | |||
| COMMENT ON COLUMN sys_log_login.creator_name IS '用户名'; | |||
| COMMENT ON COLUMN sys_log_login.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_log_login.create_date IS '创建时间'; | |||
| create table sys_log_operation | |||
| ( | |||
| id bigint NOT NULL, | |||
| operation varchar(50), | |||
| request_uri varchar(200), | |||
| request_method varchar(20), | |||
| request_params text, | |||
| request_time int, | |||
| user_agent varchar(500), | |||
| ip varchar(32), | |||
| status int, | |||
| creator_name varchar(50), | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_operation_create_date on sys_log_operation(create_date); | |||
| COMMENT ON TABLE sys_log_operation IS '操作日志'; | |||
| COMMENT ON COLUMN sys_log_operation.id IS 'id'; | |||
| COMMENT ON COLUMN sys_log_operation.operation IS '用户操作'; | |||
| COMMENT ON COLUMN sys_log_operation.request_uri IS '请求URI'; | |||
| COMMENT ON COLUMN sys_log_operation.request_method IS '请求方式'; | |||
| COMMENT ON COLUMN sys_log_operation.request_params IS '请求参数'; | |||
| COMMENT ON COLUMN sys_log_operation.request_time IS '请求时长(毫秒)'; | |||
| COMMENT ON COLUMN sys_log_operation.user_agent IS '用户代理'; | |||
| COMMENT ON COLUMN sys_log_operation.ip IS '操作IP'; | |||
| COMMENT ON COLUMN sys_log_operation.status IS '状态 0:失败 1:成功'; | |||
| COMMENT ON COLUMN sys_log_operation.creator_name IS '用户名'; | |||
| COMMENT ON COLUMN sys_log_operation.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_log_operation.create_date IS '创建时间'; | |||
| create table sys_log_error | |||
| ( | |||
| id bigint NOT NULL, | |||
| request_uri varchar(200), | |||
| request_method varchar(20), | |||
| request_params text, | |||
| user_agent varchar(500), | |||
| ip varchar(32), | |||
| error_info text, | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_error_create_date on sys_log_error(create_date); | |||
| COMMENT ON TABLE sys_log_error IS '异常日志'; | |||
| COMMENT ON COLUMN sys_log_error.id IS 'id'; | |||
| COMMENT ON COLUMN sys_log_error.request_uri IS '请求URI'; | |||
| COMMENT ON COLUMN sys_log_error.request_method IS '请求方式'; | |||
| COMMENT ON COLUMN sys_log_error.request_params IS '请求参数'; | |||
| COMMENT ON COLUMN sys_log_error.user_agent IS '用户代理'; | |||
| COMMENT ON COLUMN sys_log_error.ip IS '操作IP'; | |||
| COMMENT ON COLUMN sys_log_error.error_info IS '异常信息'; | |||
| COMMENT ON COLUMN sys_log_error.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_log_error.create_date IS '创建时间'; | |||
| CREATE TABLE sys_oss ( | |||
| id bigint NOT NULL, | |||
| url varchar(200), | |||
| creator bigint, | |||
| create_date datetime, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_sys_oss_create_date on sys_oss(create_date); | |||
| COMMENT ON TABLE sys_oss IS '文件上传'; | |||
| COMMENT ON COLUMN sys_oss.id IS 'id'; | |||
| COMMENT ON COLUMN sys_oss.url IS 'URL地址'; | |||
| COMMENT ON COLUMN sys_oss.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_oss.create_date IS '创建时间'; | |||
| CREATE TABLE schedule_job ( | |||
| id bigint NOT NULL, | |||
| bean_name varchar(200), | |||
| params varchar(2000), | |||
| cron_expression varchar(100), | |||
| status int, | |||
| remark varchar(255), | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_schedule_job_create_date on schedule_job(create_date); | |||
| COMMENT ON TABLE schedule_job IS '定时任务'; | |||
| COMMENT ON COLUMN schedule_job.id IS 'id'; | |||
| COMMENT ON COLUMN schedule_job.bean_name IS 'spring bean名称'; | |||
| COMMENT ON COLUMN schedule_job.params IS '参数'; | |||
| COMMENT ON COLUMN schedule_job.cron_expression IS 'cron表达式'; | |||
| COMMENT ON COLUMN schedule_job.status IS '任务状态 0:暂停 1:正常'; | |||
| COMMENT ON COLUMN schedule_job.remark IS '备注'; | |||
| COMMENT ON COLUMN schedule_job.creator IS '创建者'; | |||
| COMMENT ON COLUMN schedule_job.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN schedule_job.updater IS '更新者'; | |||
| COMMENT ON COLUMN schedule_job.update_date IS '更新时间'; | |||
| CREATE TABLE schedule_job_log ( | |||
| id bigint NOT NULL, | |||
| job_id bigint NOT NULL, | |||
| bean_name varchar(200), | |||
| params varchar(2000), | |||
| status int, | |||
| error varchar(2000), | |||
| times int, | |||
| create_date datetime, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_job_log_job_id on schedule_job_log(job_id); | |||
| CREATE INDEX idx_job_log_create_date on schedule_job_log(create_date); | |||
| COMMENT ON TABLE schedule_job_log IS '定时任务日志'; | |||
| COMMENT ON COLUMN schedule_job_log.id IS 'id'; | |||
| COMMENT ON COLUMN schedule_job_log.bean_name IS 'spring bean名称'; | |||
| COMMENT ON COLUMN schedule_job_log.params IS '参数'; | |||
| COMMENT ON COLUMN schedule_job_log.status IS '任务状态 0:失败 1:成功'; | |||
| COMMENT ON COLUMN schedule_job_log.error IS '失败信息'; | |||
| COMMENT ON COLUMN schedule_job_log.times IS '耗时(单位:毫秒)'; | |||
| COMMENT ON COLUMN schedule_job.create_date IS '创建时间'; | |||
| CREATE TABLE sys_user_token ( | |||
| id bigint NOT NULL, | |||
| user_id bigint, | |||
| token varchar(100), | |||
| expire_date datetime, | |||
| update_date datetime, | |||
| create_date datetime, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_user_token_user_id on sys_user_token(user_id); | |||
| CREATE UNIQUE INDEX uk_sys_user_token on sys_user_token(token); | |||
| COMMENT ON TABLE sys_user_token IS '系统用户Token'; | |||
| COMMENT ON COLUMN sys_user_token.id IS 'id'; | |||
| COMMENT ON COLUMN sys_user_token.user_id IS '用户id'; | |||
| COMMENT ON COLUMN sys_user_token.token IS '用户token'; | |||
| COMMENT ON COLUMN sys_user_token.expire_date IS '过期时间'; | |||
| COMMENT ON COLUMN sys_user_token.update_date IS '更新时间'; | |||
| COMMENT ON COLUMN sys_user_token.create_date IS '创建时间'; | |||
| -- 初始数据 | |||
| INSERT INTO sys_user(id, username, password, real_name, gender, email, mobile, status, dept_id, super_admin, creator, create_date, updater, update_date) VALUES (1067246875800000001, 'admin', '$2a$10$012Kx2ba5jzqr9gLlG4MX.bnQJTD9UWqF57XDo2N3.fPtLne02u/m', '管理员', 0, 'root@renren.io', '13612345678', 1, null, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000002, 0, '权限管理', NULL, NULL, 0, 'icon-safetycertificate', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000003, 1067246875800000055, '新增', NULL, 'sys:user:save,sys:dept:list,sys:role:list', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000004, 1067246875800000055, '修改', NULL, 'sys:user:update,sys:dept:list,sys:role:list', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000005, 1067246875800000055, '删除', NULL, 'sys:user:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000006, 1067246875800000055, '导出', NULL, 'sys:user:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000007, 1067246875800000002, '角色管理', 'sys/role', NULL, 0, 'icon-team', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000008, 1067246875800000007, '查看', NULL, 'sys:role:page,sys:role:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000009, 1067246875800000007, '新增', NULL, 'sys:role:save,sys:menu:select,sys:dept:list', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000010, 1067246875800000007, '修改', NULL, 'sys:role:update,sys:menu:select,sys:dept:list', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000011, 1067246875800000007, '删除', NULL, 'sys:role:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000012, 1067246875800000002, '部门管理', 'sys/dept', NULL, 0, 'icon-apartment', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000014, 1067246875800000012, '查看', NULL, 'sys:dept:list,sys:dept:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000015, 1067246875800000012, '新增', NULL, 'sys:dept:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000016, 1067246875800000012, '修改', NULL, 'sys:dept:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000017, 1067246875800000012, '删除', NULL, 'sys:dept:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000025, 1067246875800000035, '菜单管理', 'sys/menu', NULL, 0, 'icon-unorderedlist', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000026, 1067246875800000025, '查看', NULL, 'sys:menu:list,sys:menu:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000027, 1067246875800000025, '新增', NULL, 'sys:menu:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000028, 1067246875800000025, '修改', NULL, 'sys:menu:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000029, 1067246875800000025, '删除', NULL, 'sys:menu:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000030, 1067246875800000035, '定时任务', 'job/schedule', NULL, 0, 'icon-dashboard', 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000031, 1067246875800000030, '查看', NULL, 'sys:schedule:page,sys:schedule:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000032, 1067246875800000030, '新增', NULL, 'sys:schedule:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000033, 1067246875800000030, '修改', NULL, 'sys:schedule:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000034, 1067246875800000030, '删除', NULL, 'sys:schedule:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000035, 0, '系统设置', NULL, NULL, 0, 'icon-setting', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000036, 1067246875800000030, '暂停', NULL, 'sys:schedule:pause', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000037, 1067246875800000030, '恢复', NULL, 'sys:schedule:resume', 1, NULL, 5, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000038, 1067246875800000030, '立即执行', NULL, 'sys:schedule:run', 1, NULL, 6, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000039, 1067246875800000030, '日志列表', NULL, 'sys:schedule:log', 1, NULL, 7, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000040, 1067246875800000035, '参数管理', 'sys/params', '', 0, 'icon-fileprotect', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000041, 1067246875800000035, '字典管理', 'sys/dict-type', NULL, 0, 'icon-golden-fill', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000042, 1067246875800000041, '查看', NULL, 'sys:dict:page,sys:dict:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000043, 1067246875800000041, '新增', NULL, 'sys:dict:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000044, 1067246875800000041, '修改', NULL, 'sys:dict:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000045, 1067246875800000041, '删除', NULL, 'sys:dict:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000046, 0, '日志管理', NULL, NULL, 0, 'icon-container', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000047, 1067246875800000035, '文件上传', 'oss/oss', 'sys:oss:all', 0, 'icon-upload', 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000048, 1067246875800000046, '登录日志', 'sys/log-login', 'sys:log:login', 0, 'icon-filedone', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000049, 1067246875800000046, '操作日志', 'sys/log-operation', 'sys:log:operation', 0, 'icon-solution', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000050, 1067246875800000046, '异常日志', 'sys/log-error', 'sys:log:error', 0, 'icon-file-exception', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000051, 1067246875800000053, 'SQL监控', '{{ApiUrl}}/druid/sql.html', NULL, 0, 'icon-database', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000053, 0, '系统监控', NULL, NULL, 0, 'icon-desktop', 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000055, 1067246875800000002, '用户管理', 'sys/user', NULL, 0, 'icon-user', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000056, 1067246875800000055, '查看', NULL, 'sys:user:page,sys:user:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000057, 1067246875800000040, '新增', NULL, 'sys:params:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000058, 1067246875800000040, '导出', NULL, 'sys:params:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000059, 1067246875800000040, '查看', '', 'sys:params:page,sys:params:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000060, 1067246875800000040, '修改', NULL, 'sys:params:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000061, 1067246875800000040, '删除', '', 'sys:params:delete', 1, '', 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1156748733921165314, 1067246875800000053, '接口文档', '{{ApiUrl}}/doc.html', '', 0, 'icon-file-word', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000062, 1067246875800000063, '1067246875800000066,1067246875800000063', '技术部', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000063, 1067246875800000066, '1067246875800000066', '长沙分公司', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000064, 1067246875800000066, '1067246875800000066', '上海分公司', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000065, 1067246875800000064, '1067246875800000066,1067246875800000064', '市场部', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000066, 0, '0', '人人开源集团', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000067, 1067246875800000064, '1067246875800000066,1067246875800000064', '销售部', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000068, 1067246875800000063, '1067246875800000066,1067246875800000063', '产品部', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1160061077912858625, 'gender', '性别', '', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061112075464705, 1160061077912858625, '男', '0', '', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061146967879681, 1160061077912858625, '女', '1', '', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061190127267841, 1160061077912858625, '保密', '2', '', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1225813644059140097, 'notice_type', '站内通知-类型', '', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814069634195457, 1225813644059140097, '公告', '0', '', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814107559092225, 1225813644059140097, '会议', '1', '', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814271879340034, 1225813644059140097, '其他', '2', '', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_params(id, param_code, param_value, param_type, remark, creator, create_date, updater, update_date) VALUES (1067246875800000073, 'CLOUD_STORAGE_CONFIG_KEY', '{"type":1,"qiniuDomain":"http://test.oss.renren.io","qiniuPrefix":"upload","qiniuAccessKey":"NrgMfABZxWLo5B-YYSjoE8-AZ1EISdi1Z3ubLOeZ","qiniuSecretKey":"uIwJHevMRWU0VLxFvgy0tAcOdGqasdtVlJkdy6vV","qiniuBucketName":"renren-oss","aliyunDomain":"","aliyunPrefix":"","aliyunEndPoint":"","aliyunAccessKeyId":"","aliyunAccessKeySecret":"","aliyunBucketName":"","qcloudDomain":"","qcloudPrefix":"","qcloudSecretId":"","qcloudSecretKey":"","qcloudBucketName":""}', '0', '云存储配置信息', 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO schedule_job (id, bean_name, params, cron_expression, status, remark, creator, create_date, updater, update_date) VALUES (1067246875800000076, 'testTask', 'renren', '0 0/30 * * * ?', 0, '有参测试,多个参数使用json', 1067246875800000001, now(), 1067246875800000001, now()); | |||
| -- quartz自带表结构 | |||
| DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; | |||
| DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; | |||
| DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; | |||
| DROP TABLE IF EXISTS QRTZ_LOCKS; | |||
| DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; | |||
| DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; | |||
| DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; | |||
| DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; | |||
| DROP TABLE IF EXISTS QRTZ_TRIGGERS; | |||
| DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; | |||
| DROP TABLE IF EXISTS QRTZ_CALENDARS; | |||
| create table QRTZ_JOB_DETAILS ( | |||
| sched_name varchar(120) not null, | |||
| job_name varchar(200) not null, | |||
| job_group varchar(200) not null, | |||
| description varchar(250) null, | |||
| job_class_name varchar(250) not null, | |||
| is_durable varchar(1) not null, | |||
| is_nonconcurrent varchar(1) not null, | |||
| is_update_data varchar(1) not null, | |||
| requests_recovery varchar(1) not null, | |||
| job_data blob null, | |||
| primary key (sched_name, job_name, job_group) | |||
| ); | |||
| create table QRTZ_TRIGGERS ( | |||
| sched_name varchar(120) not null, | |||
| trigger_name varchar(200) not null, | |||
| trigger_group varchar(200) not null, | |||
| job_name varchar(200) not null, | |||
| job_group varchar(200) not null, | |||
| description varchar(250) null, | |||
| next_fire_time bigint null, | |||
| prev_fire_time bigint null, | |||
| priority int null, | |||
| trigger_state varchar(16) not null, | |||
| trigger_type varchar(8) not null, | |||
| start_time bigint not null, | |||
| end_time bigint null, | |||
| calendar_name varchar(200) null, | |||
| misfire_instr int null, | |||
| job_data blob null, | |||
| primary key (sched_name, trigger_name, trigger_group), | |||
| foreign key (sched_name, job_name, job_group) | |||
| references QRTZ_JOB_DETAILS(sched_name, job_name, job_group) | |||
| ); | |||
| create table QRTZ_SIMPLE_TRIGGERS ( | |||
| sched_name varchar(120) not null, | |||
| trigger_name varchar(200) not null, | |||
| trigger_group varchar(200) not null, | |||
| repeat_count bigint not null, | |||
| repeat_interval bigint not null, | |||
| times_triggered bigint not null, | |||
| primary key (sched_name, trigger_name, trigger_group), | |||
| foreign key (sched_name, trigger_name, trigger_group) | |||
| references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) | |||
| ); | |||
| create table QRTZ_CRON_TRIGGERS ( | |||
| sched_name varchar(120) not null, | |||
| trigger_name varchar(200) not null, | |||
| trigger_group varchar(200) not null, | |||
| cron_expression varchar(200) not null, | |||
| time_zone_id varchar(80), | |||
| primary key (sched_name, trigger_name, trigger_group), | |||
| foreign key (sched_name, trigger_name, trigger_group) | |||
| references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) | |||
| ); | |||
| create table QRTZ_BLOB_TRIGGERS ( | |||
| sched_name varchar(120) not null, | |||
| trigger_name varchar(200) not null, | |||
| trigger_group varchar(200) not null, | |||
| blob_data blob null, | |||
| primary key (sched_name, trigger_name, trigger_group), | |||
| foreign key (sched_name, trigger_name, trigger_group) | |||
| references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) | |||
| ); | |||
| create table QRTZ_CALENDARS ( | |||
| sched_name varchar(120) not null, | |||
| calendar_name varchar(200) not null, | |||
| calendar blob not null, | |||
| primary key (sched_name, calendar_name) | |||
| ); | |||
| create table QRTZ_PAUSED_TRIGGER_GRPS ( | |||
| sched_name varchar(120) not null, | |||
| trigger_group varchar(200) not null, | |||
| primary key (sched_name, trigger_group) | |||
| ); | |||
| create table QRTZ_FIRED_TRIGGERS ( | |||
| sched_name varchar(120) not null, | |||
| entry_id varchar(95) not null, | |||
| trigger_name varchar(200) not null, | |||
| trigger_group varchar(200) not null, | |||
| instance_name varchar(200) not null, | |||
| fired_time bigint not null, | |||
| sched_time bigint not null, | |||
| priority int not null, | |||
| state varchar(16) not null, | |||
| job_name varchar(200) null, | |||
| job_group varchar(200) null, | |||
| is_nonconcurrent varchar(1) null, | |||
| requests_recovery varchar(1) null, | |||
| primary key (sched_name, entry_id) | |||
| ); | |||
| create table QRTZ_SCHEDULER_STATE ( | |||
| sched_name varchar(120) not null, | |||
| instance_name varchar(200) not null, | |||
| last_checkin_time bigint not null, | |||
| checkin_interval bigint not null, | |||
| primary key (sched_name, instance_name) | |||
| ); | |||
| create table QRTZ_LOCKS ( | |||
| sched_name varchar(120) not null, | |||
| lock_name varchar(40) not null, | |||
| primary key (sched_name, lock_name) | |||
| ); | |||
| create table QRTZ_SIMPROP_TRIGGERS ( | |||
| sched_name varchar(120) not null, | |||
| trigger_name varchar(200) not null, | |||
| trigger_group varchar(200) not null, | |||
| str_prop_1 varchar(512) null, | |||
| str_prop_2 varchar(512) null, | |||
| str_prop_3 varchar(512) null, | |||
| int_prop_1 int null, | |||
| int_prop_2 int null, | |||
| long_prop_1 bigint null, | |||
| long_prop_2 bigint null, | |||
| dec_prop_1 numeric(13,4) null, | |||
| dec_prop_2 numeric(13,4) null, | |||
| bool_prop_1 varchar(1) null, | |||
| bool_prop_2 varchar(1) null, | |||
| primary key (sched_name, trigger_name, trigger_group), | |||
| foreign key (sched_name, trigger_name, trigger_group) | |||
| references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) | |||
| ); | |||
| @@ -0,0 +1,504 @@ | |||
| -- 系统用户 | |||
| CREATE TABLE sys_user ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| username varchar(50) NOT NULL COMMENT '用户名', | |||
| password varchar(100) COMMENT '密码', | |||
| real_name varchar(50) COMMENT '姓名', | |||
| head_url varchar(200) COMMENT '头像', | |||
| gender tinyint unsigned COMMENT '性别 0:男 1:女 2:保密', | |||
| email varchar(100) COMMENT '邮箱', | |||
| mobile varchar(100) COMMENT '手机号', | |||
| dept_id bigint COMMENT '部门ID', | |||
| super_admin tinyint unsigned COMMENT '超级管理员 0:否 1:是', | |||
| status tinyint COMMENT '状态 0:停用 1:正常', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| updater bigint COMMENT '更新者', | |||
| update_date datetime COMMENT '更新时间', | |||
| primary key (id), | |||
| unique key uk_username (username), | |||
| key idx_create_date (create_date) | |||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户'; | |||
| -- 部门 | |||
| CREATE TABLE sys_dept ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| pid bigint COMMENT '上级ID', | |||
| pids varchar(500) COMMENT '所有上级ID,用逗号分开', | |||
| name varchar(50) COMMENT '部门名称', | |||
| sort int unsigned COMMENT '排序', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| updater bigint COMMENT '更新者', | |||
| update_date datetime COMMENT '更新时间', | |||
| primary key (id), | |||
| key idx_pid (pid), | |||
| key idx_sort (sort) | |||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门管理'; | |||
| -- 角色管理 | |||
| create table sys_role | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| name varchar(50) COMMENT '角色名称', | |||
| remark varchar(100) COMMENT '备注', | |||
| dept_id bigint COMMENT '部门ID', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| updater bigint COMMENT '更新者', | |||
| update_date datetime COMMENT '更新时间', | |||
| primary key (id), | |||
| key idx_dept_id (dept_id) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='角色管理'; | |||
| -- 菜单管理 | |||
| create table sys_menu | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| pid bigint COMMENT '上级ID,一级菜单为0', | |||
| name varchar(200) COMMENT '名称', | |||
| url varchar(200) COMMENT '菜单URL', | |||
| permissions varchar(500) COMMENT '授权(多个用逗号分隔,如:sys:user:list,sys:user:save)', | |||
| menu_type tinyint unsigned COMMENT '类型 0:菜单 1:按钮', | |||
| icon varchar(50) COMMENT '菜单图标', | |||
| sort int COMMENT '排序', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| updater bigint COMMENT '更新者', | |||
| update_date datetime COMMENT '更新时间', | |||
| primary key (id), | |||
| key idx_pid (pid), | |||
| key idx_sort (sort) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='菜单管理'; | |||
| -- 角色用户关系 | |||
| create table sys_role_user | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| role_id bigint COMMENT '角色ID', | |||
| user_id bigint COMMENT '用户ID', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| primary key (id), | |||
| key idx_role_id (role_id), | |||
| key idx_user_id (user_id) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='角色用户关系'; | |||
| -- 角色菜单关系 | |||
| create table sys_role_menu | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| role_id bigint COMMENT '角色ID', | |||
| menu_id bigint COMMENT '菜单ID', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| primary key (id), | |||
| key idx_role_id (role_id), | |||
| key idx_menu_id (menu_id) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='角色菜单关系'; | |||
| -- 角色数据权限 | |||
| create table sys_role_data_scope | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| role_id bigint COMMENT '角色ID', | |||
| dept_id bigint COMMENT '部门ID', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| primary key (id), | |||
| key idx_role_id (role_id) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='角色数据权限'; | |||
| -- 参数管理 | |||
| create table sys_params | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| param_code varchar(32) COMMENT '参数编码', | |||
| param_value varchar(2000) COMMENT '参数值', | |||
| param_type tinyint unsigned default 1 COMMENT '类型 0:系统参数 1:非系统参数', | |||
| remark varchar(200) COMMENT '备注', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| updater bigint COMMENT '更新者', | |||
| update_date datetime COMMENT '更新时间', | |||
| primary key (id), | |||
| unique key uk_param_code (param_code), | |||
| key idx_create_date (create_date) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='参数管理'; | |||
| -- 字典类型 | |||
| create table sys_dict_type | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| dict_type varchar(100) NOT NULL COMMENT '字典类型', | |||
| dict_name varchar(255) NOT NULL COMMENT '字典名称', | |||
| remark varchar(255) COMMENT '备注', | |||
| sort int unsigned COMMENT '排序', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| updater bigint COMMENT '更新者', | |||
| update_date datetime COMMENT '更新时间', | |||
| primary key (id), | |||
| UNIQUE KEY(dict_type) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='字典类型'; | |||
| -- 字典数据 | |||
| create table sys_dict_data | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| dict_type_id bigint NOT NULL COMMENT '字典类型ID', | |||
| dict_label varchar(255) NOT NULL COMMENT '字典标签', | |||
| dict_value varchar(255) COMMENT '字典值', | |||
| remark varchar(255) COMMENT '备注', | |||
| sort int unsigned COMMENT '排序', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| updater bigint COMMENT '更新者', | |||
| update_date datetime COMMENT '更新时间', | |||
| primary key (id), | |||
| unique key uk_dict_type_value (dict_type_id, dict_value), | |||
| key idx_sort (sort) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='字典数据'; | |||
| -- 登录日志 | |||
| create table sys_log_login | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| operation tinyint unsigned COMMENT '用户操作 0:用户登录 1:用户退出', | |||
| status tinyint unsigned NOT NULL COMMENT '状态 0:失败 1:成功 2:账号已锁定', | |||
| user_agent varchar(500) COMMENT '用户代理', | |||
| ip varchar(32) COMMENT '操作IP', | |||
| creator_name varchar(50) COMMENT '用户名', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| primary key (id), | |||
| key idx_status (status), | |||
| key idx_create_date (create_date) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='登录日志'; | |||
| -- 操作日志 | |||
| create table sys_log_operation | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| operation varchar(50) COMMENT '用户操作', | |||
| request_uri varchar(200) COMMENT '请求URI', | |||
| request_method varchar(20) COMMENT '请求方式', | |||
| request_params text COMMENT '请求参数', | |||
| request_time int unsigned NOT NULL COMMENT '请求时长(毫秒)', | |||
| user_agent varchar(500) COMMENT '用户代理', | |||
| ip varchar(32) COMMENT '操作IP', | |||
| status tinyint unsigned NOT NULL COMMENT '状态 0:失败 1:成功', | |||
| creator_name varchar(50) COMMENT '用户名', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| primary key (id), | |||
| key idx_create_date (create_date) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='操作日志'; | |||
| -- 异常日志 | |||
| create table sys_log_error | |||
| ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| request_uri varchar(200) COMMENT '请求URI', | |||
| request_method varchar(20) COMMENT '请求方式', | |||
| request_params text COMMENT '请求参数', | |||
| user_agent varchar(500) COMMENT '用户代理', | |||
| ip varchar(32) COMMENT '操作IP', | |||
| error_info text COMMENT '异常信息', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| primary key (id), | |||
| key idx_create_date (create_date) | |||
| )ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='异常日志'; | |||
| -- 文件上传 | |||
| CREATE TABLE sys_oss ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| url varchar(200) COMMENT 'URL地址', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| PRIMARY KEY (id), | |||
| key idx_create_date (create_date) | |||
| ) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='文件上传'; | |||
| -- 定时任务 | |||
| CREATE TABLE schedule_job ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| bean_name varchar(200) DEFAULT NULL COMMENT 'spring bean名称', | |||
| params varchar(2000) DEFAULT NULL COMMENT '参数', | |||
| cron_expression varchar(100) DEFAULT NULL COMMENT 'cron表达式', | |||
| status tinyint unsigned COMMENT '任务状态 0:暂停 1:正常', | |||
| remark varchar(255) DEFAULT NULL COMMENT '备注', | |||
| creator bigint COMMENT '创建者', | |||
| create_date datetime COMMENT '创建时间', | |||
| updater bigint COMMENT '更新者', | |||
| update_date datetime COMMENT '更新时间', | |||
| PRIMARY KEY (id), | |||
| key idx_create_date (create_date) | |||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定时任务'; | |||
| -- 定时任务日志 | |||
| CREATE TABLE schedule_job_log ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| job_id bigint NOT NULL COMMENT '任务id', | |||
| bean_name varchar(200) DEFAULT NULL COMMENT 'spring bean名称', | |||
| params varchar(2000) DEFAULT NULL COMMENT '参数', | |||
| status tinyint unsigned NOT NULL COMMENT '任务状态 0:失败 1:成功', | |||
| error varchar(2000) DEFAULT NULL COMMENT '失败信息', | |||
| times int NOT NULL COMMENT '耗时(单位:毫秒)', | |||
| create_date datetime COMMENT '创建时间', | |||
| PRIMARY KEY (id), | |||
| key idx_job_id (job_id), | |||
| key idx_create_date (create_date) | |||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='定时任务日志'; | |||
| -- 系统用户Token | |||
| CREATE TABLE sys_user_token ( | |||
| id bigint NOT NULL COMMENT 'id', | |||
| user_id bigint NOT NULL COMMENT '用户id', | |||
| token varchar(100) NOT NULL COMMENT '用户token', | |||
| expire_date datetime COMMENT '过期时间', | |||
| update_date datetime COMMENT '更新时间', | |||
| create_date datetime COMMENT '创建时间', | |||
| PRIMARY KEY (id), | |||
| UNIQUE KEY user_id (user_id), | |||
| UNIQUE KEY token (token) | |||
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户Token'; | |||
| -- 初始数据 | |||
| INSERT INTO sys_user(id, username, password, real_name, gender, email, mobile, status, dept_id, super_admin, creator, create_date, updater, update_date) VALUES (1067246875800000001, 'admin', '$2a$10$012Kx2ba5jzqr9gLlG4MX.bnQJTD9UWqF57XDo2N3.fPtLne02u/m', '管理员', 0, 'root@renren.io', '13612345678', 1, null, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000002, 0, '权限管理', NULL, NULL, 0, 'icon-safetycertificate', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000003, 1067246875800000055, '新增', NULL, 'sys:user:save,sys:dept:list,sys:role:list', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000004, 1067246875800000055, '修改', NULL, 'sys:user:update,sys:dept:list,sys:role:list', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000005, 1067246875800000055, '删除', NULL, 'sys:user:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000006, 1067246875800000055, '导出', NULL, 'sys:user:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000007, 1067246875800000002, '角色管理', 'sys/role', NULL, 0, 'icon-team', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000008, 1067246875800000007, '查看', NULL, 'sys:role:page,sys:role:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000009, 1067246875800000007, '新增', NULL, 'sys:role:save,sys:menu:select,sys:dept:list', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000010, 1067246875800000007, '修改', NULL, 'sys:role:update,sys:menu:select,sys:dept:list', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000011, 1067246875800000007, '删除', NULL, 'sys:role:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000012, 1067246875800000002, '部门管理', 'sys/dept', NULL, 0, 'icon-apartment', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000014, 1067246875800000012, '查看', NULL, 'sys:dept:list,sys:dept:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000015, 1067246875800000012, '新增', NULL, 'sys:dept:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000016, 1067246875800000012, '修改', NULL, 'sys:dept:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000017, 1067246875800000012, '删除', NULL, 'sys:dept:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000025, 1067246875800000035, '菜单管理', 'sys/menu', NULL, 0, 'icon-unorderedlist', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000026, 1067246875800000025, '查看', NULL, 'sys:menu:list,sys:menu:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000027, 1067246875800000025, '新增', NULL, 'sys:menu:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000028, 1067246875800000025, '修改', NULL, 'sys:menu:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000029, 1067246875800000025, '删除', NULL, 'sys:menu:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000030, 1067246875800000035, '定时任务', 'job/schedule', NULL, 0, 'icon-dashboard', 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000031, 1067246875800000030, '查看', NULL, 'sys:schedule:page,sys:schedule:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000032, 1067246875800000030, '新增', NULL, 'sys:schedule:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000033, 1067246875800000030, '修改', NULL, 'sys:schedule:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000034, 1067246875800000030, '删除', NULL, 'sys:schedule:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000035, 0, '系统设置', NULL, NULL, 0, 'icon-setting', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000036, 1067246875800000030, '暂停', NULL, 'sys:schedule:pause', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000037, 1067246875800000030, '恢复', NULL, 'sys:schedule:resume', 1, NULL, 5, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000038, 1067246875800000030, '立即执行', NULL, 'sys:schedule:run', 1, NULL, 6, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000039, 1067246875800000030, '日志列表', NULL, 'sys:schedule:log', 1, NULL, 7, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000040, 1067246875800000035, '参数管理', 'sys/params', '', 0, 'icon-fileprotect', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000041, 1067246875800000035, '字典管理', 'sys/dict-type', NULL, 0, 'icon-golden-fill', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000042, 1067246875800000041, '查看', NULL, 'sys:dict:page,sys:dict:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000043, 1067246875800000041, '新增', NULL, 'sys:dict:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000044, 1067246875800000041, '修改', NULL, 'sys:dict:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000045, 1067246875800000041, '删除', NULL, 'sys:dict:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000046, 0, '日志管理', NULL, NULL, 0, 'icon-container', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000047, 1067246875800000035, '文件上传', 'oss/oss', 'sys:oss:all', 0, 'icon-upload', 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000048, 1067246875800000046, '登录日志', 'sys/log-login', 'sys:log:login', 0, 'icon-filedone', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000049, 1067246875800000046, '操作日志', 'sys/log-operation', 'sys:log:operation', 0, 'icon-solution', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000050, 1067246875800000046, '异常日志', 'sys/log-error', 'sys:log:error', 0, 'icon-file-exception', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000051, 1067246875800000053, 'SQL监控', '{{ApiUrl}}/druid/sql.html', NULL, 0, 'icon-database', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000053, 0, '系统监控', NULL, NULL, 0, 'icon-desktop', 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000055, 1067246875800000002, '用户管理', 'sys/user', NULL, 0, 'icon-user', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000056, 1067246875800000055, '查看', NULL, 'sys:user:page,sys:user:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000057, 1067246875800000040, '新增', NULL, 'sys:params:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000058, 1067246875800000040, '导出', NULL, 'sys:params:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000059, 1067246875800000040, '查看', '', 'sys:params:page,sys:params:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000060, 1067246875800000040, '修改', NULL, 'sys:params:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000061, 1067246875800000040, '删除', '', 'sys:params:delete', 1, '', 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1156748733921165314, 1067246875800000053, '接口文档', '{{ApiUrl}}/doc.html', '', 0, 'icon-file-word', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000062, 1067246875800000063, '1067246875800000066,1067246875800000063', '技术部', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000063, 1067246875800000066, '1067246875800000066', '长沙分公司', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000064, 1067246875800000066, '1067246875800000066', '上海分公司', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000065, 1067246875800000064, '1067246875800000066,1067246875800000064', '市场部', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000066, 0, '0', '人人开源集团', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000067, 1067246875800000064, '1067246875800000066,1067246875800000064', '销售部', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000068, 1067246875800000063, '1067246875800000066,1067246875800000063', '产品部', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1160061077912858625, 'gender', '性别', '', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061112075464705, 1160061077912858625, '男', '0', '', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061146967879681, 1160061077912858625, '女', '1', '', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061190127267841, 1160061077912858625, '保密', '2', '', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1225813644059140097, 'notice_type', '站内通知-类型', '', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814069634195457, 1225813644059140097, '公告', '0', '', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814107559092225, 1225813644059140097, '会议', '1', '', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814271879340034, 1225813644059140097, '其他', '2', '', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_params(id, param_code, param_value, param_type, remark, creator, create_date, updater, update_date) VALUES (1067246875800000073, 'CLOUD_STORAGE_CONFIG_KEY', '{"type":1,"qiniuDomain":"http://test.oss.renren.io","qiniuPrefix":"upload","qiniuAccessKey":"NrgMfABZxWLo5B-YYSjoE8-AZ1EISdi1Z3ubLOeZ","qiniuSecretKey":"uIwJHevMRWU0VLxFvgy0tAcOdGqasdtVlJkdy6vV","qiniuBucketName":"renren-oss","aliyunDomain":"","aliyunPrefix":"","aliyunEndPoint":"","aliyunAccessKeyId":"","aliyunAccessKeySecret":"","aliyunBucketName":"","qcloudDomain":"","qcloudPrefix":"","qcloudSecretId":"","qcloudSecretKey":"","qcloudBucketName":""}', '0', '云存储配置信息', 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO schedule_job (id, bean_name, params, cron_expression, status, remark, creator, create_date, updater, update_date) VALUES (1067246875800000076, 'testTask', 'renren', '0 0/30 * * * ?', 0, '有参测试,多个参数使用json', 1067246875800000001, now(), 1067246875800000001, now()); | |||
| -- quartz自带表结构 | |||
| CREATE TABLE QRTZ_JOB_DETAILS( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| JOB_NAME VARCHAR(200) NOT NULL, | |||
| JOB_GROUP VARCHAR(200) NOT NULL, | |||
| DESCRIPTION VARCHAR(250) NULL, | |||
| JOB_CLASS_NAME VARCHAR(250) NOT NULL, | |||
| IS_DURABLE VARCHAR(1) NOT NULL, | |||
| IS_NONCONCURRENT VARCHAR(1) NOT NULL, | |||
| IS_UPDATE_DATA VARCHAR(1) NOT NULL, | |||
| REQUESTS_RECOVERY VARCHAR(1) NOT NULL, | |||
| JOB_DATA BLOB NULL, | |||
| PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_TRIGGERS ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| JOB_NAME VARCHAR(200) NOT NULL, | |||
| JOB_GROUP VARCHAR(200) NOT NULL, | |||
| DESCRIPTION VARCHAR(250) NULL, | |||
| NEXT_FIRE_TIME BIGINT(13) NULL, | |||
| PREV_FIRE_TIME BIGINT(13) NULL, | |||
| PRIORITY INTEGER NULL, | |||
| TRIGGER_STATE VARCHAR(16) NOT NULL, | |||
| TRIGGER_TYPE VARCHAR(8) NOT NULL, | |||
| START_TIME BIGINT(13) NOT NULL, | |||
| END_TIME BIGINT(13) NULL, | |||
| CALENDAR_NAME VARCHAR(200) NULL, | |||
| MISFIRE_INSTR SMALLINT(2) NULL, | |||
| JOB_DATA BLOB NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) | |||
| REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| REPEAT_COUNT BIGINT(7) NOT NULL, | |||
| REPEAT_INTERVAL BIGINT(12) NOT NULL, | |||
| TIMES_TRIGGERED BIGINT(10) NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_CRON_TRIGGERS ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| CRON_EXPRESSION VARCHAR(120) NOT NULL, | |||
| TIME_ZONE_ID VARCHAR(80), | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_SIMPROP_TRIGGERS | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| STR_PROP_1 VARCHAR(512) NULL, | |||
| STR_PROP_2 VARCHAR(512) NULL, | |||
| STR_PROP_3 VARCHAR(512) NULL, | |||
| INT_PROP_1 INT NULL, | |||
| INT_PROP_2 INT NULL, | |||
| LONG_PROP_1 BIGINT NULL, | |||
| LONG_PROP_2 BIGINT NULL, | |||
| DEC_PROP_1 NUMERIC(13,4) NULL, | |||
| DEC_PROP_2 NUMERIC(13,4) NULL, | |||
| BOOL_PROP_1 VARCHAR(1) NULL, | |||
| BOOL_PROP_2 VARCHAR(1) NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_BLOB_TRIGGERS ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| BLOB_DATA BLOB NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_CALENDARS ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| CALENDAR_NAME VARCHAR(200) NOT NULL, | |||
| CALENDAR BLOB NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_FIRED_TRIGGERS ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| ENTRY_ID VARCHAR(95) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| INSTANCE_NAME VARCHAR(200) NOT NULL, | |||
| FIRED_TIME BIGINT(13) NOT NULL, | |||
| SCHED_TIME BIGINT(13) NOT NULL, | |||
| PRIORITY INTEGER NOT NULL, | |||
| STATE VARCHAR(16) NOT NULL, | |||
| JOB_NAME VARCHAR(200) NULL, | |||
| JOB_GROUP VARCHAR(200) NULL, | |||
| IS_NONCONCURRENT VARCHAR(1) NULL, | |||
| REQUESTS_RECOVERY VARCHAR(1) NULL, | |||
| PRIMARY KEY (SCHED_NAME,ENTRY_ID)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_SCHEDULER_STATE ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| INSTANCE_NAME VARCHAR(200) NOT NULL, | |||
| LAST_CHECKIN_TIME BIGINT(13) NOT NULL, | |||
| CHECKIN_INTERVAL BIGINT(13) NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE TABLE QRTZ_LOCKS ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| LOCK_NAME VARCHAR(40) NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,LOCK_NAME)) | |||
| ENGINE=InnoDB DEFAULT CHARSET=utf8; | |||
| CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY); | |||
| CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP); | |||
| CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); | |||
| CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP); | |||
| CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME); | |||
| CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); | |||
| CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE); | |||
| CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); | |||
| CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); | |||
| CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME); | |||
| CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); | |||
| CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); | |||
| CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); | |||
| CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); | |||
| CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME); | |||
| CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); | |||
| CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); | |||
| CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP); | |||
| CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); | |||
| CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); | |||
| @@ -0,0 +1,684 @@ | |||
| CREATE TABLE sys_user ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| username varchar2(50) NOT NULL, | |||
| password varchar2(100), | |||
| real_name varchar2(50), | |||
| head_url varchar2(200), | |||
| gender NUMBER(2, 0), | |||
| email varchar2(100), | |||
| mobile varchar2(100), | |||
| dept_id NUMBER(20, 0), | |||
| super_admin NUMBER(2, 0), | |||
| status NUMBER(2, 0), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| updater NUMBER(20, 0), | |||
| update_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_user_username on sys_user(username); | |||
| CREATE INDEX idx_sys_user_create_date on sys_user(create_date); | |||
| COMMENT ON TABLE sys_user IS '用户管理'; | |||
| COMMENT ON COLUMN sys_user.id IS 'id'; | |||
| COMMENT ON COLUMN sys_user.username IS '用户名'; | |||
| COMMENT ON COLUMN sys_user.password IS '密码'; | |||
| COMMENT ON COLUMN sys_user.real_name IS '姓名'; | |||
| COMMENT ON COLUMN sys_user.head_url IS '头像'; | |||
| COMMENT ON COLUMN sys_user.gender IS '性别 0:男 1:女 2:保密'; | |||
| COMMENT ON COLUMN sys_user.email IS '邮箱'; | |||
| COMMENT ON COLUMN sys_user.mobile IS '手机号'; | |||
| COMMENT ON COLUMN sys_user.dept_id IS '部门ID'; | |||
| COMMENT ON COLUMN sys_user.super_admin IS '超级管理员 0:否 1:是'; | |||
| COMMENT ON COLUMN sys_user.status IS '状态 0:停用 1:正常'; | |||
| COMMENT ON COLUMN sys_user.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_user.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_user.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_user.update_date IS '更新时间'; | |||
| CREATE TABLE sys_dept ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| pid NUMBER(20, 0), | |||
| pids varchar2(500), | |||
| name varchar2(50), | |||
| sort NUMBER(10, 0), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| updater NUMBER(20, 0), | |||
| update_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_dept_pid on sys_dept(pid); | |||
| CREATE INDEX idx_sys_dept_idx_sort on sys_dept(sort); | |||
| COMMENT ON TABLE sys_dept IS '部门管理'; | |||
| COMMENT ON COLUMN sys_dept.id IS 'id'; | |||
| COMMENT ON COLUMN sys_dept.pid IS '上级ID'; | |||
| COMMENT ON COLUMN sys_dept.pids IS '所有上级ID,用逗号分开'; | |||
| COMMENT ON COLUMN sys_dept.name IS '部门名称'; | |||
| COMMENT ON COLUMN sys_dept.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_dept.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_dept.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_dept.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_dept.update_date IS '更新时间'; | |||
| create table sys_role | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| name varchar2(32), | |||
| remark varchar2(100), | |||
| dept_id NUMBER(20, 0), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| updater NUMBER(20, 0), | |||
| update_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_dept_id on sys_role(dept_id); | |||
| COMMENT ON TABLE sys_role IS '角色管理'; | |||
| COMMENT ON COLUMN sys_role.id IS 'id'; | |||
| COMMENT ON COLUMN sys_role.name IS '角色名称'; | |||
| COMMENT ON COLUMN sys_role.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_role.dept_id IS '部门ID'; | |||
| COMMENT ON COLUMN sys_role.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_role.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_role.update_date IS '更新时间'; | |||
| create table sys_menu | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| pid NUMBER(20, 0), | |||
| name varchar2(200), | |||
| url varchar2(200), | |||
| permissions varchar2(500), | |||
| menu_type NUMBER(2, 0), | |||
| icon varchar2(50), | |||
| sort NUMBER(10, 0), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| updater NUMBER(20, 0), | |||
| update_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_menu_pid on sys_menu(pid); | |||
| CREATE INDEX idx_sys_menu_sort on sys_menu(sort); | |||
| COMMENT ON TABLE sys_menu IS '菜单管理'; | |||
| COMMENT ON COLUMN sys_menu.id IS 'id'; | |||
| COMMENT ON COLUMN sys_menu.pid IS '上级ID,一级菜单为0'; | |||
| COMMENT ON COLUMN sys_menu.name IS '名称'; | |||
| COMMENT ON COLUMN sys_menu.url IS '菜单URL'; | |||
| COMMENT ON COLUMN sys_menu.permissions IS '授权(多个用逗号分隔,如:sys:user:list,sys:user:save)'; | |||
| COMMENT ON COLUMN sys_menu.menu_type IS '类型 0:菜单 1:按钮'; | |||
| COMMENT ON COLUMN sys_menu.icon IS '菜单图标'; | |||
| COMMENT ON COLUMN sys_menu.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_menu.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_menu.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_menu.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_menu.update_date IS '更新时间'; | |||
| create table sys_role_user | |||
| ( | |||
| id varchar2(32) NOT NULL, | |||
| role_id varchar2(32), | |||
| user_id varchar2(32), | |||
| creator varchar2(32), | |||
| create_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_user_role_id on sys_role_user(role_id); | |||
| CREATE INDEX idx_sys_role_user_user_id on sys_role_user(user_id); | |||
| COMMENT ON TABLE sys_role_user IS '角色用户关系'; | |||
| COMMENT ON COLUMN sys_role_user.role_id IS '角色ID'; | |||
| COMMENT ON COLUMN sys_role_user.user_id IS '用户ID'; | |||
| COMMENT ON COLUMN sys_role_user.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role_user.create_date IS '创建时间'; | |||
| create table sys_role_menu | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| role_id NUMBER(20, 0), | |||
| menu_id NUMBER(20, 0), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_menu_role_id on sys_role_menu(role_id); | |||
| CREATE INDEX idx_sys_role_menu_menu_id on sys_role_menu(menu_id); | |||
| COMMENT ON TABLE sys_role_menu IS '角色菜单关系'; | |||
| COMMENT ON COLUMN sys_role_menu.role_id IS '角色ID'; | |||
| COMMENT ON COLUMN sys_role_menu.menu_id IS '菜单ID'; | |||
| COMMENT ON COLUMN sys_role_menu.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role_menu.create_date IS '创建时间'; | |||
| create table sys_role_data_scope | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| role_id NUMBER(20, 0), | |||
| dept_id NUMBER(20, 0), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_data_scope_role_id on sys_role_data_scope(role_id); | |||
| COMMENT ON TABLE sys_role_data_scope IS '角色数据权限'; | |||
| COMMENT ON COLUMN sys_role_data_scope.role_id IS '角色ID'; | |||
| COMMENT ON COLUMN sys_role_data_scope.dept_id IS '部门ID'; | |||
| COMMENT ON COLUMN sys_role_data_scope.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role_data_scope.create_date IS '创建时间'; | |||
| create table sys_params | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| param_code varchar2(32), | |||
| param_value varchar2(2000), | |||
| param_type NUMBER(2, 0) DEFAULT 1 NOT NULL, | |||
| remark varchar2(200), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| updater NUMBER(20, 0), | |||
| update_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_params_param_code on sys_params(param_code); | |||
| CREATE INDEX idx_sys_params_create_date on sys_params(create_date); | |||
| COMMENT ON TABLE sys_params IS '参数管理'; | |||
| COMMENT ON COLUMN sys_params.param_code IS '参数编码'; | |||
| COMMENT ON COLUMN sys_params.param_value IS '参数值'; | |||
| COMMENT ON COLUMN sys_params.param_type IS '类型 0:系统参数 1:非系统参数'; | |||
| COMMENT ON COLUMN sys_params.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_params.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_params.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_params.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_params.update_date IS '更新时间'; | |||
| create table sys_dict_type | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| dict_type varchar2(100), | |||
| dict_name varchar2(255), | |||
| remark varchar2(255), | |||
| sort NUMBER(10, 0), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| updater NUMBER(20, 0), | |||
| update_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_dict_type_dict_type on sys_dict_type(dict_type); | |||
| COMMENT ON TABLE sys_dict_type IS '字典类型'; | |||
| COMMENT ON COLUMN sys_dict_type.id IS 'id'; | |||
| COMMENT ON COLUMN sys_dict_type.dict_type IS '字典类型'; | |||
| COMMENT ON COLUMN sys_dict_type.dict_name IS '字典名称'; | |||
| COMMENT ON COLUMN sys_dict_type.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_dict_type.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_dict_type.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_dict_type.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_dict_type.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_dict_type.update_date IS '更新时间'; | |||
| create table sys_dict_data | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| dict_type_id NUMBER(20, 0) NOT NULL, | |||
| dict_label varchar2(255), | |||
| dict_value varchar2(255), | |||
| remark varchar2(255), | |||
| sort NUMBER(10, 0), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| updater NUMBER(20, 0), | |||
| update_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_dict_data_sort on sys_dict_data(sort); | |||
| CREATE UNIQUE INDEX uk_dict_type_value on sys_dict_data(dict_type_id, dict_value); | |||
| COMMENT ON TABLE sys_dict_data IS '字典数据'; | |||
| COMMENT ON COLUMN sys_dict_data.id IS 'id'; | |||
| COMMENT ON COLUMN sys_dict_data.dict_type_id IS '字典类型ID'; | |||
| COMMENT ON COLUMN sys_dict_data.dict_label IS '字典标签'; | |||
| COMMENT ON COLUMN sys_dict_data.dict_value IS '字典值'; | |||
| COMMENT ON COLUMN sys_dict_data.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_dict_data.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_dict_data.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_dict_data.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_dict_data.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_dict_data.update_date IS '更新时间'; | |||
| create table sys_log_login | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| operation NUMBER(2, 0), | |||
| status NUMBER(2, 0), | |||
| user_agent varchar2(500), | |||
| ip varchar2(32), | |||
| creator_name varchar2(50), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_login_status on sys_log_login(status); | |||
| CREATE INDEX idx_login_create_date on sys_log_login(create_date); | |||
| COMMENT ON TABLE sys_log_login IS '登录日志'; | |||
| COMMENT ON COLUMN sys_log_login.id IS 'id'; | |||
| COMMENT ON COLUMN sys_log_login.operation IS '用户操作 0:用户登录 1:用户退出'; | |||
| COMMENT ON COLUMN sys_log_login.status IS '状态 0:失败 1:成功 2:账号已锁定'; | |||
| COMMENT ON COLUMN sys_log_login.user_agent IS '用户代理'; | |||
| COMMENT ON COLUMN sys_log_login.ip IS '操作IP'; | |||
| COMMENT ON COLUMN sys_log_login.creator_name IS '用户名'; | |||
| COMMENT ON COLUMN sys_log_login.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_log_login.create_date IS '创建时间'; | |||
| create table sys_log_operation | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| operation varchar2(50), | |||
| request_uri varchar2(200), | |||
| request_method varchar2(20), | |||
| request_params clob, | |||
| request_time NUMBER(10, 0), | |||
| user_agent varchar2(500), | |||
| ip varchar2(32), | |||
| status NUMBER(2, 0), | |||
| creator_name varchar2(50), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_operation_create_date on sys_log_operation(create_date); | |||
| COMMENT ON TABLE sys_log_operation IS '操作日志'; | |||
| COMMENT ON COLUMN sys_log_operation.id IS 'id'; | |||
| COMMENT ON COLUMN sys_log_operation.operation IS '用户操作'; | |||
| COMMENT ON COLUMN sys_log_operation.request_uri IS '请求URI'; | |||
| COMMENT ON COLUMN sys_log_operation.request_method IS '请求方式'; | |||
| COMMENT ON COLUMN sys_log_operation.request_params IS '请求参数'; | |||
| COMMENT ON COLUMN sys_log_operation.request_time IS '请求时长(毫秒)'; | |||
| COMMENT ON COLUMN sys_log_operation.user_agent IS '用户代理'; | |||
| COMMENT ON COLUMN sys_log_operation.ip IS '操作IP'; | |||
| COMMENT ON COLUMN sys_log_operation.status IS '状态 0:失败 1:成功'; | |||
| COMMENT ON COLUMN sys_log_operation.creator_name IS '用户名'; | |||
| COMMENT ON COLUMN sys_log_operation.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_log_operation.create_date IS '创建时间'; | |||
| create table sys_log_error | |||
| ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| request_uri varchar2(200), | |||
| request_method varchar2(20), | |||
| request_params clob, | |||
| user_agent varchar2(500), | |||
| ip varchar2(32), | |||
| error_info clob, | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_error_create_date on sys_log_error(create_date); | |||
| COMMENT ON TABLE sys_log_error IS '异常日志'; | |||
| COMMENT ON COLUMN sys_log_error.id IS 'id'; | |||
| COMMENT ON COLUMN sys_log_error.request_uri IS '请求URI'; | |||
| COMMENT ON COLUMN sys_log_error.request_method IS '请求方式'; | |||
| COMMENT ON COLUMN sys_log_error.request_params IS '请求参数'; | |||
| COMMENT ON COLUMN sys_log_error.user_agent IS '用户代理'; | |||
| COMMENT ON COLUMN sys_log_error.ip IS '操作IP'; | |||
| COMMENT ON COLUMN sys_log_error.error_info IS '异常信息'; | |||
| COMMENT ON COLUMN sys_log_error.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_log_error.create_date IS '创建时间'; | |||
| CREATE TABLE sys_oss ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| url varchar2(200), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_sys_oss_create_date on sys_oss(create_date); | |||
| COMMENT ON TABLE sys_oss IS '文件上传'; | |||
| COMMENT ON COLUMN sys_oss.id IS 'id'; | |||
| COMMENT ON COLUMN sys_oss.url IS 'URL地址'; | |||
| COMMENT ON COLUMN sys_mail_log.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_mail_log.create_date IS '创建时间'; | |||
| CREATE TABLE schedule_job ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| bean_name varchar2(200), | |||
| params varchar2(2000), | |||
| cron_expression varchar2(100), | |||
| status NUMBER(2, 0), | |||
| remark varchar2(255), | |||
| creator NUMBER(20, 0), | |||
| create_date date, | |||
| updater NUMBER(20, 0), | |||
| update_date date, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_schedule_job_create_date on schedule_job(create_date); | |||
| COMMENT ON TABLE schedule_job IS '定时任务'; | |||
| COMMENT ON COLUMN schedule_job.id IS 'id'; | |||
| COMMENT ON COLUMN schedule_job.bean_name IS 'spring bean名称'; | |||
| COMMENT ON COLUMN schedule_job.params IS '参数'; | |||
| COMMENT ON COLUMN schedule_job.cron_expression IS 'cron表达式'; | |||
| COMMENT ON COLUMN schedule_job.status IS '任务状态 0:暂停 1:正常'; | |||
| COMMENT ON COLUMN schedule_job.remark IS '备注'; | |||
| COMMENT ON COLUMN schedule_job.creator IS '创建者'; | |||
| COMMENT ON COLUMN schedule_job.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN schedule_job.updater IS '更新者'; | |||
| COMMENT ON COLUMN schedule_job.update_date IS '更新时间'; | |||
| CREATE TABLE schedule_job_log ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| job_id NUMBER(20, 0) NOT NULL, | |||
| bean_name varchar2(200), | |||
| params varchar2(2000), | |||
| status NUMBER(2, 0), | |||
| error varchar2(2000), | |||
| times NUMBER(10, 0), | |||
| create_date date, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_job_log_job_id on schedule_job_log(job_id); | |||
| CREATE INDEX idx_job_log_create_date on schedule_job_log(create_date); | |||
| COMMENT ON TABLE schedule_job_log IS '定时任务日志'; | |||
| COMMENT ON COLUMN schedule_job_log.id IS 'id'; | |||
| COMMENT ON COLUMN schedule_job_log.bean_name IS 'spring bean名称'; | |||
| COMMENT ON COLUMN schedule_job_log.params IS '参数'; | |||
| COMMENT ON COLUMN schedule_job_log.status IS '任务状态 0:失败 1:成功'; | |||
| COMMENT ON COLUMN schedule_job_log.error IS '失败信息'; | |||
| COMMENT ON COLUMN schedule_job_log.times IS '耗时(单位:毫秒)'; | |||
| COMMENT ON COLUMN schedule_job.create_date IS '创建时间'; | |||
| CREATE TABLE sys_user_token ( | |||
| id NUMBER(20, 0) NOT NULL, | |||
| user_id NUMBER(20, 0), | |||
| token varchar2(100), | |||
| expire_date date, | |||
| update_date date, | |||
| create_date date, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_user_token_user_id on sys_user_token(user_id); | |||
| CREATE UNIQUE INDEX uk_sys_user_token on sys_user_token(token); | |||
| COMMENT ON TABLE sys_user_token IS '系统用户Token'; | |||
| COMMENT ON COLUMN sys_user_token.id IS 'id'; | |||
| COMMENT ON COLUMN sys_user_token.user_id IS '用户id'; | |||
| COMMENT ON COLUMN sys_user_token.token IS '用户token'; | |||
| COMMENT ON COLUMN sys_user_token.expire_date IS '过期时间'; | |||
| COMMENT ON COLUMN sys_user_token.update_date IS '更新时间'; | |||
| COMMENT ON COLUMN sys_user_token.create_date IS '创建时间'; | |||
| -- 初始数据 | |||
| INSERT INTO sys_user(id, username, password, real_name, gender, email, mobile, status, dept_id, super_admin, creator, create_date, updater, update_date) VALUES (1067246875800000001, 'admin', '$2a$10$012Kx2ba5jzqr9gLlG4MX.bnQJTD9UWqF57XDo2N3.fPtLne02u/m', '管理员', 0, 'root@renren.io', '13612345678', 1, null, 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000002, 0, '权限管理', NULL, NULL, 0, 'icon-safetycertificate', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000003, 1067246875800000055, '新增', NULL, 'sys:user:save,sys:dept:list,sys:role:list', 1, NULL, 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000004, 1067246875800000055, '修改', NULL, 'sys:user:update,sys:dept:list,sys:role:list', 1, NULL, 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000005, 1067246875800000055, '删除', NULL, 'sys:user:delete', 1, NULL, 3, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000006, 1067246875800000055, '导出', NULL, 'sys:user:export', 1, NULL, 4, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000007, 1067246875800000002, '角色管理', 'sys/role', NULL, 0, 'icon-team', 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000008, 1067246875800000007, '查看', NULL, 'sys:role:page,sys:role:info', 1, NULL, 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000009, 1067246875800000007, '新增', NULL, 'sys:role:save,sys:menu:select,sys:dept:list', 1, NULL, 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000010, 1067246875800000007, '修改', NULL, 'sys:role:update,sys:menu:select,sys:dept:list', 1, NULL, 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000011, 1067246875800000007, '删除', NULL, 'sys:role:delete', 1, NULL, 3, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000012, 1067246875800000002, '部门管理', 'sys/dept', NULL, 0, 'icon-apartment', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000014, 1067246875800000012, '查看', NULL, 'sys:dept:list,sys:dept:info', 1, NULL, 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000015, 1067246875800000012, '新增', NULL, 'sys:dept:save', 1, NULL, 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000016, 1067246875800000012, '修改', NULL, 'sys:dept:update', 1, NULL, 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000017, 1067246875800000012, '删除', NULL, 'sys:dept:delete', 1, NULL, 3, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000025, 1067246875800000035, '菜单管理', 'sys/menu', NULL, 0, 'icon-unorderedlist', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000026, 1067246875800000025, '查看', NULL, 'sys:menu:list,sys:menu:info', 1, NULL, 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000027, 1067246875800000025, '新增', NULL, 'sys:menu:save', 1, NULL, 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000028, 1067246875800000025, '修改', NULL, 'sys:menu:update', 1, NULL, 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000029, 1067246875800000025, '删除', NULL, 'sys:menu:delete', 1, NULL, 3, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000030, 1067246875800000035, '定时任务', 'job/schedule', NULL, 0, 'icon-dashboard', 3, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000031, 1067246875800000030, '查看', NULL, 'sys:schedule:page,sys:schedule:info', 1, NULL, 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000032, 1067246875800000030, '新增', NULL, 'sys:schedule:save', 1, NULL, 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000033, 1067246875800000030, '修改', NULL, 'sys:schedule:update', 1, NULL, 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000034, 1067246875800000030, '删除', NULL, 'sys:schedule:delete', 1, NULL, 3, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000035, 0, '系统设置', NULL, NULL, 0, 'icon-setting', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000036, 1067246875800000030, '暂停', NULL, 'sys:schedule:pause', 1, NULL, 4, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000037, 1067246875800000030, '恢复', NULL, 'sys:schedule:resume', 1, NULL, 5, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000038, 1067246875800000030, '立即执行', NULL, 'sys:schedule:run', 1, NULL, 6, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000039, 1067246875800000030, '日志列表', NULL, 'sys:schedule:log', 1, NULL, 7, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000040, 1067246875800000035, '参数管理', 'sys/params', '', 0, 'icon-fileprotect', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000041, 1067246875800000035, '字典管理', 'sys/dict-type', NULL, 0, 'icon-golden-fill', 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000042, 1067246875800000041, '查看', NULL, 'sys:dict:page,sys:dict:info', 1, NULL, 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000043, 1067246875800000041, '新增', NULL, 'sys:dict:save', 1, NULL, 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000044, 1067246875800000041, '修改', NULL, 'sys:dict:update', 1, NULL, 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000045, 1067246875800000041, '删除', NULL, 'sys:dict:delete', 1, NULL, 3, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000046, 0, '日志管理', NULL, NULL, 0, 'icon-container', 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000047, 1067246875800000035, '文件上传', 'oss/oss', 'sys:oss:all', 0, 'icon-upload', 4, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000048, 1067246875800000046, '登录日志', 'sys/log-login', 'sys:log:login', 0, 'icon-filedone', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000049, 1067246875800000046, '操作日志', 'sys/log-operation', 'sys:log:operation', 0, 'icon-solution', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000050, 1067246875800000046, '异常日志', 'sys/log-error', 'sys:log:error', 0, 'icon-file-exception', 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000051, 1067246875800000053, 'SQL监控', '{{ApiUrl}}/druid/sql.html', NULL, 0, 'icon-database', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000053, 0, '系统监控', NULL, NULL, 0, 'icon-desktop', 3, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000055, 1067246875800000002, '用户管理', 'sys/user', NULL, 0, 'icon-user', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000056, 1067246875800000055, '查看', NULL, 'sys:user:page,sys:user:info', 1, NULL, 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000057, 1067246875800000040, '新增', NULL, 'sys:params:save', 1, NULL, 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000058, 1067246875800000040, '导出', NULL, 'sys:params:export', 1, NULL, 4, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000059, 1067246875800000040, '查看', '', 'sys:params:page,sys:params:info', 1, NULL, 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000060, 1067246875800000040, '修改', NULL, 'sys:params:update', 1, NULL, 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000061, 1067246875800000040, '删除', '', 'sys:params:delete', 1, '', 3, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1156748733921165314, 1067246875800000053, '接口文档', '{{ApiUrl}}/doc.html', '', 0, 'icon-file-word', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000062, 1067246875800000063, '1067246875800000066,1067246875800000063', '技术部', 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000063, 1067246875800000066, '1067246875800000066', '长沙分公司', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000064, 1067246875800000066, '1067246875800000066', '上海分公司', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000065, 1067246875800000064, '1067246875800000066,1067246875800000064', '市场部', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000066, 0, '0', '人人开源集团', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000067, 1067246875800000064, '1067246875800000066,1067246875800000064', '销售部', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000068, 1067246875800000063, '1067246875800000066,1067246875800000063', '产品部', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1160061077912858625, 'gender', '性别', '', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061112075464705, 1160061077912858625, '男', '0', '', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061146967879681, 1160061077912858625, '女', '1', '', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061190127267841, 1160061077912858625, '保密', '2', '', 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1225813644059140097, 'notice_type', '站内通知-类型', '', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814069634195457, 1225813644059140097, '公告', '0', '', 0, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814107559092225, 1225813644059140097, '会议', '1', '', 1, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814271879340034, 1225813644059140097, '其他', '2', '', 2, 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO sys_params(id, param_code, param_value, param_type, remark, creator, create_date, updater, update_date) VALUES (1067246875800000073, 'CLOUD_STORAGE_CONFIG_KEY', '{"type":1,"qiniuDomain":"http://test.oss.renren.io","qiniuPrefix":"upload","qiniuAccessKey":"NrgMfABZxWLo5B-YYSjoE8-AZ1EISdi1Z3ubLOeZ","qiniuSecretKey":"uIwJHevMRWU0VLxFvgy0tAcOdGqasdtVlJkdy6vV","qiniuBucketName":"renren-oss","aliyunDomain":"","aliyunPrefix":"","aliyunEndPoint":"","aliyunAccessKeyId":"","aliyunAccessKeySecret":"","aliyunBucketName":"","qcloudDomain":"","qcloudPrefix":"","qcloudSecretId":"","qcloudSecretKey":"","qcloudBucketName":""}', '0', '云存储配置信息', 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| INSERT INTO schedule_job (id, bean_name, params, cron_expression, status, remark, creator, create_date, updater, update_date) VALUES (1067246875800000076, 'testTask', 'renren', '0 0/30 * * * ?', 0, '有参测试,多个参数使用json', 1067246875800000001, CURRENT_DATE, 1067246875800000001, CURRENT_DATE); | |||
| -- quartz自带表结构 | |||
| CREATE TABLE qrtz_job_details | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| JOB_NAME VARCHAR2(200) NOT NULL, | |||
| JOB_GROUP VARCHAR2(200) NOT NULL, | |||
| DESCRIPTION VARCHAR2(250) NULL, | |||
| JOB_CLASS_NAME VARCHAR2(250) NOT NULL, | |||
| IS_DURABLE VARCHAR2(1) NOT NULL, | |||
| IS_NONCONCURRENT VARCHAR2(1) NOT NULL, | |||
| IS_UPDATE_DATA VARCHAR2(1) NOT NULL, | |||
| REQUESTS_RECOVERY VARCHAR2(1) NOT NULL, | |||
| JOB_DATA BLOB NULL, | |||
| CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR2(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR2(200) NOT NULL, | |||
| JOB_NAME VARCHAR2(200) NOT NULL, | |||
| JOB_GROUP VARCHAR2(200) NOT NULL, | |||
| DESCRIPTION VARCHAR2(250) NULL, | |||
| NEXT_FIRE_TIME NUMBER(13) NULL, | |||
| PREV_FIRE_TIME NUMBER(13) NULL, | |||
| PRIORITY NUMBER(13) NULL, | |||
| TRIGGER_STATE VARCHAR2(16) NOT NULL, | |||
| TRIGGER_TYPE VARCHAR2(8) NOT NULL, | |||
| START_TIME NUMBER(13) NOT NULL, | |||
| END_TIME NUMBER(13) NULL, | |||
| CALENDAR_NAME VARCHAR2(200) NULL, | |||
| MISFIRE_INSTR NUMBER(2) NULL, | |||
| JOB_DATA BLOB NULL, | |||
| CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) | |||
| REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_simple_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR2(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR2(200) NOT NULL, | |||
| REPEAT_COUNT NUMBER(7) NOT NULL, | |||
| REPEAT_INTERVAL NUMBER(12) NOT NULL, | |||
| TIMES_TRIGGERED NUMBER(10) NOT NULL, | |||
| CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_cron_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR2(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR2(200) NOT NULL, | |||
| CRON_EXPRESSION VARCHAR2(120) NOT NULL, | |||
| TIME_ZONE_ID VARCHAR2(80), | |||
| CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_simprop_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR2(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR2(200) NOT NULL, | |||
| STR_PROP_1 VARCHAR2(512) NULL, | |||
| STR_PROP_2 VARCHAR2(512) NULL, | |||
| STR_PROP_3 VARCHAR2(512) NULL, | |||
| INT_PROP_1 NUMBER(10) NULL, | |||
| INT_PROP_2 NUMBER(10) NULL, | |||
| LONG_PROP_1 NUMBER(13) NULL, | |||
| LONG_PROP_2 NUMBER(13) NULL, | |||
| DEC_PROP_1 NUMERIC(13,4) NULL, | |||
| DEC_PROP_2 NUMERIC(13,4) NULL, | |||
| BOOL_PROP_1 VARCHAR2(1) NULL, | |||
| BOOL_PROP_2 VARCHAR2(1) NULL, | |||
| CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_blob_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR2(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR2(200) NOT NULL, | |||
| BLOB_DATA BLOB NULL, | |||
| CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_calendars | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| CALENDAR_NAME VARCHAR2(200) NOT NULL, | |||
| CALENDAR BLOB NOT NULL, | |||
| CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) | |||
| ); | |||
| CREATE TABLE qrtz_paused_trigger_grps | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR2(200) NOT NULL, | |||
| CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_fired_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| ENTRY_ID VARCHAR2(95) NOT NULL, | |||
| TRIGGER_NAME VARCHAR2(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR2(200) NOT NULL, | |||
| INSTANCE_NAME VARCHAR2(200) NOT NULL, | |||
| FIRED_TIME NUMBER(13) NOT NULL, | |||
| SCHED_TIME NUMBER(13) NOT NULL, | |||
| PRIORITY NUMBER(13) NOT NULL, | |||
| STATE VARCHAR2(16) NOT NULL, | |||
| JOB_NAME VARCHAR2(200) NULL, | |||
| JOB_GROUP VARCHAR2(200) NULL, | |||
| IS_NONCONCURRENT VARCHAR2(1) NULL, | |||
| REQUESTS_RECOVERY VARCHAR2(1) NULL, | |||
| CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID) | |||
| ); | |||
| CREATE TABLE qrtz_scheduler_state | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| INSTANCE_NAME VARCHAR2(200) NOT NULL, | |||
| LAST_CHECKIN_TIME NUMBER(13) NOT NULL, | |||
| CHECKIN_INTERVAL NUMBER(13) NOT NULL, | |||
| CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) | |||
| ); | |||
| CREATE TABLE qrtz_locks | |||
| ( | |||
| SCHED_NAME VARCHAR2(120) NOT NULL, | |||
| LOCK_NAME VARCHAR2(40) NOT NULL, | |||
| CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME) | |||
| ); | |||
| create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY); | |||
| create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP); | |||
| create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); | |||
| create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP); | |||
| create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME); | |||
| create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP); | |||
| create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE); | |||
| create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); | |||
| create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); | |||
| create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME); | |||
| create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); | |||
| create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); | |||
| create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); | |||
| create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); | |||
| create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME); | |||
| create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); | |||
| create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); | |||
| create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP); | |||
| create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); | |||
| create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP); | |||
| @@ -0,0 +1,699 @@ | |||
| CREATE TABLE sys_user ( | |||
| id int8 NOT NULL, | |||
| username varchar(50) NOT NULL, | |||
| password varchar(100), | |||
| real_name varchar(50), | |||
| head_url varchar(200), | |||
| gender int, | |||
| email varchar(100), | |||
| mobile varchar(100), | |||
| dept_id int8, | |||
| super_admin int, | |||
| status int, | |||
| creator int8, | |||
| create_date timestamp, | |||
| updater int8, | |||
| update_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_user_username on sys_user(username); | |||
| CREATE INDEX idx_sys_user_create_date on sys_user(create_date); | |||
| COMMENT ON TABLE sys_user IS '用户管理'; | |||
| COMMENT ON COLUMN sys_user.id IS 'id'; | |||
| COMMENT ON COLUMN sys_user.username IS '用户名'; | |||
| COMMENT ON COLUMN sys_user.password IS '密码'; | |||
| COMMENT ON COLUMN sys_user.real_name IS '姓名'; | |||
| COMMENT ON COLUMN sys_user.head_url IS '头像'; | |||
| COMMENT ON COLUMN sys_user.gender IS '性别 0:男 1:女 2:保密'; | |||
| COMMENT ON COLUMN sys_user.email IS '邮箱'; | |||
| COMMENT ON COLUMN sys_user.mobile IS '手机号'; | |||
| COMMENT ON COLUMN sys_user.dept_id IS '部门ID'; | |||
| COMMENT ON COLUMN sys_user.super_admin IS '超级管理员 0:否 1:是'; | |||
| COMMENT ON COLUMN sys_user.status IS '状态 0:停用 1:正常'; | |||
| COMMENT ON COLUMN sys_user.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_user.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_user.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_user.update_date IS '更新时间'; | |||
| CREATE TABLE sys_dept ( | |||
| id int8 NOT NULL, | |||
| pid int8, | |||
| pids varchar(500), | |||
| name varchar(50), | |||
| sort int, | |||
| creator int8, | |||
| create_date timestamp, | |||
| updater int8, | |||
| update_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_dept_pid on sys_dept(pid); | |||
| CREATE INDEX idx_sys_dept_idx_sort on sys_dept(sort); | |||
| COMMENT ON TABLE sys_dept IS '部门管理'; | |||
| COMMENT ON COLUMN sys_dept.id IS 'id'; | |||
| COMMENT ON COLUMN sys_dept.pid IS '上级ID'; | |||
| COMMENT ON COLUMN sys_dept.pids IS '所有上级ID,用逗号分开'; | |||
| COMMENT ON COLUMN sys_dept.name IS '部门名称'; | |||
| COMMENT ON COLUMN sys_dept.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_dept.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_dept.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_dept.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_dept.update_date IS '更新时间'; | |||
| create table sys_role | |||
| ( | |||
| id int8 NOT NULL, | |||
| name varchar(50), | |||
| remark varchar(100), | |||
| dept_id int8, | |||
| creator int8, | |||
| create_date timestamp, | |||
| updater int8, | |||
| update_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_dept_id on sys_role(dept_id); | |||
| COMMENT ON TABLE sys_role IS '角色管理'; | |||
| COMMENT ON COLUMN sys_role.id IS 'id'; | |||
| COMMENT ON COLUMN sys_role.name IS '角色名称'; | |||
| COMMENT ON COLUMN sys_role.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_role.dept_id IS '部门ID'; | |||
| COMMENT ON COLUMN sys_role.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_role.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_role.update_date IS '更新时间'; | |||
| create table sys_menu | |||
| ( | |||
| id int8 NOT NULL, | |||
| pid int8, | |||
| name varchar(200), | |||
| url varchar(200), | |||
| permissions varchar(500), | |||
| menu_type int, | |||
| icon varchar(50), | |||
| sort int, | |||
| creator int8, | |||
| create_date timestamp, | |||
| updater int8, | |||
| update_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_menu_pid on sys_menu(pid); | |||
| CREATE INDEX idx_sys_menu_sort on sys_menu(sort); | |||
| COMMENT ON TABLE sys_menu IS '菜单管理'; | |||
| COMMENT ON COLUMN sys_menu.id IS 'id'; | |||
| COMMENT ON COLUMN sys_menu.pid IS '上级ID,一级菜单为0'; | |||
| COMMENT ON COLUMN sys_menu.name IS '名称'; | |||
| COMMENT ON COLUMN sys_menu.url IS '菜单URL'; | |||
| COMMENT ON COLUMN sys_menu.permissions IS '授权(多个用逗号分隔,如:sys:user:list,sys:user:save)'; | |||
| COMMENT ON COLUMN sys_menu.menu_type IS '类型 0:菜单 1:按钮'; | |||
| COMMENT ON COLUMN sys_menu.icon IS '菜单图标'; | |||
| COMMENT ON COLUMN sys_menu.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_menu.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_menu.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_menu.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_menu.update_date IS '更新时间'; | |||
| create table sys_role_user | |||
| ( | |||
| id int8 NOT NULL, | |||
| role_id int8, | |||
| user_id int8, | |||
| creator int8, | |||
| create_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_user_role_id on sys_role_user(role_id); | |||
| CREATE INDEX idx_sys_role_user_user_id on sys_role_user(user_id); | |||
| COMMENT ON TABLE sys_role_user IS '角色用户关系'; | |||
| COMMENT ON COLUMN sys_role_user.role_id IS '角色ID'; | |||
| COMMENT ON COLUMN sys_role_user.user_id IS '用户ID'; | |||
| COMMENT ON COLUMN sys_role_user.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role_user.create_date IS '创建时间'; | |||
| create table sys_role_menu | |||
| ( | |||
| id int8 NOT NULL, | |||
| role_id int8, | |||
| menu_id int8, | |||
| creator int8, | |||
| create_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_menu_role_id on sys_role_menu(role_id); | |||
| CREATE INDEX idx_sys_role_menu_menu_id on sys_role_menu(menu_id); | |||
| COMMENT ON TABLE sys_role_menu IS '角色菜单关系'; | |||
| COMMENT ON COLUMN sys_role_menu.role_id IS '角色ID'; | |||
| COMMENT ON COLUMN sys_role_menu.menu_id IS '菜单ID'; | |||
| COMMENT ON COLUMN sys_role_menu.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role_menu.create_date IS '创建时间'; | |||
| create table sys_role_data_scope | |||
| ( | |||
| id int8 NOT NULL, | |||
| role_id int8, | |||
| dept_id int8, | |||
| creator int8, | |||
| create_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_data_scope_role_id on sys_role_data_scope(role_id); | |||
| COMMENT ON TABLE sys_role_data_scope IS '角色数据权限'; | |||
| COMMENT ON COLUMN sys_role_data_scope.role_id IS '角色ID'; | |||
| COMMENT ON COLUMN sys_role_data_scope.dept_id IS '部门ID'; | |||
| COMMENT ON COLUMN sys_role_data_scope.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_role_data_scope.create_date IS '创建时间'; | |||
| create table sys_params | |||
| ( | |||
| id int8 NOT NULL, | |||
| param_code varchar(32), | |||
| param_value varchar(2000), | |||
| param_type int DEFAULT 1 NOT NULL, | |||
| remark varchar(200), | |||
| creator int8, | |||
| create_date timestamp, | |||
| updater int8, | |||
| update_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_params_param_code on sys_params(param_code); | |||
| CREATE INDEX idx_sys_params_create_date on sys_params(create_date); | |||
| COMMENT ON TABLE sys_params IS '参数管理'; | |||
| COMMENT ON COLUMN sys_params.param_code IS '参数编码'; | |||
| COMMENT ON COLUMN sys_params.param_value IS '参数值'; | |||
| COMMENT ON COLUMN sys_params.param_type IS '类型 0:系统参数 1:非系统参数'; | |||
| COMMENT ON COLUMN sys_params.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_params.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_params.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_params.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_params.update_date IS '更新时间'; | |||
| create table sys_dict_type | |||
| ( | |||
| id int8 NOT NULL, | |||
| dict_type varchar(100), | |||
| dict_name varchar(255), | |||
| remark varchar(255), | |||
| sort int, | |||
| creator int8, | |||
| create_date timestamp, | |||
| updater int8, | |||
| update_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_dict_type_dict_type on sys_dict_type(dict_type); | |||
| COMMENT ON TABLE sys_dict_type IS '字典类型'; | |||
| COMMENT ON COLUMN sys_dict_type.id IS 'id'; | |||
| COMMENT ON COLUMN sys_dict_type.dict_type IS '字典类型'; | |||
| COMMENT ON COLUMN sys_dict_type.dict_name IS '字典名称'; | |||
| COMMENT ON COLUMN sys_dict_type.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_dict_type.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_dict_type.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_dict_type.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_dict_type.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_dict_type.update_date IS '更新时间'; | |||
| create table sys_dict_data | |||
| ( | |||
| id int8 NOT NULL, | |||
| dict_type_id int8 NOT NULL, | |||
| dict_label varchar(255), | |||
| dict_value varchar(255), | |||
| remark varchar(255), | |||
| sort int, | |||
| creator int8, | |||
| create_date timestamp, | |||
| updater int8, | |||
| update_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_dict_data_sort on sys_dict_data(sort); | |||
| CREATE UNIQUE INDEX uk_dict_type_value on sys_dict_data(dict_type_id, dict_value); | |||
| COMMENT ON TABLE sys_dict_data IS '字典数据'; | |||
| COMMENT ON COLUMN sys_dict_data.id IS 'id'; | |||
| COMMENT ON COLUMN sys_dict_data.dict_type_id IS '字典类型ID'; | |||
| COMMENT ON COLUMN sys_dict_data.dict_label IS '字典标签'; | |||
| COMMENT ON COLUMN sys_dict_data.dict_value IS '字典值'; | |||
| COMMENT ON COLUMN sys_dict_data.remark IS '备注'; | |||
| COMMENT ON COLUMN sys_dict_data.sort IS '排序'; | |||
| COMMENT ON COLUMN sys_dict_data.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_dict_data.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN sys_dict_data.updater IS '更新者'; | |||
| COMMENT ON COLUMN sys_dict_data.update_date IS '更新时间'; | |||
| create table sys_log_login | |||
| ( | |||
| id int8 NOT NULL, | |||
| operation int, | |||
| status int, | |||
| user_agent varchar(500), | |||
| ip varchar(32), | |||
| creator_name varchar(50), | |||
| creator int8, | |||
| create_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_login_status on sys_log_login(status); | |||
| CREATE INDEX idx_login_create_date on sys_log_login(create_date); | |||
| COMMENT ON TABLE sys_log_login IS '登录日志'; | |||
| COMMENT ON COLUMN sys_log_login.id IS 'id'; | |||
| COMMENT ON COLUMN sys_log_login.operation IS '用户操作 0:用户登录 1:用户退出'; | |||
| COMMENT ON COLUMN sys_log_login.status IS '状态 0:失败 1:成功 2:账号已锁定'; | |||
| COMMENT ON COLUMN sys_log_login.user_agent IS '用户代理'; | |||
| COMMENT ON COLUMN sys_log_login.ip IS '操作IP'; | |||
| COMMENT ON COLUMN sys_log_login.creator_name IS '用户名'; | |||
| COMMENT ON COLUMN sys_log_login.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_log_login.create_date IS '创建时间'; | |||
| create table sys_log_operation | |||
| ( | |||
| id int8 NOT NULL, | |||
| operation varchar(50), | |||
| request_uri varchar(200), | |||
| request_method varchar(20), | |||
| request_params text, | |||
| request_time int, | |||
| user_agent varchar(500), | |||
| ip varchar(32), | |||
| status int, | |||
| creator_name varchar(50), | |||
| creator int8, | |||
| create_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_operation_create_date on sys_log_operation(create_date); | |||
| COMMENT ON TABLE sys_log_operation IS '操作日志'; | |||
| COMMENT ON COLUMN sys_log_operation.id IS 'id'; | |||
| COMMENT ON COLUMN sys_log_operation.operation IS '用户操作'; | |||
| COMMENT ON COLUMN sys_log_operation.request_uri IS '请求URI'; | |||
| COMMENT ON COLUMN sys_log_operation.request_method IS '请求方式'; | |||
| COMMENT ON COLUMN sys_log_operation.request_params IS '请求参数'; | |||
| COMMENT ON COLUMN sys_log_operation.request_time IS '请求时长(毫秒)'; | |||
| COMMENT ON COLUMN sys_log_operation.user_agent IS '用户代理'; | |||
| COMMENT ON COLUMN sys_log_operation.ip IS '操作IP'; | |||
| COMMENT ON COLUMN sys_log_operation.status IS '状态 0:失败 1:成功'; | |||
| COMMENT ON COLUMN sys_log_operation.creator_name IS '用户名'; | |||
| COMMENT ON COLUMN sys_log_operation.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_log_operation.create_date IS '创建时间'; | |||
| create table sys_log_error | |||
| ( | |||
| id int8 NOT NULL, | |||
| request_uri varchar(200), | |||
| request_method varchar(20), | |||
| request_params text, | |||
| user_agent varchar(500), | |||
| ip varchar(32), | |||
| error_info text, | |||
| creator int8, | |||
| create_date timestamp, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_error_create_date on sys_log_error(create_date); | |||
| COMMENT ON TABLE sys_log_error IS '异常日志'; | |||
| COMMENT ON COLUMN sys_log_error.id IS 'id'; | |||
| COMMENT ON COLUMN sys_log_error.request_uri IS '请求URI'; | |||
| COMMENT ON COLUMN sys_log_error.request_method IS '请求方式'; | |||
| COMMENT ON COLUMN sys_log_error.request_params IS '请求参数'; | |||
| COMMENT ON COLUMN sys_log_error.user_agent IS '用户代理'; | |||
| COMMENT ON COLUMN sys_log_error.ip IS '操作IP'; | |||
| COMMENT ON COLUMN sys_log_error.error_info IS '异常信息'; | |||
| COMMENT ON COLUMN sys_log_error.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_log_error.create_date IS '创建时间'; | |||
| CREATE TABLE sys_oss ( | |||
| id int8 NOT NULL, | |||
| url varchar(200), | |||
| creator int8, | |||
| create_date timestamp, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_sys_oss_create_date on sys_oss(create_date); | |||
| COMMENT ON TABLE sys_oss IS '文件上传'; | |||
| COMMENT ON COLUMN sys_oss.id IS 'id'; | |||
| COMMENT ON COLUMN sys_oss.url IS 'URL地址'; | |||
| COMMENT ON COLUMN sys_oss.creator IS '创建者'; | |||
| COMMENT ON COLUMN sys_oss.create_date IS '创建时间'; | |||
| CREATE TABLE schedule_job ( | |||
| id int8 NOT NULL, | |||
| bean_name varchar(200), | |||
| params varchar(2000), | |||
| cron_expression varchar(100), | |||
| status int, | |||
| remark varchar(255), | |||
| creator int8, | |||
| create_date timestamp, | |||
| updater int8, | |||
| update_date timestamp, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_schedule_job_create_date on schedule_job(create_date); | |||
| COMMENT ON TABLE schedule_job IS '定时任务'; | |||
| COMMENT ON COLUMN schedule_job.id IS 'id'; | |||
| COMMENT ON COLUMN schedule_job.bean_name IS 'spring bean名称'; | |||
| COMMENT ON COLUMN schedule_job.params IS '参数'; | |||
| COMMENT ON COLUMN schedule_job.cron_expression IS 'cron表达式'; | |||
| COMMENT ON COLUMN schedule_job.status IS '任务状态 0:暂停 1:正常'; | |||
| COMMENT ON COLUMN schedule_job.remark IS '备注'; | |||
| COMMENT ON COLUMN schedule_job.creator IS '创建者'; | |||
| COMMENT ON COLUMN schedule_job.create_date IS '创建时间'; | |||
| COMMENT ON COLUMN schedule_job.updater IS '更新者'; | |||
| COMMENT ON COLUMN schedule_job.update_date IS '更新时间'; | |||
| CREATE TABLE schedule_job_log ( | |||
| id int8 NOT NULL, | |||
| job_id int8 NOT NULL, | |||
| bean_name varchar(200), | |||
| params varchar(2000), | |||
| status int, | |||
| error varchar(2000), | |||
| times int, | |||
| create_date timestamp, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_job_log_job_id on schedule_job_log(job_id); | |||
| CREATE INDEX idx_job_log_create_date on schedule_job_log(create_date); | |||
| COMMENT ON TABLE schedule_job_log IS '定时任务日志'; | |||
| COMMENT ON COLUMN schedule_job_log.id IS 'id'; | |||
| COMMENT ON COLUMN schedule_job_log.bean_name IS 'spring bean名称'; | |||
| COMMENT ON COLUMN schedule_job_log.params IS '参数'; | |||
| COMMENT ON COLUMN schedule_job_log.status IS '任务状态 0:失败 1:成功'; | |||
| COMMENT ON COLUMN schedule_job_log.error IS '失败信息'; | |||
| COMMENT ON COLUMN schedule_job_log.times IS '耗时(单位:毫秒)'; | |||
| COMMENT ON COLUMN schedule_job.create_date IS '创建时间'; | |||
| CREATE TABLE sys_user_token ( | |||
| id int8 NOT NULL, | |||
| user_id int8, | |||
| token varchar(100), | |||
| expire_date timestamp, | |||
| update_date timestamp, | |||
| create_date timestamp, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_user_token_user_id on sys_user_token(user_id); | |||
| CREATE UNIQUE INDEX uk_sys_user_token on sys_user_token(token); | |||
| COMMENT ON TABLE sys_user_token IS '系统用户Token'; | |||
| COMMENT ON COLUMN sys_user_token.id IS 'id'; | |||
| COMMENT ON COLUMN sys_user_token.user_id IS '用户id'; | |||
| COMMENT ON COLUMN sys_user_token.token IS '用户token'; | |||
| COMMENT ON COLUMN sys_user_token.expire_date IS '过期时间'; | |||
| COMMENT ON COLUMN sys_user_token.update_date IS '更新时间'; | |||
| COMMENT ON COLUMN sys_user_token.create_date IS '创建时间'; | |||
| -- 初始数据 | |||
| INSERT INTO sys_user(id, username, password, real_name, gender, email, mobile, status, dept_id, super_admin, creator, create_date, updater, update_date) VALUES (1067246875800000001, 'admin', '$2a$10$012Kx2ba5jzqr9gLlG4MX.bnQJTD9UWqF57XDo2N3.fPtLne02u/m', '管理员', 0, 'root@renren.io', '13612345678', 1, null, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000002, 0, '权限管理', NULL, NULL, 0, 'icon-safetycertificate', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000003, 1067246875800000055, '新增', NULL, 'sys:user:save,sys:dept:list,sys:role:list', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000004, 1067246875800000055, '修改', NULL, 'sys:user:update,sys:dept:list,sys:role:list', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000005, 1067246875800000055, '删除', NULL, 'sys:user:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000006, 1067246875800000055, '导出', NULL, 'sys:user:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000007, 1067246875800000002, '角色管理', 'sys/role', NULL, 0, 'icon-team', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000008, 1067246875800000007, '查看', NULL, 'sys:role:page,sys:role:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000009, 1067246875800000007, '新增', NULL, 'sys:role:save,sys:menu:select,sys:dept:list', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000010, 1067246875800000007, '修改', NULL, 'sys:role:update,sys:menu:select,sys:dept:list', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000011, 1067246875800000007, '删除', NULL, 'sys:role:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000012, 1067246875800000002, '部门管理', 'sys/dept', NULL, 0, 'icon-apartment', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000014, 1067246875800000012, '查看', NULL, 'sys:dept:list,sys:dept:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000015, 1067246875800000012, '新增', NULL, 'sys:dept:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000016, 1067246875800000012, '修改', NULL, 'sys:dept:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000017, 1067246875800000012, '删除', NULL, 'sys:dept:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000025, 1067246875800000035, '菜单管理', 'sys/menu', NULL, 0, 'icon-unorderedlist', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000026, 1067246875800000025, '查看', NULL, 'sys:menu:list,sys:menu:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000027, 1067246875800000025, '新增', NULL, 'sys:menu:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000028, 1067246875800000025, '修改', NULL, 'sys:menu:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000029, 1067246875800000025, '删除', NULL, 'sys:menu:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000030, 1067246875800000035, '定时任务', 'job/schedule', NULL, 0, 'icon-dashboard', 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000031, 1067246875800000030, '查看', NULL, 'sys:schedule:page,sys:schedule:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000032, 1067246875800000030, '新增', NULL, 'sys:schedule:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000033, 1067246875800000030, '修改', NULL, 'sys:schedule:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000034, 1067246875800000030, '删除', NULL, 'sys:schedule:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000035, 0, '系统设置', NULL, NULL, 0, 'icon-setting', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000036, 1067246875800000030, '暂停', NULL, 'sys:schedule:pause', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000037, 1067246875800000030, '恢复', NULL, 'sys:schedule:resume', 1, NULL, 5, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000038, 1067246875800000030, '立即执行', NULL, 'sys:schedule:run', 1, NULL, 6, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000039, 1067246875800000030, '日志列表', NULL, 'sys:schedule:log', 1, NULL, 7, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000040, 1067246875800000035, '参数管理', 'sys/params', '', 0, 'icon-fileprotect', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000041, 1067246875800000035, '字典管理', 'sys/dict-type', NULL, 0, 'icon-golden-fill', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000042, 1067246875800000041, '查看', NULL, 'sys:dict:page,sys:dict:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000043, 1067246875800000041, '新增', NULL, 'sys:dict:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000044, 1067246875800000041, '修改', NULL, 'sys:dict:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000045, 1067246875800000041, '删除', NULL, 'sys:dict:delete', 1, NULL, 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000046, 0, '日志管理', NULL, NULL, 0, 'icon-container', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000047, 1067246875800000035, '文件上传', 'oss/oss', 'sys:oss:all', 0, 'icon-upload', 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000048, 1067246875800000046, '登录日志', 'sys/log-login', 'sys:log:login', 0, 'icon-filedone', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000049, 1067246875800000046, '操作日志', 'sys/log-operation', 'sys:log:operation', 0, 'icon-solution', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000050, 1067246875800000046, '异常日志', 'sys/log-error', 'sys:log:error', 0, 'icon-file-exception', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000051, 1067246875800000053, 'SQL监控', '{{ApiUrl}}/druid/sql.html', NULL, 0, 'icon-database', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000053, 0, '系统监控', NULL, NULL, 0, 'icon-desktop', 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000055, 1067246875800000002, '用户管理', 'sys/user', NULL, 0, 'icon-user', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000056, 1067246875800000055, '查看', NULL, 'sys:user:page,sys:user:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000057, 1067246875800000040, '新增', NULL, 'sys:params:save', 1, NULL, 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000058, 1067246875800000040, '导出', NULL, 'sys:params:export', 1, NULL, 4, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000059, 1067246875800000040, '查看', '', 'sys:params:page,sys:params:info', 1, NULL, 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000060, 1067246875800000040, '修改', NULL, 'sys:params:update', 1, NULL, 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000061, 1067246875800000040, '删除', '', 'sys:params:delete', 1, '', 3, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1156748733921165314, 1067246875800000053, '接口文档', '{{ApiUrl}}/doc.html', '', 0, 'icon-file-word', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000062, 1067246875800000063, '1067246875800000066,1067246875800000063', '技术部', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000063, 1067246875800000066, '1067246875800000066', '长沙分公司', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000064, 1067246875800000066, '1067246875800000066', '上海分公司', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000065, 1067246875800000064, '1067246875800000066,1067246875800000064', '市场部', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000066, 0, '0', '人人开源集团', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000067, 1067246875800000064, '1067246875800000066,1067246875800000064', '销售部', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000068, 1067246875800000063, '1067246875800000066,1067246875800000063', '产品部', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1160061077912858625, 'gender', '性别', '', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061112075464705, 1160061077912858625, '男', '0', '', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061146967879681, 1160061077912858625, '女', '1', '', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061190127267841, 1160061077912858625, '保密', '2', '', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1225813644059140097, 'notice_type', '站内通知-类型', '', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814069634195457, 1225813644059140097, '公告', '0', '', 0, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814107559092225, 1225813644059140097, '会议', '1', '', 1, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814271879340034, 1225813644059140097, '其他', '2', '', 2, 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO sys_params(id, param_code, param_value, param_type, remark, creator, create_date, updater, update_date) VALUES (1067246875800000073, 'CLOUD_STORAGE_CONFIG_KEY', '{"type":1,"qiniuDomain":"http://test.oss.renren.io","qiniuPrefix":"upload","qiniuAccessKey":"NrgMfABZxWLo5B-YYSjoE8-AZ1EISdi1Z3ubLOeZ","qiniuSecretKey":"uIwJHevMRWU0VLxFvgy0tAcOdGqasdtVlJkdy6vV","qiniuBucketName":"renren-oss","aliyunDomain":"","aliyunPrefix":"","aliyunEndPoint":"","aliyunAccessKeyId":"","aliyunAccessKeySecret":"","aliyunBucketName":"","qcloudDomain":"","qcloudPrefix":"","qcloudSecretId":"","qcloudSecretKey":"","qcloudBucketName":""}', '0', '云存储配置信息', 1067246875800000001, now(), 1067246875800000001, now()); | |||
| INSERT INTO schedule_job (id, bean_name, params, cron_expression, status, remark, creator, create_date, updater, update_date) VALUES (1067246875800000076, 'testTask', 'renren', '0 0/30 * * * ?', 0, '有参测试,多个参数使用json', 1067246875800000001, now(), 1067246875800000001, now()); | |||
| -- quartz自带表结构 | |||
| CREATE TABLE qrtz_job_details | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| JOB_NAME VARCHAR(200) NOT NULL, | |||
| JOB_GROUP VARCHAR(200) NOT NULL, | |||
| DESCRIPTION VARCHAR(250) NULL, | |||
| JOB_CLASS_NAME VARCHAR(250) NOT NULL, | |||
| IS_DURABLE BOOL NOT NULL, | |||
| IS_NONCONCURRENT BOOL NOT NULL, | |||
| IS_UPDATE_DATA BOOL NOT NULL, | |||
| REQUESTS_RECOVERY BOOL NOT NULL, | |||
| JOB_DATA BYTEA NULL, | |||
| PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| JOB_NAME VARCHAR(200) NOT NULL, | |||
| JOB_GROUP VARCHAR(200) NOT NULL, | |||
| DESCRIPTION VARCHAR(250) NULL, | |||
| NEXT_FIRE_TIME BIGINT NULL, | |||
| PREV_FIRE_TIME BIGINT NULL, | |||
| PRIORITY INTEGER NULL, | |||
| TRIGGER_STATE VARCHAR(16) NOT NULL, | |||
| TRIGGER_TYPE VARCHAR(8) NOT NULL, | |||
| START_TIME BIGINT NOT NULL, | |||
| END_TIME BIGINT NULL, | |||
| CALENDAR_NAME VARCHAR(200) NULL, | |||
| MISFIRE_INSTR SMALLINT NULL, | |||
| JOB_DATA BYTEA NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) | |||
| REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_simple_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| REPEAT_COUNT BIGINT NOT NULL, | |||
| REPEAT_INTERVAL BIGINT NOT NULL, | |||
| TIMES_TRIGGERED BIGINT NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_cron_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| CRON_EXPRESSION VARCHAR(120) NOT NULL, | |||
| TIME_ZONE_ID VARCHAR(80), | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_simprop_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| STR_PROP_1 VARCHAR(512) NULL, | |||
| STR_PROP_2 VARCHAR(512) NULL, | |||
| STR_PROP_3 VARCHAR(512) NULL, | |||
| INT_PROP_1 INT NULL, | |||
| INT_PROP_2 INT NULL, | |||
| LONG_PROP_1 BIGINT NULL, | |||
| LONG_PROP_2 BIGINT NULL, | |||
| DEC_PROP_1 NUMERIC(13,4) NULL, | |||
| DEC_PROP_2 NUMERIC(13,4) NULL, | |||
| BOOL_PROP_1 BOOL NULL, | |||
| BOOL_PROP_2 BOOL NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_blob_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| BLOB_DATA BYTEA NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), | |||
| FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_calendars | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| CALENDAR_NAME VARCHAR(200) NOT NULL, | |||
| CALENDAR BYTEA NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,CALENDAR_NAME) | |||
| ); | |||
| CREATE TABLE qrtz_paused_trigger_grps | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP) | |||
| ); | |||
| CREATE TABLE qrtz_fired_triggers | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| ENTRY_ID VARCHAR(95) NOT NULL, | |||
| TRIGGER_NAME VARCHAR(200) NOT NULL, | |||
| TRIGGER_GROUP VARCHAR(200) NOT NULL, | |||
| INSTANCE_NAME VARCHAR(200) NOT NULL, | |||
| FIRED_TIME BIGINT NOT NULL, | |||
| SCHED_TIME BIGINT NOT NULL, | |||
| PRIORITY INTEGER NOT NULL, | |||
| STATE VARCHAR(16) NOT NULL, | |||
| JOB_NAME VARCHAR(200) NULL, | |||
| JOB_GROUP VARCHAR(200) NULL, | |||
| IS_NONCONCURRENT BOOL NULL, | |||
| REQUESTS_RECOVERY BOOL NULL, | |||
| PRIMARY KEY (SCHED_NAME,ENTRY_ID) | |||
| ); | |||
| CREATE TABLE qrtz_scheduler_state | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| INSTANCE_NAME VARCHAR(200) NOT NULL, | |||
| LAST_CHECKIN_TIME BIGINT NOT NULL, | |||
| CHECKIN_INTERVAL BIGINT NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,INSTANCE_NAME) | |||
| ); | |||
| CREATE TABLE qrtz_locks | |||
| ( | |||
| SCHED_NAME VARCHAR(120) NOT NULL, | |||
| LOCK_NAME VARCHAR(40) NOT NULL, | |||
| PRIMARY KEY (SCHED_NAME,LOCK_NAME) | |||
| ); | |||
| create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY); | |||
| create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP); | |||
| create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); | |||
| create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP); | |||
| create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME); | |||
| create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP); | |||
| create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE); | |||
| create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); | |||
| create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); | |||
| create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME); | |||
| create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); | |||
| create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); | |||
| create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); | |||
| create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE); | |||
| create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME); | |||
| create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); | |||
| create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP); | |||
| create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP); | |||
| create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); | |||
| create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP); | |||
| commit; | |||
| @@ -0,0 +1,674 @@ | |||
| CREATE TABLE sys_user ( | |||
| id bigint NOT NULL, | |||
| username varchar(50) NOT NULL, | |||
| password varchar(100), | |||
| real_name varchar(50), | |||
| head_url varchar(200), | |||
| gender int, | |||
| email varchar(100), | |||
| mobile varchar(100), | |||
| dept_id bigint, | |||
| super_admin int, | |||
| status int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_user_username on sys_user(username); | |||
| CREATE INDEX idx_sys_user_create_date on sys_user(create_date); | |||
| CREATE TABLE sys_dept ( | |||
| id bigint NOT NULL, | |||
| pid bigint, | |||
| pids varchar(500), | |||
| name varchar(50), | |||
| sort int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_dept_pid on sys_dept(pid); | |||
| CREATE INDEX idx_sys_dept_idx_sort on sys_dept(sort); | |||
| create table sys_role | |||
| ( | |||
| id bigint NOT NULL, | |||
| name varchar(50), | |||
| remark varchar(100), | |||
| dept_id bigint, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_dept_id on sys_role(dept_id); | |||
| create table sys_menu | |||
| ( | |||
| id bigint NOT NULL, | |||
| pid bigint, | |||
| name varchar(200), | |||
| url varchar(200), | |||
| permissions varchar(500), | |||
| menu_type int, | |||
| icon varchar(50), | |||
| sort int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_menu_pid on sys_menu(pid); | |||
| CREATE INDEX idx_sys_menu_sort on sys_menu(sort); | |||
| create table sys_role_user | |||
| ( | |||
| id bigint NOT NULL, | |||
| role_id bigint, | |||
| user_id bigint, | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_user_role_id on sys_role_user(role_id); | |||
| CREATE INDEX idx_sys_role_user_user_id on sys_role_user(user_id); | |||
| create table sys_role_menu | |||
| ( | |||
| id bigint NOT NULL, | |||
| role_id bigint, | |||
| menu_id bigint, | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_role_menu_role_id on sys_role_menu(role_id); | |||
| CREATE INDEX idx_sys_role_menu_menu_id on sys_role_menu(menu_id); | |||
| create table sys_role_data_scope | |||
| ( | |||
| id bigint NOT NULL, | |||
| role_id bigint, | |||
| dept_id bigint, | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_data_scope_role_id on sys_role_data_scope(role_id); | |||
| create table sys_params | |||
| ( | |||
| id bigint NOT NULL, | |||
| param_code varchar(32), | |||
| param_value varchar(2000), | |||
| param_type int DEFAULT 1 NOT NULL, | |||
| remark varchar(200), | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_params_param_code on sys_params(param_code); | |||
| CREATE INDEX idx_sys_params_create_date on sys_params(create_date); | |||
| create table sys_dict_type | |||
| ( | |||
| id bigint NOT NULL, | |||
| dict_type varchar(100), | |||
| dict_name varchar(255), | |||
| remark varchar(255), | |||
| sort int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_dict_type_dict_type on sys_dict_type(dict_type); | |||
| create table sys_dict_data | |||
| ( | |||
| id bigint NOT NULL, | |||
| dict_type_id bigint NOT NULL, | |||
| dict_label varchar(255), | |||
| dict_value varchar(255), | |||
| remark varchar(255), | |||
| sort int, | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_sys_dict_data_sort on sys_dict_data(sort); | |||
| CREATE UNIQUE INDEX uk_dict_type_value on sys_dict_data(dict_type_id, dict_value); | |||
| create table sys_log_login | |||
| ( | |||
| id bigint NOT NULL, | |||
| operation int, | |||
| status int, | |||
| user_agent varchar(500), | |||
| ip varchar(32), | |||
| creator_name varchar(50), | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_login_status on sys_log_login(status); | |||
| CREATE INDEX idx_login_create_date on sys_log_login(create_date); | |||
| create table sys_log_operation | |||
| ( | |||
| id bigint NOT NULL, | |||
| operation varchar(50), | |||
| request_uri varchar(200), | |||
| request_method varchar(20), | |||
| request_params text, | |||
| request_time int, | |||
| user_agent varchar(500), | |||
| ip varchar(32), | |||
| status int, | |||
| creator_name varchar(50), | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_operation_create_date on sys_log_operation(create_date); | |||
| create table sys_log_error | |||
| ( | |||
| id bigint NOT NULL, | |||
| request_uri varchar(200), | |||
| request_method varchar(20), | |||
| request_params text, | |||
| user_agent varchar(500), | |||
| ip varchar(32), | |||
| error_info text, | |||
| creator bigint, | |||
| create_date datetime, | |||
| primary key (id) | |||
| ); | |||
| CREATE INDEX idx_error_create_date on sys_log_error(create_date); | |||
| CREATE TABLE sys_oss ( | |||
| id bigint NOT NULL, | |||
| url varchar(200), | |||
| creator bigint, | |||
| create_date datetime, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_sys_oss_create_date on sys_oss(create_date); | |||
| CREATE TABLE schedule_job ( | |||
| id bigint NOT NULL, | |||
| bean_name varchar(200), | |||
| params varchar(2000), | |||
| cron_expression varchar(100), | |||
| status int, | |||
| remark varchar(255), | |||
| creator bigint, | |||
| create_date datetime, | |||
| updater bigint, | |||
| update_date datetime, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_schedule_job_create_date on schedule_job(create_date); | |||
| CREATE TABLE schedule_job_log ( | |||
| id bigint NOT NULL, | |||
| job_id bigint NOT NULL, | |||
| bean_name varchar(200), | |||
| params varchar(2000), | |||
| status int, | |||
| error varchar(2000), | |||
| times int, | |||
| create_date datetime, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE INDEX idx_job_log_job_id on schedule_job_log(job_id); | |||
| CREATE INDEX idx_job_log_create_date on schedule_job_log(create_date); | |||
| CREATE TABLE sys_user_token ( | |||
| id bigint NOT NULL, | |||
| user_id bigint, | |||
| token varchar(100), | |||
| expire_date datetime, | |||
| update_date datetime, | |||
| create_date datetime, | |||
| PRIMARY KEY (id) | |||
| ); | |||
| CREATE UNIQUE INDEX uk_sys_user_token_user_id on sys_user_token(user_id); | |||
| CREATE UNIQUE INDEX uk_sys_user_token on sys_user_token(token); | |||
| -- 初始数据 | |||
| INSERT INTO sys_user(id, username, password, real_name, gender, email, mobile, status, dept_id, super_admin, creator, create_date, updater, update_date) VALUES (1067246875800000001, 'admin', '$2a$10$012Kx2ba5jzqr9gLlG4MX.bnQJTD9UWqF57XDo2N3.fPtLne02u/m', '管理员', 0, 'root@renren.io', '13612345678', 1, null, 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000002, 0, '权限管理', NULL, NULL, 0, 'icon-safetycertificate', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000003, 1067246875800000055, '新增', NULL, 'sys:user:save,sys:dept:list,sys:role:list', 1, NULL, 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000004, 1067246875800000055, '修改', NULL, 'sys:user:update,sys:dept:list,sys:role:list', 1, NULL, 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000005, 1067246875800000055, '删除', NULL, 'sys:user:delete', 1, NULL, 3, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000006, 1067246875800000055, '导出', NULL, 'sys:user:export', 1, NULL, 4, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000007, 1067246875800000002, '角色管理', 'sys/role', NULL, 0, 'icon-team', 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000008, 1067246875800000007, '查看', NULL, 'sys:role:page,sys:role:info', 1, NULL, 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000009, 1067246875800000007, '新增', NULL, 'sys:role:save,sys:menu:select,sys:dept:list', 1, NULL, 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000010, 1067246875800000007, '修改', NULL, 'sys:role:update,sys:menu:select,sys:dept:list', 1, NULL, 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000011, 1067246875800000007, '删除', NULL, 'sys:role:delete', 1, NULL, 3, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000012, 1067246875800000002, '部门管理', 'sys/dept', NULL, 0, 'icon-apartment', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000014, 1067246875800000012, '查看', NULL, 'sys:dept:list,sys:dept:info', 1, NULL, 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000015, 1067246875800000012, '新增', NULL, 'sys:dept:save', 1, NULL, 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000016, 1067246875800000012, '修改', NULL, 'sys:dept:update', 1, NULL, 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000017, 1067246875800000012, '删除', NULL, 'sys:dept:delete', 1, NULL, 3, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000025, 1067246875800000035, '菜单管理', 'sys/menu', NULL, 0, 'icon-unorderedlist', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000026, 1067246875800000025, '查看', NULL, 'sys:menu:list,sys:menu:info', 1, NULL, 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000027, 1067246875800000025, '新增', NULL, 'sys:menu:save', 1, NULL, 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000028, 1067246875800000025, '修改', NULL, 'sys:menu:update', 1, NULL, 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000029, 1067246875800000025, '删除', NULL, 'sys:menu:delete', 1, NULL, 3, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000030, 1067246875800000035, '定时任务', 'job/schedule', NULL, 0, 'icon-dashboard', 3, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000031, 1067246875800000030, '查看', NULL, 'sys:schedule:page,sys:schedule:info', 1, NULL, 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000032, 1067246875800000030, '新增', NULL, 'sys:schedule:save', 1, NULL, 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000033, 1067246875800000030, '修改', NULL, 'sys:schedule:update', 1, NULL, 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000034, 1067246875800000030, '删除', NULL, 'sys:schedule:delete', 1, NULL, 3, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000035, 0, '系统设置', NULL, NULL, 0, 'icon-setting', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000036, 1067246875800000030, '暂停', NULL, 'sys:schedule:pause', 1, NULL, 4, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000037, 1067246875800000030, '恢复', NULL, 'sys:schedule:resume', 1, NULL, 5, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000038, 1067246875800000030, '立即执行', NULL, 'sys:schedule:run', 1, NULL, 6, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000039, 1067246875800000030, '日志列表', NULL, 'sys:schedule:log', 1, NULL, 7, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000040, 1067246875800000035, '参数管理', 'sys/params', '', 0, 'icon-fileprotect', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000041, 1067246875800000035, '字典管理', 'sys/dict-type', NULL, 0, 'icon-golden-fill', 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000042, 1067246875800000041, '查看', NULL, 'sys:dict:page,sys:dict:info', 1, NULL, 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000043, 1067246875800000041, '新增', NULL, 'sys:dict:save', 1, NULL, 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000044, 1067246875800000041, '修改', NULL, 'sys:dict:update', 1, NULL, 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000045, 1067246875800000041, '删除', NULL, 'sys:dict:delete', 1, NULL, 3, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000046, 0, '日志管理', NULL, NULL, 0, 'icon-container', 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000047, 1067246875800000035, '文件上传', 'oss/oss', 'sys:oss:all', 0, 'icon-upload', 4, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000048, 1067246875800000046, '登录日志', 'sys/log-login', 'sys:log:login', 0, 'icon-filedone', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000049, 1067246875800000046, '操作日志', 'sys/log-operation', 'sys:log:operation', 0, 'icon-solution', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000050, 1067246875800000046, '异常日志', 'sys/log-error', 'sys:log:error', 0, 'icon-file-exception', 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000051, 1067246875800000053, 'SQL监控', '{{ApiUrl}}/druid/sql.html', NULL, 0, 'icon-database', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000053, 0, '系统监控', NULL, NULL, 0, 'icon-desktop', 3, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000055, 1067246875800000002, '用户管理', 'sys/user', NULL, 0, 'icon-user', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000056, 1067246875800000055, '查看', NULL, 'sys:user:page,sys:user:info', 1, NULL, 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000057, 1067246875800000040, '新增', NULL, 'sys:params:save', 1, NULL, 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000058, 1067246875800000040, '导出', NULL, 'sys:params:export', 1, NULL, 4, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000059, 1067246875800000040, '查看', '', 'sys:params:page,sys:params:info', 1, NULL, 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000060, 1067246875800000040, '修改', NULL, 'sys:params:update', 1, NULL, 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1067246875800000061, 1067246875800000040, '删除', '', 'sys:params:delete', 1, '', 3, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_menu (id, pid, name, url, permissions, menu_type, icon, sort, creator, create_date, updater, update_date) VALUES (1156748733921165314, 1067246875800000053, '接口文档', '{{ApiUrl}}/doc.html', '', 0, 'icon-file-word', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000062, 1067246875800000063, '1067246875800000066,1067246875800000063', '技术部', 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000063, 1067246875800000066, '1067246875800000066', '长沙分公司', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000064, 1067246875800000066, '1067246875800000066', '上海分公司', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000065, 1067246875800000064, '1067246875800000066,1067246875800000064', '市场部', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000066, 0, '0', '人人开源集团', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000067, 1067246875800000064, '1067246875800000066,1067246875800000064', '销售部', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dept(id, pid, pids, name, sort, creator, create_date, updater, update_date) VALUES (1067246875800000068, 1067246875800000063, '1067246875800000066,1067246875800000063', '产品部', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1160061077912858625, 'gender', '性别', '', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061112075464705, 1160061077912858625, '男', '0', '', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061146967879681, 1160061077912858625, '女', '1', '', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1160061190127267841, 1160061077912858625, '保密', '2', '', 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dict_type(id, dict_type, dict_name, remark, sort, creator, create_date, updater, update_date) VALUES (1225813644059140097, 'notice_type', '站内通知-类型', '', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814069634195457, 1225813644059140097, '公告', '0', '', 0, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814107559092225, 1225813644059140097, '会议', '1', '', 1, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_dict_data(id, dict_type_id, dict_label, dict_value, remark, sort, creator, create_date, updater, update_date) VALUES (1225814271879340034, 1225813644059140097, '其他', '2', '', 2, 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO sys_params(id, param_code, param_value, param_type, remark, creator, create_date, updater, update_date) VALUES (1067246875800000073, 'CLOUD_STORAGE_CONFIG_KEY', '{"type":1,"qiniuDomain":"http://test.oss.renren.io","qiniuPrefix":"upload","qiniuAccessKey":"NrgMfABZxWLo5B-YYSjoE8-AZ1EISdi1Z3ubLOeZ","qiniuSecretKey":"uIwJHevMRWU0VLxFvgy0tAcOdGqasdtVlJkdy6vV","qiniuBucketName":"renren-oss","aliyunDomain":"","aliyunPrefix":"","aliyunEndPoint":"","aliyunAccessKeyId":"","aliyunAccessKeySecret":"","aliyunBucketName":"","qcloudDomain":"","qcloudPrefix":"","qcloudSecretId":"","qcloudSecretKey":"","qcloudBucketName":""}', '0', '云存储配置信息', 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| INSERT INTO schedule_job (id, bean_name, params, cron_expression, status, remark, creator, create_date, updater, update_date) VALUES (1067246875800000076, 'testTask', 'renren', '0 0/30 * * * ?', 0, '有参测试,多个参数使用json', 1067246875800000001, getdate(), 1067246875800000001, getdate()); | |||
| -- quartz自带表结构 | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1) | |||
| ALTER TABLE [dbo].[QRTZ_TRIGGERS] DROP CONSTRAINT FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1) | |||
| ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] DROP CONSTRAINT FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1) | |||
| ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISFOREIGNKEY') = 1) | |||
| ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] DROP CONSTRAINT FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CALENDARS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_CALENDARS] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_CRON_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_CRON_TRIGGERS] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_BLOB_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_BLOB_TRIGGERS] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_FIRED_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_FIRED_TRIGGERS] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_PAUSED_TRIGGER_GRPS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SCHEDULER_STATE]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_SCHEDULER_STATE] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_LOCKS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_LOCKS] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_JOB_DETAILS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_JOB_DETAILS] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPLE_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] | |||
| GO | |||
| IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGERS]') AND OBJECTPROPERTY(id, N'ISUSERTABLE') = 1) | |||
| DROP TABLE [dbo].[QRTZ_TRIGGERS] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_CALENDARS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [CALENDAR_NAME] [VARCHAR] (200) NOT NULL , | |||
| [CALENDAR] [IMAGE] NOT NULL | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_CRON_TRIGGERS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [TRIGGER_NAME] [VARCHAR] (200) NOT NULL , | |||
| [TRIGGER_GROUP] [VARCHAR] (200) NOT NULL , | |||
| [CRON_EXPRESSION] [VARCHAR] (120) NOT NULL , | |||
| [TIME_ZONE_ID] [VARCHAR] (80) | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_FIRED_TRIGGERS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [ENTRY_ID] [VARCHAR] (95) NOT NULL , | |||
| [TRIGGER_NAME] [VARCHAR] (200) NOT NULL , | |||
| [TRIGGER_GROUP] [VARCHAR] (200) NOT NULL , | |||
| [INSTANCE_NAME] [VARCHAR] (200) NOT NULL , | |||
| [FIRED_TIME] [BIGINT] NOT NULL , | |||
| [SCHED_TIME] [BIGINT] NOT NULL , | |||
| [PRIORITY] [INTEGER] NOT NULL , | |||
| [STATE] [VARCHAR] (16) NOT NULL, | |||
| [JOB_NAME] [VARCHAR] (200) NULL , | |||
| [JOB_GROUP] [VARCHAR] (200) NULL , | |||
| [IS_NONCONCURRENT] [VARCHAR] (1) NULL , | |||
| [REQUESTS_RECOVERY] [VARCHAR] (1) NULL | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [TRIGGER_GROUP] [VARCHAR] (200) NOT NULL | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_SCHEDULER_STATE] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [INSTANCE_NAME] [VARCHAR] (200) NOT NULL , | |||
| [LAST_CHECKIN_TIME] [BIGINT] NOT NULL , | |||
| [CHECKIN_INTERVAL] [BIGINT] NOT NULL | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_LOCKS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [LOCK_NAME] [VARCHAR] (40) NOT NULL | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_JOB_DETAILS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [JOB_NAME] [VARCHAR] (200) NOT NULL , | |||
| [JOB_GROUP] [VARCHAR] (200) NOT NULL , | |||
| [DESCRIPTION] [VARCHAR] (250) NULL , | |||
| [JOB_CLASS_NAME] [VARCHAR] (250) NOT NULL , | |||
| [IS_DURABLE] [VARCHAR] (1) NOT NULL , | |||
| [IS_NONCONCURRENT] [VARCHAR] (1) NOT NULL , | |||
| [IS_UPDATE_DATA] [VARCHAR] (1) NOT NULL , | |||
| [REQUESTS_RECOVERY] [VARCHAR] (1) NOT NULL , | |||
| [JOB_DATA] [IMAGE] NULL | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [TRIGGER_NAME] [VARCHAR] (200) NOT NULL , | |||
| [TRIGGER_GROUP] [VARCHAR] (200) NOT NULL , | |||
| [REPEAT_COUNT] [BIGINT] NOT NULL , | |||
| [REPEAT_INTERVAL] [BIGINT] NOT NULL , | |||
| [TIMES_TRIGGERED] [BIGINT] NOT NULL | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [TRIGGER_NAME] [VARCHAR] (200) NOT NULL , | |||
| [TRIGGER_GROUP] [VARCHAR] (200) NOT NULL , | |||
| [STR_PROP_1] [VARCHAR] (512) NULL, | |||
| [STR_PROP_2] [VARCHAR] (512) NULL, | |||
| [STR_PROP_3] [VARCHAR] (512) NULL, | |||
| [INT_PROP_1] [INT] NULL, | |||
| [INT_PROP_2] [INT] NULL, | |||
| [LONG_PROP_1] [BIGINT] NULL, | |||
| [LONG_PROP_2] [BIGINT] NULL, | |||
| [DEC_PROP_1] [NUMERIC] (13,4) NULL, | |||
| [DEC_PROP_2] [NUMERIC] (13,4) NULL, | |||
| [BOOL_PROP_1] [VARCHAR] (1) NULL, | |||
| [BOOL_PROP_2] [VARCHAR] (1) NULL, | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_BLOB_TRIGGERS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [TRIGGER_NAME] [VARCHAR] (200) NOT NULL , | |||
| [TRIGGER_GROUP] [VARCHAR] (200) NOT NULL , | |||
| [BLOB_DATA] [IMAGE] NULL | |||
| ) ON [PRIMARY] | |||
| GO | |||
| CREATE TABLE [dbo].[QRTZ_TRIGGERS] ( | |||
| [SCHED_NAME] [VARCHAR] (120) NOT NULL , | |||
| [TRIGGER_NAME] [VARCHAR] (200) NOT NULL , | |||
| [TRIGGER_GROUP] [VARCHAR] (200) NOT NULL , | |||
| [JOB_NAME] [VARCHAR] (200) NOT NULL , | |||
| [JOB_GROUP] [VARCHAR] (200) NOT NULL , | |||
| [DESCRIPTION] [VARCHAR] (250) NULL , | |||
| [NEXT_FIRE_TIME] [BIGINT] NULL , | |||
| [PREV_FIRE_TIME] [BIGINT] NULL , | |||
| [PRIORITY] [INTEGER] NULL , | |||
| [TRIGGER_STATE] [VARCHAR] (16) NOT NULL , | |||
| [TRIGGER_TYPE] [VARCHAR] (8) NOT NULL , | |||
| [START_TIME] [BIGINT] NOT NULL , | |||
| [END_TIME] [BIGINT] NULL , | |||
| [CALENDAR_NAME] [VARCHAR] (200) NULL , | |||
| [MISFIRE_INSTR] [SMALLINT] NULL , | |||
| [JOB_DATA] [IMAGE] NULL | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_CALENDARS] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_CALENDARS] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [CALENDAR_NAME] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_CRON_TRIGGERS] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_FIRED_TRIGGERS] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [ENTRY_ID] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_SCHEDULER_STATE] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [INSTANCE_NAME] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_LOCKS] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_LOCKS] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [LOCK_NAME] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_JOB_DETAILS] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_JOB_DETAILS] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [JOB_NAME], | |||
| [JOB_GROUP] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_TRIGGERS] WITH NOCHECK ADD | |||
| CONSTRAINT [PK_QRTZ_TRIGGERS] PRIMARY KEY CLUSTERED | |||
| ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) ON [PRIMARY] | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] ADD | |||
| CONSTRAINT [FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY | |||
| ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) REFERENCES [dbo].[QRTZ_TRIGGERS] ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) ON DELETE CASCADE | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] ADD | |||
| CONSTRAINT [FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY | |||
| ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) REFERENCES [dbo].[QRTZ_TRIGGERS] ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) ON DELETE CASCADE | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ADD | |||
| CONSTRAINT [FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY | |||
| ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) REFERENCES [dbo].[QRTZ_TRIGGERS] ( | |||
| [SCHED_NAME], | |||
| [TRIGGER_NAME], | |||
| [TRIGGER_GROUP] | |||
| ) ON DELETE CASCADE | |||
| GO | |||
| ALTER TABLE [dbo].[QRTZ_TRIGGERS] ADD | |||
| CONSTRAINT [FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS] FOREIGN KEY | |||
| ( | |||
| [SCHED_NAME], | |||
| [JOB_NAME], | |||
| [JOB_GROUP] | |||
| ) REFERENCES [dbo].[QRTZ_JOB_DETAILS] ( | |||
| [SCHED_NAME], | |||
| [JOB_NAME], | |||
| [JOB_GROUP] | |||
| ) | |||
| GO | |||
| @@ -0,0 +1,113 @@ | |||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||
| <parent> | |||
| <groupId>io.bdty</groupId> | |||
| <artifactId>bdty-security</artifactId> | |||
| <version>5.3.0</version> | |||
| </parent> | |||
| <modelVersion>4.0.0</modelVersion> | |||
| <artifactId>bdty-admin</artifactId> | |||
| <packaging>jar</packaging> | |||
| <description>bdty-admin</description> | |||
| <properties> | |||
| <quartz.version>2.3.2</quartz.version> | |||
| <shiro.version>1.12.0</shiro.version> | |||
| <captcha.version>1.6.2</captcha.version> | |||
| <easyexcel.version>3.2.1</easyexcel.version> | |||
| <qiniu.version>7.2.27</qiniu.version> | |||
| <aliyun.oss.version>2.8.3</aliyun.oss.version> | |||
| <aliyun.core.version>3.2.2</aliyun.core.version> | |||
| <qcloud.cos.version>5.4.4</qcloud.cos.version> | |||
| </properties> | |||
| <dependencies> | |||
| <dependency> | |||
| <groupId>io.bdty</groupId> | |||
| <artifactId>bdty-common</artifactId> | |||
| <version>5.3.0</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>io.bdty</groupId> | |||
| <artifactId>bdty-dynamic-datasource</artifactId> | |||
| <version>5.3.0</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.quartz-scheduler</groupId> | |||
| <artifactId>quartz</artifactId> | |||
| <version>${quartz.version}</version> | |||
| <exclusions> | |||
| <exclusion> | |||
| <groupId>com.mchange</groupId> | |||
| <artifactId>c3p0</artifactId> | |||
| </exclusion> | |||
| <exclusion> | |||
| <groupId>com.zaxxer</groupId> | |||
| <artifactId>HikariCP-java6</artifactId> | |||
| </exclusion> | |||
| </exclusions> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.apache.shiro</groupId> | |||
| <artifactId>shiro-core</artifactId> | |||
| <version>${shiro.version}</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.apache.shiro</groupId> | |||
| <artifactId>shiro-spring</artifactId> | |||
| <version>${shiro.version}</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.github.whvcse</groupId> | |||
| <artifactId>easy-captcha</artifactId> | |||
| <version>${captcha.version}</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.alibaba</groupId> | |||
| <artifactId>easyexcel</artifactId> | |||
| <version>${easyexcel.version}</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.qiniu</groupId> | |||
| <artifactId>qiniu-java-sdk</artifactId> | |||
| <version>${qiniu.version}</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.aliyun.oss</groupId> | |||
| <artifactId>aliyun-sdk-oss</artifactId> | |||
| <version>${aliyun.oss.version}</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.aliyun</groupId> | |||
| <artifactId>aliyun-java-sdk-core</artifactId> | |||
| <version>${aliyun.core.version}</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.qcloud</groupId> | |||
| <artifactId>cos_api</artifactId> | |||
| <version>${qcloud.cos.version}</version> | |||
| <exclusions> | |||
| <exclusion> | |||
| <groupId>org.slf4j</groupId> | |||
| <artifactId>slf4j-log4j12</artifactId> | |||
| </exclusion> | |||
| </exclusions> | |||
| </dependency> | |||
| </dependencies> | |||
| <build> | |||
| <finalName>${project.artifactId}</finalName> | |||
| <plugins> | |||
| <plugin> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-maven-plugin</artifactId> | |||
| </plugin> | |||
| <plugin> | |||
| <groupId>org.apache.maven.plugins</groupId> | |||
| <artifactId>maven-surefire-plugin</artifactId> | |||
| <configuration> | |||
| <skipTests>true</skipTests> | |||
| </configuration> | |||
| </plugin> | |||
| </plugins> | |||
| </build> | |||
| </project> | |||
| @@ -0,0 +1,33 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty; | |||
| import org.springframework.boot.SpringApplication; | |||
| import org.springframework.boot.autoconfigure.SpringBootApplication; | |||
| import org.springframework.boot.builder.SpringApplicationBuilder; | |||
| import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; | |||
| /** | |||
| * bdty-admin | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @SpringBootApplication | |||
| public class AdminApplication extends SpringBootServletInitializer { | |||
| public static void main(String[] args) { | |||
| SpringApplication.run(AdminApplication.class, args); | |||
| } | |||
| @Override | |||
| protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { | |||
| return application.sources(AdminApplication.class); | |||
| } | |||
| } | |||
| @@ -0,0 +1,37 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.annotation; | |||
| import java.lang.annotation.*; | |||
| /** | |||
| * 数据过滤注解 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Target(ElementType.METHOD) | |||
| @Retention(RetentionPolicy.RUNTIME) | |||
| @Documented | |||
| public @interface DataFilter { | |||
| /** | |||
| * 表的别名 | |||
| */ | |||
| String tableAlias() default ""; | |||
| /** | |||
| * 用户ID | |||
| */ | |||
| String userId() default "creator"; | |||
| /** | |||
| * 部门ID | |||
| */ | |||
| String deptId() default "dept_id"; | |||
| } | |||
| @@ -0,0 +1,28 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.annotation; | |||
| import java.lang.annotation.Documented; | |||
| import java.lang.annotation.ElementType; | |||
| import java.lang.annotation.Retention; | |||
| import java.lang.annotation.RetentionPolicy; | |||
| import java.lang.annotation.Target; | |||
| /** | |||
| * 操作日志注解 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Target(ElementType.METHOD) | |||
| @Retention(RetentionPolicy.RUNTIME) | |||
| @Documented | |||
| public @interface LogOperation { | |||
| String value() default ""; | |||
| } | |||
| @@ -0,0 +1,110 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.aspect; | |||
| import cn.hutool.core.collection.CollUtil; | |||
| import cn.hutool.core.util.StrUtil; | |||
| import com.qiniu.util.StringUtils; | |||
| import io.bdty.common.annotation.DataFilter; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.exception.ErrorCode; | |||
| import io.bdty.common.exception.RenException; | |||
| import io.bdty.common.interceptor.DataScope; | |||
| import io.bdty.modules.security.user.SecurityUser; | |||
| import io.bdty.modules.security.user.UserDetail; | |||
| import io.bdty.modules.sys.enums.SuperAdminEnum; | |||
| import org.aspectj.lang.JoinPoint; | |||
| import org.aspectj.lang.annotation.Aspect; | |||
| import org.aspectj.lang.annotation.Before; | |||
| import org.aspectj.lang.annotation.Pointcut; | |||
| import org.aspectj.lang.reflect.MethodSignature; | |||
| import org.springframework.stereotype.Component; | |||
| import java.lang.reflect.Method; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * 数据过滤,切面处理类 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Aspect | |||
| @Component | |||
| public class DataFilterAspect { | |||
| @Pointcut("@annotation(io.bdty.common.annotation.DataFilter)") | |||
| public void dataFilterCut() { | |||
| } | |||
| @Before("dataFilterCut()") | |||
| public void dataFilter(JoinPoint point) { | |||
| Object params = point.getArgs()[0]; | |||
| if (params != null && params instanceof Map) { | |||
| UserDetail user = SecurityUser.getUser(); | |||
| //如果是超级管理员,则不进行数据过滤 | |||
| if (user.getSuperAdmin() == SuperAdminEnum.YES.value()) { | |||
| return; | |||
| } | |||
| try { | |||
| //否则进行数据过滤 | |||
| Map map = (Map) params; | |||
| String sqlFilter = getSqlFilter(user, point); | |||
| map.put(Constant.SQL_FILTER, new DataScope(sqlFilter)); | |||
| } catch (Exception e) { | |||
| } | |||
| return; | |||
| } | |||
| throw new RenException(ErrorCode.DATA_SCOPE_PARAMS_ERROR); | |||
| } | |||
| /** | |||
| * 获取数据过滤的SQL | |||
| */ | |||
| private String getSqlFilter(UserDetail user, JoinPoint point) throws Exception { | |||
| MethodSignature signature = (MethodSignature) point.getSignature(); | |||
| Method method = point.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes()); | |||
| DataFilter dataFilter = method.getAnnotation(DataFilter.class); | |||
| //获取表的别名 | |||
| String tableAlias = dataFilter.tableAlias(); | |||
| if (StrUtil.isNotBlank(tableAlias)) { | |||
| tableAlias += "."; | |||
| } | |||
| StringBuilder sqlFilter = new StringBuilder(); | |||
| sqlFilter.append(" ("); | |||
| //部门ID列表 | |||
| List<Long> deptIdList = user.getDeptIdList(); | |||
| if (CollUtil.isNotEmpty(deptIdList)) { | |||
| sqlFilter.append(tableAlias).append(dataFilter.deptId()); | |||
| sqlFilter.append(" in(").append(StringUtils.join(deptIdList, ",")).append(")"); | |||
| } | |||
| //查询本人数据 | |||
| if (CollUtil.isNotEmpty(deptIdList)) { | |||
| sqlFilter.append(" or "); | |||
| } | |||
| sqlFilter.append(tableAlias).append(dataFilter.userId()).append("=").append(user.getId()); | |||
| sqlFilter.append(")"); | |||
| return sqlFilter.toString(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,110 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.aspect; | |||
| import io.bdty.common.annotation.LogOperation; | |||
| import io.bdty.common.utils.HttpContextUtils; | |||
| import io.bdty.common.utils.IpUtils; | |||
| import io.bdty.common.utils.JsonUtils; | |||
| import io.bdty.modules.log.entity.SysLogOperationEntity; | |||
| import io.bdty.modules.log.enums.OperationStatusEnum; | |||
| import io.bdty.modules.log.service.SysLogOperationService; | |||
| import io.bdty.modules.security.user.SecurityUser; | |||
| import io.bdty.modules.security.user.UserDetail; | |||
| import lombok.AllArgsConstructor; | |||
| import org.aspectj.lang.ProceedingJoinPoint; | |||
| import org.aspectj.lang.annotation.Around; | |||
| import org.aspectj.lang.annotation.Aspect; | |||
| import org.aspectj.lang.annotation.Pointcut; | |||
| import org.aspectj.lang.reflect.MethodSignature; | |||
| import org.springframework.http.HttpHeaders; | |||
| import org.springframework.stereotype.Component; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import java.lang.reflect.Method; | |||
| /** | |||
| * 操作日志,切面处理类 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Aspect | |||
| @Component | |||
| @AllArgsConstructor | |||
| public class LogOperationAspect { | |||
| private final SysLogOperationService sysLogOperationService; | |||
| @Pointcut("@annotation(io.bdty.common.annotation.LogOperation)") | |||
| public void logPointCut() { | |||
| } | |||
| @Around("logPointCut()") | |||
| public Object around(ProceedingJoinPoint point) throws Throwable { | |||
| long beginTime = System.currentTimeMillis(); | |||
| try { | |||
| //执行方法 | |||
| Object result = point.proceed(); | |||
| //执行时长(毫秒) | |||
| long time = System.currentTimeMillis() - beginTime; | |||
| //保存日志 | |||
| saveLog(point, time, OperationStatusEnum.SUCCESS.value()); | |||
| return result; | |||
| } catch (Exception e) { | |||
| //执行时长(毫秒) | |||
| long time = System.currentTimeMillis() - beginTime; | |||
| //保存日志 | |||
| saveLog(point, time, OperationStatusEnum.FAIL.value()); | |||
| throw e; | |||
| } | |||
| } | |||
| private void saveLog(ProceedingJoinPoint joinPoint, long time, Integer status) throws Exception { | |||
| MethodSignature signature = (MethodSignature) joinPoint.getSignature(); | |||
| Method method = joinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes()); | |||
| LogOperation annotation = method.getAnnotation(LogOperation.class); | |||
| SysLogOperationEntity log = new SysLogOperationEntity(); | |||
| if (annotation != null) { | |||
| //注解上的描述 | |||
| log.setOperation(annotation.value()); | |||
| } | |||
| //登录用户信息 | |||
| UserDetail user = SecurityUser.getUser(); | |||
| if (user != null) { | |||
| log.setCreatorName(user.getUsername()); | |||
| } | |||
| log.setStatus(status); | |||
| log.setRequestTime((int) time); | |||
| //请求相关信息 | |||
| HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); | |||
| log.setIp(IpUtils.getIpAddr(request)); | |||
| log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT)); | |||
| log.setRequestUri(request.getRequestURI()); | |||
| log.setRequestMethod(request.getMethod()); | |||
| //请求参数 | |||
| Object[] args = joinPoint.getArgs(); | |||
| try { | |||
| String params = JsonUtils.toJsonString(args[0]); | |||
| log.setRequestParams(params); | |||
| } catch (Exception e) { | |||
| } | |||
| //保存到DB | |||
| sysLogOperationService.save(log); | |||
| } | |||
| } | |||
| @@ -0,0 +1,31 @@ | |||
| package io.bdty.common.config; | |||
| import org.springframework.context.annotation.Bean; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.web.cors.CorsConfiguration; | |||
| import org.springframework.web.cors.UrlBasedCorsConfigurationSource; | |||
| import org.springframework.web.filter.CorsFilter; | |||
| @Configuration | |||
| public class CorsConfig { | |||
| // 当前跨域请求最大有效时长。这里默认1天 | |||
| private static final long MAX_AGE = 24 * 60 * 60; | |||
| private CorsConfiguration buildConfig() { | |||
| CorsConfiguration corsConfiguration = new CorsConfiguration(); | |||
| corsConfiguration.setAllowCredentials(true); //允许接受cookie | |||
| corsConfiguration.addAllowedOriginPattern("*"); // 1 设置访问源地址 | |||
| corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头 | |||
| corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法 | |||
| corsConfiguration.setMaxAge(MAX_AGE); | |||
| return corsConfiguration; | |||
| } | |||
| @Bean | |||
| public CorsFilter corsFilter() { | |||
| UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); | |||
| source.registerCorsConfiguration("/**", buildConfig()); // 4 对接口配置跨域设置 | |||
| return new CorsFilter(source); | |||
| } | |||
| } | |||
| @@ -0,0 +1,45 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.config; | |||
| import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; | |||
| import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; | |||
| import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; | |||
| import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; | |||
| import io.bdty.common.interceptor.DataFilterInterceptor; | |||
| import org.springframework.context.annotation.Bean; | |||
| import org.springframework.context.annotation.Configuration; | |||
| /** | |||
| * mybatis-plus配置 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Configuration | |||
| public class MybatisPlusConfig { | |||
| @Bean | |||
| public MybatisPlusInterceptor mybatisPlusInterceptor() { | |||
| MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); | |||
| // 数据权限 | |||
| mybatisPlusInterceptor.addInnerInterceptor(new DataFilterInterceptor()); | |||
| // 分页插件 | |||
| mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); | |||
| // 乐观锁 | |||
| mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); | |||
| // 防止全表更新与删除 | |||
| mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); | |||
| return mybatisPlusInterceptor; | |||
| } | |||
| } | |||
| @@ -0,0 +1,73 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.config; | |||
| import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.AllArgsConstructor; | |||
| import org.springframework.context.annotation.Bean; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import springfox.documentation.builders.ApiInfoBuilder; | |||
| import springfox.documentation.builders.PathSelectors; | |||
| import springfox.documentation.builders.RequestHandlerSelectors; | |||
| import springfox.documentation.service.ApiInfo; | |||
| import springfox.documentation.service.ApiKey; | |||
| import springfox.documentation.spi.DocumentationType; | |||
| import springfox.documentation.spring.web.plugins.Docket; | |||
| import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| /** | |||
| * Swagger配置 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Configuration | |||
| @EnableSwagger2WebMvc | |||
| @AllArgsConstructor | |||
| public class SwaggerConfig { | |||
| private final OpenApiExtensionResolver openApiExtensionResolver; | |||
| @Bean | |||
| public Docket createRestApi() { | |||
| return new Docket(DocumentationType.SWAGGER_2) | |||
| .apiInfo(apiInfo()) | |||
| .select() | |||
| //加了ApiOperation注解的类,生成接口文档 | |||
| .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) | |||
| //包下的类,生成接口文档 | |||
| //.apis(RequestHandlerSelectors.basePackage("io.bdty.modules.job.controller")) | |||
| .paths(PathSelectors.any()) | |||
| .build() | |||
| .extensions(openApiExtensionResolver.buildExtensions("Renren")) | |||
| .directModelSubstitute(java.util.Date.class, String.class) | |||
| .securitySchemes(security()); | |||
| } | |||
| private ApiInfo apiInfo() { | |||
| return new ApiInfoBuilder() | |||
| .title("人人开源") | |||
| .description("renren-admin文档") | |||
| .termsOfServiceUrl("https://www.renren.io") | |||
| .version("5.x") | |||
| .build(); | |||
| } | |||
| private List<ApiKey> security() { | |||
| ApiKey key = new ApiKey(Constant.TOKEN_HEADER, Constant.TOKEN_HEADER, "header"); | |||
| List<ApiKey> list = new ArrayList<>(); | |||
| list.add(key); | |||
| return list; | |||
| } | |||
| } | |||
| @@ -0,0 +1,21 @@ | |||
| package io.bdty.common.config; | |||
| import org.springframework.beans.factory.annotation.Value; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; | |||
| import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; | |||
| @SuppressWarnings("deprecation") | |||
| @Configuration | |||
| public class UploadFilePathConfig extends WebMvcConfigurerAdapter { | |||
| @Value("${file.staticAccessPath}") | |||
| private String staticAccessPath; | |||
| @Value("${file.uploadFolder}") | |||
| private String uploadFolder; | |||
| @Override | |||
| public void addResourceHandlers(ResourceHandlerRegistry registry) { | |||
| registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder); | |||
| } | |||
| } | |||
| @@ -0,0 +1,95 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.exception; | |||
| import cn.hutool.core.map.MapUtil; | |||
| import io.bdty.common.exception.ErrorCode; | |||
| import io.bdty.common.exception.ExceptionUtils; | |||
| import io.bdty.common.exception.RenException; | |||
| import io.bdty.common.utils.HttpContextUtils; | |||
| import io.bdty.common.utils.IpUtils; | |||
| import io.bdty.common.utils.JsonUtils; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.modules.log.entity.SysLogErrorEntity; | |||
| import io.bdty.modules.log.service.SysLogErrorService; | |||
| import lombok.AllArgsConstructor; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.dao.DuplicateKeyException; | |||
| import org.springframework.http.HttpHeaders; | |||
| import org.springframework.web.bind.annotation.ExceptionHandler; | |||
| import org.springframework.web.bind.annotation.RestControllerAdvice; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import java.util.Map; | |||
| /** | |||
| * 异常处理器 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Slf4j | |||
| @RestControllerAdvice | |||
| @AllArgsConstructor | |||
| public class RenExceptionHandler { | |||
| private final SysLogErrorService sysLogErrorService; | |||
| /** | |||
| * 处理自定义异常 | |||
| */ | |||
| @ExceptionHandler(RenException.class) | |||
| public Result handleRenException(RenException ex) { | |||
| Result result = new Result(); | |||
| result.error(ex.getCode(), ex.getMsg()); | |||
| return result; | |||
| } | |||
| @ExceptionHandler(DuplicateKeyException.class) | |||
| public Result handleDuplicateKeyException(DuplicateKeyException ex) { | |||
| Result result = new Result(); | |||
| result.error(ErrorCode.DB_RECORD_EXISTS); | |||
| return result; | |||
| } | |||
| @ExceptionHandler(Exception.class) | |||
| public Result handleException(Exception ex) { | |||
| log.error(ex.getMessage(), ex); | |||
| saveLog(ex); | |||
| return new Result().error(); | |||
| } | |||
| /** | |||
| * 保存异常日志 | |||
| */ | |||
| private void saveLog(Exception ex) { | |||
| SysLogErrorEntity log = new SysLogErrorEntity(); | |||
| //请求相关信息 | |||
| HttpServletRequest request = HttpContextUtils.getHttpServletRequest(); | |||
| log.setIp(IpUtils.getIpAddr(request)); | |||
| log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT)); | |||
| log.setRequestUri(request.getRequestURI()); | |||
| log.setRequestMethod(request.getMethod()); | |||
| Map<String, String> params = HttpContextUtils.getParameterMap(request); | |||
| if (MapUtil.isNotEmpty(params)) { | |||
| log.setRequestParams(JsonUtils.toJsonString(params)); | |||
| } | |||
| //异常信息 | |||
| log.setErrorInfo(ExceptionUtils.getErrorStackTrace(ex)); | |||
| //保存 | |||
| sysLogErrorService.save(log); | |||
| } | |||
| } | |||
| @@ -0,0 +1,60 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.handler; | |||
| import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; | |||
| import io.bdty.modules.security.user.SecurityUser; | |||
| import io.bdty.modules.security.user.UserDetail; | |||
| import org.apache.ibatis.reflection.MetaObject; | |||
| import org.springframework.stereotype.Component; | |||
| import java.util.Date; | |||
| /** | |||
| * 公共字段,自动填充值 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Component | |||
| public class FieldMetaObjectHandler implements MetaObjectHandler { | |||
| private final static String CREATE_DATE = "createDate"; | |||
| private final static String CREATOR = "creator"; | |||
| private final static String UPDATE_DATE = "updateDate"; | |||
| private final static String UPDATER = "updater"; | |||
| private final static String DEPT_ID = "deptId"; | |||
| @Override | |||
| public void insertFill(MetaObject metaObject) { | |||
| UserDetail user = SecurityUser.getUser(); | |||
| Date date = new Date(); | |||
| //创建者 | |||
| strictInsertFill(metaObject, CREATOR, Long.class, user.getId()); | |||
| //创建时间 | |||
| strictInsertFill(metaObject, CREATE_DATE, Date.class, date); | |||
| //创建者所属部门 | |||
| strictInsertFill(metaObject, DEPT_ID, Long.class, user.getDeptId()); | |||
| //更新者 | |||
| strictInsertFill(metaObject, UPDATER, Long.class, user.getId()); | |||
| //更新时间 | |||
| strictInsertFill(metaObject, UPDATE_DATE, Date.class, date); | |||
| } | |||
| @Override | |||
| public void updateFill(MetaObject metaObject) { | |||
| //更新者 | |||
| strictUpdateFill(metaObject, UPDATER, Long.class, SecurityUser.getUserId()); | |||
| //更新时间 | |||
| strictUpdateFill(metaObject, UPDATE_DATE, Date.class, new Date()); | |||
| } | |||
| } | |||
| @@ -0,0 +1,89 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.interceptor; | |||
| import cn.hutool.core.util.StrUtil; | |||
| import com.baomidou.mybatisplus.core.toolkit.PluginUtils; | |||
| import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; | |||
| import net.sf.jsqlparser.JSQLParserException; | |||
| import net.sf.jsqlparser.expression.Expression; | |||
| import net.sf.jsqlparser.expression.StringValue; | |||
| import net.sf.jsqlparser.expression.operators.conditional.AndExpression; | |||
| import net.sf.jsqlparser.parser.CCJSqlParserUtil; | |||
| import net.sf.jsqlparser.statement.select.PlainSelect; | |||
| import net.sf.jsqlparser.statement.select.Select; | |||
| import org.apache.ibatis.executor.Executor; | |||
| import org.apache.ibatis.mapping.BoundSql; | |||
| import org.apache.ibatis.mapping.MappedStatement; | |||
| import org.apache.ibatis.session.ResultHandler; | |||
| import org.apache.ibatis.session.RowBounds; | |||
| import java.util.Map; | |||
| /** | |||
| * 数据过滤 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| public class DataFilterInterceptor implements InnerInterceptor { | |||
| @Override | |||
| public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { | |||
| DataScope scope = getDataScope(parameter); | |||
| // 不进行数据过滤 | |||
| if(scope == null || StrUtil.isBlank(scope.getSqlFilter())){ | |||
| return; | |||
| } | |||
| // 拼接新SQL | |||
| String buildSql = getSelect(boundSql.getSql(), scope); | |||
| // 重写SQL | |||
| PluginUtils.mpBoundSql(boundSql).sql(buildSql); | |||
| } | |||
| private DataScope getDataScope(Object parameter){ | |||
| if (parameter == null){ | |||
| return null; | |||
| } | |||
| // 判断参数里是否有DataScope对象 | |||
| if (parameter instanceof Map) { | |||
| Map<?, ?> parameterMap = (Map<?, ?>) parameter; | |||
| for (Map.Entry entry : parameterMap.entrySet()) { | |||
| if (entry.getValue() != null && entry.getValue() instanceof DataScope) { | |||
| return (DataScope) entry.getValue(); | |||
| } | |||
| } | |||
| } else if (parameter instanceof DataScope) { | |||
| return (DataScope) parameter; | |||
| } | |||
| return null; | |||
| } | |||
| private String getSelect(String buildSql, DataScope scope){ | |||
| try { | |||
| Select select = (Select) CCJSqlParserUtil.parse(buildSql); | |||
| PlainSelect plainSelect = (PlainSelect) select.getSelectBody(); | |||
| Expression expression = plainSelect.getWhere(); | |||
| if(expression == null){ | |||
| plainSelect.setWhere(new StringValue(scope.getSqlFilter())); | |||
| }else{ | |||
| AndExpression andExpression = new AndExpression(expression, new StringValue(scope.getSqlFilter())); | |||
| plainSelect.setWhere(andExpression); | |||
| } | |||
| return select.toString().replaceAll("'", ""); | |||
| }catch (JSQLParserException e){ | |||
| return buildSql; | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,36 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.interceptor; | |||
| /** | |||
| * 数据范围 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| public class DataScope { | |||
| private String sqlFilter; | |||
| public DataScope(String sqlFilter) { | |||
| this.sqlFilter = sqlFilter; | |||
| } | |||
| public String getSqlFilter() { | |||
| return sqlFilter; | |||
| } | |||
| public void setSqlFilter(String sqlFilter) { | |||
| this.sqlFilter = sqlFilter; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return this.sqlFilter; | |||
| } | |||
| } | |||
| @@ -0,0 +1,77 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.utils; | |||
| import cn.hutool.core.util.StrUtil; | |||
| import cn.hutool.core.util.URLUtil; | |||
| import io.bdty.common.utils.DateUtils; | |||
| import com.alibaba.excel.EasyExcel; | |||
| import com.alibaba.excel.converters.longconverter.LongStringConverter; | |||
| import org.springframework.beans.BeanUtils; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.io.IOException; | |||
| import java.nio.charset.StandardCharsets; | |||
| import java.util.ArrayList; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| /** | |||
| * excel工具类 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| public class ExcelUtils { | |||
| /** | |||
| * Excel导出 | |||
| * | |||
| * @param response response | |||
| * @param fileName 文件名 | |||
| * @param sheetName sheetName | |||
| * @param list 数据List | |||
| * @param pojoClass 对象Class | |||
| */ | |||
| public static void exportExcel(HttpServletResponse response, String fileName, String sheetName, List<?> list, | |||
| Class<?> pojoClass) throws IOException { | |||
| if (StrUtil.isBlank(fileName)) { | |||
| //当前日期 | |||
| fileName = DateUtils.format(new Date()); | |||
| } | |||
| response.setContentType("application/vnd.ms-excel"); | |||
| response.setCharacterEncoding("UTF-8"); | |||
| fileName = URLUtil.encode(fileName, StandardCharsets.UTF_8); | |||
| response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); | |||
| EasyExcel.write(response.getOutputStream(), pojoClass).registerConverter(new LongStringConverter()).sheet(sheetName).doWrite(list); | |||
| } | |||
| /** | |||
| * Excel导出,先sourceList转换成List<targetClass>,再导出 | |||
| * | |||
| * @param response response | |||
| * @param fileName 文件名 | |||
| * @param sheetName sheetName | |||
| * @param sourceList 原数据List | |||
| * @param targetClass 目标对象Class | |||
| */ | |||
| public static void exportExcelToTarget(HttpServletResponse response, String fileName, String sheetName, List<?> sourceList, | |||
| Class<?> targetClass) throws Exception { | |||
| List targetList = new ArrayList<>(sourceList.size()); | |||
| for (Object source : sourceList) { | |||
| Object target = targetClass.newInstance(); | |||
| BeanUtils.copyProperties(source, target); | |||
| targetList.add(target); | |||
| } | |||
| exportExcel(response, fileName, sheetName, targetList, targetClass); | |||
| } | |||
| } | |||
| @@ -0,0 +1,17 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.validator.group; | |||
| /** | |||
| * 阿里云 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| public interface AliyunGroup { | |||
| } | |||
| @@ -0,0 +1,17 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.validator.group; | |||
| /** | |||
| * 腾讯云 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| public interface QcloudGroup { | |||
| } | |||
| @@ -0,0 +1,17 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.common.validator.group; | |||
| /** | |||
| * 七牛 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| public interface QiniuGroup { | |||
| } | |||
| @@ -0,0 +1,123 @@ | |||
| package io.bdty.modules.cniyv.controller; | |||
| import io.bdty.common.annotation.LogOperation; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.utils.ExcelUtils; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.common.validator.AssertUtils; | |||
| import io.bdty.common.validator.ValidatorUtils; | |||
| import io.bdty.common.validator.group.AddGroup; | |||
| import io.bdty.common.validator.group.DefaultGroup; | |||
| import io.bdty.common.validator.group.UpdateGroup; | |||
| import io.bdty.modules.cniyv.dto.CniyvArticleDTO; | |||
| import io.bdty.modules.cniyv.excel.CniyvArticleExcel; | |||
| import io.bdty.modules.cniyv.service.CniyvArticleService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import springfox.documentation.annotations.ApiIgnore; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * 文章 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @RestController | |||
| @RequestMapping("cniyv/cniyvarticle") | |||
| @Api(tags="文章") | |||
| public class CniyvArticleController { | |||
| @Autowired | |||
| private CniyvArticleService cniyvArticleService; | |||
| @GetMapping("page") | |||
| @ApiOperation("分页") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") | |||
| }) | |||
| public Result<PageData<CniyvArticleDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | |||
| PageData<CniyvArticleDTO> page = cniyvArticleService.page(params); | |||
| return new Result<PageData<CniyvArticleDTO>>().ok(page); | |||
| } | |||
| @GetMapping("{id}") | |||
| @ApiOperation("信息") | |||
| @RequiresPermissions("cniyv:cniyvarticle:info") | |||
| public Result<CniyvArticleDTO> get(@PathVariable("id") Long id){ | |||
| CniyvArticleDTO data = cniyvArticleService.get(id); | |||
| return new Result<CniyvArticleDTO>().ok(data); | |||
| } | |||
| @GetMapping("info/{id}") | |||
| @ApiOperation("详情") | |||
| public Result<CniyvArticleDTO> info(@PathVariable("id") Long id){ | |||
| CniyvArticleDTO data = cniyvArticleService.get(id); | |||
| return new Result<CniyvArticleDTO>().ok(data); | |||
| } | |||
| @PostMapping | |||
| @ApiOperation("保存") | |||
| @LogOperation("保存") | |||
| @RequiresPermissions("cniyv:cniyvarticle:save") | |||
| public Result save(@RequestBody CniyvArticleDTO dto){ | |||
| //效验数据 | |||
| ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | |||
| cniyvArticleService.save(dto); | |||
| return new Result(); | |||
| } | |||
| @PutMapping | |||
| @ApiOperation("修改") | |||
| @LogOperation("修改") | |||
| @RequiresPermissions("cniyv:cniyvarticle:update") | |||
| public Result update(@RequestBody CniyvArticleDTO dto){ | |||
| //效验数据 | |||
| ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | |||
| cniyvArticleService.update(dto); | |||
| return new Result(); | |||
| } | |||
| @DeleteMapping | |||
| @ApiOperation("删除") | |||
| @LogOperation("删除") | |||
| @RequiresPermissions("cniyv:cniyvarticle:delete") | |||
| public Result delete(@RequestBody Long[] ids){ | |||
| //效验数据 | |||
| AssertUtils.isArrayEmpty(ids, "id"); | |||
| cniyvArticleService.delete(ids); | |||
| return new Result(); | |||
| } | |||
| @GetMapping("export") | |||
| @ApiOperation("导出") | |||
| @LogOperation("导出") | |||
| @RequiresPermissions("cniyv:cniyvarticle:export") | |||
| public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | |||
| List<CniyvArticleDTO> list = cniyvArticleService.list(params); | |||
| ExcelUtils.exportExcelToTarget(response, null, "文章", list, CniyvArticleExcel.class); | |||
| } | |||
| } | |||
| @@ -0,0 +1,123 @@ | |||
| package io.bdty.modules.cniyv.controller; | |||
| import io.bdty.common.annotation.LogOperation; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.utils.ExcelUtils; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.common.validator.AssertUtils; | |||
| import io.bdty.common.validator.ValidatorUtils; | |||
| import io.bdty.common.validator.group.AddGroup; | |||
| import io.bdty.common.validator.group.DefaultGroup; | |||
| import io.bdty.common.validator.group.UpdateGroup; | |||
| import io.bdty.modules.cniyv.dto.CniyvArticleTypeDTO; | |||
| import io.bdty.modules.cniyv.excel.CniyvArticleTypeExcel; | |||
| import io.bdty.modules.cniyv.service.CniyvArticleTypeService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import springfox.documentation.annotations.ApiIgnore; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * 文章分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @RestController | |||
| @RequestMapping("cniyv/cniyvarticletype") | |||
| @Api(tags="文章分类") | |||
| public class CniyvArticleTypeController { | |||
| @Autowired | |||
| private CniyvArticleTypeService cniyvArticleTypeService; | |||
| @GetMapping("page") | |||
| @ApiOperation("分页") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") | |||
| }) | |||
| public Result<PageData<CniyvArticleTypeDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | |||
| PageData<CniyvArticleTypeDTO> page = cniyvArticleTypeService.page(params); | |||
| return new Result<PageData<CniyvArticleTypeDTO>>().ok(page); | |||
| } | |||
| @GetMapping("{id}") | |||
| @ApiOperation("信息") | |||
| @RequiresPermissions("cniyv:cniyvarticletype:info") | |||
| public Result<CniyvArticleTypeDTO> get(@PathVariable("id") Long id){ | |||
| CniyvArticleTypeDTO data = cniyvArticleTypeService.get(id); | |||
| return new Result<CniyvArticleTypeDTO>().ok(data); | |||
| } | |||
| @GetMapping("info/{id}") | |||
| @ApiOperation("详情") | |||
| public Result<CniyvArticleTypeDTO> info(@PathVariable("id") Long id){ | |||
| CniyvArticleTypeDTO data = cniyvArticleTypeService.get(id); | |||
| return new Result<CniyvArticleTypeDTO>().ok(data); | |||
| } | |||
| @PostMapping | |||
| @ApiOperation("保存") | |||
| @LogOperation("保存") | |||
| @RequiresPermissions("cniyv:cniyvarticletype:save") | |||
| public Result save(@RequestBody CniyvArticleTypeDTO dto){ | |||
| //效验数据 | |||
| ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | |||
| cniyvArticleTypeService.save(dto); | |||
| return new Result(); | |||
| } | |||
| @PutMapping | |||
| @ApiOperation("修改") | |||
| @LogOperation("修改") | |||
| @RequiresPermissions("cniyv:cniyvarticletype:update") | |||
| public Result update(@RequestBody CniyvArticleTypeDTO dto){ | |||
| //效验数据 | |||
| ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | |||
| cniyvArticleTypeService.update(dto); | |||
| return new Result(); | |||
| } | |||
| @DeleteMapping | |||
| @ApiOperation("删除") | |||
| @LogOperation("删除") | |||
| @RequiresPermissions("cniyv:cniyvarticletype:delete") | |||
| public Result delete(@RequestBody Long[] ids){ | |||
| //效验数据 | |||
| AssertUtils.isArrayEmpty(ids, "id"); | |||
| cniyvArticleTypeService.delete(ids); | |||
| return new Result(); | |||
| } | |||
| @GetMapping("export") | |||
| @ApiOperation("导出") | |||
| @LogOperation("导出") | |||
| @RequiresPermissions("cniyv:cniyvarticletype:export") | |||
| public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | |||
| List<CniyvArticleTypeDTO> list = cniyvArticleTypeService.list(params); | |||
| ExcelUtils.exportExcelToTarget(response, null, "文章分类", list, CniyvArticleTypeExcel.class); | |||
| } | |||
| } | |||
| @@ -0,0 +1,164 @@ | |||
| package io.bdty.modules.cniyv.controller; | |||
| import io.bdty.common.annotation.LogOperation; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.utils.ExcelUtils; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.common.validator.AssertUtils; | |||
| import io.bdty.common.validator.ValidatorUtils; | |||
| import io.bdty.common.validator.group.AddGroup; | |||
| import io.bdty.common.validator.group.DefaultGroup; | |||
| import io.bdty.common.validator.group.UpdateGroup; | |||
| import io.bdty.modules.cniyv.dto.CniyvProductDTO; | |||
| import io.bdty.modules.cniyv.dto.CniyvProductTypeDTO; | |||
| import io.bdty.modules.cniyv.excel.CniyvProductExcel; | |||
| import io.bdty.modules.cniyv.service.CniyvProductService; | |||
| import io.bdty.modules.cniyv.service.CniyvProductTypeService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import springfox.documentation.annotations.ApiIgnore; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.io.UnsupportedEncodingException; | |||
| import java.net.URLDecoder; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * 产品 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-12 | |||
| */ | |||
| @RestController | |||
| @RequestMapping("cniyv/cniyvproduct") | |||
| @Api(tags="产品") | |||
| public class CniyvProductController { | |||
| @Autowired | |||
| private CniyvProductService cniyvProductService; | |||
| @Autowired | |||
| private CniyvProductTypeService cniyvProductTypeService; | |||
| @GetMapping("page") | |||
| @ApiOperation("分页") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") | |||
| }) | |||
| public Result<PageData<CniyvProductDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | |||
| PageData<CniyvProductDTO> page = cniyvProductService.page(params); | |||
| for (CniyvProductDTO product : page.getList()) { | |||
| if (product.getTypeid()!=null) { | |||
| CniyvProductTypeDTO typeDTO = cniyvProductTypeService.get(product.getTypeid()); | |||
| product.setType(typeDTO!=null?typeDTO.getName():""); | |||
| } | |||
| } | |||
| return new Result<PageData<CniyvProductDTO>>().ok(page); | |||
| } | |||
| @GetMapping("{id}") | |||
| @ApiOperation("信息") | |||
| @RequiresPermissions("cniyv:cniyvproduct:info") | |||
| public Result<CniyvProductDTO> get(@PathVariable("id") Long id){ | |||
| CniyvProductDTO data = cniyvProductService.get(id); | |||
| if (data.getTypeid()!=null) { | |||
| CniyvProductTypeDTO typeDTO = cniyvProductTypeService.get(data.getTypeid()); | |||
| data.setType(typeDTO!=null?typeDTO.getName():""); | |||
| } | |||
| return new Result<CniyvProductDTO>().ok(data); | |||
| } | |||
| @GetMapping("info/{id}") | |||
| @ApiOperation("详情") | |||
| public Result<CniyvProductDTO> info(@PathVariable("id") Long id){ | |||
| CniyvProductDTO data = cniyvProductService.get(id); | |||
| if (data.getTypeid()!=null) { | |||
| CniyvProductTypeDTO typeDTO = cniyvProductTypeService.get(data.getTypeid()); | |||
| data.setType(typeDTO!=null?typeDTO.getName():""); | |||
| } | |||
| return new Result<CniyvProductDTO>().ok(data); | |||
| } | |||
| @PostMapping | |||
| @ApiOperation("保存") | |||
| @LogOperation("保存") | |||
| @RequiresPermissions("cniyv:cniyvproduct:save") | |||
| public Result save(@RequestBody CniyvProductDTO dto){ | |||
| //效验数据 | |||
| ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | |||
| try { | |||
| String content = URLDecoder.decode(dto.getContent(), "UTF-8"); | |||
| dto.setContent(content); | |||
| } catch (UnsupportedEncodingException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| } | |||
| cniyvProductService.save(dto); | |||
| return new Result(); | |||
| } | |||
| @PutMapping | |||
| @ApiOperation("修改") | |||
| @LogOperation("修改") | |||
| @RequiresPermissions("cniyv:cniyvproduct:update") | |||
| public Result update(@RequestBody CniyvProductDTO dto){ | |||
| //效验数据 | |||
| ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | |||
| try { | |||
| String content = URLDecoder.decode(dto.getContent(), "UTF-8"); | |||
| dto.setContent(content); | |||
| } catch (UnsupportedEncodingException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| } | |||
| cniyvProductService.update(dto); | |||
| return new Result(); | |||
| } | |||
| @DeleteMapping | |||
| @ApiOperation("删除") | |||
| @LogOperation("删除") | |||
| @RequiresPermissions("cniyv:cniyvproduct:delete") | |||
| public Result delete(@RequestBody Long[] ids){ | |||
| //效验数据 | |||
| AssertUtils.isArrayEmpty(ids, "id"); | |||
| cniyvProductService.delete(ids); | |||
| return new Result(); | |||
| } | |||
| @GetMapping("export") | |||
| @ApiOperation("导出") | |||
| @LogOperation("导出") | |||
| @RequiresPermissions("cniyv:cniyvproduct:export") | |||
| public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | |||
| List<CniyvProductDTO> list = cniyvProductService.list(params); | |||
| ExcelUtils.exportExcelToTarget(response, null, "产品", list, CniyvProductExcel.class); | |||
| } | |||
| @GetMapping("list") | |||
| @ApiOperation("列表") | |||
| public Result<List<CniyvProductDTO>> list(@ApiIgnore @RequestParam Map<String, Object> params) { | |||
| List<CniyvProductDTO> list = cniyvProductService.list(params); | |||
| return new Result<List<CniyvProductDTO>>().ok(list); | |||
| } | |||
| } | |||
| @@ -0,0 +1,180 @@ | |||
| package io.bdty.modules.cniyv.controller; | |||
| import io.bdty.common.annotation.LogOperation; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.utils.ExcelUtils; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.common.validator.AssertUtils; | |||
| import io.bdty.common.validator.ValidatorUtils; | |||
| import io.bdty.common.validator.group.AddGroup; | |||
| import io.bdty.common.validator.group.DefaultGroup; | |||
| import io.bdty.common.validator.group.UpdateGroup; | |||
| import io.bdty.modules.cniyv.dto.CniyvProductDTO; | |||
| import io.bdty.modules.cniyv.dto.CniyvProductTypeDTO; | |||
| import io.bdty.modules.cniyv.excel.CniyvProductTypeExcel; | |||
| import io.bdty.modules.cniyv.service.CniyvProductService; | |||
| import io.bdty.modules.cniyv.service.CniyvProductTypeService; | |||
| import io.bdty.modules.sys.dto.SysMenuDTO; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import org.apache.poi.poifs.property.Parent; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import springfox.documentation.annotations.ApiIgnore; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.HashMap; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * 产品分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @RestController | |||
| @RequestMapping("cniyv/cniyvproducttype") | |||
| @Api(tags="产品分类") | |||
| public class CniyvProductTypeController { | |||
| @Autowired | |||
| private CniyvProductTypeService cniyvProductTypeService; | |||
| @Autowired | |||
| private CniyvProductService cniyvProductService; | |||
| @GetMapping("page") | |||
| @ApiOperation("分页") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") , | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") | |||
| }) | |||
| public Result<PageData<CniyvProductTypeDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){ | |||
| PageData<CniyvProductTypeDTO> page = cniyvProductTypeService.page(params); | |||
| for (CniyvProductTypeDTO cniyvProductTypeDTO : page.getList()) { | |||
| if (cniyvProductTypeDTO.getParentid()!=null) { | |||
| CniyvProductTypeDTO parent = cniyvProductTypeService.get(cniyvProductTypeDTO.getParentid()); | |||
| cniyvProductTypeDTO.setParentName(parent!=null?parent.getName():""); | |||
| } | |||
| } | |||
| return new Result<PageData<CniyvProductTypeDTO>>().ok(page); | |||
| } | |||
| @GetMapping("{id}") | |||
| @ApiOperation("信息") | |||
| @RequiresPermissions("cniyv:cniyvproducttype:info") | |||
| public Result<CniyvProductTypeDTO> get(@PathVariable("id") Long id){ | |||
| CniyvProductTypeDTO data = cniyvProductTypeService.get(id); | |||
| CniyvProductTypeDTO parent = cniyvProductTypeService.get(data.getParentid()); | |||
| data.setParentName(parent!=null?parent.getName():""); | |||
| return new Result<CniyvProductTypeDTO>().ok(data); | |||
| } | |||
| @GetMapping("info/{id}") | |||
| @ApiOperation("详情") | |||
| public Result<CniyvProductTypeDTO> info(@PathVariable("id") Long id){ | |||
| CniyvProductTypeDTO data = cniyvProductTypeService.get(id); | |||
| CniyvProductTypeDTO parent = cniyvProductTypeService.get(data.getParentid()); | |||
| data.setParentName(parent!=null?parent.getName():""); | |||
| return new Result<CniyvProductTypeDTO>().ok(data); | |||
| } | |||
| @PostMapping | |||
| @ApiOperation("保存") | |||
| @LogOperation("保存") | |||
| @RequiresPermissions("cniyv:cniyvproducttype:save") | |||
| public Result save(@RequestBody CniyvProductTypeDTO dto){ | |||
| //效验数据 | |||
| ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | |||
| cniyvProductTypeService.save(dto); | |||
| return new Result(); | |||
| } | |||
| @PutMapping | |||
| @ApiOperation("修改") | |||
| @LogOperation("修改") | |||
| @RequiresPermissions("cniyv:cniyvproducttype:update") | |||
| public Result update(@RequestBody CniyvProductTypeDTO dto){ | |||
| //效验数据 | |||
| ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | |||
| cniyvProductTypeService.update(dto); | |||
| return new Result(); | |||
| } | |||
| @DeleteMapping | |||
| @ApiOperation("删除") | |||
| @LogOperation("删除") | |||
| @RequiresPermissions("cniyv:cniyvproducttype:delete") | |||
| public Result delete(@RequestBody Long[] ids){ | |||
| //效验数据 | |||
| AssertUtils.isArrayEmpty(ids, "id"); | |||
| cniyvProductTypeService.delete(ids); | |||
| return new Result(); | |||
| } | |||
| @GetMapping("export") | |||
| @ApiOperation("导出") | |||
| @LogOperation("导出") | |||
| @RequiresPermissions("cniyv:cniyvproducttype:export") | |||
| public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | |||
| List<CniyvProductTypeDTO> list = cniyvProductTypeService.list(params); | |||
| ExcelUtils.exportExcelToTarget(response, null, "产品分类", list, CniyvProductTypeExcel.class); | |||
| } | |||
| @GetMapping("list") | |||
| @ApiOperation("列表") | |||
| public Result<List<CniyvProductTypeDTO>> list(@ApiIgnore @RequestParam Map<String, Object> params) { | |||
| List<CniyvProductTypeDTO> list = cniyvProductTypeService.list(params); | |||
| return new Result<List<CniyvProductTypeDTO>>().ok(list); | |||
| } | |||
| @GetMapping("listProduct") | |||
| @ApiOperation("产品分类含分类下产品列表") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") , | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") , | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String"), | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") | |||
| }) | |||
| public Result<List<CniyvProductTypeDTO>> listProduct(@ApiIgnore @RequestParam Map<String, Object> params){ | |||
| PageData<CniyvProductTypeDTO> page = cniyvProductTypeService.page(params); | |||
| List<CniyvProductTypeDTO> list = page.getList(); | |||
| Map<String, Object> productParams = new HashMap<String, Object>(); | |||
| for (CniyvProductTypeDTO cniyvProductTypeDTO : list) { | |||
| productParams.put(Constant.PAGE, "1"); | |||
| productParams.put(Constant.ORDER_FIELD, "count"); | |||
| productParams.put(Constant.ORDER, "desc"); | |||
| productParams.put(Constant.LIMIT, "4"); | |||
| productParams.put("typeid", String.valueOf(cniyvProductTypeDTO.getPtsid())); | |||
| PageData<CniyvProductDTO> productPage = cniyvProductService.page(productParams); | |||
| List<CniyvProductDTO> productlist = productPage.getList(); | |||
| for (CniyvProductDTO product : productlist) { | |||
| if (product.getTypeid()!=null) { | |||
| CniyvProductTypeDTO typeDTO = cniyvProductTypeService.get(product.getTypeid()); | |||
| product.setType(typeDTO!=null?typeDTO.getName():""); | |||
| } | |||
| } | |||
| cniyvProductTypeDTO.setProductList(productlist); | |||
| } | |||
| return new Result<List<CniyvProductTypeDTO>>().ok(list); | |||
| } | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| package io.bdty.modules.cniyv.dao; | |||
| import io.bdty.common.dao.BaseDao; | |||
| import io.bdty.modules.cniyv.entity.CniyvArticleEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 文章 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Mapper | |||
| public interface CniyvArticleDao extends BaseDao<CniyvArticleEntity> { | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| package io.bdty.modules.cniyv.dao; | |||
| import io.bdty.common.dao.BaseDao; | |||
| import io.bdty.modules.cniyv.entity.CniyvArticleTypeEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 文章分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Mapper | |||
| public interface CniyvArticleTypeDao extends BaseDao<CniyvArticleTypeEntity> { | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| package io.bdty.modules.cniyv.dao; | |||
| import io.bdty.common.dao.BaseDao; | |||
| import io.bdty.modules.cniyv.entity.CniyvProductEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 产品 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Mapper | |||
| public interface CniyvProductDao extends BaseDao<CniyvProductEntity> { | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| package io.bdty.modules.cniyv.dao; | |||
| import io.bdty.common.dao.BaseDao; | |||
| import io.bdty.modules.cniyv.entity.CniyvProductTypeEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 产品分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Mapper | |||
| public interface CniyvProductTypeDao extends BaseDao<CniyvProductTypeEntity> { | |||
| } | |||
| @@ -0,0 +1,50 @@ | |||
| package io.bdty.modules.cniyv.dto; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * 文章 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| @ApiModel(value = "文章") | |||
| public class CniyvArticleDTO implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "") | |||
| private Long ptsid; | |||
| @ApiModelProperty(value = "") | |||
| private String title; | |||
| @ApiModelProperty(value = "") | |||
| private String content; | |||
| @ApiModelProperty(value = "") | |||
| private Long typeid; | |||
| @ApiModelProperty(value = "") | |||
| private Long creator; | |||
| @ApiModelProperty(value = "") | |||
| private Integer taix; | |||
| @ApiModelProperty(value = "") | |||
| private String thumbnail; | |||
| @ApiModelProperty(value = "统计") | |||
| private Integer count; | |||
| @ApiModelProperty(value = "") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,53 @@ | |||
| package io.bdty.modules.cniyv.dto; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * 文章分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| @ApiModel(value = "文章分类") | |||
| public class CniyvArticleTypeDTO implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "") | |||
| private Long ptsid; | |||
| @ApiModelProperty(value = "") | |||
| private Integer zntid; | |||
| @ApiModelProperty(value = "") | |||
| private String name; | |||
| @ApiModelProperty(value = "") | |||
| private Integer parentid; | |||
| @ApiModelProperty(value = "") | |||
| private Integer selectid; | |||
| @ApiModelProperty(value = "") | |||
| private String link; | |||
| @ApiModelProperty(value = "") | |||
| private String thumbnail; | |||
| @ApiModelProperty(value = "") | |||
| private Integer sort; | |||
| @ApiModelProperty(value = "") | |||
| private Long creator; | |||
| @ApiModelProperty(value = "") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,75 @@ | |||
| package io.bdty.modules.cniyv.dto; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * 产品 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| @ApiModel(value = "产品") | |||
| public class CniyvProductDTO implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "") | |||
| private Long ptsid; | |||
| @ApiModelProperty(value = "") | |||
| private String title; | |||
| @ApiModelProperty(value = "") | |||
| private String content; | |||
| @ApiModelProperty(value = "产品优势") | |||
| private String content1; | |||
| @ApiModelProperty(value = "产品特点") | |||
| private String content2; | |||
| @ApiModelProperty(value = "产品参数") | |||
| private String content3; | |||
| @ApiModelProperty(value = "价格") | |||
| private Float price; | |||
| @ApiModelProperty(value = "市场价") | |||
| private String nprice; | |||
| @ApiModelProperty(value = "数量") | |||
| private Integer quantity; | |||
| @ApiModelProperty(value = "") | |||
| private Long typeid; | |||
| @ApiModelProperty(value = "") | |||
| private Long creator; | |||
| @ApiModelProperty(value = "") | |||
| private Integer taix; | |||
| @ApiModelProperty(value = "") | |||
| private String thumbnail; | |||
| @ApiModelProperty(value = "统计") | |||
| private Integer count; | |||
| @ApiModelProperty(value = "") | |||
| private Date createDate; | |||
| @ApiModelProperty(value = "类型名称") | |||
| private String type; | |||
| @ApiModelProperty(value = "展示图") | |||
| private String imgs; | |||
| } | |||
| @@ -0,0 +1,59 @@ | |||
| package io.bdty.modules.cniyv.dto; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| /** | |||
| * 产品分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| @ApiModel(value = "产品分类") | |||
| public class CniyvProductTypeDTO implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "") | |||
| private Long ptsid; | |||
| @ApiModelProperty(value = "") | |||
| private Integer zntid; | |||
| @ApiModelProperty(value = "") | |||
| private String name; | |||
| @ApiModelProperty(value = "") | |||
| private Long parentid; | |||
| @ApiModelProperty(value = "") | |||
| private Integer selectid; | |||
| @ApiModelProperty(value = "") | |||
| private String link; | |||
| @ApiModelProperty(value = "") | |||
| private String thumbnail; | |||
| @ApiModelProperty(value = "") | |||
| private Integer sort; | |||
| @ApiModelProperty(value = "") | |||
| private Long creator; | |||
| @ApiModelProperty(value = "") | |||
| private Date createDate; | |||
| @ApiModelProperty(value = "") | |||
| private String parentName; | |||
| @ApiModelProperty(value = "产品列表") | |||
| private List<CniyvProductDTO> productList; | |||
| } | |||
| @@ -0,0 +1,62 @@ | |||
| package io.bdty.modules.cniyv.entity; | |||
| import com.baomidou.mybatisplus.annotation.FieldFill; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 文章 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| @TableName("cniyv_article") | |||
| public class CniyvArticleEntity { | |||
| /** | |||
| * | |||
| */ | |||
| @TableId | |||
| private Long ptsid; | |||
| /** | |||
| * | |||
| */ | |||
| private String title; | |||
| /** | |||
| * | |||
| */ | |||
| private String content; | |||
| /** | |||
| * | |||
| */ | |||
| private Long typeid; | |||
| /** | |||
| * | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| private Long creator; | |||
| /** | |||
| * | |||
| */ | |||
| private Integer taix; | |||
| /** | |||
| * | |||
| */ | |||
| private String thumbnail; | |||
| /** | |||
| * 统计 | |||
| */ | |||
| private Integer count; | |||
| /** | |||
| * | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,66 @@ | |||
| package io.bdty.modules.cniyv.entity; | |||
| import com.baomidou.mybatisplus.annotation.FieldFill; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 文章分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| @TableName("cniyv_article_type") | |||
| public class CniyvArticleTypeEntity { | |||
| /** | |||
| * | |||
| */ | |||
| @TableId | |||
| private Long ptsid; | |||
| /** | |||
| * | |||
| */ | |||
| private Integer zntid; | |||
| /** | |||
| * | |||
| */ | |||
| private String name; | |||
| /** | |||
| * | |||
| */ | |||
| private Integer parentid; | |||
| /** | |||
| * | |||
| */ | |||
| private Integer selectid; | |||
| /** | |||
| * | |||
| */ | |||
| private String link; | |||
| /** | |||
| * | |||
| */ | |||
| private String thumbnail; | |||
| /** | |||
| * | |||
| */ | |||
| private Integer sort; | |||
| /** | |||
| * | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| private Long creator; | |||
| /** | |||
| * | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,90 @@ | |||
| package io.bdty.modules.cniyv.entity; | |||
| import com.baomidou.mybatisplus.annotation.FieldFill; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 产品 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| @TableName("cniyv_product") | |||
| public class CniyvProductEntity { | |||
| /** | |||
| * | |||
| */ | |||
| @TableId | |||
| private Long ptsid; | |||
| /** | |||
| * | |||
| */ | |||
| private String title; | |||
| /** | |||
| * | |||
| */ | |||
| private String content; | |||
| /** | |||
| * 产品优势 | |||
| */ | |||
| private String content1; | |||
| /** | |||
| * 产品特点 | |||
| */ | |||
| private String content2; | |||
| /** | |||
| * 产品参数 | |||
| */ | |||
| private String content3; | |||
| /** | |||
| * 价格 | |||
| */ | |||
| private Float price; | |||
| /** | |||
| * 市场价 | |||
| */ | |||
| private String nprice; | |||
| /** | |||
| * 数量 | |||
| */ | |||
| private Integer quantity; | |||
| /** | |||
| * | |||
| */ | |||
| private Long typeid; | |||
| /** | |||
| * | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| private Long creator; | |||
| /** | |||
| * | |||
| */ | |||
| private Integer taix; | |||
| /** | |||
| * | |||
| */ | |||
| private String thumbnail; | |||
| /** | |||
| * 统计 | |||
| */ | |||
| private Integer count; | |||
| /** 展示图 | |||
| */ | |||
| private String imgs; | |||
| /** | |||
| * | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,66 @@ | |||
| package io.bdty.modules.cniyv.entity; | |||
| import com.baomidou.mybatisplus.annotation.FieldFill; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 产品分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| @TableName("cniyv_product_type") | |||
| public class CniyvProductTypeEntity { | |||
| /** | |||
| * | |||
| */ | |||
| @TableId | |||
| private Long ptsid; | |||
| /** | |||
| * | |||
| */ | |||
| private Integer zntid; | |||
| /** | |||
| * | |||
| */ | |||
| private String name; | |||
| /** | |||
| * | |||
| */ | |||
| private Long parentid; | |||
| /** | |||
| * | |||
| */ | |||
| private Integer selectid; | |||
| /** | |||
| * | |||
| */ | |||
| private String link; | |||
| /** | |||
| * | |||
| */ | |||
| private String thumbnail; | |||
| /** | |||
| * | |||
| */ | |||
| private Integer sort; | |||
| /** | |||
| * | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| private Long creator; | |||
| /** | |||
| * | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT) | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,38 @@ | |||
| package io.bdty.modules.cniyv.excel; | |||
| import com.alibaba.excel.annotation.ExcelProperty; | |||
| import com.alibaba.excel.annotation.write.style.ColumnWidth; | |||
| import com.alibaba.excel.annotation.write.style.ContentRowHeight; | |||
| import com.alibaba.excel.annotation.write.style.HeadRowHeight; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 文章 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| public class CniyvArticleExcel { | |||
| @ExcelProperty(value = "") | |||
| private Long ptsid; | |||
| @ExcelProperty(value = "") | |||
| private String title; | |||
| @ExcelProperty(value = "") | |||
| private String content; | |||
| @ExcelProperty(value = "") | |||
| private Long typeid; | |||
| @ExcelProperty(value = "") | |||
| private Long creator; | |||
| @ExcelProperty(value = "") | |||
| private Integer taix; | |||
| @ExcelProperty(value = "") | |||
| private String thumbnail; | |||
| @ExcelProperty(value = "统计") | |||
| private Integer count; | |||
| @ExcelProperty(value = "") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,40 @@ | |||
| package io.bdty.modules.cniyv.excel; | |||
| import com.alibaba.excel.annotation.ExcelProperty; | |||
| import com.alibaba.excel.annotation.write.style.ColumnWidth; | |||
| import com.alibaba.excel.annotation.write.style.ContentRowHeight; | |||
| import com.alibaba.excel.annotation.write.style.HeadRowHeight; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 文章分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| public class CniyvArticleTypeExcel { | |||
| @ExcelProperty(value = "") | |||
| private Long ptsid; | |||
| @ExcelProperty(value = "") | |||
| private Integer zntid; | |||
| @ExcelProperty(value = "") | |||
| private String name; | |||
| @ExcelProperty(value = "") | |||
| private Integer parentid; | |||
| @ExcelProperty(value = "") | |||
| private Integer selectid; | |||
| @ExcelProperty(value = "") | |||
| private String link; | |||
| @ExcelProperty(value = "") | |||
| private String thumbnail; | |||
| @ExcelProperty(value = "") | |||
| private Integer sort; | |||
| @ExcelProperty(value = "") | |||
| private Long creator; | |||
| @ExcelProperty(value = "") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,50 @@ | |||
| package io.bdty.modules.cniyv.excel; | |||
| import com.alibaba.excel.annotation.ExcelProperty; | |||
| import com.alibaba.excel.annotation.write.style.ColumnWidth; | |||
| import com.alibaba.excel.annotation.write.style.ContentRowHeight; | |||
| import com.alibaba.excel.annotation.write.style.HeadRowHeight; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 产品 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| public class CniyvProductExcel { | |||
| @ExcelProperty(value = "") | |||
| private Long ptsid; | |||
| @ExcelProperty(value = "") | |||
| private String title; | |||
| @ExcelProperty(value = "") | |||
| private String content; | |||
| @ExcelProperty(value = "产品优势") | |||
| private String content1; | |||
| @ExcelProperty(value = "产品特点") | |||
| private String content2; | |||
| @ExcelProperty(value = "产品参数") | |||
| private String content3; | |||
| @ExcelProperty(value = "价格") | |||
| private Float price; | |||
| @ExcelProperty(value = "市场价") | |||
| private String nprice; | |||
| @ExcelProperty(value = "数量") | |||
| private Integer quantity; | |||
| @ExcelProperty(value = "") | |||
| private Long typeid; | |||
| @ExcelProperty(value = "") | |||
| private Long creator; | |||
| @ExcelProperty(value = "") | |||
| private Integer taix; | |||
| @ExcelProperty(value = "") | |||
| private String thumbnail; | |||
| @ExcelProperty(value = "统计") | |||
| private Integer count; | |||
| @ExcelProperty(value = "") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,48 @@ | |||
| package io.bdty.modules.cniyv.excel; | |||
| import com.alibaba.excel.annotation.ExcelProperty; | |||
| import com.alibaba.excel.annotation.write.style.ColumnWidth; | |||
| import com.alibaba.excel.annotation.write.style.ContentRowHeight; | |||
| import com.alibaba.excel.annotation.write.style.HeadRowHeight; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 产品 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 2024-01-18 | |||
| */ | |||
| @Data | |||
| public class CniyvProductListExcel { | |||
| @ExcelProperty(value = "") | |||
| private Integer ptsid; | |||
| @ExcelProperty(value = "") | |||
| private String title; | |||
| @ExcelProperty(value = "") | |||
| private String content; | |||
| @ExcelProperty(value = "产品优势") | |||
| private String content1; | |||
| @ExcelProperty(value = "产品特点") | |||
| private String content2; | |||
| @ExcelProperty(value = "产品参数") | |||
| private String content3; | |||
| @ExcelProperty(value = "价格") | |||
| private Float price; | |||
| @ExcelProperty(value = "数量") | |||
| private Float quantity; | |||
| @ExcelProperty(value = "") | |||
| private Integer typeid; | |||
| @ExcelProperty(value = "") | |||
| private Integer admin; | |||
| @ExcelProperty(value = "") | |||
| private Integer taix; | |||
| @ExcelProperty(value = "") | |||
| private String thumbnail; | |||
| @ExcelProperty(value = "统计") | |||
| private Integer count; | |||
| @ExcelProperty(value = "") | |||
| private Integer addtime; | |||
| } | |||
| @@ -0,0 +1,40 @@ | |||
| package io.bdty.modules.cniyv.excel; | |||
| import com.alibaba.excel.annotation.ExcelProperty; | |||
| import com.alibaba.excel.annotation.write.style.ColumnWidth; | |||
| import com.alibaba.excel.annotation.write.style.ContentRowHeight; | |||
| import com.alibaba.excel.annotation.write.style.HeadRowHeight; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 产品分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Data | |||
| public class CniyvProductTypeExcel { | |||
| @ExcelProperty(value = "") | |||
| private Long ptsid; | |||
| @ExcelProperty(value = "") | |||
| private Integer zntid; | |||
| @ExcelProperty(value = "") | |||
| private String name; | |||
| @ExcelProperty(value = "") | |||
| private Integer parentid; | |||
| @ExcelProperty(value = "") | |||
| private Integer selectid; | |||
| @ExcelProperty(value = "") | |||
| private String link; | |||
| @ExcelProperty(value = "") | |||
| private String thumbnail; | |||
| @ExcelProperty(value = "") | |||
| private Integer sort; | |||
| @ExcelProperty(value = "") | |||
| private Long creator; | |||
| @ExcelProperty(value = "") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,15 @@ | |||
| package io.bdty.modules.cniyv.service; | |||
| import io.bdty.common.service.CrudService; | |||
| import io.bdty.modules.cniyv.dto.CniyvArticleDTO; | |||
| import io.bdty.modules.cniyv.entity.CniyvArticleEntity; | |||
| /** | |||
| * 文章 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| public interface CniyvArticleService extends CrudService<CniyvArticleEntity, CniyvArticleDTO> { | |||
| } | |||
| @@ -0,0 +1,15 @@ | |||
| package io.bdty.modules.cniyv.service; | |||
| import io.bdty.common.service.CrudService; | |||
| import io.bdty.modules.cniyv.dto.CniyvArticleTypeDTO; | |||
| import io.bdty.modules.cniyv.entity.CniyvArticleTypeEntity; | |||
| /** | |||
| * 文章分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| public interface CniyvArticleTypeService extends CrudService<CniyvArticleTypeEntity, CniyvArticleTypeDTO> { | |||
| } | |||
| @@ -0,0 +1,15 @@ | |||
| package io.bdty.modules.cniyv.service; | |||
| import io.bdty.common.service.CrudService; | |||
| import io.bdty.modules.cniyv.dto.CniyvProductDTO; | |||
| import io.bdty.modules.cniyv.entity.CniyvProductEntity; | |||
| /** | |||
| * 产品 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| public interface CniyvProductService extends CrudService<CniyvProductEntity, CniyvProductDTO> { | |||
| } | |||
| @@ -0,0 +1,15 @@ | |||
| package io.bdty.modules.cniyv.service; | |||
| import io.bdty.common.service.CrudService; | |||
| import io.bdty.modules.cniyv.dto.CniyvProductTypeDTO; | |||
| import io.bdty.modules.cniyv.entity.CniyvProductTypeEntity; | |||
| /** | |||
| * 产品分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| public interface CniyvProductTypeService extends CrudService<CniyvProductTypeEntity, CniyvProductTypeDTO> { | |||
| } | |||
| @@ -0,0 +1,34 @@ | |||
| package io.bdty.modules.cniyv.service.impl; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import io.bdty.common.service.impl.CrudServiceImpl; | |||
| import io.bdty.modules.cniyv.dao.CniyvArticleDao; | |||
| import io.bdty.modules.cniyv.dto.CniyvArticleDTO; | |||
| import io.bdty.modules.cniyv.entity.CniyvArticleEntity; | |||
| import io.bdty.modules.cniyv.service.CniyvArticleService; | |||
| import cn.hutool.core.util.StrUtil; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.Map; | |||
| /** | |||
| * 文章 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Service | |||
| public class CniyvArticleServiceImpl extends CrudServiceImpl<CniyvArticleDao, CniyvArticleEntity, CniyvArticleDTO> implements CniyvArticleService { | |||
| @Override | |||
| public QueryWrapper<CniyvArticleEntity> getWrapper(Map<String, Object> params){ | |||
| String id = (String)params.get("id"); | |||
| QueryWrapper<CniyvArticleEntity> wrapper = new QueryWrapper<>(); | |||
| wrapper.eq(StrUtil.isNotBlank(id), "id", id); | |||
| return wrapper; | |||
| } | |||
| } | |||
| @@ -0,0 +1,34 @@ | |||
| package io.bdty.modules.cniyv.service.impl; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import io.bdty.common.service.impl.CrudServiceImpl; | |||
| import io.bdty.modules.cniyv.dao.CniyvArticleTypeDao; | |||
| import io.bdty.modules.cniyv.dto.CniyvArticleTypeDTO; | |||
| import io.bdty.modules.cniyv.entity.CniyvArticleTypeEntity; | |||
| import io.bdty.modules.cniyv.service.CniyvArticleTypeService; | |||
| import cn.hutool.core.util.StrUtil; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.Map; | |||
| /** | |||
| * 文章分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Service | |||
| public class CniyvArticleTypeServiceImpl extends CrudServiceImpl<CniyvArticleTypeDao, CniyvArticleTypeEntity, CniyvArticleTypeDTO> implements CniyvArticleTypeService { | |||
| @Override | |||
| public QueryWrapper<CniyvArticleTypeEntity> getWrapper(Map<String, Object> params){ | |||
| String id = (String)params.get("id"); | |||
| QueryWrapper<CniyvArticleTypeEntity> wrapper = new QueryWrapper<>(); | |||
| wrapper.eq(StrUtil.isNotBlank(id), "id", id); | |||
| return wrapper; | |||
| } | |||
| } | |||
| @@ -0,0 +1,47 @@ | |||
| package io.bdty.modules.cniyv.service.impl; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.service.impl.CrudServiceImpl; | |||
| import io.bdty.modules.cniyv.dao.CniyvProductDao; | |||
| import io.bdty.modules.cniyv.dto.CniyvProductDTO; | |||
| import io.bdty.modules.cniyv.entity.CniyvProductEntity; | |||
| import io.bdty.modules.cniyv.service.CniyvProductService; | |||
| import cn.hutool.core.util.StrUtil; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.Map; | |||
| /** | |||
| * 产品 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-12 | |||
| */ | |||
| @Service | |||
| public class CniyvProductServiceImpl extends CrudServiceImpl<CniyvProductDao, CniyvProductEntity, CniyvProductDTO> implements CniyvProductService { | |||
| @Override | |||
| public QueryWrapper<CniyvProductEntity> getWrapper(Map<String, Object> params){ | |||
| String id = (String)params.get("id"); | |||
| String typeid = (String)params.get("typeid"); | |||
| // String orderField = (String)params.get("orderField"); | |||
| // String order = (String)params.get("order"); | |||
| // boolean isAsc = true; | |||
| // if (order!=null) { | |||
| // if (order.equals(Constant.DESC)) { | |||
| // isAsc = false; | |||
| // } | |||
| // } | |||
| QueryWrapper<CniyvProductEntity> wrapper = new QueryWrapper<>(); | |||
| wrapper.eq(StrUtil.isNotBlank(id), "id", id); | |||
| wrapper.eq(StrUtil.isNotBlank(typeid), "typeid", typeid); | |||
| //wrapper.orderBy(StrUtil.isNotBlank(orderField), isAsc, orderField); | |||
| return wrapper; | |||
| } | |||
| } | |||
| @@ -0,0 +1,44 @@ | |||
| package io.bdty.modules.cniyv.service.impl; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.service.impl.CrudServiceImpl; | |||
| import io.bdty.modules.cniyv.dao.CniyvProductTypeDao; | |||
| import io.bdty.modules.cniyv.dto.CniyvProductTypeDTO; | |||
| import io.bdty.modules.cniyv.entity.CniyvProductTypeEntity; | |||
| import io.bdty.modules.cniyv.service.CniyvProductTypeService; | |||
| import cn.hutool.core.util.StrUtil; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.Map; | |||
| /** | |||
| * 产品分类 | |||
| * | |||
| * @author zxj zxj | |||
| * @since 1.0.0 2024-03-13 | |||
| */ | |||
| @Service | |||
| public class CniyvProductTypeServiceImpl extends CrudServiceImpl<CniyvProductTypeDao, CniyvProductTypeEntity, CniyvProductTypeDTO> implements CniyvProductTypeService { | |||
| @Override | |||
| public QueryWrapper<CniyvProductTypeEntity> getWrapper(Map<String, Object> params){ | |||
| String id = (String)params.get("id"); | |||
| // String orderField = (String)params.get("orderField"); | |||
| // String order = (String)params.get("order"); | |||
| // boolean isAsc = true; | |||
| // if (order!=null) { | |||
| // if (order.equals(Constant.DESC)) { | |||
| // isAsc = false; | |||
| // } | |||
| // } | |||
| QueryWrapper<CniyvProductTypeEntity> wrapper = new QueryWrapper<>(); | |||
| wrapper.eq(StrUtil.isNotBlank(id), "id", id); | |||
| // wrapper.orderBy(StrUtil.isNotBlank(orderField), isAsc, orderField); | |||
| return wrapper; | |||
| } | |||
| } | |||
| @@ -0,0 +1,67 @@ | |||
| package io.bdty.modules.job.config; | |||
| ///** | |||
| // * Copyright (c) 2018 人人开源 All rights reserved. | |||
| // * | |||
| // * https://www.renren.io | |||
| // * | |||
| // * 版权所有,侵权必究! | |||
| // */ | |||
| // | |||
| //package io.bdty.modules.job.config; | |||
| // | |||
| //import org.springframework.context.annotation.Bean; | |||
| //import org.springframework.context.annotation.Configuration; | |||
| //import org.springframework.scheduling.quartz.SchedulerFactoryBean; | |||
| // | |||
| //import javax.sql.DataSource; | |||
| //import java.util.Properties; | |||
| // | |||
| ///** | |||
| // * 定时任务配置(备注:集群需要打开注释) | |||
| // * | |||
| // * @author Mark sunlightcs@gmail.com | |||
| // */ | |||
| //@Configuration | |||
| //public class ScheduleConfig { | |||
| // | |||
| // @Bean | |||
| // public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) { | |||
| // SchedulerFactoryBean factory = new SchedulerFactoryBean(); | |||
| // factory.setDataSource(dataSource); | |||
| // | |||
| // //quartz参数 | |||
| // Properties prop = new Properties(); | |||
| // prop.put("org.quartz.scheduler.instanceName", "RenrenScheduler"); | |||
| // prop.put("org.quartz.scheduler.instanceId", "AUTO"); | |||
| // //线程池配置 | |||
| // prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); | |||
| // prop.put("org.quartz.threadPool.threadCount", "20"); | |||
| // prop.put("org.quartz.threadPool.threadPriority", "5"); | |||
| // //JobStore配置 | |||
| // prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); | |||
| // //集群配置 | |||
| // prop.put("org.quartz.jobStore.isClustered", "true"); | |||
| // prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); | |||
| // prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1"); | |||
| // | |||
| // prop.put("org.quartz.jobStore.misfireThreshold", "12000"); | |||
| // prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); | |||
| // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); | |||
| // | |||
| // //PostgreSQL数据库,需要打开此注释 | |||
| // //prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate"); | |||
| // | |||
| // factory.setQuartzProperties(prop); | |||
| // | |||
| // factory.setSchedulerName("RenrenScheduler"); | |||
| // //延时启动 | |||
| // factory.setStartupDelay(30); | |||
| // factory.setApplicationContextSchedulerContextKey("applicationContextKey"); | |||
| // //可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 | |||
| // factory.setOverwriteExistingJobs(true); | |||
| // //设置自动启动,默认为true | |||
| // factory.setAutoStartup(true); | |||
| // | |||
| // return factory; | |||
| // } | |||
| //} | |||
| @@ -0,0 +1,133 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.controller; | |||
| import io.bdty.common.annotation.LogOperation; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.common.validator.ValidatorUtils; | |||
| import io.bdty.common.validator.group.AddGroup; | |||
| import io.bdty.common.validator.group.DefaultGroup; | |||
| import io.bdty.common.validator.group.UpdateGroup; | |||
| import io.bdty.modules.job.dto.ScheduleJobDTO; | |||
| import io.bdty.modules.job.service.ScheduleJobService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.AllArgsConstructor; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import springfox.documentation.annotations.ApiIgnore; | |||
| import java.util.Map; | |||
| /** | |||
| * 定时任务 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @RestController | |||
| @RequestMapping("/sys/schedule") | |||
| @Api(tags = "定时任务") | |||
| @AllArgsConstructor | |||
| public class ScheduleJobController { | |||
| private final ScheduleJobService scheduleJobService; | |||
| @GetMapping("page") | |||
| @ApiOperation("分页") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType = "String"), | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType = "String"), | |||
| @ApiImplicitParam(name = "beanName", value = "beanName", paramType = "query", dataType = "String") | |||
| }) | |||
| @RequiresPermissions("sys:schedule:page") | |||
| public Result<PageData<ScheduleJobDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params) { | |||
| PageData<ScheduleJobDTO> page = scheduleJobService.page(params); | |||
| return new Result<PageData<ScheduleJobDTO>>().ok(page); | |||
| } | |||
| @GetMapping("{id}") | |||
| @ApiOperation("信息") | |||
| @RequiresPermissions("sys:schedule:info") | |||
| public Result<ScheduleJobDTO> info(@PathVariable("id") Long id) { | |||
| ScheduleJobDTO schedule = scheduleJobService.get(id); | |||
| return new Result<ScheduleJobDTO>().ok(schedule); | |||
| } | |||
| @PostMapping | |||
| @ApiOperation("保存") | |||
| @LogOperation("保存") | |||
| @RequiresPermissions("sys:schedule:save") | |||
| public Result save(@RequestBody ScheduleJobDTO dto) { | |||
| ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); | |||
| scheduleJobService.save(dto); | |||
| return new Result(); | |||
| } | |||
| @PutMapping | |||
| @ApiOperation("修改") | |||
| @LogOperation("修改") | |||
| @RequiresPermissions("sys:schedule:update") | |||
| public Result update(@RequestBody ScheduleJobDTO dto) { | |||
| ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); | |||
| scheduleJobService.update(dto); | |||
| return new Result(); | |||
| } | |||
| @DeleteMapping | |||
| @ApiOperation("删除") | |||
| @LogOperation("删除") | |||
| @RequiresPermissions("sys:schedule:delete") | |||
| public Result delete(@RequestBody Long[] ids) { | |||
| scheduleJobService.deleteBatch(ids); | |||
| return new Result(); | |||
| } | |||
| @PutMapping("/run") | |||
| @ApiOperation("立即执行") | |||
| @LogOperation("立即执行") | |||
| @RequiresPermissions("sys:schedule:run") | |||
| public Result run(@RequestBody Long[] ids) { | |||
| scheduleJobService.run(ids); | |||
| return new Result(); | |||
| } | |||
| @PutMapping("/pause") | |||
| @ApiOperation("暂停") | |||
| @LogOperation("暂停") | |||
| @RequiresPermissions("sys:schedule:pause") | |||
| public Result pause(@RequestBody Long[] ids) { | |||
| scheduleJobService.pause(ids); | |||
| return new Result(); | |||
| } | |||
| @PutMapping("/resume") | |||
| @ApiOperation("恢复") | |||
| @LogOperation("恢复") | |||
| @RequiresPermissions("sys:schedule:resume") | |||
| public Result resume(@RequestBody Long[] ids) { | |||
| scheduleJobService.resume(ids); | |||
| return new Result(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,63 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.controller; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.modules.job.dto.ScheduleJobLogDTO; | |||
| import io.bdty.modules.job.service.ScheduleJobLogService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.AllArgsConstructor; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import springfox.documentation.annotations.ApiIgnore; | |||
| import java.util.Map; | |||
| /** | |||
| * 定时任务日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @RestController | |||
| @RequestMapping("/sys/scheduleLog") | |||
| @Api(tags = "定时任务日志") | |||
| @AllArgsConstructor | |||
| public class ScheduleJobLogController { | |||
| private final ScheduleJobLogService scheduleJobLogService; | |||
| @GetMapping("page") | |||
| @ApiOperation("分页") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType = "String"), | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType = "String"), | |||
| @ApiImplicitParam(name = "jobId", value = "jobId", paramType = "query", dataType = "String") | |||
| }) | |||
| @RequiresPermissions("sys:schedule:log") | |||
| public Result<PageData<ScheduleJobLogDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params) { | |||
| PageData<ScheduleJobLogDTO> page = scheduleJobLogService.page(params); | |||
| return new Result<PageData<ScheduleJobLogDTO>>().ok(page); | |||
| } | |||
| @GetMapping("{id}") | |||
| @ApiOperation("信息") | |||
| @RequiresPermissions("sys:schedule:log") | |||
| public Result<ScheduleJobLogDTO> info(@PathVariable("id") Long id) { | |||
| ScheduleJobLogDTO log = scheduleJobLogService.get(id); | |||
| return new Result<ScheduleJobLogDTO>().ok(log); | |||
| } | |||
| } | |||
| @@ -0,0 +1,30 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.dao; | |||
| import io.bdty.common.dao.BaseDao; | |||
| import io.bdty.modules.job.entity.ScheduleJobEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| import java.util.Map; | |||
| /** | |||
| * 定时任务 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Mapper | |||
| public interface ScheduleJobDao extends BaseDao<ScheduleJobEntity> { | |||
| /** | |||
| * 批量更新状态 | |||
| */ | |||
| int updateBatch(Map<String, Object> map); | |||
| } | |||
| @@ -0,0 +1,24 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.dao; | |||
| import io.bdty.common.dao.BaseDao; | |||
| import io.bdty.modules.job.entity.ScheduleJobLogEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 定时任务日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Mapper | |||
| public interface ScheduleJobLogDao extends BaseDao<ScheduleJobLogEntity> { | |||
| } | |||
| @@ -0,0 +1,65 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.dto; | |||
| import com.fasterxml.jackson.annotation.JsonProperty; | |||
| import io.bdty.common.validator.group.AddGroup; | |||
| import io.bdty.common.validator.group.DefaultGroup; | |||
| import io.bdty.common.validator.group.UpdateGroup; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import org.hibernate.validator.constraints.Range; | |||
| import javax.validation.constraints.NotBlank; | |||
| import javax.validation.constraints.NotNull; | |||
| import javax.validation.constraints.Null; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * 定时任务 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Data | |||
| @ApiModel(value = "定时任务") | |||
| public class ScheduleJobDTO implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "id") | |||
| @Null(message="{id.null}", groups = AddGroup.class) | |||
| @NotNull(message="{id.require}", groups = UpdateGroup.class) | |||
| private Long id; | |||
| @ApiModelProperty(value = "spring bean名称") | |||
| @NotBlank(message = "{schedule.bean.require}", groups = DefaultGroup.class) | |||
| private String beanName; | |||
| @ApiModelProperty(value = "参数") | |||
| private String params; | |||
| @ApiModelProperty(value = "cron表达式") | |||
| @NotBlank(message = "{schedule.cron.require}", groups = DefaultGroup.class) | |||
| private String cronExpression; | |||
| @ApiModelProperty(value = "任务状态 0:暂停 1:正常") | |||
| @Range(min=0, max=1, message = "{schedule.status.range}", groups = DefaultGroup.class) | |||
| private Integer status; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "创建时间") | |||
| @JsonProperty(access = JsonProperty.Access.READ_ONLY) | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,53 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.dto; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * 定时任务日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Data | |||
| @ApiModel(value = "定时任务日志") | |||
| public class ScheduleJobLogDTO implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "id") | |||
| private Long id; | |||
| @ApiModelProperty(value = "任务id") | |||
| private Long jobId; | |||
| @ApiModelProperty(value = "spring bean名称") | |||
| private String beanName; | |||
| @ApiModelProperty(value = "参数") | |||
| private String params; | |||
| @ApiModelProperty(value = "任务状态 0:失败 1:成功") | |||
| private Integer status; | |||
| @ApiModelProperty(value = "失败信息") | |||
| private String error; | |||
| @ApiModelProperty(value = "耗时(单位:毫秒)") | |||
| private Integer times; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,62 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.entity; | |||
| import com.baomidou.mybatisplus.annotation.FieldFill; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import io.bdty.common.entity.BaseEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import java.util.Date; | |||
| /** | |||
| * 定时任务 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Data | |||
| @EqualsAndHashCode(callSuper=false) | |||
| @TableName("schedule_job") | |||
| public class ScheduleJobEntity extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| /** | |||
| * spring bean名称 | |||
| */ | |||
| private String beanName; | |||
| /** | |||
| * 参数 | |||
| */ | |||
| private String params; | |||
| /** | |||
| * cron表达式 | |||
| */ | |||
| private String cronExpression; | |||
| /** | |||
| * 任务状态 0:暂停 1:正常 | |||
| */ | |||
| private Integer status; | |||
| /** | |||
| * 备注 | |||
| */ | |||
| private String remark; | |||
| /** | |||
| * 更新者 | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT_UPDATE) | |||
| private Long updater; | |||
| /** | |||
| * 更新时间 | |||
| */ | |||
| @TableField(fill = FieldFill.INSERT_UPDATE) | |||
| private Date updateDate; | |||
| } | |||
| @@ -0,0 +1,62 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.entity; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * 定时任务日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Data | |||
| @TableName("schedule_job_log") | |||
| public class ScheduleJobLogEntity implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| /** | |||
| * id | |||
| */ | |||
| @TableId | |||
| private Long id; | |||
| /** | |||
| * 任务id | |||
| */ | |||
| private Long jobId; | |||
| /** | |||
| * spring bean名称 | |||
| */ | |||
| private String beanName; | |||
| /** | |||
| * 参数 | |||
| */ | |||
| private String params; | |||
| /** | |||
| * 任务状态 0:失败 1:成功 | |||
| */ | |||
| private Integer status; | |||
| /** | |||
| * 失败信息 | |||
| */ | |||
| private String error; | |||
| /** | |||
| * 耗时(单位:毫秒) | |||
| */ | |||
| private Integer times; | |||
| /** | |||
| * 创建时间 | |||
| */ | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,47 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.init; | |||
| import lombok.AllArgsConstructor; | |||
| import org.quartz.CronTrigger; | |||
| import org.quartz.Scheduler; | |||
| import org.springframework.boot.CommandLineRunner; | |||
| import org.springframework.stereotype.Component; | |||
| import io.bdty.modules.job.dao.ScheduleJobDao; | |||
| import io.bdty.modules.job.entity.ScheduleJobEntity; | |||
| import io.bdty.modules.job.utils.ScheduleUtils; | |||
| import java.util.List; | |||
| /** | |||
| * 初始化定时任务数据 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Component | |||
| @AllArgsConstructor | |||
| public class JobCommandLineRunner implements CommandLineRunner { | |||
| private final Scheduler scheduler; | |||
| private final ScheduleJobDao scheduleJobDao; | |||
| @Override | |||
| public void run(String... args) { | |||
| List<ScheduleJobEntity> scheduleJobList = scheduleJobDao.selectList(null); | |||
| for (ScheduleJobEntity scheduleJob : scheduleJobList) { | |||
| CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, scheduleJob.getId()); | |||
| //如果不存在,则创建 | |||
| if (cronTrigger == null) { | |||
| ScheduleUtils.createScheduleJob(scheduler, scheduleJob); | |||
| } else { | |||
| ScheduleUtils.updateScheduleJob(scheduler, scheduleJob); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,28 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.service; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.service.BaseService; | |||
| import io.bdty.modules.job.dto.ScheduleJobLogDTO; | |||
| import io.bdty.modules.job.entity.ScheduleJobLogEntity; | |||
| import java.util.Map; | |||
| /** | |||
| * 定时任务日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| public interface ScheduleJobLogService extends BaseService<ScheduleJobLogEntity> { | |||
| PageData<ScheduleJobLogDTO> page(Map<String, Object> params); | |||
| ScheduleJobLogDTO get(Long id); | |||
| } | |||
| @@ -0,0 +1,63 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.service; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.service.BaseService; | |||
| import io.bdty.modules.job.dto.ScheduleJobDTO; | |||
| import io.bdty.modules.job.entity.ScheduleJobEntity; | |||
| import java.util.Map; | |||
| /** | |||
| * 定时任务 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| public interface ScheduleJobService extends BaseService<ScheduleJobEntity> { | |||
| PageData<ScheduleJobDTO> page(Map<String, Object> params); | |||
| ScheduleJobDTO get(Long id); | |||
| /** | |||
| * 保存定时任务 | |||
| */ | |||
| void save(ScheduleJobDTO dto); | |||
| /** | |||
| * 更新定时任务 | |||
| */ | |||
| void update(ScheduleJobDTO dto); | |||
| /** | |||
| * 批量删除定时任务 | |||
| */ | |||
| void deleteBatch(Long[] ids); | |||
| /** | |||
| * 批量更新定时任务状态 | |||
| */ | |||
| int updateBatch(Long[] ids, int status); | |||
| /** | |||
| * 立即执行 | |||
| */ | |||
| void run(Long[] ids); | |||
| /** | |||
| * 暂停运行 | |||
| */ | |||
| void pause(Long[] ids); | |||
| /** | |||
| * 恢复运行 | |||
| */ | |||
| void resume(Long[] ids); | |||
| } | |||
| @@ -0,0 +1,55 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.service.impl; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.service.impl.BaseServiceImpl; | |||
| import io.bdty.common.utils.ConvertUtils; | |||
| import io.bdty.modules.job.dao.ScheduleJobLogDao; | |||
| import io.bdty.modules.job.dto.ScheduleJobLogDTO; | |||
| import io.bdty.modules.job.entity.ScheduleJobLogEntity; | |||
| import io.bdty.modules.job.service.ScheduleJobLogService; | |||
| import cn.hutool.core.util.StrUtil; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.Map; | |||
| @Service | |||
| public class ScheduleJobLogServiceImpl extends BaseServiceImpl<ScheduleJobLogDao, ScheduleJobLogEntity> implements ScheduleJobLogService { | |||
| @Override | |||
| public PageData<ScheduleJobLogDTO> page(Map<String, Object> params) { | |||
| IPage<ScheduleJobLogEntity> page = baseDao.selectPage( | |||
| getPage(params, Constant.CREATE_DATE, false), | |||
| getWrapper(params) | |||
| ); | |||
| return getPageData(page, ScheduleJobLogDTO.class); | |||
| } | |||
| private QueryWrapper<ScheduleJobLogEntity> getWrapper(Map<String, Object> params){ | |||
| String jobId = (String)params.get("jobId"); | |||
| QueryWrapper<ScheduleJobLogEntity> wrapper = new QueryWrapper<>(); | |||
| wrapper.eq(StrUtil.isNotBlank(jobId), "job_id", jobId); | |||
| return wrapper; | |||
| } | |||
| @Override | |||
| public ScheduleJobLogDTO get(Long id) { | |||
| ScheduleJobLogEntity entity = baseDao.selectById(id); | |||
| return ConvertUtils.sourceToTarget(entity, ScheduleJobLogDTO.class); | |||
| } | |||
| } | |||
| @@ -0,0 +1,131 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.service.impl; | |||
| import cn.hutool.core.util.StrUtil; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.service.impl.BaseServiceImpl; | |||
| import io.bdty.common.utils.ConvertUtils; | |||
| import io.bdty.modules.job.dao.ScheduleJobDao; | |||
| import io.bdty.modules.job.dto.ScheduleJobDTO; | |||
| import io.bdty.modules.job.entity.ScheduleJobEntity; | |||
| import io.bdty.modules.job.service.ScheduleJobService; | |||
| import io.bdty.modules.job.utils.ScheduleUtils; | |||
| import lombok.AllArgsConstructor; | |||
| import org.quartz.Scheduler; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import java.util.Arrays; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| @Service | |||
| @AllArgsConstructor | |||
| public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJobDao, ScheduleJobEntity> implements ScheduleJobService { | |||
| private final Scheduler scheduler; | |||
| @Override | |||
| public PageData<ScheduleJobDTO> page(Map<String, Object> params) { | |||
| IPage<ScheduleJobEntity> page = baseDao.selectPage( | |||
| getPage(params, Constant.CREATE_DATE, false), | |||
| getWrapper(params) | |||
| ); | |||
| return getPageData(page, ScheduleJobDTO.class); | |||
| } | |||
| @Override | |||
| public ScheduleJobDTO get(Long id) { | |||
| ScheduleJobEntity entity = baseDao.selectById(id); | |||
| return ConvertUtils.sourceToTarget(entity, ScheduleJobDTO.class); | |||
| } | |||
| private QueryWrapper<ScheduleJobEntity> getWrapper(Map<String, Object> params) { | |||
| String beanName = (String) params.get("beanName"); | |||
| QueryWrapper<ScheduleJobEntity> wrapper = new QueryWrapper<>(); | |||
| wrapper.like(StrUtil.isNotBlank(beanName), "bean_name", beanName); | |||
| return wrapper; | |||
| } | |||
| @Override | |||
| @Transactional(rollbackFor = Exception.class) | |||
| public void save(ScheduleJobDTO dto) { | |||
| ScheduleJobEntity entity = ConvertUtils.sourceToTarget(dto, ScheduleJobEntity.class); | |||
| entity.setStatus(Constant.ScheduleStatus.NORMAL.getValue()); | |||
| this.insert(entity); | |||
| ScheduleUtils.createScheduleJob(scheduler, entity); | |||
| } | |||
| @Override | |||
| @Transactional(rollbackFor = Exception.class) | |||
| public void update(ScheduleJobDTO dto) { | |||
| ScheduleJobEntity entity = ConvertUtils.sourceToTarget(dto, ScheduleJobEntity.class); | |||
| ScheduleUtils.updateScheduleJob(scheduler, entity); | |||
| this.updateById(entity); | |||
| } | |||
| @Override | |||
| @Transactional(rollbackFor = Exception.class) | |||
| public void deleteBatch(Long[] ids) { | |||
| for (Long id : ids) { | |||
| ScheduleUtils.deleteScheduleJob(scheduler, id); | |||
| } | |||
| //删除数据 | |||
| this.deleteBatchIds(Arrays.asList(ids)); | |||
| } | |||
| @Override | |||
| public int updateBatch(Long[] ids, int status) { | |||
| Map<String, Object> map = new HashMap<>(2); | |||
| map.put("ids", ids); | |||
| map.put("status", status); | |||
| return baseDao.updateBatch(map); | |||
| } | |||
| @Override | |||
| @Transactional(rollbackFor = Exception.class) | |||
| public void run(Long[] ids) { | |||
| for (Long id : ids) { | |||
| ScheduleUtils.run(scheduler, this.selectById(id)); | |||
| } | |||
| } | |||
| @Override | |||
| @Transactional(rollbackFor = Exception.class) | |||
| public void pause(Long[] ids) { | |||
| for (Long id : ids) { | |||
| ScheduleUtils.pauseJob(scheduler, id); | |||
| } | |||
| updateBatch(ids, Constant.ScheduleStatus.PAUSE.getValue()); | |||
| } | |||
| @Override | |||
| @Transactional(rollbackFor = Exception.class) | |||
| public void resume(Long[] ids) { | |||
| for (Long id : ids) { | |||
| ScheduleUtils.resumeJob(scheduler, id); | |||
| } | |||
| updateBatch(ids, Constant.ScheduleStatus.NORMAL.getValue()); | |||
| } | |||
| } | |||
| @@ -0,0 +1,25 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.task; | |||
| /** | |||
| * 定时任务接口,所有定时任务都要实现该接口 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| public interface ITask { | |||
| /** | |||
| * 执行定时任务接口 | |||
| * | |||
| * @param params 参数,多参数使用JSON数据 | |||
| */ | |||
| void run(String params); | |||
| } | |||
| @@ -0,0 +1,30 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.task; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.stereotype.Component; | |||
| /** | |||
| * 测试定时任务(演示Demo,可删除) | |||
| * | |||
| * testTask为spring bean的名称 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Component("testTask") | |||
| public class TestTask implements ITask{ | |||
| private Logger logger = LoggerFactory.getLogger(getClass()); | |||
| @Override | |||
| public void run(String params){ | |||
| logger.debug("TestTask定时任务正在执行,参数为:{}", params); | |||
| } | |||
| } | |||
| @@ -0,0 +1,80 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.utils; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.exception.ExceptionUtils; | |||
| import io.bdty.common.utils.SpringContextUtils; | |||
| import io.bdty.modules.job.entity.ScheduleJobEntity; | |||
| import io.bdty.modules.job.entity.ScheduleJobLogEntity; | |||
| import io.bdty.modules.job.service.ScheduleJobLogService; | |||
| import org.quartz.JobExecutionContext; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.scheduling.quartz.QuartzJobBean; | |||
| import java.lang.reflect.Method; | |||
| import java.util.Date; | |||
| /** | |||
| * 定时任务 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| public class ScheduleJob extends QuartzJobBean { | |||
| private Logger logger = LoggerFactory.getLogger(getClass()); | |||
| @Override | |||
| protected void executeInternal(JobExecutionContext context) { | |||
| ScheduleJobEntity scheduleJob = (ScheduleJobEntity) context.getMergedJobDataMap(). | |||
| get(ScheduleUtils.JOB_PARAM_KEY); | |||
| //数据库保存执行记录 | |||
| ScheduleJobLogEntity log = new ScheduleJobLogEntity(); | |||
| log.setJobId(scheduleJob.getId()); | |||
| log.setBeanName(scheduleJob.getBeanName()); | |||
| log.setParams(scheduleJob.getParams()); | |||
| log.setCreateDate(new Date()); | |||
| //任务开始时间 | |||
| long startTime = System.currentTimeMillis(); | |||
| try { | |||
| //执行任务 | |||
| logger.info("任务准备执行,任务ID:{}", scheduleJob.getId()); | |||
| Object target = SpringContextUtils.getBean(scheduleJob.getBeanName()); | |||
| Method method = target.getClass().getDeclaredMethod("run", String.class); | |||
| method.invoke(target, scheduleJob.getParams()); | |||
| //任务执行总时长 | |||
| long times = System.currentTimeMillis() - startTime; | |||
| log.setTimes((int)times); | |||
| //任务状态 | |||
| log.setStatus(Constant.SUCCESS); | |||
| logger.info("任务执行完毕,任务ID:{} 总共耗时:{} 毫秒", scheduleJob.getId(), times); | |||
| } catch (Exception e) { | |||
| logger.error("任务执行失败,任务ID:{}", scheduleJob.getId(), e); | |||
| //任务执行总时长 | |||
| long times = System.currentTimeMillis() - startTime; | |||
| log.setTimes((int)times); | |||
| //任务状态 | |||
| log.setStatus(Constant.FAIL); | |||
| log.setError(ExceptionUtils.getErrorStackTrace(e)); | |||
| }finally { | |||
| //获取spring bean | |||
| ScheduleJobLogService scheduleJobLogService = SpringContextUtils.getBean(ScheduleJobLogService.class); | |||
| scheduleJobLogService.insert(log); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,162 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.job.utils; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.exception.ErrorCode; | |||
| import io.bdty.common.exception.RenException; | |||
| import io.bdty.modules.job.entity.ScheduleJobEntity; | |||
| import org.quartz.*; | |||
| /** | |||
| * 定时任务工具类 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| public class ScheduleUtils { | |||
| private final static String JOB_NAME = "TASK_"; | |||
| /** | |||
| * 任务调度参数key | |||
| */ | |||
| public static final String JOB_PARAM_KEY = "JOB_PARAM_KEY"; | |||
| /** | |||
| * 获取触发器key | |||
| */ | |||
| public static TriggerKey getTriggerKey(Long jobId) { | |||
| return TriggerKey.triggerKey(JOB_NAME + jobId); | |||
| } | |||
| /** | |||
| * 获取jobKey | |||
| */ | |||
| public static JobKey getJobKey(Long jobId) { | |||
| return JobKey.jobKey(JOB_NAME + jobId); | |||
| } | |||
| /** | |||
| * 获取表达式触发器 | |||
| */ | |||
| public static CronTrigger getCronTrigger(Scheduler scheduler, Long jobId) { | |||
| try { | |||
| return (CronTrigger) scheduler.getTrigger(getTriggerKey(jobId)); | |||
| } catch (SchedulerException e) { | |||
| throw new RenException(ErrorCode.JOB_ERROR, e); | |||
| } | |||
| } | |||
| /** | |||
| * 创建定时任务 | |||
| */ | |||
| public static void createScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) { | |||
| try { | |||
| //构建job信息 | |||
| JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(getJobKey(scheduleJob.getId())).build(); | |||
| //表达式调度构建器 | |||
| CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()) | |||
| .withMisfireHandlingInstructionDoNothing(); | |||
| //按新的cronExpression表达式构建一个新的trigger | |||
| CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(scheduleJob.getId())).withSchedule(scheduleBuilder).build(); | |||
| //放入参数,运行时的方法可以获取 | |||
| jobDetail.getJobDataMap().put(JOB_PARAM_KEY, scheduleJob); | |||
| scheduler.scheduleJob(jobDetail, trigger); | |||
| //暂停任务 | |||
| if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){ | |||
| pauseJob(scheduler, scheduleJob.getId()); | |||
| } | |||
| } catch (SchedulerException e) { | |||
| throw new RenException(ErrorCode.JOB_ERROR, e); | |||
| } | |||
| } | |||
| /** | |||
| * 更新定时任务 | |||
| */ | |||
| public static void updateScheduleJob(Scheduler scheduler, ScheduleJobEntity scheduleJob) { | |||
| try { | |||
| TriggerKey triggerKey = getTriggerKey(scheduleJob.getId()); | |||
| //表达式调度构建器 | |||
| CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression()) | |||
| .withMisfireHandlingInstructionDoNothing(); | |||
| CronTrigger trigger = getCronTrigger(scheduler, scheduleJob.getId()); | |||
| //按新的cronExpression表达式重新构建trigger | |||
| trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); | |||
| //参数 | |||
| trigger.getJobDataMap().put(JOB_PARAM_KEY, scheduleJob); | |||
| scheduler.rescheduleJob(triggerKey, trigger); | |||
| //暂停任务 | |||
| if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){ | |||
| pauseJob(scheduler, scheduleJob.getId()); | |||
| } | |||
| } catch (SchedulerException e) { | |||
| throw new RenException(ErrorCode.JOB_ERROR, e); | |||
| } | |||
| } | |||
| /** | |||
| * 立即执行任务 | |||
| */ | |||
| public static void run(Scheduler scheduler, ScheduleJobEntity scheduleJob) { | |||
| try { | |||
| //参数 | |||
| JobDataMap dataMap = new JobDataMap(); | |||
| dataMap.put(JOB_PARAM_KEY, scheduleJob); | |||
| scheduler.triggerJob(getJobKey(scheduleJob.getId()), dataMap); | |||
| } catch (SchedulerException e) { | |||
| throw new RenException(ErrorCode.JOB_ERROR, e); | |||
| } | |||
| } | |||
| /** | |||
| * 暂停任务 | |||
| */ | |||
| public static void pauseJob(Scheduler scheduler, Long jobId) { | |||
| try { | |||
| scheduler.pauseJob(getJobKey(jobId)); | |||
| } catch (SchedulerException e) { | |||
| throw new RenException(ErrorCode.JOB_ERROR, e); | |||
| } | |||
| } | |||
| /** | |||
| * 恢复任务 | |||
| */ | |||
| public static void resumeJob(Scheduler scheduler, Long jobId) { | |||
| try { | |||
| scheduler.resumeJob(getJobKey(jobId)); | |||
| } catch (SchedulerException e) { | |||
| throw new RenException(ErrorCode.JOB_ERROR, e); | |||
| } | |||
| } | |||
| /** | |||
| * 删除定时任务 | |||
| */ | |||
| public static void deleteScheduleJob(Scheduler scheduler, Long jobId) { | |||
| try { | |||
| scheduler.deleteJob(getJobKey(jobId)); | |||
| } catch (SchedulerException e) { | |||
| throw new RenException(ErrorCode.JOB_ERROR, e); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,74 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.controller; | |||
| import io.bdty.common.annotation.LogOperation; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.utils.ExcelUtils; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.modules.log.dto.SysLogErrorDTO; | |||
| import io.bdty.modules.log.excel.SysLogErrorExcel; | |||
| import io.bdty.modules.log.service.SysLogErrorService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.AllArgsConstructor; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RequestParam; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import springfox.documentation.annotations.ApiIgnore; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * 异常日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @RestController | |||
| @RequestMapping("sys/log/error") | |||
| @Api(tags = "异常日志") | |||
| @AllArgsConstructor | |||
| public class SysLogErrorController { | |||
| private final SysLogErrorService sysLogErrorService; | |||
| @GetMapping("page") | |||
| @ApiOperation("分页") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType = "String"), | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType = "String") | |||
| }) | |||
| @RequiresPermissions("sys:log:error") | |||
| public Result<PageData<SysLogErrorDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params) { | |||
| PageData<SysLogErrorDTO> page = sysLogErrorService.page(params); | |||
| return new Result<PageData<SysLogErrorDTO>>().ok(page); | |||
| } | |||
| @GetMapping("export") | |||
| @ApiOperation("导出") | |||
| @LogOperation("导出") | |||
| @RequiresPermissions("sys:log:error") | |||
| public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | |||
| List<SysLogErrorDTO> list = sysLogErrorService.list(params); | |||
| ExcelUtils.exportExcelToTarget(response, null, "异常日志", list, SysLogErrorExcel.class); | |||
| } | |||
| } | |||
| @@ -0,0 +1,81 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.controller; | |||
| import io.bdty.common.annotation.LogOperation; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.utils.ExcelUtils; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.modules.log.dto.SysLogLoginDTO; | |||
| import io.bdty.modules.log.excel.SysLogLoginExcel; | |||
| import io.bdty.modules.log.service.SysLogLoginService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.AllArgsConstructor; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RequestParam; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import springfox.documentation.annotations.ApiIgnore; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * 登录日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @RestController | |||
| @RequestMapping("sys/log/login") | |||
| @Api(tags = "登录日志") | |||
| @AllArgsConstructor | |||
| public class SysLogLoginController { | |||
| private final SysLogLoginService sysLogLoginService; | |||
| @GetMapping("page") | |||
| @ApiOperation("分页") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType = "String"), | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType = "String"), | |||
| @ApiImplicitParam(name = "status", value = "状态 0:失败 1:成功 2:账号已锁定", paramType = "query", dataType = "int"), | |||
| @ApiImplicitParam(name = "creatorName", value = "用户名", paramType = "query", dataType = "String") | |||
| }) | |||
| @RequiresPermissions("sys:log:login") | |||
| public Result<PageData<SysLogLoginDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params) { | |||
| PageData<SysLogLoginDTO> page = sysLogLoginService.page(params); | |||
| return new Result<PageData<SysLogLoginDTO>>().ok(page); | |||
| } | |||
| @GetMapping("export") | |||
| @ApiOperation("导出") | |||
| @LogOperation("导出") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = "status", value = "状态 0:失败 1:成功 2:账号已锁定", paramType = "query", dataType = "int"), | |||
| @ApiImplicitParam(name = "creatorName", value = "用户名", paramType = "query", dataType = "String") | |||
| }) | |||
| @RequiresPermissions("sys:log:login") | |||
| public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | |||
| List<SysLogLoginDTO> list = sysLogLoginService.list(params); | |||
| ExcelUtils.exportExcelToTarget(response, null, "登录日志", list, SysLogLoginExcel.class); | |||
| } | |||
| } | |||
| @@ -0,0 +1,75 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * <p> | |||
| * https://www.renren.io | |||
| * <p> | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.controller; | |||
| import io.bdty.common.annotation.LogOperation; | |||
| import io.bdty.common.constant.Constant; | |||
| import io.bdty.common.page.PageData; | |||
| import io.bdty.common.utils.ExcelUtils; | |||
| import io.bdty.common.utils.Result; | |||
| import io.bdty.modules.log.dto.SysLogOperationDTO; | |||
| import io.bdty.modules.log.excel.SysLogOperationExcel; | |||
| import io.bdty.modules.log.service.SysLogOperationService; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiImplicitParam; | |||
| import io.swagger.annotations.ApiImplicitParams; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.AllArgsConstructor; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.RequestParam; | |||
| import org.springframework.web.bind.annotation.RestController; | |||
| import springfox.documentation.annotations.ApiIgnore; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * 操作日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @RestController | |||
| @RequestMapping("sys/log/operation") | |||
| @Api(tags = "操作日志") | |||
| @AllArgsConstructor | |||
| public class SysLogOperationController { | |||
| private final SysLogOperationService sysLogOperationService; | |||
| @GetMapping("page") | |||
| @ApiOperation("分页") | |||
| @ApiImplicitParams({ | |||
| @ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query", required = true, dataType = "int"), | |||
| @ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType = "String"), | |||
| @ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType = "String"), | |||
| @ApiImplicitParam(name = "status", value = "状态 0:失败 1:成功", paramType = "query", dataType = "int") | |||
| }) | |||
| @RequiresPermissions("sys:log:operation") | |||
| public Result<PageData<SysLogOperationDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params) { | |||
| PageData<SysLogOperationDTO> page = sysLogOperationService.page(params); | |||
| return new Result<PageData<SysLogOperationDTO>>().ok(page); | |||
| } | |||
| @GetMapping("export") | |||
| @ApiOperation("导出") | |||
| @LogOperation("导出") | |||
| @RequiresPermissions("sys:log:operation") | |||
| public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception { | |||
| List<SysLogOperationDTO> list = sysLogOperationService.list(params); | |||
| ExcelUtils.exportExcelToTarget(response, null, "操作日志", list, SysLogOperationExcel.class); | |||
| } | |||
| } | |||
| @@ -0,0 +1,25 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.dao; | |||
| import io.bdty.common.dao.BaseDao; | |||
| import io.bdty.modules.log.entity.SysLogErrorEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 异常日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Mapper | |||
| public interface SysLogErrorDao extends BaseDao<SysLogErrorEntity> { | |||
| } | |||
| @@ -0,0 +1,25 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.dao; | |||
| import io.bdty.common.dao.BaseDao; | |||
| import io.bdty.modules.log.entity.SysLogLoginEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 登录日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Mapper | |||
| public interface SysLogLoginDao extends BaseDao<SysLogLoginEntity> { | |||
| } | |||
| @@ -0,0 +1,25 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.dao; | |||
| import io.bdty.common.dao.BaseDao; | |||
| import io.bdty.modules.log.entity.SysLogOperationEntity; | |||
| import org.apache.ibatis.annotations.Mapper; | |||
| /** | |||
| * 操作日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Mapper | |||
| public interface SysLogOperationDao extends BaseDao<SysLogOperationEntity> { | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.dto; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * 异常日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Data | |||
| @ApiModel(value = "异常日志") | |||
| public class SysLogErrorDTO implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "id") | |||
| private Long id; | |||
| @ApiModelProperty(value = "请求URI") | |||
| private String requestUri; | |||
| @ApiModelProperty(value = "请求方式") | |||
| private String requestMethod; | |||
| @ApiModelProperty(value = "请求参数") | |||
| private String requestParams; | |||
| @ApiModelProperty(value = "用户代理") | |||
| private String userAgent; | |||
| @ApiModelProperty(value = "操作IP") | |||
| private String ip; | |||
| @ApiModelProperty(value = "异常信息") | |||
| private String errorInfo; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,50 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.dto; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * 登录日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Data | |||
| @ApiModel(value = "登录日志") | |||
| public class SysLogLoginDTO implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "id") | |||
| private Long id; | |||
| @ApiModelProperty(value = "用户操作 0:用户登录 1:用户退出") | |||
| private Integer operation; | |||
| @ApiModelProperty(value = "状态 0:失败 1:成功 2:账号已锁定") | |||
| private Integer status; | |||
| @ApiModelProperty(value = "用户代理") | |||
| private String userAgent; | |||
| @ApiModelProperty(value = "操作IP") | |||
| private String ip; | |||
| @ApiModelProperty(value = "用户名") | |||
| private String creatorName; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,62 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.dto; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * 操作日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Data | |||
| @ApiModel(value = "操作日志") | |||
| public class SysLogOperationDTO implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "id") | |||
| private Long id; | |||
| @ApiModelProperty(value = "用户操作") | |||
| private String operation; | |||
| @ApiModelProperty(value = "请求URI") | |||
| private String requestUri; | |||
| @ApiModelProperty(value = "请求方式") | |||
| private String requestMethod; | |||
| @ApiModelProperty(value = "请求参数") | |||
| private String requestParams; | |||
| @ApiModelProperty(value = "请求时长(毫秒)") | |||
| private Integer requestTime; | |||
| @ApiModelProperty(value = "用户代理") | |||
| private String userAgent; | |||
| @ApiModelProperty(value = "操作IP") | |||
| private String ip; | |||
| @ApiModelProperty(value = "状态 0:失败 1:成功") | |||
| private Integer status; | |||
| @ApiModelProperty(value = "用户名") | |||
| private String creatorName; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,54 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.entity; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import io.bdty.common.entity.BaseEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| /** | |||
| * 异常日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Data | |||
| @EqualsAndHashCode(callSuper=false) | |||
| @TableName("sys_log_error") | |||
| public class SysLogErrorEntity extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| /** | |||
| * 请求URI | |||
| */ | |||
| private String requestUri; | |||
| /** | |||
| * 请求方式 | |||
| */ | |||
| private String requestMethod; | |||
| /** | |||
| * 请求参数 | |||
| */ | |||
| private String requestParams; | |||
| /** | |||
| * 用户代理 | |||
| */ | |||
| private String userAgent; | |||
| /** | |||
| * 操作IP | |||
| */ | |||
| private String ip; | |||
| /** | |||
| * 异常信息 | |||
| */ | |||
| private String errorInfo; | |||
| } | |||
| @@ -0,0 +1,50 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.entity; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import io.bdty.common.entity.BaseEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| /** | |||
| * 登录日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Data | |||
| @EqualsAndHashCode(callSuper=false) | |||
| @TableName("sys_log_login") | |||
| public class SysLogLoginEntity extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| /** | |||
| * 用户操作 0:用户登录 1:用户退出 | |||
| */ | |||
| private Integer operation; | |||
| /** | |||
| * 状态 0:失败 1:成功 2:账号已锁定 | |||
| */ | |||
| private Integer status; | |||
| /** | |||
| * 用户代理 | |||
| */ | |||
| private String userAgent; | |||
| /** | |||
| * 操作IP | |||
| */ | |||
| private String ip; | |||
| /** | |||
| * 用户名 | |||
| */ | |||
| private String creatorName; | |||
| } | |||
| @@ -0,0 +1,65 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.entity; | |||
| import com.baomidou.mybatisplus.annotation.TableName; | |||
| import io.bdty.common.entity.BaseEntity; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| /** | |||
| * 操作日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| @Data | |||
| @EqualsAndHashCode(callSuper=false) | |||
| @TableName("sys_log_operation") | |||
| public class SysLogOperationEntity extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| /** | |||
| * 用户操作 | |||
| */ | |||
| private String operation; | |||
| /** | |||
| * 请求URI | |||
| */ | |||
| private String requestUri; | |||
| /** | |||
| * 请求方式 | |||
| */ | |||
| private String requestMethod; | |||
| /** | |||
| * 请求参数 | |||
| */ | |||
| private String requestParams; | |||
| /** | |||
| * 请求时长(毫秒) | |||
| */ | |||
| private Integer requestTime; | |||
| /** | |||
| * 用户代理 | |||
| */ | |||
| private String userAgent; | |||
| /** | |||
| * 操作IP | |||
| */ | |||
| private String ip; | |||
| /** | |||
| * 状态 0:失败 1:成功 | |||
| */ | |||
| private Integer status; | |||
| /** | |||
| * 用户名 | |||
| */ | |||
| private String creatorName; | |||
| } | |||
| @@ -0,0 +1,36 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.enums; | |||
| /** | |||
| * 登录操作枚举 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| public enum LoginOperationEnum { | |||
| /** | |||
| * 用户登录 | |||
| */ | |||
| LOGIN(0), | |||
| /** | |||
| * 用户退出 | |||
| */ | |||
| LOGOUT(1); | |||
| private int value; | |||
| LoginOperationEnum(int value) { | |||
| this.value = value; | |||
| } | |||
| public int value() { | |||
| return this.value; | |||
| } | |||
| } | |||
| @@ -0,0 +1,40 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.enums; | |||
| /** | |||
| * 登录状态枚举 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| public enum LoginStatusEnum { | |||
| /** | |||
| * 失败 | |||
| */ | |||
| FAIL(0), | |||
| /** | |||
| * 成功 | |||
| */ | |||
| SUCCESS(1), | |||
| /** | |||
| * 账号已锁定 | |||
| */ | |||
| LOCK(2); | |||
| private int value; | |||
| LoginStatusEnum(int value) { | |||
| this.value = value; | |||
| } | |||
| public int value() { | |||
| return this.value; | |||
| } | |||
| } | |||
| @@ -0,0 +1,36 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.enums; | |||
| /** | |||
| * 操作状态枚举 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| * @since 1.0.0 | |||
| */ | |||
| public enum OperationStatusEnum { | |||
| /** | |||
| * 失败 | |||
| */ | |||
| FAIL(0), | |||
| /** | |||
| * 成功 | |||
| */ | |||
| SUCCESS(1); | |||
| private int value; | |||
| OperationStatusEnum(int value) { | |||
| this.value = value; | |||
| } | |||
| public int value() { | |||
| return this.value; | |||
| } | |||
| } | |||
| @@ -0,0 +1,49 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.excel; | |||
| import com.alibaba.excel.annotation.ExcelProperty; | |||
| import com.alibaba.excel.annotation.format.DateTimeFormat; | |||
| import com.alibaba.excel.annotation.write.style.ColumnWidth; | |||
| import com.alibaba.excel.annotation.write.style.ContentRowHeight; | |||
| import com.alibaba.excel.annotation.write.style.HeadRowHeight; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 异常日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Data | |||
| @ContentRowHeight(20) | |||
| @HeadRowHeight(20) | |||
| @ColumnWidth(25) | |||
| public class SysLogErrorExcel { | |||
| @ExcelProperty("请求URI") | |||
| private String requestUri; | |||
| @ExcelProperty("请求方式") | |||
| private String requestMethod; | |||
| @ExcelProperty("请求参数") | |||
| private String requestParams; | |||
| @ExcelProperty("User-Agent") | |||
| private String userAgent; | |||
| @ExcelProperty("操作IP") | |||
| private String ip; | |||
| @DateTimeFormat("yyyy-MM-dd HH:mm:ss") | |||
| @ExcelProperty("创建时间") | |||
| private Date createDate; | |||
| } | |||
| @@ -0,0 +1,52 @@ | |||
| /** | |||
| * Copyright (c) 2018 人人开源 All rights reserved. | |||
| * | |||
| * https://www.renren.io | |||
| * | |||
| * 版权所有,侵权必究! | |||
| */ | |||
| package io.bdty.modules.log.excel; | |||
| import com.alibaba.excel.annotation.ExcelProperty; | |||
| import com.alibaba.excel.annotation.format.DateTimeFormat; | |||
| import com.alibaba.excel.annotation.write.style.ColumnWidth; | |||
| import com.alibaba.excel.annotation.write.style.ContentRowHeight; | |||
| import com.alibaba.excel.annotation.write.style.HeadRowHeight; | |||
| import io.bdty.modules.log.excel.converter.SysLogOperationConverter; | |||
| import io.bdty.modules.log.excel.converter.SysLogStatusConverter; | |||
| import lombok.Data; | |||
| import java.util.Date; | |||
| /** | |||
| * 登录日志 | |||
| * | |||
| * @author Mark sunlightcs@gmail.com | |||
| */ | |||
| @Data | |||
| @ContentRowHeight(20) | |||
| @HeadRowHeight(20) | |||
| @ColumnWidth(25) | |||
| public class SysLogLoginExcel { | |||
| @ExcelProperty(value = "操作类型", converter = SysLogOperationConverter.class) | |||
| private Integer operation; | |||
| @ExcelProperty(value = "状态", converter = SysLogStatusConverter.class) | |||
| private Integer status; | |||
| @ExcelProperty("User-Agent") | |||
| private String userAgent; | |||
| @ExcelProperty("操作IP") | |||
| private String ip; | |||
| @ExcelProperty("用户名") | |||
| private String creatorName; | |||
| @DateTimeFormat("yyyy-MM-dd HH:mm:ss") | |||
| @ExcelProperty("创建时间") | |||
| private Date createDate; | |||
| } | |||