mirror of
https://gitee.com/EMF/solon-manager.git
synced 2025-12-06 08:48:33 +08:00
first commit
This commit is contained in:
commit
fbfb353aac
13
Dockerfile
Normal file
13
Dockerfile
Normal file
@ -0,0 +1,13 @@
|
||||
# 基础镜像
|
||||
FROM registry.cn-hangzhou.aliyuncs.com/wb_public/openjdk:8-jre
|
||||
# author
|
||||
MAINTAINER manager
|
||||
# 复制jar文件到路径
|
||||
ADD ./target/manager.jar ./
|
||||
# 时间
|
||||
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
RUN echo 'Asia/Shanghai' >/etc/timezone
|
||||
# 启动服务
|
||||
ENTRYPOINT ["java","-jar","/manager.jar"]
|
||||
# 暴露端口
|
||||
EXPOSE 8080
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 xian.zi.ming@qq.com fuck.vip
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
122
README.md
Normal file
122
README.md
Normal file
@ -0,0 +1,122 @@
|
||||
# solon-manager
|
||||
|
||||
## 介绍
|
||||
基于Solon + Mybatis Plus + SaToken + Thymeleaf + Layui的后台管理系统
|
||||
接入Sa-Token,支持菜单权限
|
||||
数据库支持 MySQL、Oracle、sqlServer 等主流数据库
|
||||
提供代码生成器,基本增删改查无需编写,可快速完成开发任务。
|
||||
后台接口RESTful 风格,支持前后端分离,可与app公用一套接口。
|
||||
开发最精简,可当脚手架,适合你来 DIY
|
||||
**如果喜欢,防止您迷路, 请尽快Star项目。多了您的支持,更多了一份动力!感谢~**
|
||||
|
||||
## 特征
|
||||
- 后台接口RESTful 风格,支持前后端分离,可与app公用一套接口
|
||||
- 采用RBAC的权限控制
|
||||
- 统一响应结果封装及生成工具 统一异常处理
|
||||
- 拥抱Sa-Token 实现角色权限认证,让鉴权变得简单、优雅!
|
||||
- 使用 Solon 集成Druid数据库连接池与监控
|
||||
- 集成MyBatis-Plus,实现单表业务零SQL
|
||||
- 集成国人风格的knife4j,自动生成接口文档
|
||||
- 提供代码生成器(MySQL、Oracle、sqlServer等主流数据库),生成从Html到Mapper,爽歪歪
|
||||
|
||||
## 代码仓库 最新请移步gitee, github定期同步
|
||||
Gitee地址:[https://gitee.com/uidoer/solon-manager](https://gitee.com/uidoer/solon-manager)
|
||||
|
||||
|
||||
## 开发文档&项目演示
|
||||
- 开发文档:[开发文档wiki](https://gitee.com/uidoer/solon-manager/wikis/pages)
|
||||
- 演示地址:[solon-manager](http://1.94.23.145:9000/login)
|
||||
- **账号密码:admin/123456**
|
||||
|
||||
|
||||
## 代码结构
|
||||
```
|
||||
├─main
|
||||
│ ├─java
|
||||
│ │ └─vip
|
||||
│ │ └─fuck
|
||||
│ │ └─sm
|
||||
│ │ ├─CompanyProjectApplication.java 项目启动类
|
||||
│ │ ├─common 公共资源,如注解、切面、全局异常处理、组件集成、通用工具类等
|
||||
│ │ ├─controller Controler层
|
||||
│ │ ├─entity 实体类
|
||||
│ │ ├─mapper DAO层
|
||||
│ │ ├─service Service层
|
||||
│ │ │ └─impl Service层实现
|
||||
│ └─resources
|
||||
│ ├── app-dev.yml 开发环境配置文件
|
||||
│ ├── app-test.yml 测试环境配置文件
|
||||
│ ├── app-prod.yml 生产环境配置文件
|
||||
│ ├── app.yml 通用配置文件
|
||||
│ ├─mapper Mybatis XML文件
|
||||
│ ├─static 静态文件
|
||||
│ │ ├─css 通用css文件
|
||||
│ │ ├─images 静态图片
|
||||
│ │ ├─js 通用js文件
|
||||
│ │ ├─layui layui库
|
||||
│ │ └─layui-ext layui插件库
|
||||
│ ├─template 代码生成模版
|
||||
│ └─templates 项目页面目录
|
||||
│ ├─depts 部门管理
|
||||
│ ├─error 错误页面
|
||||
│ ├─generator 代码生成管理
|
||||
│ ├─logs 日志管理
|
||||
│ ├─menus 菜单管理
|
||||
│ ├─roles 角色管理
|
||||
│ ├─syscontent 内容管理
|
||||
│ ├─sysdict 字典管理
|
||||
│ ├─sysfiles 文件管理
|
||||
│ └─users 用户管理
|
||||
└─test
|
||||
└─java
|
||||
└─vip
|
||||
└─fuck
|
||||
└─sm 单元测试
|
||||
```
|
||||
|
||||
## 开发建议
|
||||
- Model内成员变量建议与表字段数量对应,如需扩展成员变量(比如连表查询)建议创建VO,否则需在扩展的成员变量上加@TableField(exist = false)
|
||||
- 建议业务失败直接使用throw new BusinessException("ErrorMessage")抛出,由统一异常处理器来封装业务失败的响应结果,会直接被封装为{"code":500002,"message":"ErrorMessage"}返回,尽情抛出;
|
||||
- 数据库基础字段:id(bigint)、remark(varchar)、unable_flag(tinyint)、deleted(tinyint)、create_id(bigint)、update_id(bigint)、create_time(datetime)、update_time(datetime)
|
||||
|
||||
## 使用说明
|
||||
- 使用IDE导入本项目,IDE需要安装lombok插件
|
||||
- 创建数据库, 如mysql数据库导入mysql.sql
|
||||
- 配置application-dev.yml中的数据库连接
|
||||
- 运行项目
|
||||
1. 直接运行CompanyProjectApplication.java
|
||||
2. 项目根目录下执行mvn -X clean package -Dmaven.test.skip=true编译打包,然后执行java -jar manager.jar
|
||||
- 登录地址 http://localhost:8080/index/login 用户名密码:admin/123456
|
||||
- 代码生成使用
|
||||
1. 逻辑删除字段,请统一用deleted字段: 0未删 1已删; 主键请统一格式: `id` varchar(50) 类型; 列名请勿使用数据库关键字
|
||||
2. application.yml中配置: 使用代码生成模块时 指定要生成的表存在于哪种数据库。project.database=mysql
|
||||
3. 点击[代码生成]菜单,生成一个或多个表的代码,下载到本地
|
||||
4. 解压下载的代码,直接复制main文件夹到本地项目的src目录下
|
||||
5. 数据库执行sql,生成菜单
|
||||
6. admin 刷新页面即刻查看
|
||||
|
||||
## 技术文档
|
||||
* 核心框架:[Solon](https://spring.io/projects/spring-boot)
|
||||
* 持久层框架:[MyBatis-Plus](https://mybatis.plus)
|
||||
* 权限认证:[Sa-Token](https://sa-token.cc/doc.html#/)
|
||||
* 前端框架: [Layui](https://layui.dev/docs/2/)
|
||||
* 数据库连接池:[Alibaba Druid](https://github.com/alibaba/druid/)
|
||||
* 模板引擎:[Thymeleaf](https://www.thymeleaf.org/)
|
||||
* 阿里巴巴Java开发手册[最新版下载](https://github.com/alibaba/p3c)
|
||||
|
||||
## 参与贡献
|
||||
1. Fork 本项目
|
||||
2. 新建 feature_xxx 分支
|
||||
3. 提交代码
|
||||
4. 提交 Pull Request
|
||||
|
||||
## **效果图**
|
||||
|
||||
|
||||
### 捐赠
|
||||
> 项目的发展离不开您的支持, 如果您够宽裕,请作者喝杯咖啡吧!
|
||||
|
||||
### 交流群
|
||||
> 如果大家有疑难杂症,技术交流, 可以加我拉你们进群, 务必备注: 开源
|
||||
微信: www_fuck_vip
|
||||
|
||||
311
doc/mysql.sql
Normal file
311
doc/mysql.sql
Normal file
@ -0,0 +1,311 @@
|
||||
-- 部门
|
||||
DROP TABLE IF EXISTS sys_dept;
|
||||
CREATE TABLE sys_dept (
|
||||
id varchar(64) NOT NULL COMMENT '主键',
|
||||
dept_no varchar(18) DEFAULT NULL COMMENT '部门编号(规则:父级关系编码+自己的编码)',
|
||||
name varchar(300) DEFAULT NULL COMMENT '部门名称',
|
||||
pid varchar(64) NOT NULL COMMENT '父级id',
|
||||
status tinyint(4) COMMENT '状态(1:正常;0:弃用)',
|
||||
relation_code varchar(3000) DEFAULT NULL COMMENT '为了维护更深层级关系',
|
||||
dept_manager_id varchar(64) DEFAULT NULL COMMENT '部门经理user_id',
|
||||
manager_name varchar(255) DEFAULT NULL COMMENT '部门经理名称',
|
||||
phone varchar(20) DEFAULT NULL COMMENT '部门经理联系电话',
|
||||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||||
update_time datetime DEFAULT NULL COMMENT '更新时间',
|
||||
deleted tinyint(4) COMMENT '是否删除(1未删除;0已删除)',
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统部门';
|
||||
|
||||
-- 系统日志
|
||||
DROP TABLE IF EXISTS sys_log;
|
||||
CREATE TABLE sys_log (
|
||||
id varchar(64) NOT NULL,
|
||||
user_id varchar(64) DEFAULT NULL COMMENT '用户id',
|
||||
username varchar(50) DEFAULT NULL COMMENT '用户名',
|
||||
operation varchar(50) DEFAULT NULL COMMENT '用户操作',
|
||||
time int(11) DEFAULT NULL COMMENT '响应时间',
|
||||
method varchar(200) DEFAULT NULL COMMENT '请求方法',
|
||||
params varchar(5000) DEFAULT NULL COMMENT '请求参数',
|
||||
ip varchar(64) DEFAULT NULL COMMENT 'IP地址',
|
||||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统日志';
|
||||
|
||||
-- 菜单权限
|
||||
DROP TABLE IF EXISTS sys_permission;
|
||||
CREATE TABLE sys_permission (
|
||||
id varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
|
||||
name varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单权限名称',
|
||||
perms varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '授权(多个用逗号分隔,如:sys:user:add,sys:user:edit)',
|
||||
icon varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标',
|
||||
url varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '访问地址URL',
|
||||
target varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'a target属性:_self _blank',
|
||||
pid varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父级菜单权限名称',
|
||||
order_num int(11) NULL COMMENT '排序',
|
||||
type tinyint(4) NULL DEFAULT NULL COMMENT '菜单权限类型(1:目录;2:菜单;3:按钮)',
|
||||
status tinyint(4) NULL COMMENT '状态1:正常 0:禁用',
|
||||
create_time datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
update_time datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
deleted tinyint(4) NULL COMMENT '是否删除(1未删除;0已删除)',
|
||||
PRIMARY KEY (id) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统权限' ROW_FORMAT = Compact;
|
||||
|
||||
-- 角色
|
||||
DROP TABLE IF EXISTS sys_role;
|
||||
CREATE TABLE sys_role (
|
||||
id varchar(64) NOT NULL COMMENT '主键',
|
||||
name varchar(255) DEFAULT NULL COMMENT '角色名称',
|
||||
description varchar(300) DEFAULT NULL,
|
||||
status tinyint(4) COMMENT '状态(1:正常0:弃用)',
|
||||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||||
update_time datetime DEFAULT NULL COMMENT '更新时间',
|
||||
deleted tinyint(4) COMMENT '是否删除(1未删除;0已删除)',
|
||||
data_scope int COMMENT '数据范围(1:所有 2:自定义 3: 本部门及以下部门 4:仅本部门 5:自己)',
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统角色';
|
||||
|
||||
-- 角色部门
|
||||
DROP TABLE IF EXISTS sys_role_dept;
|
||||
CREATE TABLE sys_role_dept (
|
||||
id varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
|
||||
role_id varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色id',
|
||||
dept_id varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门id',
|
||||
create_time datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
PRIMARY KEY (id) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色部门' ROW_FORMAT = Compact;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
|
||||
-- 角色权限关联
|
||||
DROP TABLE IF EXISTS sys_role_permission;
|
||||
CREATE TABLE sys_role_permission (
|
||||
id varchar(64) NOT NULL COMMENT '主键',
|
||||
role_id varchar(64) DEFAULT NULL COMMENT '角色id',
|
||||
permission_id varchar(64) DEFAULT NULL COMMENT '菜单权限id',
|
||||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
-- 用户表
|
||||
DROP TABLE IF EXISTS sys_user;
|
||||
CREATE TABLE sys_user (
|
||||
id varchar(64) NOT NULL COMMENT '用户id',
|
||||
username varchar(50) NOT NULL COMMENT '账户名称',
|
||||
salt varchar(20) DEFAULT NULL COMMENT '加密盐值',
|
||||
password varchar(200) NOT NULL COMMENT '用户密码密文',
|
||||
phone varchar(20) DEFAULT NULL COMMENT '手机号码',
|
||||
dept_id varchar(64) DEFAULT NULL COMMENT '部门id',
|
||||
real_name varchar(60) DEFAULT NULL COMMENT '真实名称',
|
||||
nick_name varchar(60) DEFAULT NULL COMMENT '昵称',
|
||||
email varchar(50) DEFAULT NULL COMMENT '邮箱(唯一)',
|
||||
status tinyint(4) COMMENT '账户状态(1.正常 0.锁定 )',
|
||||
sex tinyint(4) COMMENT '性别(1.男 2.女)',
|
||||
deleted tinyint(4) COMMENT '是否删除(1未删除;0已删除)',
|
||||
create_id varchar(64) DEFAULT NULL COMMENT '创建人',
|
||||
update_id varchar(64) DEFAULT NULL COMMENT '更新人',
|
||||
create_where tinyint(4) COMMENT '创建来源(1.web 2.android 3.ios )',
|
||||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||||
update_time datetime DEFAULT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户';
|
||||
|
||||
-- 用户角色关联表
|
||||
DROP TABLE IF EXISTS sys_user_role;
|
||||
CREATE TABLE sys_user_role (
|
||||
id varchar(64) NOT NULL COMMENT '用户id',
|
||||
user_id varchar(64) DEFAULT NULL,
|
||||
role_id varchar(64) DEFAULT NULL COMMENT '角色id',
|
||||
create_time datetime DEFAULT NULL COMMENT '创建时间',
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户角色';
|
||||
|
||||
-- 数据字典表
|
||||
DROP TABLE IF EXISTS sys_dict;
|
||||
CREATE TABLE sys_dict (
|
||||
id varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
||||
name varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典名称',
|
||||
remark varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述',
|
||||
create_time datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
PRIMARY KEY (id) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据字典表' ROW_FORMAT = Compact;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
|
||||
|
||||
-- 数据字典详情
|
||||
DROP TABLE IF EXISTS sys_dict_detail;
|
||||
CREATE TABLE sys_dict_detail (
|
||||
id varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
||||
label varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典标签',
|
||||
value varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典值',
|
||||
sort smallint(6) NULL DEFAULT NULL COMMENT '排序',
|
||||
dict_id varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字典id',
|
||||
create_time datetime NULL DEFAULT NULL COMMENT '创建日期',
|
||||
PRIMARY KEY (id) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据字典详情' ROW_FORMAT = Compact;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
|
||||
-- 2020.5.27添加文章管理
|
||||
DROP TABLE IF EXISTS sys_content;
|
||||
CREATE TABLE sys_content (
|
||||
id varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主键',
|
||||
title varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '标题',
|
||||
one_img varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '单图url',
|
||||
multiple_img varchar(500) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '多图url',
|
||||
keywords varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '关键字',
|
||||
type int(11) DEFAULT NULL COMMENT '文章类型',
|
||||
content longtext CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT '内容',
|
||||
create_time datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
create_id varchar(50) NULL DEFAULT NULL COMMENT '创建人',
|
||||
PRIMARY KEY (id) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '文章管理' ROW_FORMAT = Compact;
|
||||
|
||||
-- 2020.6.15添加文件管理
|
||||
DROP TABLE IF EXISTS sys_files;
|
||||
CREATE TABLE sys_files (
|
||||
id varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
|
||||
url varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'URL地址',
|
||||
create_date datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
file_name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件名称',
|
||||
file_path varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
PRIMARY KEY (id) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '文件上传' ROW_FORMAT = Compact;
|
||||
|
||||
|
||||
-- 初始数据
|
||||
INSERT INTO sys_dept(id, dept_no, name, pid, status, relation_code, dept_manager_id, manager_name, phone, deleted) VALUES ('1', 'D000001', '总公司', '0', 1, 'D000001', NULL, '小李', '13888888888', 1);
|
||||
INSERT INTO sys_permission VALUES ('1', '删除', 'sysGenerator:delete', NULL, 'sysGenerator/delete', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('10', '赋予角色', 'sys:user:role:update', NULL, 'sys/user/roles/*', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('11', '菜单权限管理', NULL, NULL, 'index/menus', '_self', '51', 98, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('12', '列表', 'sys:dept:list', NULL, 'sys/depts', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('13', '删除', 'sys:role:deleted', NULL, 'sys/role/*', NULL, '53', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('1311115974068449281', '数据权限', 'sys:role:bindDept', '', 'sys/role/bindDept', '_self', '53', 5, 3, 1, '2020-09-30 09:29:42', NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('15', '代码生成', NULL, NULL, 'index/sysGenerator', '_self', '54', 1, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('16', '列表', 'sysGenerator:list', NULL, 'sysGenerator/listByPage', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('17', '详情', 'sys:permission:detail', NULL, 'sys/permission/*', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('19', '列表', 'sys:role:list', NULL, 'sys/roles', NULL, '53', 0, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('2', 'SQL 监控', '', '', 'druid/sql.html', '_self', '21', 98, 2, 1, '2020-03-19 13:29:40', '2020-05-07 13:36:59', 1);
|
||||
INSERT INTO sys_permission VALUES ('20', '修改', 'sysGenerator:update', NULL, 'sysGenerator/update', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('21', '其他', NULL, 'layui-icon-list', NULL, NULL, '0', 200, 1, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('22', '详情', 'sys:dept:detail', NULL, 'sys/dept/*', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('23', '列表', 'sys:user:list', NULL, 'sys/users', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('24', '用户管理', NULL, NULL, 'index/users', '_self', '51', 100, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('25', '详情', 'sys:user:detail', NULL, 'sys/user/*', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('26', '删除', 'sys:permission:deleted', NULL, 'sys/permission/*', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('27', '文件管理', '', '', 'index/sysFiles', '_self', '54', 10, 2, 1, NULL, '2020-06-15 16:00:29', 1);
|
||||
INSERT INTO sys_permission VALUES ('28', '列表', 'sysFiles:list', NULL, 'sysFiles/listByPage', NULL, '27', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('29', '新增', 'sysFiles:add', NULL, 'sysFiles/add', NULL, '27', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('3', '新增', 'sys:role:add', NULL, 'sys/role', NULL, '53', 0, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('30', '删除', 'sysFiles:delete', NULL, 'sysFiles/delete', NULL, '27', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('31', '文章管理', NULL, NULL, 'index/sysContent', '_self', '54', 10, 2, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('32', '列表', 'sysContent:list', NULL, 'sysContent/listByPage', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('33', '新增', 'sysContent:add', NULL, 'sysContent/add', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('34', '修改', 'sysContent:update', NULL, 'sysContent/update', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('35', '删除', 'sysContent:delete', NULL, 'sysContent/delete', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('36', '更新', 'sys:role:update', NULL, 'sys/role', NULL, '53', 0, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('38', '更新', 'sys:dept:update', NULL, 'sys/dept', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('39', '详情', 'sys:role:detail', NULL, 'sys/role/*', NULL, '53', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('4', '添加', 'sysGenerator:add', NULL, 'sysGenerator/add', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('40', '编辑', 'sys:permission:update', NULL, 'sys/permission', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('41', '部门管理', NULL, NULL, 'index/depts', '_self', '51', 100, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('42', '新增', 'sys:user:add', NULL, 'sys/user', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('43', '列表', 'sys:permission:list', NULL, 'sys/permissions', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('44', '新增', 'sys:permission:add', NULL, 'sys/permission', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('45', '字典管理', NULL, '', 'index/sysDict', NULL, '54', 10, 2, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('46', '列表', 'sysDict:list', NULL, 'sysDict/listByPage', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('47', '新增', 'sysDict:add', NULL, 'sysDict/add', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('48', '修改', 'sysDict:update', NULL, 'sysDict/update', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('49', '删除', 'sysDict:delete', NULL, 'sysDict/delete', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('5', '删除', 'sys:dept:deleted', NULL, 'sys/dept/*', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('50', '表单构建', '', '', 'index/build', '_self', '21', 1, 2, 1, '2020-04-22 13:09:41', '2020-05-07 13:36:47', 1);
|
||||
INSERT INTO sys_permission VALUES ('51', '组织管理', NULL, 'layui-icon-user', NULL, NULL, '0', 1, 1, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('52', '拥有角色', 'sys:user:role:detail', NULL, 'sys/user/roles/*', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('53', '角色管理', NULL, NULL, 'index/roles', '_self', '51', 99, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('54', '系统管理', NULL, 'layui-icon-set-fill', NULL, NULL, '0', 98, 1, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('56', '更新', 'sys:user:update', NULL, 'sys/user', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('57', '删除', 'sys:user:deleted', NULL, 'sys/user', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('58', '删除', 'sys:log:deleted', NULL, 'sys/logs', NULL, '8', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('6', '接口管理', '', '', 'doc.html', '_blank', '21', 100, 2, 1, '2020-03-19 13:29:40', '2020-05-07 13:36:02', 1);
|
||||
INSERT INTO sys_permission VALUES ('7', '列表', 'sys:log:list', NULL, 'sys/logs', NULL, '8', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('8', '日志管理', NULL, NULL, 'index/logs', '_self', '54', 97, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('9', '新增', 'sys:dept:add', NULL, 'sys/dept', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_role(id, name, description, status, create_time, update_time, deleted) VALUES ('1', '超级管理员', '拥有所有权限-不能删除', 1, '2019-11-01 19:26:29', '2020-03-19 13:29:51', 1);
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('1', '1', '1', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('10', '1', '10', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('11', '1', '11', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('12', '1', '12', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('13', '1', '13', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('14', '1', '14', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('15', '1', '15', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('16', '1', '16', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('17', '1', '17', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('18', '1', '18', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('19', '1', '19', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('2', '1', '2', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('20', '1', '20', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('21', '1', '21', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('22', '1', '22', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('23', '1', '23', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('24', '1', '24', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('25', '1', '25', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('26', '1', '26', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('27', '1', '27', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('28', '1', '28', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('29', '1', '29', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('3', '1', '3', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('30', '1', '30', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('31', '1', '31', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('32', '1', '32', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('33', '1', '33', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('34', '1', '34', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('35', '1', '35', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('36', '1', '36', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('38', '1', '38', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('39', '1', '39', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('4', '1', '4', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('40', '1', '40', '2020-06-15 15:21:17');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('41', '1', '41', '2020-06-15 15:21:17');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('42', '1', '42', '2020-06-15 15:21:17');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('43', '1', '43', '2020-06-15 15:21:17');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('44', '1', '44', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('45', '1', '45', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('46', '1', '46', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('47', '1', '47', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('48', '1', '48', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('49', '1', '49', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('5', '1', '5', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('50', '1', '50', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('51', '1', '51', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('52', '1', '52', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('53', '1', '53', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('54', '1', '54', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('55', '1', '55', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('56', '1', '56', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('57', '1', '57', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('58', '1', '58', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('6', '1', '6', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('60', '1', '60', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('61', '1', '61', '2020-05-26 14:21:56');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('62', '1', '62', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('63', '1', '63', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('7', '1', '7', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('8', '1', '8', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('9', '1', '9', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('1311116066716430339', '1', '1311115974068449281', '2020-09-30 09:30:04');
|
||||
|
||||
INSERT INTO sys_user(id, username, salt, password, phone, dept_id, real_name, nick_name, email, status, sex, deleted, create_id, update_id, create_where, create_time, update_time) VALUES ('1', 'admin', '324ce32d86224b00a02b', '2102b59a75ab87616b62d0b9432569d0', '13888888888', '1', '爱糖宝', '爱糖宝', 'xxxxxx@163.com', 1, 2, 1, '1', '1', 3, '2019-09-22 19:38:05', '2020-03-18 09:15:22');
|
||||
INSERT INTO sys_user_role(id, user_id, role_id, create_time) VALUES ('1', '1', '1', '2020-03-19 02:23:13');
|
||||
INSERT INTO sys_dict(id, name, remark, create_time) VALUES ('1255790029680242690', 'sex', '性别', '2020-04-30 17:24:09');
|
||||
INSERT INTO sys_dict(id, name, remark, create_time) VALUES ('1255790029680242691', 'content_keyword', '关键字', '2020-04-30 17:24:09');
|
||||
INSERT INTO sys_dict(id, name, remark, create_time) VALUES ('1282504369620430849', 'content_type', '文章类型略略略', '2020-07-13 10:37:24');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1255790073535885314', '男', '1', 1, '1255790029680242690', '2020-04-30 17:24:19');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1255790100115189761', '女', '2', 2, '1255790029680242690', '2020-04-30 17:24:25');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282504475715350530', '诗词', '1', 1, '1282504369620430849', '2020-07-13 10:37:49');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282504651729317889', '散文', '2', 2, '1282504369620430849', '2020-07-13 10:38:31');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842369', '剧本', '3', 3, '1282504369620430849', '2020-07-14 09:15:01');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842370', 'java', '1', 1, '1255790029680242691', '2020-07-14 09:15:01');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842371', 'mysql', '2', 2, '1255790029680242691', '2020-07-14 09:15:01');
|
||||
302
doc/oracle.sql
Normal file
302
doc/oracle.sql
Normal file
@ -0,0 +1,302 @@
|
||||
-- 部门
|
||||
CREATE TABLE sys_dept (
|
||||
id varchar2(64),
|
||||
dept_no varchar2(64),
|
||||
name varchar2(64),
|
||||
pid varchar2(64),
|
||||
status NUMBER(10, 0),
|
||||
relation_code varchar2(3000),
|
||||
dept_manager_id varchar2(64),
|
||||
manager_name varchar2(255),
|
||||
phone varchar2(20),
|
||||
create_time date,
|
||||
update_time date,
|
||||
deleted NUMBER(10, 0),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_dept IS '部门';
|
||||
|
||||
-- 日志
|
||||
CREATE TABLE sys_log (
|
||||
id varchar2(64),
|
||||
user_id varchar2(64),
|
||||
username varchar2(50),
|
||||
operation varchar2(50),
|
||||
time NUMBER(10, 0),
|
||||
method varchar2(200),
|
||||
params varchar2(1000),
|
||||
ip varchar2(64),
|
||||
create_time date,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_log IS '日志';
|
||||
|
||||
-- 菜单权限
|
||||
CREATE TABLE sys_permission (
|
||||
id varchar2(64) ,
|
||||
name varchar2(300),
|
||||
perms varchar2(500) ,
|
||||
icon varchar2(255),
|
||||
url varchar2(100),
|
||||
target varchar2(50),
|
||||
pid varchar2(64),
|
||||
order_num NUMBER(10, 0),
|
||||
type NUMBER(10, 0),
|
||||
status NUMBER(10, 0),
|
||||
create_time date,
|
||||
update_time date,
|
||||
deleted NUMBER(10, 0),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_permission IS '菜单权限';
|
||||
|
||||
-- 角色
|
||||
CREATE TABLE sys_role (
|
||||
id varchar2(64),
|
||||
name varchar2(255),
|
||||
description varchar2(255),
|
||||
status NUMBER(10, 0),
|
||||
create_time date,
|
||||
update_time date,
|
||||
deleted NUMBER(10, 0),
|
||||
data_scope NUMBER(10, 0),
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_role IS '角色';
|
||||
|
||||
-- 角色权限关联表
|
||||
CREATE TABLE sys_role_permission (
|
||||
id varchar2(64) ,
|
||||
role_id varchar2(64),
|
||||
permission_id varchar2(64),
|
||||
create_time date,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_role_permission IS '角色权限关联表';
|
||||
|
||||
-- 角色部门关联表
|
||||
CREATE TABLE sys_role_dept (
|
||||
id varchar2(64) ,
|
||||
role_id varchar2(64),
|
||||
dept_id varchar2(64),
|
||||
create_time date,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_role_permission IS '角色部门关联表';
|
||||
|
||||
|
||||
-- 用户
|
||||
CREATE TABLE sys_user (
|
||||
id varchar2(64),
|
||||
username varchar2(50),
|
||||
salt varchar2(20),
|
||||
password varchar2(200),
|
||||
phone varchar2(20),
|
||||
dept_id varchar2(64),
|
||||
real_name varchar2(60),
|
||||
nick_name varchar2(60),
|
||||
email varchar2(50),
|
||||
status NUMBER(10, 0),
|
||||
sex NUMBER(10, 0),
|
||||
deleted NUMBER(10, 0),
|
||||
create_id varchar2(64),
|
||||
update_id varchar2(64),
|
||||
create_where NUMBER(10, 0) DEFAULT 1,
|
||||
create_time date,
|
||||
update_time date,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_user IS '用户';
|
||||
|
||||
-- 用户角色
|
||||
CREATE TABLE sys_user_role (
|
||||
id varchar2(64),
|
||||
user_id varchar2(64),
|
||||
role_id varchar2(64),
|
||||
create_time date,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_user_role IS '用户角色';
|
||||
|
||||
|
||||
-- 数据字典
|
||||
CREATE TABLE sys_dict (
|
||||
id varchar2(64) ,
|
||||
name varchar2(100) ,
|
||||
remark varchar2(255) ,
|
||||
create_time date,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_dict IS '数据字典';
|
||||
|
||||
-- 数据字典明细
|
||||
CREATE TABLE sys_dict_detail (
|
||||
id varchar2(50) ,
|
||||
label varchar2(255) ,
|
||||
value varchar2(255) ,
|
||||
sort NUMBER(10, 0) ,
|
||||
dict_id varchar2(50) ,
|
||||
create_time date,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_dict_detail IS '数据字典明细';
|
||||
|
||||
-- 文章管理
|
||||
CREATE TABLE sys_content (
|
||||
id varchar2(50),
|
||||
title varchar2(255),
|
||||
one_img varchar2(255),
|
||||
multiple_img varchar2(500),
|
||||
keywords varchar2(255),
|
||||
type NUMBER(10, 0),
|
||||
content VARCHAR2(4000) ,
|
||||
create_time date ,
|
||||
create_id varchar2(50) ,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_content IS '文章管理';
|
||||
|
||||
-- 文件管理
|
||||
CREATE TABLE sys_files (
|
||||
id varchar2(50) ,
|
||||
url varchar2(200),
|
||||
create_date date ,
|
||||
file_name varchar2(255),
|
||||
file_path varchar2(255) ,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
COMMENT ON TABLE sys_files IS '文件管理';
|
||||
|
||||
|
||||
-- 初始数据
|
||||
INSERT INTO sys_dept(id, dept_no, name, pid, status, relation_code, dept_manager_id, manager_name, phone, deleted) VALUES ('1', 'D000001', '总公司', '0', 1, 'D000001', NULL, '小李', '13888888888', 1);
|
||||
INSERT INTO sys_permission VALUES ('1', '删除', 'sysGenerator:delete', NULL, 'sysGenerator/delete', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('10', '赋予角色', 'sys:user:role:update', NULL, 'sys/user/roles/*', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('11', '菜单权限管理', NULL, NULL, 'index/menus', '_self', '51', 98, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('12', '列表', 'sys:dept:list', NULL, 'sys/depts', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('13', '删除', 'sys:role:deleted', NULL, 'sys/role/*', NULL, '53', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('1311115974068449281', '数据权限', 'sys:role:bindDept', '', 'sys/role/bindDept', '_self', '53', 5, 3, 1, '2020-09-30 09:29:42', NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('15', '代码生成', NULL, NULL, 'index/sysGenerator', '_self', '54', 1, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('16', '列表', 'sysGenerator:list', NULL, 'sysGenerator/listByPage', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('17', '详情', 'sys:permission:detail', NULL, 'sys/permission/*', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('19', '列表', 'sys:role:list', NULL, 'sys/roles', NULL, '53', 0, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('2', 'SQL 监控', '', '', 'druid/sql.html', '_self', '21', 98, 2, 1, '2020-03-19 13:29:40', '2020-05-07 13:36:59', 1);
|
||||
INSERT INTO sys_permission VALUES ('20', '修改', 'sysGenerator:update', NULL, 'sysGenerator/update', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('21', '其他', NULL, 'layui-icon-list', NULL, NULL, '0', 200, 1, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('22', '详情', 'sys:dept:detail', NULL, 'sys/dept/*', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('23', '列表', 'sys:user:list', NULL, 'sys/users', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('24', '用户管理', NULL, NULL, 'index/users', '_self', '51', 100, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('25', '详情', 'sys:user:detail', NULL, 'sys/user/*', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('26', '删除', 'sys:permission:deleted', NULL, 'sys/permission/*', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('27', '文件管理', '', '', 'index/sysFiles', '_self', '54', 10, 2, 1, NULL, '2020-06-15 16:00:29', 1);
|
||||
INSERT INTO sys_permission VALUES ('28', '列表', 'sysFiles:list', NULL, 'sysFiles/listByPage', NULL, '27', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('29', '新增', 'sysFiles:add', NULL, 'sysFiles/add', NULL, '27', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('3', '新增', 'sys:role:add', NULL, 'sys/role', NULL, '53', 0, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('30', '删除', 'sysFiles:delete', NULL, 'sysFiles/delete', NULL, '27', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('31', '文章管理', NULL, NULL, 'index/sysContent', '_self', '54', 10, 2, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('32', '列表', 'sysContent:list', NULL, 'sysContent/listByPage', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('33', '新增', 'sysContent:add', NULL, 'sysContent/add', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('34', '修改', 'sysContent:update', NULL, 'sysContent/update', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('35', '删除', 'sysContent:delete', NULL, 'sysContent/delete', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('36', '更新', 'sys:role:update', NULL, 'sys/role', NULL, '53', 0, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('38', '更新', 'sys:dept:update', NULL, 'sys/dept', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('39', '详情', 'sys:role:detail', NULL, 'sys/role/*', NULL, '53', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('4', '添加', 'sysGenerator:add', NULL, 'sysGenerator/add', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('40', '编辑', 'sys:permission:update', NULL, 'sys/permission', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('41', '部门管理', NULL, NULL, 'index/depts', '_self', '51', 100, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('42', '新增', 'sys:user:add', NULL, 'sys/user', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('43', '列表', 'sys:permission:list', NULL, 'sys/permissions', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('44', '新增', 'sys:permission:add', NULL, 'sys/permission', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('45', '字典管理', NULL, '', 'index/sysDict', NULL, '54', 10, 2, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('46', '列表', 'sysDict:list', NULL, 'sysDict/listByPage', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('47', '新增', 'sysDict:add', NULL, 'sysDict/add', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('48', '修改', 'sysDict:update', NULL, 'sysDict/update', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('49', '删除', 'sysDict:delete', NULL, 'sysDict/delete', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('5', '删除', 'sys:dept:deleted', NULL, 'sys/dept/*', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('50', '表单构建', '', '', 'index/build', '_self', '21', 1, 2, 1, '2020-04-22 13:09:41', '2020-05-07 13:36:47', 1);
|
||||
INSERT INTO sys_permission VALUES ('51', '组织管理', NULL, 'layui-icon-user', NULL, NULL, '0', 1, 1, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('52', '拥有角色', 'sys:user:role:detail', NULL, 'sys/user/roles/*', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('53', '角色管理', NULL, NULL, 'index/roles', '_self', '51', 99, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('54', '系统管理', NULL, 'layui-icon-set-fill', NULL, NULL, '0', 98, 1, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('56', '更新', 'sys:user:update', NULL, 'sys/user', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('57', '删除', 'sys:user:deleted', NULL, 'sys/user', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('58', '删除', 'sys:log:deleted', NULL, 'sys/logs', NULL, '8', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('6', '接口管理', '', '', 'doc.html', '_blank', '21', 100, 2, 1, '2020-03-19 13:29:40', '2020-05-07 13:36:02', 1);
|
||||
INSERT INTO sys_permission VALUES ('7', '列表', 'sys:log:list', NULL, 'sys/logs', NULL, '8', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('8', '日志管理', NULL, NULL, 'index/logs', '_self', '54', 97, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('9', '新增', 'sys:dept:add', NULL, 'sys/dept', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_role(id, name, description, status, deleted) VALUES ('1', '超级管理员', '拥有所有权限-不能删除', 1, 1);
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('1', '1', '1');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('10', '1', '10');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('11', '1', '11');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('12', '1', '12');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('13', '1', '13');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('14', '1', '14');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('15', '1', '15');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('16', '1', '16');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('17', '1', '17');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('18', '1', '18');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('19', '1', '19');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('2', '1', '2');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('20', '1', '20');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('21', '1', '21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('22', '1', '22');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('23', '1', '23');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('24', '1', '24');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('25', '1', '25');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('26', '1', '26');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('27', '1', '27');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('28', '1', '28');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('29', '1', '29');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('3', '1', '3');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('30', '1', '30');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('31', '1', '31');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('32', '1', '32');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('33', '1', '33');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('34', '1', '34');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('35', '1', '35');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('36', '1', '36');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('38', '1', '38');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('39', '1', '39');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('4', '1', '4');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('40', '1', '40');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('41', '1', '41');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('42', '1', '42');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('43', '1', '43');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('44', '1', '44');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('45', '1', '45');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('46', '1', '46');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('47', '1', '47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('48', '1', '48');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('49', '1', '49');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('5', '1', '5');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('50', '1', '50');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('51', '1', '51');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('52', '1', '52');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('53', '1', '53');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('54', '1', '54');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('55', '1', '55');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('56', '1', '56');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('57', '1', '57');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('58', '1', '58');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('6', '1', '6');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('60', '1', '60');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('61', '1', '61');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('62', '1', '62');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('63', '1', '63');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('7', '1', '7');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('8', '1', '8');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('9', '1', '9');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id) VALUES ('1311116066716430339', '1', '1311115974068449281');
|
||||
INSERT INTO sys_user(id, username, salt, password, phone, dept_id, real_name, nick_name, email, status, sex, deleted, create_id, update_id, create_where) VALUES ('1', 'admin', '324ce32d86224b00a02b', '2102b59a75ab87616b62d0b9432569d0', '13888888888', '1', '爱糖宝', '爱糖宝', 'xxxxxx@163.com', 1, 2, 1, '1', '1', 3);
|
||||
INSERT INTO sys_user_role(id, user_id, role_id) VALUES ('1', '1', '1');
|
||||
INSERT INTO sys_dict(id, name, remark, create_time) VALUES ('1255790029680242690', 'sex', '性别', '2020-04-30 17:24:09');
|
||||
INSERT INTO sys_dict(id, name, remark, create_time) VALUES ('1255790029680242691', 'content_keyword', '关键字', '2020-04-30 17:24:09');
|
||||
INSERT INTO sys_dict(id, name, remark, create_time) VALUES ('1282504369620430849', 'content_type', '文章类型略略略', '2020-07-13 10:37:24');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1255790073535885314', '男', '1', 1, '1255790029680242690', '2020-04-30 17:24:19');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1255790100115189761', '女', '2', 2, '1255790029680242690', '2020-04-30 17:24:25');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282504475715350530', '诗词', '1', 1, '1282504369620430849', '2020-07-13 10:37:49');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282504651729317889', '散文', '2', 2, '1282504369620430849', '2020-07-13 10:38:31');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842369', '剧本', '3', 3, '1282504369620430849', '2020-07-14 09:15:01');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842370', 'java', '1', 1, '1255790029680242691', '2020-07-14 09:15:01');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842371', 'mysql', '2', 2, '1255790029680242691', '2020-07-14 09:15:01');
|
||||
295
doc/sqlServer.sql
Normal file
295
doc/sqlServer.sql
Normal file
@ -0,0 +1,295 @@
|
||||
-- 部门
|
||||
CREATE TABLE sys_dept (
|
||||
id varchar(64),
|
||||
dept_no varchar(64),
|
||||
name varchar(64),
|
||||
pid varchar(64),
|
||||
status int,
|
||||
relation_code varchar(3000),
|
||||
dept_manager_id varchar(64),
|
||||
manager_name varchar(255),
|
||||
phone varchar(20),
|
||||
create_time datetime,
|
||||
update_time datetime,
|
||||
deleted int,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
-- 日志
|
||||
CREATE TABLE sys_log (
|
||||
id varchar(64),
|
||||
user_id varchar(64),
|
||||
username varchar(50),
|
||||
operation varchar(50),
|
||||
time int,
|
||||
method varchar(200),
|
||||
params varchar(1000),
|
||||
ip varchar(64),
|
||||
create_time datetime,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 菜单权限
|
||||
CREATE TABLE sys_permission (
|
||||
id varchar(64) ,
|
||||
name varchar(300),
|
||||
perms varchar(500) ,
|
||||
icon varchar(255),
|
||||
url varchar(100),
|
||||
target varchar(50),
|
||||
pid varchar(64),
|
||||
order_num int,
|
||||
type int,
|
||||
status int,
|
||||
create_time datetime,
|
||||
update_time datetime,
|
||||
deleted int,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 角色
|
||||
CREATE TABLE sys_role (
|
||||
id varchar(64),
|
||||
name varchar(255),
|
||||
description varchar(255),
|
||||
status int,
|
||||
create_time datetime,
|
||||
update_time datetime,
|
||||
deleted int,
|
||||
data_scope int,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
-- 角色部门关联表
|
||||
CREATE TABLE sys_role_dept (
|
||||
id varchar(64) ,
|
||||
role_id varchar(64),
|
||||
dept_id varchar(64),
|
||||
create_time datetime,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
|
||||
-- 角色权限关联表
|
||||
CREATE TABLE sys_role_permission (
|
||||
id varchar(64) ,
|
||||
role_id varchar(64),
|
||||
permission_id varchar(64),
|
||||
create_time datetime,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 用户
|
||||
CREATE TABLE sys_user (
|
||||
id varchar(64),
|
||||
username varchar(50),
|
||||
salt varchar(20),
|
||||
password varchar(200),
|
||||
phone varchar(20),
|
||||
dept_id varchar(64),
|
||||
real_name varchar(60),
|
||||
nick_name varchar(60),
|
||||
email varchar(50),
|
||||
status int,
|
||||
sex int,
|
||||
deleted int,
|
||||
create_id varchar(64),
|
||||
update_id varchar(64),
|
||||
create_where int DEFAULT 1,
|
||||
create_time datetime,
|
||||
update_time datetime,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 用户角色
|
||||
CREATE TABLE sys_user_role (
|
||||
id varchar(64),
|
||||
user_id varchar(64),
|
||||
role_id varchar(64),
|
||||
create_time datetime,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
-- 数据字典
|
||||
CREATE TABLE sys_dict (
|
||||
id varchar(64) ,
|
||||
name varchar(100) ,
|
||||
remark varchar(255) ,
|
||||
create_time datetime,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
-- 数据字典明细
|
||||
CREATE TABLE sys_dict_detail (
|
||||
id varchar(50) ,
|
||||
label varchar(255) ,
|
||||
value varchar(255) ,
|
||||
sort int ,
|
||||
dict_id varchar(50) ,
|
||||
create_time datetime,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
-- 文章管理
|
||||
CREATE TABLE sys_content (
|
||||
id varchar(50),
|
||||
title varchar(255),
|
||||
one_img varchar(255),
|
||||
multiple_img varchar(500),
|
||||
keywords varchar(255),
|
||||
type int,
|
||||
content varchar(4000) ,
|
||||
create_time datetime ,
|
||||
create_id varchar(50) ,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
-- 文件管理
|
||||
CREATE TABLE sys_files (
|
||||
id varchar(50) ,
|
||||
url varchar(200),
|
||||
create_date datetime ,
|
||||
file_name varchar(255),
|
||||
file_path varchar(255) ,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
-- 初始数据
|
||||
-- 初始数据
|
||||
INSERT INTO sys_dept(id, dept_no, name, pid, status, relation_code, dept_manager_id, manager_name, phone, create_time, update_time, deleted) VALUES ('1', 'D000001', '总公司', '0', 1, 'D000001', NULL, '小李', '13888888888', '2019-11-07 22:43:33', NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('1', '删除', 'sysGenerator:delete', NULL, 'sysGenerator/delete', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('10', '赋予角色', 'sys:user:role:update', NULL, 'sys/user/roles/*', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('11', '菜单权限管理', NULL, NULL, 'index/menus', '_self', '51', 98, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('12', '列表', 'sys:dept:list', NULL, 'sys/depts', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('13', '删除', 'sys:role:deleted', NULL, 'sys/role/*', NULL, '53', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('1311115974068449281', '数据权限', 'sys:role:bindDept', '', 'sys/role/bindDept', '_self', '53', 5, 3, 1, '2020-09-30 09:29:42', NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('15', '代码生成', NULL, NULL, 'index/sysGenerator', '_self', '54', 1, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('16', '列表', 'sysGenerator:list', NULL, 'sysGenerator/listByPage', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('17', '详情', 'sys:permission:detail', NULL, 'sys/permission/*', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('19', '列表', 'sys:role:list', NULL, 'sys/roles', NULL, '53', 0, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('2', 'SQL 监控', '', '', 'druid/sql.html', '_self', '21', 98, 2, 1, '2020-03-19 13:29:40', '2020-05-07 13:36:59', 1);
|
||||
INSERT INTO sys_permission VALUES ('20', '修改', 'sysGenerator:update', NULL, 'sysGenerator/update', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('21', '其他', NULL, 'layui-icon-list', NULL, NULL, '0', 200, 1, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('22', '详情', 'sys:dept:detail', NULL, 'sys/dept/*', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('23', '列表', 'sys:user:list', NULL, 'sys/users', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('24', '用户管理', NULL, NULL, 'index/users', '_self', '51', 100, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('25', '详情', 'sys:user:detail', NULL, 'sys/user/*', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('26', '删除', 'sys:permission:deleted', NULL, 'sys/permission/*', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('27', '文件管理', '', '', 'index/sysFiles', '_self', '54', 10, 2, 1, NULL, '2020-06-15 16:00:29', 1);
|
||||
INSERT INTO sys_permission VALUES ('28', '列表', 'sysFiles:list', NULL, 'sysFiles/listByPage', NULL, '27', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('29', '新增', 'sysFiles:add', NULL, 'sysFiles/add', NULL, '27', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('3', '新增', 'sys:role:add', NULL, 'sys/role', NULL, '53', 0, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('30', '删除', 'sysFiles:delete', NULL, 'sysFiles/delete', NULL, '27', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('31', '文章管理', NULL, NULL, 'index/sysContent', '_self', '54', 10, 2, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('32', '列表', 'sysContent:list', NULL, 'sysContent/listByPage', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('33', '新增', 'sysContent:add', NULL, 'sysContent/add', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('34', '修改', 'sysContent:update', NULL, 'sysContent/update', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('35', '删除', 'sysContent:delete', NULL, 'sysContent/delete', NULL, '31', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('36', '更新', 'sys:role:update', NULL, 'sys/role', NULL, '53', 0, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('38', '更新', 'sys:dept:update', NULL, 'sys/dept', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('39', '详情', 'sys:role:detail', NULL, 'sys/role/*', NULL, '53', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('4', '添加', 'sysGenerator:add', NULL, 'sysGenerator/add', NULL, '15', 1, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('40', '编辑', 'sys:permission:update', NULL, 'sys/permission', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('41', '部门管理', NULL, NULL, 'index/depts', '_self', '51', 100, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('42', '新增', 'sys:user:add', NULL, 'sys/user', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('43', '列表', 'sys:permission:list', NULL, 'sys/permissions', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('44', '新增', 'sys:permission:add', NULL, 'sys/permission', NULL, '11', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('45', '字典管理', NULL, '', 'index/sysDict', NULL, '54', 10, 2, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('46', '列表', 'sysDict:list', NULL, 'sysDict/listByPage', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('47', '新增', 'sysDict:add', NULL, 'sysDict/add', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('48', '修改', 'sysDict:update', NULL, 'sysDict/update', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('49', '删除', 'sysDict:delete', NULL, 'sysDict/delete', NULL, '45', 0, 3, 1, NULL, NULL, 1);
|
||||
INSERT INTO sys_permission VALUES ('5', '删除', 'sys:dept:deleted', NULL, 'sys/dept/*', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('50', '表单构建', '', '', 'index/build', '_self', '21', 1, 2, 1, '2020-04-22 13:09:41', '2020-05-07 13:36:47', 1);
|
||||
INSERT INTO sys_permission VALUES ('51', '组织管理', NULL, 'layui-icon-user', NULL, NULL, '0', 1, 1, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('52', '拥有角色', 'sys:user:role:detail', NULL, 'sys/user/roles/*', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('53', '角色管理', NULL, NULL, 'index/roles', '_self', '51', 99, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('54', '系统管理', NULL, 'layui-icon-set-fill', NULL, NULL, '0', 98, 1, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('56', '更新', 'sys:user:update', NULL, 'sys/user', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('57', '删除', 'sys:user:deleted', NULL, 'sys/user', NULL, '24', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('58', '删除', 'sys:log:deleted', NULL, 'sys/logs', NULL, '8', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('6', '接口管理', '', '', 'doc.html', '_blank', '21', 100, 2, 1, '2020-03-19 13:29:40', '2020-05-07 13:36:02', 1);
|
||||
INSERT INTO sys_permission VALUES ('7', '列表', 'sys:log:list', NULL, 'sys/logs', NULL, '8', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('8', '日志管理', NULL, NULL, 'index/logs', '_self', '54', 97, 2, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_permission VALUES ('9', '新增', 'sys:dept:add', NULL, 'sys/dept', NULL, '41', 100, 3, 1, '2020-03-19 13:29:40', '2020-03-19 13:29:40', 1);
|
||||
INSERT INTO sys_role(id, name, description, status, create_time, update_time, deleted) VALUES ('1', '超级管理员', '拥有所有权限-不能删除', 1, '2019-11-01 19:26:29', '2020-03-19 13:29:51', 1);
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('1', '1', '1', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('10', '1', '10', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('11', '1', '11', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('12', '1', '12', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('13', '1', '13', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('14', '1', '14', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('15', '1', '15', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('16', '1', '16', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('17', '1', '17', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('18', '1', '18', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('19', '1', '19', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('2', '1', '2', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('20', '1', '20', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('21', '1', '21', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('22', '1', '22', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('23', '1', '23', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('24', '1', '24', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('25', '1', '25', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('26', '1', '26', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('27', '1', '27', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('28', '1', '28', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('29', '1', '29', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('3', '1', '3', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('30', '1', '30', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('31', '1', '31', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('32', '1', '32', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('33', '1', '33', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('34', '1', '34', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('35', '1', '35', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('36', '1', '36', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('38', '1', '38', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('39', '1', '39', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('4', '1', '4', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('40', '1', '40', '2020-06-15 15:21:17');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('41', '1', '41', '2020-06-15 15:21:17');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('42', '1', '42', '2020-06-15 15:21:17');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('43', '1', '43', '2020-06-15 15:21:17');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('44', '1', '44', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('45', '1', '45', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('46', '1', '46', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('47', '1', '47', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('48', '1', '48', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('49', '1', '49', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('5', '1', '5', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('50', '1', '50', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('51', '1', '51', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('52', '1', '52', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('53', '1', '53', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('54', '1', '54', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('55', '1', '55', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('56', '1', '56', '2020-05-26 17:04:21');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('57', '1', '57', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('58', '1', '58', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('6', '1', '6', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('60', '1', '60', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('61', '1', '61', '2020-05-26 14:21:56');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('62', '1', '62', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('63', '1', '63', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('7', '1', '7', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('8', '1', '8', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('9', '1', '9', '2020-04-22 15:48:47');
|
||||
INSERT INTO sys_role_permission(id, role_id, permission_id, create_time) VALUES ('1311116066716430339', '1', '1311115974068449281', '2020-09-30 09:30:04');
|
||||
INSERT INTO sys_user(id, username, salt, password, phone, dept_id, real_name, nick_name, email, status, sex, deleted, create_id, update_id, create_where, create_time, update_time) VALUES ('1', 'admin', '324ce32d86224b00a02b', '2102b59a75ab87616b62d0b9432569d0', '13888888888', '1', '爱糖宝', '爱糖宝', 'xxxxxx@163.com', 1, 2, 1, '1', '1', 3, '2019-09-22 19:38:05', '2020-03-18 09:15:22');
|
||||
INSERT INTO sys_user_role(id, user_id, role_id, create_time) VALUES ('1', '1', '1', '2020-03-19 02:23:13');
|
||||
INSERT INTO sys_dict(id, name, remark, create_time) VALUES ('1255790029680242690', 'sex', '性别', '2020-04-30 17:24:09');
|
||||
INSERT INTO sys_dict(id, name, remark, create_time) VALUES ('1255790029680242691', 'content_keyword', '关键字', '2020-04-30 17:24:09');
|
||||
INSERT INTO sys_dict(id, name, remark, create_time) VALUES ('1282504369620430849', 'content_type', '文章类型略略略', '2020-07-13 10:37:24');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1255790073535885314', '男', '1', 1, '1255790029680242690', '2020-04-30 17:24:19');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1255790100115189761', '女', '2', 2, '1255790029680242690', '2020-04-30 17:24:25');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282504475715350530', '诗词', '1', 1, '1282504369620430849', '2020-07-13 10:37:49');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282504651729317889', '散文', '2', 2, '1282504369620430849', '2020-07-13 10:38:31');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842369', '剧本', '3', 3, '1282504369620430849', '2020-07-14 09:15:01');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842370', 'java', '1', 1, '1255790029680242691', '2020-07-14 09:15:01');
|
||||
INSERT INTO sys_dict_detail(id, label, value, sort, dict_id, create_time) VALUES ('1282846022950842371', 'mysql', '2', 2, '1255790029680242691', '2020-07-14 09:15:01');
|
||||
177
pom.xml
Normal file
177
pom.xml
Normal file
@ -0,0 +1,177 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-parent</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<relativePath />
|
||||
</parent>
|
||||
<groupId>vip.fuck.sm</groupId>
|
||||
<artifactId>solon-manager</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>solon-manager</name>
|
||||
<description>Demo project for Solon</description>
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
<mybatis-plus.version>3.4.0</mybatis-plus.version>
|
||||
<mybatis-plus-dynamic.version>2.5.5</mybatis-plus-dynamic.version>
|
||||
<ojdbc6.version>12.1.0.1-atlassian-hosted</ojdbc6.version>
|
||||
<sqlserver.version>4.0</sqlserver.version>
|
||||
<commons.lang.version>2.6</commons.lang.version>
|
||||
<commons.io.version>2.5</commons.io.version>
|
||||
<commons.configuration.version>1.10</commons.configuration.version>
|
||||
<velocity.version>1.7</velocity.version>
|
||||
<shiro.version>1.11.0</shiro.version>
|
||||
<druid.version>1.1.10</druid.version>
|
||||
<fastjson.version>1.2.83</fastjson.version>
|
||||
<thymeleaf-shiro.version>2.0.0</thymeleaf-shiro.version>
|
||||
<knife4j.version>2.0.2</knife4j.version>
|
||||
<easy-captcha.version>1.6.2</easy-captcha.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-view-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-logging-logback</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-serialization-jackson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-security-validation</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-solon-plugin</artifactId>
|
||||
<version>3.5.10.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-jsqlparser-4.9</artifactId>
|
||||
<version>3.5.9</version>
|
||||
</dependency>
|
||||
|
||||
<!--lombok-->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<scope>runtime</scope>
|
||||
<version>8.0.33</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.zaxxer</groupId>
|
||||
<artifactId>HikariCP</artifactId>
|
||||
<version>4.0.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.oracle</groupId>
|
||||
<artifactId>ojdbc6</artifactId>
|
||||
<version>${ojdbc6.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.microsoft.sqlserver</groupId>
|
||||
<artifactId>sqljdbc4</artifactId>
|
||||
<version>${sqlserver.version}</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-openapi2-knife4j</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-lang</groupId>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
<version>${commons.lang.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>${commons.io.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-configuration</groupId>
|
||||
<artifactId>commons-configuration</artifactId>
|
||||
<version>${commons.configuration.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>velocity</artifactId>
|
||||
<groupId>org.apache.velocity</groupId>
|
||||
<version>${velocity.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.whvcse</groupId>
|
||||
<artifactId>easy-captcha</artifactId>
|
||||
<version>${easy-captcha.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>1.13</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>sa-token-solon-plugin</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.8.22</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>manager</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>tencent</id>
|
||||
<url>https://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>aliyun-repos</id>
|
||||
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
|
||||
</project>
|
||||
25
src/main/java/vip/fuck/sm/SolonManagerApplication.java
Normal file
25
src/main/java/vip/fuck/sm/SolonManagerApplication.java
Normal file
@ -0,0 +1,25 @@
|
||||
package vip.fuck.sm;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.noear.solon.Solon;
|
||||
import org.noear.solon.annotation.SolonMain;
|
||||
import org.noear.solon.web.cors.CrossFilter;
|
||||
|
||||
/**
|
||||
* 启动类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
*/
|
||||
@Slf4j
|
||||
@SolonMain
|
||||
public class SolonManagerApplication {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
Solon.start(SolonManagerApplication.class, args, app->{
|
||||
//例:或者:增加全局处理(用过滤器模式)
|
||||
app.filter(-1, new CrossFilter().allowedOrigins("*")); //加-1 优先级更高
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
package vip.fuck.sm.common.aop.annotation;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* LogAnnotation
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface LogAnnotation {
|
||||
/**
|
||||
* 模块
|
||||
*/
|
||||
String title() default "";
|
||||
|
||||
/**
|
||||
* 功能
|
||||
*/
|
||||
String action() default "";
|
||||
}
|
||||
@ -0,0 +1,80 @@
|
||||
package vip.fuck.sm.common.aop.aspect;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import vip.fuck.sm.common.aop.annotation.LogAnnotation;
|
||||
import vip.fuck.sm.entity.SysLog;
|
||||
import vip.fuck.sm.mapper.SysLogMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.core.handle.Action;
|
||||
import org.noear.solon.core.handle.Context;
|
||||
import org.noear.solon.core.handle.Handler;
|
||||
import org.noear.solon.core.route.RouterInterceptor;
|
||||
import org.noear.solon.core.route.RouterInterceptorChain;
|
||||
import org.noear.solon.core.util.MultiMap;
|
||||
|
||||
import java.lang.reflect.Parameter;
|
||||
|
||||
import static org.noear.solon.validation.annotation.HttpPart.params;
|
||||
|
||||
@Component(index = -99)
|
||||
@Slf4j
|
||||
public class LoggingRouterInterceptor implements RouterInterceptor {
|
||||
|
||||
@Db
|
||||
private SysLogMapper sysLogMapper;
|
||||
|
||||
@Override
|
||||
public void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable {
|
||||
LogAnnotation logAnnotation = null;
|
||||
Action action = ctx.action();
|
||||
if (action != null) {
|
||||
logAnnotation = action.method().getAnnotation(LogAnnotation.class);
|
||||
|
||||
}
|
||||
|
||||
if (logAnnotation == null) {
|
||||
//如果没有注解
|
||||
chain.doIntercept(ctx, mainHandler);
|
||||
} else {
|
||||
//1.开始计时
|
||||
long start = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
chain.doIntercept(ctx, mainHandler);
|
||||
} finally {
|
||||
|
||||
|
||||
//2.获得接口响应时长
|
||||
long timespan = System.currentTimeMillis() - start;
|
||||
JSONObject param = new JSONObject();
|
||||
String body = ctx.body();
|
||||
if(body!=null && JSONUtil.isTypeJSON(body)){
|
||||
param.set("body",JSONUtil.parse(body));
|
||||
}
|
||||
MultiMap<String> keyValues = ctx.paramMap();
|
||||
if(keyValues!=null){
|
||||
param.set("params",JSONUtil.parse(keyValues));
|
||||
}
|
||||
//3.记日志
|
||||
SysLog sysLog = new SysLog();
|
||||
sysLog.setParams(param.toJSONString(0));
|
||||
sysLog.setUsername(ctx.sessionOrDefault("currentUserName",""));
|
||||
//注解上的描述
|
||||
sysLog.setOperation(logAnnotation.title() + "-" + logAnnotation.action());
|
||||
String className = action.controller().clz().getName();
|
||||
String methodName = action.method().getName();
|
||||
sysLog.setMethod(className + "." + methodName + "()");
|
||||
String userId = StpUtil.getLoginIdAsString();
|
||||
sysLog.setUserId(userId);
|
||||
sysLog.setTime((int) timespan);
|
||||
log.info(sysLog.toString());
|
||||
sysLogMapper.insert(sysLog);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package vip.fuck.sm.common.config;
|
||||
|
||||
import vip.fuck.sm.common.utils.DataResult;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.core.handle.Context;
|
||||
import org.noear.solon.core.handle.Handler;
|
||||
import org.noear.solon.core.handle.ModelAndView;
|
||||
import org.noear.solon.core.route.PathRule;
|
||||
import org.noear.solon.core.route.RouterInterceptor;
|
||||
import org.noear.solon.core.route.RouterInterceptorChain;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@Component
|
||||
public class GlobalResultInterceptor implements RouterInterceptor {
|
||||
|
||||
@Override
|
||||
public void doIntercept(Context ctx, Handler mainHandler, RouterInterceptorChain chain) throws Throwable {
|
||||
chain.doIntercept(ctx, mainHandler);
|
||||
}
|
||||
|
||||
private static final PathRule ORG_PATH_RULE = new PathRule();
|
||||
static {
|
||||
ORG_PATH_RULE.include("/favicon.ico",
|
||||
"/doc.html",
|
||||
"/swagger",
|
||||
"/swagger/**",
|
||||
"/swagger-resources",
|
||||
"/swagger-resources/**",
|
||||
"/webjars/**",
|
||||
"/error",
|
||||
"/static/**",
|
||||
"/files/**"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交结果( render 执行前调用)//不要做太复杂的事情
|
||||
*/
|
||||
@Override
|
||||
public Object postResult(Context ctx, Object result) throws Throwable {
|
||||
String path = ctx.path();
|
||||
|
||||
if(result instanceof Throwable){
|
||||
//异常类型,根据需要处理
|
||||
return result;
|
||||
}else if(result instanceof DataResult || result instanceof ModelAndView){
|
||||
return result;
|
||||
} else if( ORG_PATH_RULE.test(path) ){
|
||||
return result;
|
||||
}else {
|
||||
return DataResult.success(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,78 @@
|
||||
package vip.fuck.sm.common.config;
|
||||
|
||||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
||||
import vip.fuck.sm.common.utils.Constant;
|
||||
import org.apache.ibatis.reflection.MetaObject;
|
||||
import org.noear.solon.annotation.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
|
||||
|
||||
/**
|
||||
* mybatis plus 默认值配置
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
public class MetaObjectHandlerConfig implements MetaObjectHandler {
|
||||
|
||||
@Override
|
||||
public void insertFill(MetaObject metaObject) {
|
||||
Date currentDate = new Date();
|
||||
String[] setterNames = metaObject.getSetterNames();
|
||||
HashSet<String> setterNameSet = new HashSet<>(Arrays.asList(setterNames));
|
||||
if (setterNameSet.contains("deleted")) {
|
||||
//默认未删除
|
||||
setFieldValByName("deleted", Constant.DATA_NOT_DELETED, metaObject);
|
||||
}
|
||||
if (setterNameSet.contains("createTime")) {
|
||||
//创建时间默认当前时间
|
||||
setFieldValByName("createTime", currentDate, metaObject);
|
||||
}
|
||||
if (setterNameSet.contains("createDate")) {
|
||||
//创建时间默认当前时间
|
||||
setFieldValByName("createDate", currentDate, metaObject);
|
||||
}
|
||||
// if (setterNameSet.contains("createId")) {
|
||||
// //创建时间默认当前时间
|
||||
// setFieldValByName("createId", StpUtil.getLoginIdAsString(), metaObject);
|
||||
// }
|
||||
// if (setterNameSet.contains("updateId")) {
|
||||
// //创建时间默认当前时间
|
||||
// setFieldValByName("updateId", StpUtil.getLoginIdAsString(), metaObject);
|
||||
// }
|
||||
if (setterNameSet.contains("updateTime")) {
|
||||
//创建时间默认当前时间
|
||||
setFieldValByName("updateTime", currentDate, metaObject);
|
||||
}
|
||||
if (setterNameSet.contains("updateDate")) {
|
||||
//创建时间默认当前时间
|
||||
setFieldValByName("updateDate", currentDate, metaObject);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateFill(MetaObject metaObject) {
|
||||
Date currentDate = new Date();
|
||||
String[] setterNames = metaObject.getSetterNames();
|
||||
HashSet<String> setterNameSet = new HashSet<>(Arrays.asList(setterNames));
|
||||
if (setterNameSet.contains("updateTime")) {
|
||||
//创建时间默认当前时间
|
||||
setFieldValByName("updateTime", currentDate, metaObject);
|
||||
}
|
||||
if (setterNameSet.contains("updateDate")) {
|
||||
//创建时间默认当前时间
|
||||
setFieldValByName("updateDate", currentDate, metaObject);
|
||||
}
|
||||
// if (setterNameSet.contains("updateId")) {
|
||||
// //创建时间默认当前时间
|
||||
// setFieldValByName("updateId", StpUtil.getLoginIdAsString(), metaObject);
|
||||
// }
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
package vip.fuck.sm.common.config;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.DbType;
|
||||
import com.baomidou.mybatisplus.core.MybatisConfiguration;
|
||||
import com.baomidou.mybatisplus.core.config.GlobalConfig;
|
||||
import com.baomidou.mybatisplus.core.toolkit.sql.SqlUtils;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Bean;
|
||||
import org.noear.solon.annotation.Configuration;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.core.util.ResourceUtil;
|
||||
|
||||
/**
|
||||
* mybatis plus config
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Configuration
|
||||
public class MyBatisPlusConfig {
|
||||
// /**
|
||||
// * 配置mybatis-plus 分页查件
|
||||
// */
|
||||
// @Bean
|
||||
// public PaginationInterceptor paginationInterceptor() {
|
||||
// return new PaginationInterceptor();
|
||||
// }
|
||||
|
||||
@Bean
|
||||
public void db1_cfg(
|
||||
@Db("master") MybatisConfiguration cfg,
|
||||
@Db("master") GlobalConfig globalConfig) throws Exception {
|
||||
|
||||
|
||||
MybatisPlusInterceptor plusInterceptor = new MybatisPlusInterceptor();
|
||||
plusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
|
||||
|
||||
cfg.setCacheEnabled(false);
|
||||
cfg.addInterceptor(plusInterceptor);
|
||||
|
||||
// globalConfig.setSqlInjector(new MyLogicSqlInjector());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
package vip.fuck.sm.common.config;
|
||||
|
||||
import cn.dev33.satoken.stp.StpInterface;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import vip.fuck.sm.service.PermissionService;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* SaToken自定义权限加载接口实现类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
*/
|
||||
@Component
|
||||
public class StpInterfaceImpl implements StpInterface {
|
||||
|
||||
@Inject
|
||||
PermissionService permissionService;
|
||||
|
||||
/**
|
||||
* 返回一个账号所拥有的权限码集合
|
||||
*/
|
||||
@Override
|
||||
public List<String> getPermissionList(Object loginId, String loginType) {
|
||||
if (loginType.equals(StpUtil.TYPE)) {
|
||||
return permissionService.getPermissionsByUserId(String.valueOf(loginId));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回一个账号所拥有的角色标识集合
|
||||
*/
|
||||
@Override
|
||||
public List<String> getRoleList(Object loginId, String loginType) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,50 @@
|
||||
package vip.fuck.sm.common.config;
|
||||
|
||||
|
||||
import com.github.xiaoymin.knife4j.solon.extension.OpenApiExtensionResolver;
|
||||
import org.noear.solon.annotation.Bean;
|
||||
import org.noear.solon.annotation.Configuration;
|
||||
import org.noear.solon.annotation.Import;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.core.handle.Result;
|
||||
import org.noear.solon.docs.DocDocket;
|
||||
import org.noear.solon.docs.models.ApiContact;
|
||||
import org.noear.solon.docs.models.ApiInfo;
|
||||
|
||||
/**
|
||||
* SwaggerConfiguration
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Configuration
|
||||
public class SwaggerConfiguration {
|
||||
|
||||
|
||||
|
||||
// knife4j 的配置,由它承载
|
||||
@Inject
|
||||
OpenApiExtensionResolver openApiExtensionResolver;
|
||||
|
||||
@Bean("adminApi")
|
||||
public DocDocket adminApi() {
|
||||
//根据情况增加 "knife4j.setting" (可选)
|
||||
return new DocDocket()
|
||||
.basicAuth(openApiExtensionResolver.getSetting().getBasic())
|
||||
.vendorExtensions(openApiExtensionResolver.buildExtensions())
|
||||
.groupName("管理端接口")
|
||||
.info(new ApiInfo().title("在线文档")
|
||||
.description("在线API文档")
|
||||
.termsOfService("https://gitee.com/uidoer")
|
||||
.contact(new ApiContact().name("rish")
|
||||
.url("https://gitee.com/uidoer")
|
||||
.email("xian.zi.ming@qq.com"))
|
||||
.version("1.0"))
|
||||
// .schemes(Scheme.HTTP, Scheme.HTTPS)
|
||||
.globalResponseInData(true)
|
||||
// .globalResult(Result.class)
|
||||
.apis("vip.fuck.sm.controller"); //可以加多条,以包名为单位
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,95 @@
|
||||
package vip.fuck.sm.common.config;
|
||||
|
||||
import cn.dev33.satoken.context.SaHolder;
|
||||
import cn.dev33.satoken.router.SaRouter;
|
||||
import cn.dev33.satoken.solon.integration.SaTokenInterceptor;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import org.noear.solon.annotation.Bean;
|
||||
import org.noear.solon.annotation.Configuration;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.web.staticfiles.StaticMappings;
|
||||
import org.noear.solon.web.staticfiles.repository.ClassPathStaticRepository;
|
||||
import org.noear.solon.web.staticfiles.repository.FileStaticRepository;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.math.BigInteger;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* mvc 配置
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Configuration
|
||||
public class WebMvcConfigurer {
|
||||
|
||||
@Inject("${file.path}")
|
||||
private String filePath;
|
||||
|
||||
|
||||
@Bean
|
||||
public void staticFiles() {
|
||||
StaticMappings.add("/files/", new FileStaticRepository(filePath));
|
||||
StaticMappings.add("/static/", new ClassPathStaticRepository("static"));
|
||||
}
|
||||
|
||||
|
||||
//添加拦截器
|
||||
//web是从管理后台来的接口,不走app那一套校验逻辑
|
||||
@Bean(index = -100) //-100,是顺序位(低值优先)
|
||||
public SaTokenInterceptor saTokenInterceptor() {
|
||||
return new SaTokenInterceptor()
|
||||
// 指定 [拦截路由] 与 [放行路由]
|
||||
.addInclude("/**")
|
||||
.addExclude(
|
||||
"/favicon.ico",
|
||||
"/app/api/**",
|
||||
"/doc.html",
|
||||
"/swagger-resources",
|
||||
"/swagger-resources/**",
|
||||
"/webjars/**",
|
||||
"/error",
|
||||
"/static/**",
|
||||
"/files/**",
|
||||
"/login",
|
||||
"/index/login",
|
||||
"/sys/user/login",
|
||||
"/sys/getVerify"
|
||||
)
|
||||
|
||||
// 认证函数: 每次请求执行
|
||||
.setAuth(req -> {
|
||||
// System.out.println("---------- sa全局认证");
|
||||
SaRouter.match("/**", StpUtil::checkLogin);
|
||||
})
|
||||
|
||||
// 异常处理函数:每次认证函数发生异常时执行此函数 //包括注解异常
|
||||
// .setError(e -> {
|
||||
// System.out.println("---------- sa全局异常 ");
|
||||
// return AjaxJson.getError(e.getMessage());
|
||||
// })
|
||||
|
||||
// 前置函数:在每次认证函数之前执行
|
||||
.setBeforeAuth(req -> {
|
||||
// ---------- 设置一些安全响应头 ----------
|
||||
// SaHolder.getResponse()
|
||||
// // 服务器名称
|
||||
// .setServer("sa-server")
|
||||
// // 是否可以在iframe显示视图: DENY=不可以 | SAMEORIGIN=同域下可以 | ALLOW-FROM uri=指定域名下可以
|
||||
// .setHeader("X-Frame-Options", "SAMEORIGIN")
|
||||
// // 是否启用浏览器默认XSS防护: 0=禁用 | 1=启用 | 1; mode=block 启用, 并在检查到XSS攻击时,停止渲染页面
|
||||
// .setHeader("X-XSS-Protection", "1; mode=block")
|
||||
// // 禁用浏览器内容嗅探
|
||||
// .setHeader("X-Content-Type-Options", "nosniff");
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,52 @@
|
||||
package vip.fuck.sm.common.exception;
|
||||
|
||||
import vip.fuck.sm.common.exception.code.BaseResponseCode;
|
||||
import vip.fuck.sm.common.exception.code.ResponseCodeInterface;
|
||||
|
||||
/**
|
||||
* BusinessException
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public class BusinessException extends RuntimeException {
|
||||
/**
|
||||
* 异常编号
|
||||
*/
|
||||
private final int messageCode;
|
||||
|
||||
/**
|
||||
* 对messageCode 异常信息进行补充说明
|
||||
*/
|
||||
private final String detailMessage;
|
||||
|
||||
public BusinessException(int messageCode, String message) {
|
||||
super(message);
|
||||
this.messageCode = messageCode;
|
||||
this.detailMessage = message;
|
||||
}
|
||||
|
||||
public BusinessException(String message) {
|
||||
super(message);
|
||||
this.messageCode = BaseResponseCode.OPERATION_ERRO.getCode();
|
||||
this.detailMessage = message;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
*
|
||||
* @param code 异常码
|
||||
*/
|
||||
public BusinessException(ResponseCodeInterface code) {
|
||||
this(code.getCode(), code.getMsg());
|
||||
}
|
||||
|
||||
public int getMessageCode() {
|
||||
return messageCode;
|
||||
}
|
||||
|
||||
public String getDetailMessage() {
|
||||
return detailMessage;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,59 @@
|
||||
package vip.fuck.sm.common.exception.code;
|
||||
|
||||
|
||||
/**
|
||||
* 错误码
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public enum BaseResponseCode implements ResponseCodeInterface {
|
||||
/**
|
||||
* 错误码
|
||||
*/
|
||||
SUCCESS(0, "操作成功"),
|
||||
SYSTEM_BUSY(500001, "系统繁忙,请稍候再试"),
|
||||
OPERATION_ERRO(500002, "操作失败"),
|
||||
ILLEGAL_DATA(500003, "非法的数据格式"),
|
||||
TOKEN_ERROR(401001, "登录凭证已过期,请重新登录"),
|
||||
DATA_ERROR(401003, "传入数据异常"),
|
||||
NOT_ACCOUNT(401004, "该用户不存在,请先注册"),
|
||||
USER_LOCK(401005, "该用户已被锁定,请联系运营人员"),
|
||||
PASSWORD_ERROR(401006, "用户名或密码错误"),
|
||||
METHODARGUMENTNOTVALIDEXCEPTION(401007, "方法参数校验异常"),
|
||||
UNAUTHORIZED_ERROR(401008, "权鉴校验不通过"),
|
||||
ROLE_PERMISSION_RELATION(401009, "该菜单权限存在子集关联,不允许删除"),
|
||||
OLD_PASSWORD_ERROR(401010, "旧密码不正确"),
|
||||
NOT_PERMISSION_DELETED_DEPT(401011, "该组织机构下还关联着用户,不允许删除"),
|
||||
OPERATION_MENU_PERMISSION_CATALOG_ERROR(401012, "操作后的菜单类型是目录,所属菜单必须为默认顶级菜单或者目录"),
|
||||
OPERATION_MENU_PERMISSION_MENU_ERROR(401013, "操作后的菜单类型是菜单,所属菜单必须为目录类型"),
|
||||
OPERATION_MENU_PERMISSION_BTN_ERROR(401013, "操作后的菜单类型是按钮,所属菜单必须为菜单类型"),
|
||||
OPERATION_MENU_PERMISSION_URL_NOT_NULL(401015, "菜单权限的url不能为空"),
|
||||
OPERATION_MENU_PERMISSION_URL_PERMS_NULL(401016, "菜单权限的标识符不能为空"),
|
||||
;
|
||||
|
||||
/**
|
||||
* 错误码
|
||||
*/
|
||||
private final int code;
|
||||
/**
|
||||
* 错误消息
|
||||
*/
|
||||
private final String msg;
|
||||
|
||||
BaseResponseCode(int code, String msg) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getMsg() {
|
||||
return msg;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package vip.fuck.sm.common.exception.code;
|
||||
|
||||
/**
|
||||
* ResponseCodeInterface
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface ResponseCodeInterface {
|
||||
/**
|
||||
* 获取code
|
||||
*
|
||||
* @return code
|
||||
*/
|
||||
int getCode();
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*
|
||||
* @return msg
|
||||
*/
|
||||
String getMsg();
|
||||
}
|
||||
@ -0,0 +1,45 @@
|
||||
package vip.fuck.sm.common.exception.handler;
|
||||
|
||||
import cn.dev33.satoken.exception.NotLoginException;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.exception.code.BaseResponseCode;
|
||||
import vip.fuck.sm.common.utils.DataResult;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.core.exception.StatusException;
|
||||
import org.noear.solon.core.handle.*;
|
||||
import org.noear.solon.validation.ValidatorException;
|
||||
import org.thymeleaf.exceptions.TemplateEngineException;
|
||||
|
||||
@Component(index = 0) //index 为顺序位(不加,则默认为0)
|
||||
@Slf4j
|
||||
public class AppFilter implements Filter {
|
||||
@Override
|
||||
public void doFilter(Context ctx, FilterChain chain) throws Throwable {
|
||||
try {
|
||||
chain.doFilter(ctx);
|
||||
} catch (NotLoginException e){
|
||||
ctx.redirect("/index/login");
|
||||
} catch (ValidatorException e) {
|
||||
ctx.render(DataResult.getResult(
|
||||
BaseResponseCode.METHODARGUMENTNOTVALIDEXCEPTION.getCode(),
|
||||
e.getMessage()));
|
||||
}catch (BusinessException e){
|
||||
ctx.render(new DataResult(e.getMessageCode(), e.getDetailMessage()));
|
||||
} catch (StatusException e){
|
||||
ctx.status(e.getCode());
|
||||
if (e.getCode() == 404){
|
||||
String pathNew = ctx.pathNew();
|
||||
log.error("404:{}",pathNew);
|
||||
ctx.redirect("/index/404");
|
||||
} else {
|
||||
ctx.redirect("/index/500");
|
||||
}
|
||||
} catch (TemplateEngineException e){
|
||||
ctx.render(" /** 【页面异常】 **/");
|
||||
} catch (Throwable e) {
|
||||
log.error(e.getMessage(),e);
|
||||
ctx.render(DataResult.getResult(BaseResponseCode.SYSTEM_BUSY));
|
||||
}
|
||||
}
|
||||
}
|
||||
110
src/main/java/vip/fuck/sm/common/utils/AssertUtil.java
Normal file
110
src/main/java/vip/fuck/sm/common/utils/AssertUtil.java
Normal file
@ -0,0 +1,110 @@
|
||||
package vip.fuck.sm.common.utils;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 断言工具类
|
||||
*/
|
||||
public class AssertUtil {
|
||||
|
||||
/**
|
||||
* true不报错
|
||||
*
|
||||
* @param expression
|
||||
* @param message
|
||||
*/
|
||||
public static void isTrue(boolean expression, String message) {
|
||||
if (!expression) {
|
||||
throw new BusinessException(message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* true不报错
|
||||
*
|
||||
* @param expression
|
||||
*/
|
||||
public static void isTrue(boolean expression) {
|
||||
if (!expression) {
|
||||
throw new BusinessException("参数无效/数据异常");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* string为空报错
|
||||
* 不为空不报错
|
||||
*
|
||||
* @param s
|
||||
* @param message
|
||||
*/
|
||||
public static void isStringNotBlank(String s, String message) {
|
||||
isTrue(StringUtils.isNotBlank(s), message);
|
||||
}
|
||||
|
||||
public static void isStringNotBlank(String s) {
|
||||
isTrue(StringUtils.isNotBlank(s));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* string为空不报错
|
||||
* 不为空报错
|
||||
*
|
||||
* @param s
|
||||
* @param message
|
||||
*/
|
||||
public static void isStringBlank(String s, String message) {
|
||||
isTrue(StringUtils.isBlank(s), message);
|
||||
}
|
||||
|
||||
public static void isStringBlank(String s) {
|
||||
isTrue(StringUtils.isBlank(s));
|
||||
}
|
||||
|
||||
/**
|
||||
* 对象为null, 不报错
|
||||
* 不为null, 报错
|
||||
* @param obj
|
||||
* @param errorMessage
|
||||
*/
|
||||
public static void isNull(Object obj, String errorMessage) {
|
||||
isTrue(obj == null, errorMessage);
|
||||
}
|
||||
|
||||
public static void isNull(Object obj) {
|
||||
isTrue(obj == null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对象不为null, 不报错
|
||||
* 为null, 报错
|
||||
* @param obj
|
||||
* @param errorMessage
|
||||
*/
|
||||
public static void isExists(Object obj, String errorMessage) {
|
||||
isTrue(obj != null, errorMessage);
|
||||
}
|
||||
|
||||
public static void isExists(Object obj) {
|
||||
isTrue(obj != null);
|
||||
}
|
||||
|
||||
/**
|
||||
* list或者map 不能为空
|
||||
* @param collection
|
||||
* @param errorMessage
|
||||
*/
|
||||
public static void hasElements(Collection<?> collection, String errorMessage) {
|
||||
isTrue(CollectionUtils.isNotEmpty(collection), errorMessage);
|
||||
}
|
||||
|
||||
public static void hasElements(Object[] array, String errorMessage) {
|
||||
isTrue(array != null && array.length != 0, errorMessage);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
38
src/main/java/vip/fuck/sm/common/utils/Constant.java
Normal file
38
src/main/java/vip/fuck/sm/common/utils/Constant.java
Normal file
@ -0,0 +1,38 @@
|
||||
package vip.fuck.sm.common.utils;
|
||||
|
||||
/**
|
||||
* Constant
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public class Constant {
|
||||
|
||||
/**
|
||||
* 未删除值
|
||||
*/
|
||||
public static final Integer DATA_NOT_DELETED = 0;
|
||||
|
||||
/**
|
||||
* 数据库类型
|
||||
*/
|
||||
public static final String DB_TYPE_MYSQL = "mysql";
|
||||
public static final String DB_TYPE_ORACLE = "oracle";
|
||||
public static final String DB_TYPE_SQL_SERVER = "sqlServer";
|
||||
|
||||
/**
|
||||
* 定时任务状态
|
||||
*/
|
||||
public static final Integer SCHEDULER_STATUS_NORMAL = 0;
|
||||
public static final Integer SCHEDULER_STATUS_PAUSE = 1;
|
||||
|
||||
/**
|
||||
* 数据范围类型 1:所有/2:自定义/3:本部门及一下/4:仅本部门/5:自己
|
||||
*/
|
||||
public static final Integer DATA_SCOPE_ALL = 1;
|
||||
public static final Integer DATA_SCOPE_CUSTOM = 2;
|
||||
public static final Integer DATA_SCOPE_DEPT_AND_CHILD = 3;
|
||||
public static final Integer DATA_SCOPE_DEPT = 4;
|
||||
public static final Integer DATA_SCOPE_DEPT_SELF = 5;
|
||||
}
|
||||
112
src/main/java/vip/fuck/sm/common/utils/DataResult.java
Normal file
112
src/main/java/vip/fuck/sm/common/utils/DataResult.java
Normal file
@ -0,0 +1,112 @@
|
||||
package vip.fuck.sm.common.utils;
|
||||
|
||||
import vip.fuck.sm.common.exception.code.BaseResponseCode;
|
||||
import vip.fuck.sm.common.exception.code.ResponseCodeInterface;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 返回值DataResult
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
public class DataResult {
|
||||
|
||||
/**
|
||||
* 请求响应code,0为成功 其他为失败
|
||||
*/
|
||||
@ApiModelProperty(value = "请求响应code,0为成功 其他为失败", name = "code")
|
||||
private int code;
|
||||
|
||||
/**
|
||||
* 响应异常码详细信息
|
||||
*/
|
||||
@ApiModelProperty(value = "响应异常码详细信息", name = "msg")
|
||||
private String msg;
|
||||
|
||||
@ApiModelProperty(value = "需要返回的数据", name = "data")
|
||||
private Object data;
|
||||
|
||||
public DataResult(int code, Object data) {
|
||||
this.code = code;
|
||||
this.data = data;
|
||||
this.msg = null;
|
||||
}
|
||||
|
||||
public DataResult(int code, String msg, Object data) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public DataResult(int code, String msg) {
|
||||
this.code = code;
|
||||
this.msg = msg;
|
||||
this.data = null;
|
||||
}
|
||||
|
||||
|
||||
public DataResult() {
|
||||
this.code = BaseResponseCode.SUCCESS.getCode();
|
||||
this.msg = BaseResponseCode.SUCCESS.getMsg();
|
||||
this.data = null;
|
||||
}
|
||||
|
||||
public DataResult(Object data) {
|
||||
this.data = data;
|
||||
this.code = BaseResponseCode.SUCCESS.getCode();
|
||||
this.msg = BaseResponseCode.SUCCESS.getMsg();
|
||||
}
|
||||
|
||||
public DataResult(ResponseCodeInterface responseCodeInterface) {
|
||||
this.data = null;
|
||||
this.code = responseCodeInterface.getCode();
|
||||
this.msg = responseCodeInterface.getMsg();
|
||||
}
|
||||
|
||||
public DataResult(ResponseCodeInterface responseCodeInterface, Object data) {
|
||||
this.data = data;
|
||||
this.code = responseCodeInterface.getCode();
|
||||
this.msg = responseCodeInterface.getMsg();
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作成功 data为null
|
||||
*/
|
||||
public static DataResult success() {
|
||||
return new DataResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作成功 data 不为null
|
||||
*/
|
||||
public static DataResult success(Object data) {
|
||||
return new DataResult(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作失败 data 不为null
|
||||
*/
|
||||
public static DataResult fail(String msg) {
|
||||
return new DataResult(BaseResponseCode.OPERATION_ERRO.getCode(), msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义返回 data为null
|
||||
*/
|
||||
public static DataResult getResult(int code, String msg) {
|
||||
return new DataResult(code, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义返回 入参一般是异常code枚举 data为空
|
||||
*/
|
||||
public static DataResult getResult(BaseResponseCode responseCode) {
|
||||
return new DataResult(responseCode);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
30
src/main/java/vip/fuck/sm/common/utils/DateUtils.java
Normal file
30
src/main/java/vip/fuck/sm/common/utils/DateUtils.java
Normal file
@ -0,0 +1,30 @@
|
||||
package vip.fuck.sm.common.utils;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 日期处理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public class DateUtils {
|
||||
/**
|
||||
* 时间格式(yyyy-MM-dd HH:mm:ss)
|
||||
*/
|
||||
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
|
||||
/**
|
||||
* 时间格式(yyyyMMdd)
|
||||
*/
|
||||
public final static String DATEPATTERN = "yyyyMMdd";
|
||||
|
||||
public static String format(Date date, String pattern) {
|
||||
if (date != null) {
|
||||
SimpleDateFormat df = new SimpleDateFormat(pattern);
|
||||
return df.format(date);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
244
src/main/java/vip/fuck/sm/common/utils/GenUtils.java
Normal file
244
src/main/java/vip/fuck/sm/common/utils/GenUtils.java
Normal file
@ -0,0 +1,244 @@
|
||||
package vip.fuck.sm.common.utils;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.entity.ColumnEntity;
|
||||
import vip.fuck.sm.entity.TableEntity;
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
import org.apache.commons.configuration.ConfigurationException;
|
||||
import org.apache.commons.configuration.PropertiesConfiguration;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.velocity.Template;
|
||||
import org.apache.velocity.VelocityContext;
|
||||
import org.apache.velocity.app.Velocity;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.util.*;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
/**
|
||||
* 代码生成器 工具类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public class GenUtils {
|
||||
|
||||
public static List<String> getTemplates() {
|
||||
List<String> templates = new ArrayList<>();
|
||||
templates.add("template/Entity.java.vm");
|
||||
templates.add("template/Dao.java.vm");
|
||||
templates.add("template/Dao.xml.vm");
|
||||
templates.add("template/Service.java.vm");
|
||||
templates.add("template/ServiceImpl.java.vm");
|
||||
templates.add("template/Controller.java.vm");
|
||||
templates.add("template/menu.sql.vm");
|
||||
templates.add("template/list.html.vm");
|
||||
|
||||
return templates;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成代码
|
||||
*/
|
||||
public static void generatorCode(Map<String, String> table,
|
||||
List<Map<String, String>> columns, ZipOutputStream zip) {
|
||||
//配置信息
|
||||
Configuration config = getConfig();
|
||||
boolean hasBigDecimal = false;
|
||||
//表信息
|
||||
TableEntity tableEntity = new TableEntity();
|
||||
tableEntity.setTableName(table.get("tableName"));
|
||||
tableEntity.setComments(table.get("tableComment"));
|
||||
//表名转换成Java类名
|
||||
String className = tableToJava(tableEntity.getTableName(), config.getStringArray("tablePrefix"));
|
||||
tableEntity.setClassName(className);
|
||||
tableEntity.setClassname(StringUtils.uncapitalize(className));
|
||||
tableEntity.setClassNameLower(className.toLowerCase());
|
||||
|
||||
//列信息
|
||||
List<ColumnEntity> columsList = new ArrayList<>();
|
||||
List<ColumnEntity> htmlColumsList = new ArrayList<>();
|
||||
for (Map<String, String> column : columns) {
|
||||
ColumnEntity columnEntity = new ColumnEntity();
|
||||
columnEntity.setColumnName(column.get("columnName"));
|
||||
columnEntity.setDataType(column.get("dataType"));
|
||||
columnEntity.setComments(column.get("columnComment"));
|
||||
columnEntity.setExtra(column.get("extra"));
|
||||
|
||||
//列名转换成Java属性名
|
||||
String attrName = columnToJava(columnEntity.getColumnName());
|
||||
columnEntity.setAttrName(attrName);
|
||||
columnEntity.setAttrname(StringUtils.uncapitalize(attrName));
|
||||
|
||||
//列的数据类型,转换成Java类型
|
||||
String attrType = config.getString(columnEntity.getDataType(), "unknowType");
|
||||
columnEntity.setAttrType(attrType);
|
||||
if (!hasBigDecimal && "BigDecimal".equals(attrType)) {
|
||||
hasBigDecimal = true;
|
||||
}
|
||||
//是否主键
|
||||
if ("PRI".equalsIgnoreCase(column.get("columnKey")) && tableEntity.getPk() == null) {
|
||||
tableEntity.setPk(columnEntity);
|
||||
}
|
||||
|
||||
columsList.add(columnEntity);
|
||||
if (!Arrays.asList("deleted", "create_id", "create_by", "update_id", "update_by", "create_time", "create_date", "update_time", "update_date").contains(column.get("columnName"))) {
|
||||
htmlColumsList.add(columnEntity);
|
||||
}
|
||||
}
|
||||
tableEntity.setColumns(columsList);
|
||||
tableEntity.setHtmlColumns(htmlColumsList);
|
||||
|
||||
//没主键,则第一个字段为主键
|
||||
if (tableEntity.getPk() == null) {
|
||||
tableEntity.setPk(tableEntity.getColumns().get(0));
|
||||
}
|
||||
|
||||
//设置velocity资源加载器
|
||||
Properties prop = new Properties();
|
||||
prop.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
|
||||
Velocity.init(prop);
|
||||
String mainPath = config.getString("mainPath");
|
||||
mainPath = StringUtils.isBlank(mainPath) ? "com.company" : mainPath;
|
||||
//封装模板数据
|
||||
Map<String, Object> map = new HashMap<>(15);
|
||||
map.put("tableName", tableEntity.getTableName());
|
||||
map.put("comments", tableEntity.getComments());
|
||||
map.put("pk", tableEntity.getPk());
|
||||
map.put("className", tableEntity.getClassName());
|
||||
map.put("classname", tableEntity.getClassname());
|
||||
map.put("pathName", tableEntity.getClassname().toLowerCase());
|
||||
map.put("columns", tableEntity.getColumns());
|
||||
map.put("htmlColumns", tableEntity.getHtmlColumns());
|
||||
map.put("classNameLower", tableEntity.getClassNameLower());
|
||||
map.put("hasBigDecimal", hasBigDecimal);
|
||||
map.put("mainPath", mainPath);
|
||||
map.put("package", config.getString("package"));
|
||||
map.put("author", config.getString("author"));
|
||||
map.put("email", config.getString("email"));
|
||||
map.put("datetime", DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN));
|
||||
map.put("identity", IdWorker.getId());
|
||||
map.put("addId", IdWorker.getId());
|
||||
map.put("updateId", IdWorker.getId());
|
||||
map.put("deleteId", IdWorker.getId());
|
||||
map.put("selectId", IdWorker.getId());
|
||||
map.put("identityJoinId", IdWorker.getId());
|
||||
map.put("addIdJoinId", IdWorker.getId());
|
||||
map.put("updateIdJoinId", IdWorker.getId());
|
||||
map.put("deleteIdJoinId", IdWorker.getId());
|
||||
map.put("selectIdJoinId", IdWorker.getId());
|
||||
VelocityContext context = new VelocityContext(map);
|
||||
|
||||
//获取模板列表
|
||||
List<String> templates = getTemplates();
|
||||
for (String template : templates) {
|
||||
//渲染模板
|
||||
StringWriter sw = new StringWriter();
|
||||
Template tpl = Velocity.getTemplate(template, "UTF-8");
|
||||
tpl.merge(context, sw);
|
||||
|
||||
try {
|
||||
//添加到zip
|
||||
zip.putNextEntry(new ZipEntry(Objects.requireNonNull(getFileName(template, tableEntity.getClassName(), config.getString("package")))));
|
||||
IOUtils.write(sw.toString(), zip, "UTF-8");
|
||||
IOUtils.closeQuietly(sw);
|
||||
zip.closeEntry();
|
||||
} catch (IOException e) {
|
||||
throw new BusinessException("渲染模板失败,表名:" + tableEntity.getTableName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 列名转换成Java属性名
|
||||
*/
|
||||
public static String columnToJava(String field) {
|
||||
String[] fields = field.split("_");
|
||||
StringBuilder sbuilder = new StringBuilder(fields[0]);
|
||||
for (int i = 1; i < fields.length; i++) {
|
||||
char[] cs = fields[i].toCharArray();
|
||||
if (cs[0] >= 'a') {
|
||||
cs[0] -= 32;
|
||||
}
|
||||
sbuilder.append(String.valueOf(cs));
|
||||
}
|
||||
return sbuilder.toString().substring(0, 1).toUpperCase() + sbuilder.toString().substring(1);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 表名转换成Java类名
|
||||
*/
|
||||
public static String tableToJava(String tableName, String[] tablePrefixArray) {
|
||||
tableName = tableName.toLowerCase();
|
||||
if (null != tablePrefixArray && tablePrefixArray.length > 0) {
|
||||
for (String tablePrefix : tablePrefixArray) {
|
||||
tablePrefix = tablePrefix.toLowerCase();
|
||||
tableName = tableName.replace(tablePrefix, "");
|
||||
}
|
||||
}
|
||||
return columnToJava(tableName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取配置信息
|
||||
*/
|
||||
public static Configuration getConfig() {
|
||||
try {
|
||||
return new PropertiesConfiguration("generator.properties");
|
||||
} catch (ConfigurationException e) {
|
||||
throw new BusinessException("获取配置文件失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件名
|
||||
*/
|
||||
public static String getFileName(String template, String className, String packageName) {
|
||||
String packagePath = "main" + File.separator + "java" + File.separator;
|
||||
if (StringUtils.isNotBlank(packageName)) {
|
||||
packagePath += packageName.replace(".", File.separator) + File.separator;
|
||||
}
|
||||
|
||||
if (template.contains("Entity.java.vm")) {
|
||||
return packagePath + "entity" + File.separator + className + "Entity.java";
|
||||
}
|
||||
|
||||
if (template.contains("Dao.java.vm")) {
|
||||
return packagePath + "mapper" + File.separator + className + "Mapper.java";
|
||||
}
|
||||
|
||||
if (template.contains("Service.java.vm")) {
|
||||
return packagePath + "service" + File.separator + className + "Service.java";
|
||||
}
|
||||
|
||||
if (template.contains("ServiceImpl.java.vm")) {
|
||||
return packagePath + "service" + File.separator + "impl" + File.separator + className + "ServiceImpl.java";
|
||||
}
|
||||
|
||||
if (template.contains("Controller.java.vm")) {
|
||||
return packagePath + "controller" + File.separator + className + "Controller.java";
|
||||
}
|
||||
|
||||
if (template.contains("Dao.xml.vm")) {
|
||||
return "main" + File.separator + "resources" + File.separator + "mapper" + File.separator + className + "Mapper.xml";
|
||||
}
|
||||
|
||||
if (template.contains("menu.sql.vm")) {
|
||||
return className.toLowerCase() + "_menu.sql";
|
||||
}
|
||||
|
||||
if (template.contains("list.html.vm")) {
|
||||
return "main" + File.separator + "resources" + File.separator + "templates" + File.separator + className.toLowerCase() + File.separator + "list" + ".html";
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
117
src/main/java/vip/fuck/sm/common/utils/PasswordEncoder.java
Normal file
117
src/main/java/vip/fuck/sm/common/utils/PasswordEncoder.java
Normal file
@ -0,0 +1,117 @@
|
||||
package vip.fuck.sm.common.utils;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
|
||||
/**
|
||||
* 密码加密
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public class PasswordEncoder {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(PasswordEncoder.class);
|
||||
|
||||
|
||||
private final static String[] HEX_DIGITS = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
|
||||
"e", "f"};
|
||||
|
||||
private final static String MD5 = "MD5";
|
||||
|
||||
private Object salt;
|
||||
private String algorithm;
|
||||
|
||||
public PasswordEncoder(Object salt) {
|
||||
this(salt, MD5);
|
||||
}
|
||||
|
||||
public PasswordEncoder(Object salt, String algorithm) {
|
||||
this.salt = salt;
|
||||
this.algorithm = algorithm;
|
||||
}
|
||||
|
||||
/**
|
||||
* 密码加密
|
||||
*
|
||||
* @param rawPass 密码
|
||||
* @return 加密后
|
||||
*/
|
||||
public String encode(String rawPass) {
|
||||
String result = null;
|
||||
try {
|
||||
MessageDigest md = MessageDigest.getInstance(algorithm);
|
||||
// 加密后的字符串
|
||||
result = byteArrayToHexString(md.digest(mergePasswordAndSalt(rawPass).getBytes(StandardCharsets.UTF_8)));
|
||||
} catch (Exception e) {
|
||||
logger.error(e.toString(), e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 密码匹配验证
|
||||
*
|
||||
* @param encPass 密文
|
||||
* @param rawPass 明文
|
||||
* @return 是否匹配
|
||||
*/
|
||||
public boolean matches(String encPass, String rawPass) {
|
||||
String pass1 = "" + encPass;
|
||||
String pass2 = encode(rawPass);
|
||||
|
||||
return pass1.equals(pass2);
|
||||
}
|
||||
|
||||
private String mergePasswordAndSalt(String password) {
|
||||
if (password == null) {
|
||||
password = "";
|
||||
}
|
||||
|
||||
if ((salt == null) || "".equals(salt)) {
|
||||
return password;
|
||||
} else {
|
||||
return password + "{" + salt.toString() + "}";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换字节数组为16进制字串
|
||||
*
|
||||
* @param b 字节数组
|
||||
* @return 16进制字串
|
||||
*/
|
||||
private String byteArrayToHexString(byte[] b) {
|
||||
StringBuilder resultSb = new StringBuilder();
|
||||
for (byte value : b) {
|
||||
resultSb.append(byteToHexString(value));
|
||||
}
|
||||
return resultSb.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 将字节转换为16进制
|
||||
*
|
||||
* @param b 字节
|
||||
* @return 16进制
|
||||
*/
|
||||
private static String byteToHexString(byte b) {
|
||||
int n = b;
|
||||
if (n < 0) {
|
||||
n = 256 + n;
|
||||
}
|
||||
int d1 = n / 16;
|
||||
int d2 = n % 16;
|
||||
return HEX_DIGITS[d1] + HEX_DIGITS[d2];
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
47
src/main/java/vip/fuck/sm/common/utils/PasswordUtils.java
Normal file
47
src/main/java/vip/fuck/sm/common/utils/PasswordUtils.java
Normal file
@ -0,0 +1,47 @@
|
||||
package vip.fuck.sm.common.utils;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
||||
/**
|
||||
* 密码工具类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public class PasswordUtils {
|
||||
|
||||
/**
|
||||
* 匹配密码
|
||||
*
|
||||
* @param salt 盐
|
||||
* @param rawPass 明文
|
||||
* @param encPass 密文
|
||||
* @return 是否匹配
|
||||
*/
|
||||
public static boolean matches(String salt, String rawPass, String encPass) {
|
||||
return new PasswordEncoder(salt).matches(encPass, rawPass);
|
||||
}
|
||||
|
||||
/**
|
||||
* 明文密码加密
|
||||
*
|
||||
* @param rawPass 明文
|
||||
* @param salt 盐
|
||||
* @reture 加密后
|
||||
*/
|
||||
public static String encode(String rawPass, String salt) {
|
||||
return new PasswordEncoder(salt).encode(rawPass);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取加密盐
|
||||
*
|
||||
* @return 盐值
|
||||
*/
|
||||
public static String getSalt() {
|
||||
return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 20);
|
||||
}
|
||||
|
||||
}
|
||||
96
src/main/java/vip/fuck/sm/controller/DeptController.java
Normal file
96
src/main/java/vip/fuck/sm/controller/DeptController.java
Normal file
@ -0,0 +1,96 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import vip.fuck.sm.common.aop.annotation.LogAnnotation;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.utils.AssertUtil;
|
||||
import vip.fuck.sm.entity.SysDept;
|
||||
import vip.fuck.sm.service.DeptService;
|
||||
import vip.fuck.sm.vo.resp.DeptRespNodeVO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
import org.noear.solon.validation.annotation.Validated;
|
||||
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 部门管理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapping("/sys")
|
||||
@Controller
|
||||
@Api(tags = "组织模块-机构管理")
|
||||
@Valid
|
||||
public class DeptController {
|
||||
@Inject
|
||||
private DeptService deptService;
|
||||
|
||||
@Post
|
||||
@Mapping("/dept")
|
||||
@ApiOperation(value = "新增组织接口")
|
||||
@LogAnnotation(title = "机构管理", action = "新增组织")
|
||||
@SaCheckPermission("sys:dept:add")
|
||||
public void addDept( @Validated SysDept vo) {
|
||||
deptService.addDept(vo);
|
||||
}
|
||||
|
||||
@Delete
|
||||
@Mapping ("/dept/{id}")
|
||||
@ApiOperation(value = "删除组织接口")
|
||||
@LogAnnotation(title = "机构管理", action = "删除组织")
|
||||
@SaCheckPermission("sys:dept:deleted")
|
||||
public void deleted(@Path("id") String id) {
|
||||
deptService.deleted(id);
|
||||
}
|
||||
|
||||
@Put
|
||||
@Mapping ("/dept")
|
||||
@ApiOperation(value = "更新组织信息接口")
|
||||
@LogAnnotation(title = "机构管理", action = "更新组织信息")
|
||||
@SaCheckPermission("sys:dept:update")
|
||||
public void updateDept( SysDept vo) {
|
||||
AssertUtil.isStringNotBlank(vo.getId(), "id不能为空");
|
||||
deptService.updateDept(vo);
|
||||
}
|
||||
|
||||
@Get
|
||||
@Mapping ("/dept/{id}")
|
||||
@ApiOperation(value = "查询组织详情接口")
|
||||
@LogAnnotation(title = "机构管理", action = "查询组织详情")
|
||||
@SaCheckPermission("sys:dept:detail")
|
||||
public SysDept detailInfo(@Path("id") String id) {
|
||||
return deptService.getById(id);
|
||||
}
|
||||
|
||||
@Get @Mapping ("/dept/tree")
|
||||
@ApiOperation(value = "树型组织列表接口")
|
||||
@LogAnnotation(title = "机构管理", action = "树型组织列表")
|
||||
@SaCheckPermission(value = {"sys:user:list", "sys:user:update", "sys:user:add", "sys:dept:add", "sys:dept:update"}, mode = SaMode.OR)
|
||||
public List<DeptRespNodeVO> getTree( String deptId) {
|
||||
return deptService.deptTreeList(deptId, false);
|
||||
}
|
||||
|
||||
@Get @Mapping ("/depts")
|
||||
@ApiOperation(value = "获取机构列表接口")
|
||||
@LogAnnotation(title = "机构管理", action = "获取所有组织机构")
|
||||
@SaCheckPermission("sys:dept:list")
|
||||
public List<SysDept> getDeptAll() {
|
||||
List<SysDept> deptList = deptService.list();
|
||||
deptList.stream().forEach(entity -> {
|
||||
SysDept parentDept = deptService.getById(entity.getPid());
|
||||
if (parentDept != null) {
|
||||
entity.setPidName(parentDept.getName());
|
||||
}
|
||||
});
|
||||
return deptList;
|
||||
}
|
||||
|
||||
}
|
||||
145
src/main/java/vip/fuck/sm/controller/IndexController.java
Normal file
145
src/main/java/vip/fuck/sm/controller/IndexController.java
Normal file
@ -0,0 +1,145 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.noear.solon.annotation.Controller;
|
||||
import org.noear.solon.annotation.Get;
|
||||
import org.noear.solon.annotation.Mapping;
|
||||
import org.noear.solon.core.handle.ModelAndView;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
|
||||
|
||||
/**
|
||||
* 视图
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Api(tags = "视图")
|
||||
@Controller
|
||||
@Mapping("")
|
||||
@Valid
|
||||
public class IndexController {
|
||||
|
||||
@Get @Mapping ("/index/login")
|
||||
public ModelAndView login1(){
|
||||
return this.loginIndex();
|
||||
}
|
||||
@Get @Mapping ( "/login")
|
||||
public ModelAndView login2(){
|
||||
return this.loginIndex();
|
||||
}
|
||||
@Get @Mapping ( "/")
|
||||
public ModelAndView login3(){
|
||||
return this.loginIndex();
|
||||
}
|
||||
|
||||
public ModelAndView loginIndex() {
|
||||
if (StpUtil.isLogin()) {
|
||||
return new ModelAndView("/home.html");
|
||||
}
|
||||
return new ModelAndView("login.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/home")
|
||||
public ModelAndView home() {
|
||||
return this.loginIndex();
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/users/password")
|
||||
public ModelAndView updatePassword() {
|
||||
return new ModelAndView("users/update_password.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/users/info")
|
||||
public ModelAndView userDetail() {
|
||||
return new ModelAndView("users/user_edit.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/menus")
|
||||
public ModelAndView menusList() {
|
||||
|
||||
return new ModelAndView("menus/menu_list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/roles")
|
||||
public ModelAndView roleList() {
|
||||
return new ModelAndView("roles/role_list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/users")
|
||||
public ModelAndView userList() {
|
||||
return new ModelAndView("users/user_list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/logs")
|
||||
public ModelAndView logList() {
|
||||
return new ModelAndView("logs/log_list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/depts")
|
||||
public ModelAndView deptList() {
|
||||
return new ModelAndView("depts/dept_list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/403")
|
||||
public ModelAndView error403() {
|
||||
return new ModelAndView("error/403.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/404")
|
||||
public ModelAndView error404() {
|
||||
return new ModelAndView("error/404.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/500")
|
||||
public ModelAndView error405() {
|
||||
return new ModelAndView("error/500.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/main")
|
||||
public ModelAndView indexHome() {
|
||||
return new ModelAndView( "main.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/about")
|
||||
public ModelAndView about() {
|
||||
return new ModelAndView("about.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/build")
|
||||
public ModelAndView build() {
|
||||
return new ModelAndView("build.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/sysContent")
|
||||
public ModelAndView sysContent() {
|
||||
return new ModelAndView("syscontent/list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/sysDict")
|
||||
public ModelAndView sysDict() {
|
||||
return new ModelAndView("sysdict/list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/sysGenerator")
|
||||
public ModelAndView sysGenerator() {
|
||||
return new ModelAndView("generator/list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/sysJob")
|
||||
public ModelAndView sysJob() {
|
||||
return new ModelAndView("sysjob/list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/sysJobLog")
|
||||
public ModelAndView sysJobLog() {
|
||||
return new ModelAndView("sysjoblog/list.html");
|
||||
}
|
||||
|
||||
@Get @Mapping ("/index/sysFiles")
|
||||
public ModelAndView sysFiles() {
|
||||
return new ModelAndView("sysfiles/list.html");
|
||||
}
|
||||
}
|
||||
148
src/main/java/vip/fuck/sm/controller/PermissionController.java
Normal file
148
src/main/java/vip/fuck/sm/controller/PermissionController.java
Normal file
@ -0,0 +1,148 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import vip.fuck.sm.common.aop.annotation.LogAnnotation;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.exception.code.BaseResponseCode;
|
||||
import vip.fuck.sm.common.utils.AssertUtil;
|
||||
import vip.fuck.sm.entity.SysPermission;
|
||||
import vip.fuck.sm.service.PermissionService;
|
||||
import vip.fuck.sm.vo.resp.PermissionRespNode;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
import org.noear.solon.validation.annotation.Validated;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单权限管理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapping("/sys")
|
||||
@Controller
|
||||
@Api(tags = "组织模块-菜单权限管理")
|
||||
@Valid
|
||||
public class PermissionController {
|
||||
|
||||
@Inject
|
||||
private PermissionService permissionService;
|
||||
|
||||
@Post @Mapping ("/permission")
|
||||
@ApiOperation(value = "新增菜单权限接口")
|
||||
@LogAnnotation(title = "菜单权限管理", action = "新增菜单权限")
|
||||
@SaCheckPermission("sys:permission:add")
|
||||
public void addPermission( @Validated SysPermission vo) {
|
||||
verifyFormPid(vo);
|
||||
permissionService.save(vo);
|
||||
}
|
||||
|
||||
@Delete @Mapping ("/permission/{id}")
|
||||
@ApiOperation(value = "删除菜单权限接口")
|
||||
@LogAnnotation(title = "菜单权限管理", action = "删除菜单权限")
|
||||
@SaCheckPermission("sys:permission:deleted")
|
||||
public void deleted(@Path("id") String id) {
|
||||
permissionService.deleted(id);
|
||||
}
|
||||
|
||||
@Put
|
||||
@Mapping ("/permission")
|
||||
@ApiOperation(value = "更新菜单权限接口")
|
||||
@LogAnnotation(title = "菜单权限管理", action = "更新菜单权限")
|
||||
@SaCheckPermission("sys:permission:update")
|
||||
public void updatePermission( @Validated SysPermission vo) {
|
||||
AssertUtil.isStringNotBlank(vo.getId(), "id不能为空");
|
||||
SysPermission sysPermission = permissionService.getById(vo.getId());
|
||||
if (null == sysPermission) {
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
// 只有类型变更或者所属菜单变更
|
||||
if (sysPermission.getType().equals(vo.getType()) || !sysPermission.getPid().equals(vo.getPid())) {
|
||||
verifyFormPid(vo);
|
||||
}
|
||||
permissionService.updatePermission(vo);
|
||||
}
|
||||
|
||||
@Get
|
||||
@Mapping ("/permission/{id}")
|
||||
@ApiOperation(value = "查询菜单权限接口")
|
||||
@LogAnnotation(title = "菜单权限管理", action = "查询菜单权限")
|
||||
@SaCheckPermission("sys:permission:detail")
|
||||
public SysPermission detailInfo(@Path("id") String id) {
|
||||
return permissionService.getById(id);
|
||||
|
||||
}
|
||||
|
||||
@Get @Mapping ("/permissions")
|
||||
@ApiOperation(value = "获取所有菜单权限接口")
|
||||
@LogAnnotation(title = "菜单权限管理", action = "获取所有菜单权限")
|
||||
@SaCheckPermission("sys:permission:list")
|
||||
public List<SysPermission> getAllMenusPermission() {
|
||||
return permissionService.selectAll(null);
|
||||
}
|
||||
|
||||
@Get @Mapping ("/permission/tree")
|
||||
@ApiOperation(value = "获取所有目录菜单树接口")
|
||||
@LogAnnotation(title = "菜单权限管理", action = "获取所有目录菜单树")
|
||||
@SaCheckPermission(value = {"sys:permission:update", "sys:permission:add"}, mode = SaMode.OR)
|
||||
public List<PermissionRespNode> getAllMenusPermissionTree( String permissionId) {
|
||||
return permissionService.selectAllMenuByTree(permissionId);
|
||||
}
|
||||
|
||||
@Get @Mapping ("/permission/tree/all")
|
||||
@ApiOperation(value = "获取所有目录菜单树接口")
|
||||
@LogAnnotation(title = "菜单权限管理", action = "获取所有目录菜单树")
|
||||
@SaCheckPermission(value = {"sys:role:update", "sys:role:add"}, mode = SaMode.OR)
|
||||
public List<PermissionRespNode> getAllPermissionTree() {
|
||||
return permissionService.selectAllByTree(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 操作后的菜单类型是目录的时候 父级必须为目录
|
||||
* 操作后的菜单类型是菜单的时候,父类必须为目录类型
|
||||
* 操作后的菜单类型是按钮的时候 父类必须为菜单类型
|
||||
*/
|
||||
private void verifyFormPid(SysPermission sysPermission) {
|
||||
SysPermission parent;
|
||||
parent = permissionService.getById(sysPermission.getPid());
|
||||
switch (sysPermission.getType()) {
|
||||
case 1:
|
||||
if (parent != null) {
|
||||
if (parent.getType() != 1) {
|
||||
throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_CATALOG_ERROR);
|
||||
}
|
||||
} else if (!"0".equals(sysPermission.getPid())) {
|
||||
throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_CATALOG_ERROR);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (parent == null || parent.getType() != 1) {
|
||||
throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_MENU_ERROR);
|
||||
}
|
||||
if (StrUtil.isEmpty(sysPermission.getUrl())) {
|
||||
throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_URL_NOT_NULL);
|
||||
}
|
||||
|
||||
break;
|
||||
case 3:
|
||||
if (parent == null || parent.getType() != 2) {
|
||||
throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_BTN_ERROR);
|
||||
}
|
||||
if (StrUtil.isEmpty(sysPermission.getPerms())) {
|
||||
throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_URL_PERMS_NULL);
|
||||
}
|
||||
if (StrUtil.isEmpty(sysPermission.getUrl())) {
|
||||
throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_URL_NOT_NULL);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
141
src/main/java/vip/fuck/sm/controller/RoleController.java
Normal file
141
src/main/java/vip/fuck/sm/controller/RoleController.java
Normal file
@ -0,0 +1,141 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import vip.fuck.sm.common.aop.annotation.LogAnnotation;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.utils.AssertUtil;
|
||||
import vip.fuck.sm.entity.SysRole;
|
||||
import vip.fuck.sm.entity.SysRoleDeptEntity;
|
||||
import vip.fuck.sm.service.RolePermissionService;
|
||||
import vip.fuck.sm.service.RoleService;
|
||||
import vip.fuck.sm.service.SysRoleDeptService;
|
||||
import vip.fuck.sm.vo.req.RolePermissionOperationReqVO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
import org.noear.solon.validation.annotation.Validated;
|
||||
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色管理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapping("/sys")
|
||||
@Controller
|
||||
@Api(tags = "组织模块-角色管理")
|
||||
@Valid
|
||||
public class RoleController {
|
||||
@Inject
|
||||
private RoleService roleService;
|
||||
@Inject
|
||||
private SysRoleDeptService sysRoleDeptService;
|
||||
@Inject
|
||||
private RolePermissionService rolePermissionService;
|
||||
|
||||
@Post @Mapping ("/role")
|
||||
@ApiOperation(value = "新增角色接口")
|
||||
@LogAnnotation(title = "角色管理", action = "新增角色")
|
||||
@SaCheckPermission("sys:role:add")
|
||||
public void addRole( @Validated SysRole vo) {
|
||||
roleService.addRole(vo);
|
||||
}
|
||||
|
||||
@Delete @Mapping ("/role/{id}")
|
||||
@ApiOperation(value = "删除角色接口")
|
||||
@LogAnnotation(title = "角色管理", action = "删除角色")
|
||||
@SaCheckPermission("sys:role:deleted")
|
||||
public void deleted(@Path("id") String id) {
|
||||
roleService.deletedRole(id);
|
||||
}
|
||||
|
||||
@Put
|
||||
@Mapping ("/role")
|
||||
@ApiOperation(value = "更新角色信息接口")
|
||||
@LogAnnotation(title = "角色管理", action = "更新角色信息")
|
||||
@SaCheckPermission("sys:role:update")
|
||||
public void updateDept( SysRole vo) {
|
||||
AssertUtil.isStringNotBlank(vo.getId(), "id不能为空");
|
||||
roleService.updateRole(vo);
|
||||
}
|
||||
|
||||
@Post @Mapping ("/role/bindDept")
|
||||
@ApiOperation(value = "绑定角色部门接口")
|
||||
@LogAnnotation(title = "角色管理", action = "绑定角色部门信息")
|
||||
@SaCheckPermission("sys:role:bindDept")
|
||||
public void bindDept( SysRole vo) {
|
||||
AssertUtil.isStringNotBlank(vo.getId(), "id不能为空");
|
||||
AssertUtil.isExists(vo.getId(), "获取角色失败");
|
||||
|
||||
//先删除所有绑定
|
||||
sysRoleDeptService.remove(Wrappers.<SysRoleDeptEntity>lambdaQuery().eq(SysRoleDeptEntity::getRoleId, vo.getId()));
|
||||
//如果不是自定义
|
||||
if (vo.getDataScope() != 2) {
|
||||
vo.setDepts(null);
|
||||
}
|
||||
if (!ObjectUtil.isEmpty(vo.getDepts())) {
|
||||
List<SysRoleDeptEntity> list = new ArrayList<>();
|
||||
for (String deptId : vo.getDepts()) {
|
||||
SysRoleDeptEntity sysRoleDeptEntity = new SysRoleDeptEntity();
|
||||
sysRoleDeptEntity.setDeptId(deptId);
|
||||
sysRoleDeptEntity.setRoleId(vo.getId());
|
||||
list.add(sysRoleDeptEntity);
|
||||
}
|
||||
sysRoleDeptService.saveBatch(list);
|
||||
}
|
||||
roleService.updateById(new SysRole().setId(vo.getId()).setDataScope(vo.getDataScope()));
|
||||
}
|
||||
|
||||
@Get
|
||||
@Mapping ("/role/{id}")
|
||||
@ApiOperation(value = "查询角色详情接口")
|
||||
@LogAnnotation(title = "角色管理", action = "查询角色详情")
|
||||
@SaCheckPermission("sys:role:detail")
|
||||
public SysRole detailInfo(@Path("id") String id) {
|
||||
return roleService.detailInfo(id);
|
||||
}
|
||||
|
||||
@Post @Mapping ("/roles")
|
||||
@ApiOperation(value = "分页获取角色信息接口")
|
||||
@LogAnnotation(title = "角色管理", action = "分页获取角色信息")
|
||||
@SaCheckPermission("sys:role:list")
|
||||
@SuppressWarnings("unchecked")
|
||||
public Page<SysRole> pageInfo( SysRole vo) {
|
||||
LambdaQueryWrapper<SysRole> queryWrapper = Wrappers.lambdaQuery();
|
||||
if (!StrUtil.isEmpty(vo.getName())) {
|
||||
queryWrapper.like(SysRole::getName, vo.getName());
|
||||
}
|
||||
if (!StrUtil.isEmpty(vo.getStartTime())) {
|
||||
queryWrapper.gt(SysRole::getCreateTime, vo.getStartTime());
|
||||
}
|
||||
if (!StrUtil.isEmpty(vo.getEndTime())) {
|
||||
queryWrapper.lt(SysRole::getCreateTime, vo.getEndTime());
|
||||
}
|
||||
if (!ObjectUtil.isEmpty(vo.getStatus())) {
|
||||
queryWrapper.eq(SysRole::getStatus, vo.getStatus());
|
||||
}
|
||||
queryWrapper.orderByDesc(SysRole::getCreateTime);
|
||||
return roleService.page(vo.getQueryPage(), queryWrapper);
|
||||
}
|
||||
|
||||
@Post @Mapping ("/role/permission")
|
||||
@ApiOperation(value = "修改或者新增角色菜单权限接口")
|
||||
@LogAnnotation(title = "角色和菜单关联接口", action = "修改或者新增角色菜单权限")
|
||||
@SaCheckPermission(value = {"sys:role:update", "sys:role:add"}, mode = SaMode.OR)
|
||||
public void operationRolePermission( @Validated RolePermissionOperationReqVO vo) {
|
||||
rolePermissionService.addRolePermission(vo);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,75 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import vip.fuck.sm.common.utils.AssertUtil;
|
||||
import vip.fuck.sm.entity.SysContentEntity;
|
||||
import vip.fuck.sm.service.SysContentService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.annotation.Mapping;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
|
||||
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 文章管理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Api(tags = "文章管理")
|
||||
@Controller
|
||||
@Mapping("/sysContent")
|
||||
@Valid
|
||||
public class SysContentController {
|
||||
@Inject
|
||||
private SysContentService sysContentService;
|
||||
|
||||
|
||||
@ApiOperation(value = "新增")
|
||||
@Post @Mapping ("/add")
|
||||
@SaCheckPermission("sysContent:add")
|
||||
public void add( SysContentEntity sysContent) {
|
||||
sysContentService.save(sysContent);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除")
|
||||
@Delete @Mapping ("/delete")
|
||||
@SaCheckPermission("sysContent:delete")
|
||||
public void delete( @ApiParam(value = "id集合") List<String> ids) {
|
||||
sysContentService.removeByIds(ids);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "更新")
|
||||
@Put
|
||||
@Mapping ("/update")
|
||||
@SaCheckPermission("sysContent:update")
|
||||
public void update( SysContentEntity sysContent) {
|
||||
AssertUtil.isStringNotBlank(sysContent.getId(), "id不能为空");
|
||||
sysContentService.updateById(sysContent);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "查询分页数据")
|
||||
@Post @Mapping ("/listByPage")
|
||||
@SaCheckPermission("sysContent:list")
|
||||
public IPage<SysContentEntity> findListByPage( SysContentEntity sysContent) {
|
||||
LambdaQueryWrapper<SysContentEntity> queryWrapper = Wrappers.lambdaQuery();
|
||||
//查询条件示例
|
||||
if (!StrUtil.isEmpty(sysContent.getTitle())) {
|
||||
queryWrapper.like(SysContentEntity::getTitle, sysContent.getTitle());
|
||||
}
|
||||
return sysContentService.page(sysContent.getQueryPage(), queryWrapper);
|
||||
}
|
||||
}
|
||||
89
src/main/java/vip/fuck/sm/controller/SysDictController.java
Normal file
89
src/main/java/vip/fuck/sm/controller/SysDictController.java
Normal file
@ -0,0 +1,89 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.utils.AssertUtil;
|
||||
import vip.fuck.sm.entity.SysDictDetailEntity;
|
||||
import vip.fuck.sm.entity.SysDictEntity;
|
||||
import vip.fuck.sm.service.SysDictDetailService;
|
||||
import vip.fuck.sm.service.SysDictService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.annotation.Put;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
|
||||
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 字典管理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Api(tags = "字典管理")
|
||||
@Controller
|
||||
@Mapping("/sysDict")
|
||||
@Valid
|
||||
public class SysDictController {
|
||||
@Inject
|
||||
private SysDictService sysDictService;
|
||||
@Inject
|
||||
private SysDictDetailService sysDictDetailService;
|
||||
|
||||
|
||||
@ApiOperation(value = "新增")
|
||||
@Post @Mapping ("/add")
|
||||
@SaCheckPermission("sysDict:add")
|
||||
public void add( SysDictEntity sysDict) {
|
||||
AssertUtil.isStringNotBlank(sysDict.getName(), "字典名称不能为空");
|
||||
SysDictEntity q = sysDictService.getOne(Wrappers.<SysDictEntity>lambdaQuery().eq(SysDictEntity::getName, sysDict.getName()));
|
||||
AssertUtil.isNull(q, "字典名称已存在");
|
||||
sysDictService.save(sysDict);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除")
|
||||
@Delete @Mapping ("/delete")
|
||||
@SaCheckPermission("sysDict:delete")
|
||||
public void delete( @ApiParam(value = "id集合") List<String> ids) {
|
||||
sysDictService.removeByIds(ids);
|
||||
//删除detail
|
||||
sysDictDetailService.remove(Wrappers.<SysDictDetailEntity>lambdaQuery().in(SysDictDetailEntity::getDictId, ids));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "更新")
|
||||
@Put
|
||||
@Mapping ("/update")
|
||||
@SaCheckPermission("sysDict:update")
|
||||
public void update( SysDictEntity sysDict) {
|
||||
AssertUtil.isStringNotBlank(sysDict.getName(), "字典名称不能为空");
|
||||
sysDictService.updateById(sysDict);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "查询分页数据")
|
||||
@Post @Mapping ("/listByPage")
|
||||
@SaCheckPermission("sysDict:list")
|
||||
public IPage<SysDictEntity> findListByPage( SysDictEntity sysDict) {
|
||||
LambdaQueryWrapper<SysDictEntity> queryWrapper = Wrappers.lambdaQuery();
|
||||
//查询条件示例
|
||||
if (!StrUtil.isEmpty(sysDict.getName())) {
|
||||
queryWrapper.like(SysDictEntity::getName, sysDict.getName());
|
||||
queryWrapper.or();
|
||||
queryWrapper.like(SysDictEntity::getRemark, sysDict.getName());
|
||||
}
|
||||
queryWrapper.orderByAsc(SysDictEntity::getName);
|
||||
return sysDictService.page(sysDict.getQueryPage(), queryWrapper);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,88 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.utils.AssertUtil;
|
||||
import vip.fuck.sm.entity.SysDictDetailEntity;
|
||||
import vip.fuck.sm.service.SysDictDetailService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.annotation.Mapping;
|
||||
import org.noear.solon.annotation.Put;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
|
||||
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 字典明细管理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Api(tags = "字典明细管理")
|
||||
@Controller
|
||||
@Mapping("/sysDictDetail")
|
||||
@Valid
|
||||
public class SysDictDetailController {
|
||||
@Inject
|
||||
private SysDictDetailService sysDictDetailService;
|
||||
|
||||
@ApiOperation(value = "新增")
|
||||
@Post @Mapping ("/add")
|
||||
@SaCheckPermission("sysDict:add")
|
||||
public void add( SysDictDetailEntity sysDictDetail) {
|
||||
AssertUtil.isStringNotBlank(sysDictDetail.getValue(), "字典值不能为空");
|
||||
LambdaQueryWrapper<SysDictDetailEntity> queryWrapper = Wrappers.lambdaQuery();
|
||||
queryWrapper.eq(SysDictDetailEntity::getValue, sysDictDetail.getValue());
|
||||
queryWrapper.eq(SysDictDetailEntity::getDictId, sysDictDetail.getDictId());
|
||||
SysDictDetailEntity q = sysDictDetailService.getOne(queryWrapper);
|
||||
AssertUtil.isNull(q, "字典名称-字典值已存在");
|
||||
sysDictDetailService.save(sysDictDetail);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除")
|
||||
@Delete @Mapping ("/delete")
|
||||
@SaCheckPermission("sysDict:delete")
|
||||
public void delete( @ApiParam(value = "id集合") List<String> ids) {
|
||||
sysDictDetailService.removeByIds(ids);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "更新")
|
||||
@Put
|
||||
@Mapping ("/update")
|
||||
@SaCheckPermission("sysDict:update")
|
||||
public void update( SysDictDetailEntity sysDictDetail) {
|
||||
AssertUtil.isStringNotBlank(sysDictDetail.getValue(), "字典值不能为空");
|
||||
LambdaQueryWrapper<SysDictDetailEntity> queryWrapper = Wrappers.lambdaQuery();
|
||||
queryWrapper.eq(SysDictDetailEntity::getValue, sysDictDetail.getValue());
|
||||
queryWrapper.eq(SysDictDetailEntity::getDictId, sysDictDetail.getDictId());
|
||||
SysDictDetailEntity q = sysDictDetailService.getOne(queryWrapper);
|
||||
|
||||
sysDictDetailService.updateById(sysDictDetail);
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation(value = "查询列表数据")
|
||||
@Post @Mapping ("/listByPage")
|
||||
@SaCheckPermission("sysDict:list")
|
||||
public IPage<SysDictDetailEntity> findListByPage( SysDictDetailEntity sysDictDetail) {
|
||||
if (StrUtil.isEmpty(sysDictDetail.getDictId())) {
|
||||
return new Page<>();
|
||||
}
|
||||
return sysDictDetailService.listByPage(sysDictDetail.getQueryPage(), sysDictDetail.getDictId());
|
||||
}
|
||||
|
||||
}
|
||||
67
src/main/java/vip/fuck/sm/controller/SysFilesController.java
Normal file
67
src/main/java/vip/fuck/sm/controller/SysFilesController.java
Normal file
@ -0,0 +1,67 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.annotation.SaMode;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.entity.SysFilesEntity;
|
||||
import vip.fuck.sm.service.SysFilesService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.core.handle.Context;
|
||||
import org.noear.solon.core.handle.UploadedFile;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
import org.smartboot.http.server.HttpRequest;
|
||||
import org.smartboot.http.server.HttpResponse;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 文件上传
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Controller
|
||||
@Mapping("/sysFiles")
|
||||
@Api(tags = "文件管理")
|
||||
@Valid
|
||||
public class SysFilesController {
|
||||
|
||||
@Inject
|
||||
private SysFilesService sysFilesService;
|
||||
|
||||
@ApiOperation(value = "新增")
|
||||
@Post
|
||||
@Mapping("/upload")
|
||||
@SaCheckPermission(value = {"sysFiles:add", "sysContent:update", "sysContent:add"}, mode = SaMode.OR)
|
||||
public String add(UploadedFile file, HttpRequest request) {
|
||||
//判断文件是否空
|
||||
if (file == null || file.getName() == null || "".equalsIgnoreCase(file.getName().trim())) {
|
||||
throw new BusinessException("文件为空");
|
||||
}
|
||||
return sysFilesService.saveFile(file, request);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "删除")
|
||||
@Delete
|
||||
@Mapping ("/delete")
|
||||
@SaCheckPermission("sysFiles:delete")
|
||||
public void delete( @ApiParam(value = "id集合") List<String> ids) {
|
||||
sysFilesService.removeByIdsAndFiles(ids);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "查询分页数据")
|
||||
@Post @Mapping ("/listByPage")
|
||||
@SaCheckPermission("sysFiles:list")
|
||||
public IPage<SysFilesEntity> findListByPage( SysFilesEntity sysFiles) {
|
||||
return sysFilesService.page(sysFiles.getQueryPage(), Wrappers.<SysFilesEntity>lambdaQuery().orderByDesc(SysFilesEntity::getCreateDate));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,58 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import vip.fuck.sm.entity.SysGenerator;
|
||||
import vip.fuck.sm.service.ISysGeneratorService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.noear.solon.annotation.Controller;
|
||||
import org.noear.solon.annotation.Get;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
import org.smartboot.http.server.HttpResponse;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 代码生成
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Api(tags = "系统模块-代码生成")
|
||||
@Slf4j
|
||||
@Controller
|
||||
@Mapping("/sysGenerator")
|
||||
@Valid
|
||||
public class SysGeneratorController {
|
||||
@Inject
|
||||
private ISysGeneratorService sysGeneratorService;
|
||||
|
||||
/**
|
||||
* 生成代码
|
||||
*/
|
||||
@ApiOperation(value = "生成")
|
||||
@Get
|
||||
@Mapping ("/gen")
|
||||
@SaCheckPermission("sysGenerator:add")
|
||||
public void code(String tables, HttpResponse response) throws IOException {
|
||||
byte[] data = sysGeneratorService.generatorCode(tables.split(","));
|
||||
response.setHeader("Content-Disposition", "attachment; filename=\"manager.zip\"");
|
||||
response.addHeader("Content-Length", "" + data.length);
|
||||
response.setContentType("application/octet-stream; charset=UTF-8");
|
||||
|
||||
IOUtils.write(data, response.getOutputStream());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "查询分页数据")
|
||||
@Post @Mapping ("/listByPage")
|
||||
@SaCheckPermission("sysGenerator:list")
|
||||
public IPage<SysGenerator> findListByPage( SysGenerator vo) {
|
||||
return sysGeneratorService.selectAllTables(vo.getQueryPage(), vo);
|
||||
}
|
||||
}
|
||||
64
src/main/java/vip/fuck/sm/controller/SysLogController.java
Normal file
64
src/main/java/vip/fuck/sm/controller/SysLogController.java
Normal file
@ -0,0 +1,64 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import vip.fuck.sm.common.aop.annotation.LogAnnotation;
|
||||
import vip.fuck.sm.entity.SysLog;
|
||||
import vip.fuck.sm.service.LogService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 系统操作日志
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapping("/sys")
|
||||
@Api(tags = "系统模块-系统操作日志管理")
|
||||
@Controller
|
||||
@Valid
|
||||
public class SysLogController {
|
||||
@Inject
|
||||
private LogService logService;
|
||||
|
||||
@Post @Mapping ("/logs")
|
||||
@ApiOperation(value = "分页查询系统操作日志接口")
|
||||
@LogAnnotation(title = "系统操作日志管理", action = "分页查询系统操作日志")
|
||||
@SaCheckPermission("sys:log:list")
|
||||
public Page<SysLog> pageInfo( SysLog vo) {
|
||||
LambdaQueryWrapper<SysLog> queryWrapper = Wrappers.lambdaQuery();
|
||||
if (!StrUtil.isEmpty(vo.getUsername())) {
|
||||
queryWrapper.like(SysLog::getUsername, vo.getUsername());
|
||||
}
|
||||
if (!StrUtil.isEmpty(vo.getOperation())) {
|
||||
queryWrapper.like(SysLog::getOperation, vo.getOperation());
|
||||
}
|
||||
if (!StrUtil.isEmpty(vo.getStartTime())) {
|
||||
queryWrapper.gt(SysLog::getCreateTime, vo.getStartTime());
|
||||
}
|
||||
if (!StrUtil.isEmpty(vo.getEndTime())) {
|
||||
queryWrapper.lt(SysLog::getCreateTime, vo.getEndTime());
|
||||
}
|
||||
queryWrapper.orderByDesc(SysLog::getCreateTime);
|
||||
return logService.page(vo.getQueryPage(), queryWrapper);
|
||||
}
|
||||
|
||||
@Delete @Mapping ("/logs")
|
||||
@ApiOperation(value = "删除日志接口")
|
||||
@LogAnnotation(title = "系统操作日志管理", action = "删除系统操作日志")
|
||||
@SaCheckPermission("sys:log:deleted")
|
||||
public void deleted( List<String> logIds) {
|
||||
logService.removeByIds(logIds);
|
||||
}
|
||||
}
|
||||
217
src/main/java/vip/fuck/sm/controller/UserController.java
Normal file
217
src/main/java/vip/fuck/sm/controller/UserController.java
Normal file
@ -0,0 +1,217 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import vip.fuck.sm.common.aop.annotation.LogAnnotation;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.exception.code.BaseResponseCode;
|
||||
import vip.fuck.sm.common.utils.AssertUtil;
|
||||
import vip.fuck.sm.common.utils.DataResult;
|
||||
import vip.fuck.sm.entity.SysUser;
|
||||
import vip.fuck.sm.entity.SysUserRole;
|
||||
import vip.fuck.sm.service.HomeService;
|
||||
import vip.fuck.sm.service.UserRoleService;
|
||||
import vip.fuck.sm.service.UserService;
|
||||
import vip.fuck.sm.vo.req.UserRoleOperationReqVO;
|
||||
import vip.fuck.sm.vo.resp.HomeRespVO;
|
||||
import vip.fuck.sm.vo.resp.LoginRespVO;
|
||||
import vip.fuck.sm.vo.resp.UserOwnRoleRespVO;
|
||||
import com.wf.captcha.ArithmeticCaptcha;
|
||||
import com.wf.captcha.utils.CaptchaUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.boot.smarthttp.http.SmHttpContext;
|
||||
import org.noear.solon.core.handle.Context;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
import org.noear.solon.validation.annotation.Validated;
|
||||
|
||||
|
||||
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户管理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Controller
|
||||
@Api(tags = "组织模块-用户管理")
|
||||
@Mapping("/sys")
|
||||
@Slf4j
|
||||
@Valid
|
||||
public class UserController {
|
||||
@Inject
|
||||
private UserService userService;
|
||||
@Inject
|
||||
private UserRoleService userRoleService;
|
||||
@Inject
|
||||
private HomeService homeService;
|
||||
|
||||
/**
|
||||
* 获取验证码图片
|
||||
* Gets captcha code.
|
||||
*
|
||||
* @param ctx the request
|
||||
* @throws IOException the io exception
|
||||
*/
|
||||
@Mapping("/getVerify")
|
||||
public void getCaptchaCode(Context ctx ) throws IOException {
|
||||
ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 48);
|
||||
captcha.setLen(2);
|
||||
ctx.sessionSet("captcha",captcha.text().toLowerCase());
|
||||
captcha.out(ctx.outputStream());
|
||||
}
|
||||
|
||||
|
||||
@Post @Mapping (value = "/user/login")
|
||||
@ApiOperation(value = "用户登录接口")
|
||||
public LoginRespVO login(@Validated SysUser vo, Context ctx) {
|
||||
//判断验证码
|
||||
if (!ObjectUtil.equal(vo.getCaptcha(),""+ctx.session("captcha") )) {
|
||||
// 清除session中的验证码
|
||||
ctx.sessionRemove("captcha");
|
||||
throw new BusinessException("验证码错误!");
|
||||
}
|
||||
LoginRespVO login = userService.login(vo);
|
||||
ctx.sessionSet("currentUserName",login.getUsername());
|
||||
return login;
|
||||
}
|
||||
|
||||
@Get
|
||||
@Mapping ("/home")
|
||||
@ApiOperation(value = "获取首页数据接口")
|
||||
public HomeRespVO getHomeInfo() {
|
||||
//通过access_token拿userId
|
||||
String userId = StpUtil.getLoginIdAsString();
|
||||
DataResult result = DataResult.success();
|
||||
return homeService.getHomeInfo(userId);
|
||||
}
|
||||
|
||||
@Post @Mapping ("/user/register")
|
||||
@ApiOperation(value = "用户注册接口")
|
||||
public void register( @Validated SysUser vo) {
|
||||
userService.register(vo);
|
||||
}
|
||||
|
||||
@Get @Mapping ("/user/unLogin")
|
||||
@ApiOperation(value = "引导客户端去登录")
|
||||
public void unLogin() {
|
||||
throw new BusinessException(BaseResponseCode.TOKEN_ERROR);
|
||||
}
|
||||
|
||||
@Put
|
||||
@Mapping ("/user")
|
||||
@ApiOperation(value = "更新用户信息接口")
|
||||
@LogAnnotation(title = "用户管理", action = "更新用户信息")
|
||||
@SaCheckPermission("sys:user:update")
|
||||
public void updateUserInfo( SysUser vo) {
|
||||
AssertUtil.isStringNotBlank(vo.getId(), "id不能为空");
|
||||
|
||||
userService.updateUserInfo(vo);
|
||||
}
|
||||
|
||||
@Put @Mapping ("/user/info")
|
||||
@ApiOperation(value = "更新用户信息接口")
|
||||
@LogAnnotation(title = "用户管理", action = "更新用户信息")
|
||||
public void updateUserInfoById( SysUser vo) {
|
||||
userService.updateUserInfoMy(vo);
|
||||
}
|
||||
|
||||
@Get @Mapping ("/user/{id}")
|
||||
@ApiOperation(value = "查询用户详情接口")
|
||||
@LogAnnotation(title = "用户管理", action = "查询用户详情")
|
||||
@SaCheckPermission("sys:user:detail")
|
||||
public SysUser detailInfo(@Path("id") String id) {
|
||||
return userService.getById(id);
|
||||
}
|
||||
|
||||
@Get @Mapping ("/user")
|
||||
@ApiOperation(value = "查询用户详情接口")
|
||||
@LogAnnotation(title = "用户管理", action = "查询用户详情")
|
||||
public SysUser youSelfInfo() {
|
||||
String userId = StpUtil.getLoginIdAsString();
|
||||
return userService.getById(userId);
|
||||
}
|
||||
|
||||
@Post @Mapping ("/users")
|
||||
@ApiOperation(value = "分页获取用户列表接口")
|
||||
@SaCheckPermission("sys:user:list")
|
||||
@LogAnnotation(title = "用户管理", action = "分页获取用户列表")
|
||||
public IPage<SysUser> pageInfo( SysUser vo) {
|
||||
return userService.pageInfo(vo);
|
||||
}
|
||||
|
||||
@Post @Mapping ("/user")
|
||||
@ApiOperation(value = "新增用户接口")
|
||||
@SaCheckPermission("sys:user:add")
|
||||
@LogAnnotation(title = "用户管理", action = "新增用户")
|
||||
public void addUser( @Validated SysUser vo) {
|
||||
userService.addUser(vo);
|
||||
}
|
||||
|
||||
@Get @Mapping ("/user/logout")
|
||||
@ApiOperation(value = "退出接口")
|
||||
public void logout() {
|
||||
StpUtil.logout();
|
||||
}
|
||||
|
||||
@Put @Mapping ("/user/pwd")
|
||||
@ApiOperation(value = "修改密码接口")
|
||||
@LogAnnotation(title = "用户管理", action = "更新密码")
|
||||
public void updatePwd( SysUser vo) {
|
||||
if (StrUtil.isEmpty(vo.getOldPwd()) || StrUtil.isEmpty(vo.getNewPwd())) {
|
||||
throw new BusinessException("旧密码与新密码不能为空");
|
||||
}
|
||||
vo.setId(StpUtil.getLoginIdAsString());
|
||||
userService.updatePwd(vo);
|
||||
}
|
||||
|
||||
@Delete @Mapping ("/user")
|
||||
@ApiOperation(value = "删除用户接口")
|
||||
@LogAnnotation(title = "用户管理", action = "删除用户")
|
||||
@SaCheckPermission("sys:user:deleted")
|
||||
public void deletedUser( @ApiParam(value = "用户id集合") List<String> userIds) {
|
||||
//删除用户, 删除redis的绑定的角色跟权限
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
||||
queryWrapper.in(SysUser::getId, userIds);
|
||||
userService.remove(queryWrapper);
|
||||
}
|
||||
|
||||
@Get @Mapping ("/user/roles/{userId}")
|
||||
@ApiOperation(value = "赋予角色-获取所有角色接口")
|
||||
@LogAnnotation(title = "用户管理", action = "赋予角色-获取所有角色接口")
|
||||
@SaCheckPermission("sys:user:role:detail")
|
||||
public UserOwnRoleRespVO getUserOwnRole(@Path("userId") String userId) {
|
||||
DataResult result = DataResult.success();
|
||||
return userService.getUserOwnRole(userId);
|
||||
}
|
||||
|
||||
@Put @Mapping ("/user/roles/{userId}")
|
||||
@ApiOperation(value = "赋予角色-用户赋予角色接口")
|
||||
@LogAnnotation(title = "用户管理", action = "赋予角色-用户赋予角色接口")
|
||||
@SaCheckPermission("sys:user:role:update")
|
||||
public void setUserOwnRole(@Path("userId") String userId, List<String> roleIds) {
|
||||
|
||||
LambdaQueryWrapper<SysUserRole> queryWrapper = Wrappers.lambdaQuery();
|
||||
queryWrapper.eq(SysUserRole::getUserId, userId);
|
||||
userRoleService.remove(queryWrapper);
|
||||
if (!ObjectUtil.isEmpty(roleIds)) {
|
||||
UserRoleOperationReqVO reqVO = new UserRoleOperationReqVO();
|
||||
reqVO.setUserId(userId);
|
||||
reqVO.setRoleIds(roleIds);
|
||||
userRoleService.addUserRoleInfo(reqVO);
|
||||
}
|
||||
}
|
||||
}
|
||||
36
src/main/java/vip/fuck/sm/controller/UserRoleController.java
Normal file
36
src/main/java/vip/fuck/sm/controller/UserRoleController.java
Normal file
@ -0,0 +1,36 @@
|
||||
package vip.fuck.sm.controller;
|
||||
|
||||
import vip.fuck.sm.common.aop.annotation.LogAnnotation;
|
||||
import vip.fuck.sm.service.UserRoleService;
|
||||
import vip.fuck.sm.vo.req.UserRoleOperationReqVO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.noear.solon.annotation.*;
|
||||
import org.noear.solon.validation.annotation.Valid;
|
||||
import org.noear.solon.validation.annotation.Validated;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 用户和角色关联
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapping("/sys")
|
||||
@Controller
|
||||
@Api(tags = "组织管理-用户和角色关联接口")
|
||||
@Valid
|
||||
public class UserRoleController {
|
||||
@Inject
|
||||
private UserRoleService userRoleService;
|
||||
|
||||
@Post @Mapping("/user/role")
|
||||
@ApiOperation(value = "修改或者新增用户角色接口")
|
||||
@LogAnnotation(title = "用户和角色关联接口", action = "修改或者新增用户角色")
|
||||
public void operationUserRole( @Validated UserRoleOperationReqVO vo) {
|
||||
userRoleService.addUserRoleInfo(vo);
|
||||
}
|
||||
}
|
||||
44
src/main/java/vip/fuck/sm/controller/api/TestController.java
Normal file
44
src/main/java/vip/fuck/sm/controller/api/TestController.java
Normal file
@ -0,0 +1,44 @@
|
||||
package vip.fuck.sm.controller.api;
|
||||
|
||||
import cn.dev33.satoken.stp.SaTokenInfo;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.dev33.satoken.util.SaResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.noear.solon.annotation.Get;
|
||||
import org.noear.solon.annotation.*;
|
||||
|
||||
|
||||
/**
|
||||
* api test示例
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年5月11日
|
||||
*/
|
||||
@Controller
|
||||
@Mapping("/app/api")
|
||||
@Api(tags = "test")
|
||||
public class TestController {
|
||||
|
||||
|
||||
@Post @Mapping ("/login")
|
||||
@ApiOperation(value = "登录接口")
|
||||
public SaResult login() {
|
||||
// 第1步,先登录上
|
||||
StpUtil.login(10001);
|
||||
// 第2步,获取 Token 相关参数
|
||||
SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
|
||||
// 第3步,返回给前端
|
||||
return SaResult.data(tokenInfo);
|
||||
}
|
||||
|
||||
|
||||
@Get
|
||||
@Mapping ("/getCurUserInfo")
|
||||
@ApiOperation(value = "获取当前登录人信息示例")
|
||||
public void getAppUserInfo() {
|
||||
//拿userId与userName
|
||||
String userId = StpUtil.getLoginIdAsString();
|
||||
}
|
||||
}
|
||||
38
src/main/java/vip/fuck/sm/entity/BasePageEntity.java
Normal file
38
src/main/java/vip/fuck/sm/entity/BasePageEntity.java
Normal file
@ -0,0 +1,38 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* BaseEntity
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
@JsonIgnoreProperties(value = { "getQueryPage"})
|
||||
public class BasePageEntity {
|
||||
@TableField(exist = false)
|
||||
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
|
||||
private Integer page;
|
||||
|
||||
@TableField(exist = false)
|
||||
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
|
||||
private Integer limit;
|
||||
|
||||
/**
|
||||
* page条件
|
||||
*
|
||||
* @param <T>
|
||||
* @return
|
||||
*/
|
||||
@JsonIgnore
|
||||
public <T> Page getQueryPage() {
|
||||
return new Page<T>(page == null ? 1 : page, limit == null ? 10 : limit);
|
||||
}
|
||||
}
|
||||
104
src/main/java/vip/fuck/sm/entity/ColumnEntity.java
Normal file
104
src/main/java/vip/fuck/sm/entity/ColumnEntity.java
Normal file
@ -0,0 +1,104 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 代码生成 列属性
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
public class ColumnEntity {
|
||||
/**
|
||||
* 列名
|
||||
*/
|
||||
private String columnName;
|
||||
|
||||
/**
|
||||
* 列名类型
|
||||
*/
|
||||
private String dataType;
|
||||
|
||||
/**
|
||||
* 列名备注
|
||||
*/
|
||||
private String comments;
|
||||
|
||||
/**
|
||||
* 属性名称(第一个字母大写),如:user_name => UserName
|
||||
*/
|
||||
private String attrName;
|
||||
|
||||
/**
|
||||
* 属性名称(第一个字母小写),如:user_name => userName
|
||||
*/
|
||||
private String attrname;
|
||||
|
||||
/**
|
||||
* 属性类型
|
||||
*/
|
||||
private String attrType;
|
||||
|
||||
/**
|
||||
* auto_increment
|
||||
*/
|
||||
private String extra;
|
||||
|
||||
public String getColumnName() {
|
||||
return columnName;
|
||||
}
|
||||
|
||||
public void setColumnName(String columnName) {
|
||||
this.columnName = columnName;
|
||||
}
|
||||
|
||||
public String getDataType() {
|
||||
return dataType;
|
||||
}
|
||||
|
||||
public void setDataType(String dataType) {
|
||||
this.dataType = dataType;
|
||||
}
|
||||
|
||||
public String getComments() {
|
||||
return comments;
|
||||
}
|
||||
|
||||
public void setComments(String comments) {
|
||||
this.comments = comments;
|
||||
}
|
||||
|
||||
public String getAttrname() {
|
||||
return attrname;
|
||||
}
|
||||
|
||||
public void setAttrname(String attrname) {
|
||||
this.attrname = attrname;
|
||||
}
|
||||
|
||||
public String getAttrName() {
|
||||
return attrName;
|
||||
}
|
||||
|
||||
public void setAttrName(String attrName) {
|
||||
this.attrName = attrName;
|
||||
}
|
||||
|
||||
public String getAttrType() {
|
||||
return attrType;
|
||||
}
|
||||
|
||||
public void setAttrType(String attrType) {
|
||||
this.attrType = attrType;
|
||||
}
|
||||
|
||||
public String getExtra() {
|
||||
return extra;
|
||||
}
|
||||
|
||||
public void setExtra(String extra) {
|
||||
this.extra = extra;
|
||||
}
|
||||
}
|
||||
78
src/main/java/vip/fuck/sm/entity/SysContentEntity.java
Normal file
78
src/main/java/vip/fuck/sm/entity/SysContentEntity.java
Normal file
@ -0,0 +1,78 @@
|
||||
package vip.fuck.sm.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 lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 内容管理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@TableName("sys_content")
|
||||
public class SysContentEntity extends BasePageEntity implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@TableId("id")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 主题
|
||||
*/
|
||||
@TableField("title")
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* 内容
|
||||
*/
|
||||
@TableField("content")
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 单个图片url
|
||||
*/
|
||||
private String oneImg;
|
||||
|
||||
/**
|
||||
* 多个图片url
|
||||
*/
|
||||
private String multipleImg;
|
||||
|
||||
/**
|
||||
* 关键字
|
||||
*/
|
||||
private String keywords;
|
||||
|
||||
/**
|
||||
* 类型(数据字典)
|
||||
*/
|
||||
@TableField("type")
|
||||
private String type;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
@TableField(value = "create_id", fill = FieldFill.INSERT)
|
||||
private String createId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(value = "create_time", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
||||
54
src/main/java/vip/fuck/sm/entity/SysDept.java
Normal file
54
src/main/java/vip/fuck/sm/entity/SysDept.java
Normal file
@ -0,0 +1,54 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
import org.noear.solon.validation.annotation.NotBlank;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 部门
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
public class SysDept implements Serializable {
|
||||
@TableId
|
||||
private String id;
|
||||
|
||||
private String deptNo;
|
||||
|
||||
@NotBlank(message = "机构名称不能为空")
|
||||
private String name;
|
||||
|
||||
@NotBlank(message = "父级不能为空")
|
||||
private String pid;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String pidName;
|
||||
|
||||
private Integer status;
|
||||
|
||||
private String relationCode;
|
||||
|
||||
private String deptManagerId;
|
||||
|
||||
private String managerName;
|
||||
|
||||
private String phone;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Integer deleted;
|
||||
|
||||
}
|
||||
68
src/main/java/vip/fuck/sm/entity/SysDictDetailEntity.java
Normal file
68
src/main/java/vip/fuck/sm/entity/SysDictDetailEntity.java
Normal file
@ -0,0 +1,68 @@
|
||||
package vip.fuck.sm.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 lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 字典明细
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@TableName("sys_dict_detail")
|
||||
public class SysDictDetailEntity extends BasePageEntity implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@TableId("id")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 字典标签
|
||||
*/
|
||||
@TableField("label")
|
||||
private String label;
|
||||
|
||||
/**
|
||||
* 字典值
|
||||
*/
|
||||
@TableField("value")
|
||||
private String value;
|
||||
|
||||
/**
|
||||
* 排序
|
||||
*/
|
||||
@TableField("sort")
|
||||
private Integer sort;
|
||||
|
||||
/**
|
||||
* 字典id
|
||||
*/
|
||||
@TableField("dict_id")
|
||||
private String dictId;
|
||||
|
||||
/**
|
||||
* 创建日期
|
||||
*/
|
||||
@TableField(value = "create_time", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 字典name
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String dictName;
|
||||
|
||||
}
|
||||
51
src/main/java/vip/fuck/sm/entity/SysDictEntity.java
Normal file
51
src/main/java/vip/fuck/sm/entity/SysDictEntity.java
Normal file
@ -0,0 +1,51 @@
|
||||
package vip.fuck.sm.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 lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 字典管理
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@TableName("sys_dict")
|
||||
public class SysDictEntity extends BasePageEntity implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@TableId("id")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 字典名称
|
||||
*/
|
||||
@TableField("name")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@TableField("remark")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(value = "create_time", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
||||
51
src/main/java/vip/fuck/sm/entity/SysFilesEntity.java
Normal file
51
src/main/java/vip/fuck/sm/entity/SysFilesEntity.java
Normal file
@ -0,0 +1,51 @@
|
||||
package vip.fuck.sm.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 lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 文件上传
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@TableName("sys_files")
|
||||
public class SysFilesEntity extends BasePageEntity implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@TableId("id")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* URL地址
|
||||
*/
|
||||
@TableField("url")
|
||||
private String url;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(value = "create_date", fill = FieldFill.INSERT)
|
||||
private Date createDate;
|
||||
|
||||
@TableField("file_name")
|
||||
private String fileName;
|
||||
|
||||
@TableField("file_path")
|
||||
private String filePath;
|
||||
|
||||
|
||||
}
|
||||
30
src/main/java/vip/fuck/sm/entity/SysGenerator.java
Normal file
30
src/main/java/vip/fuck/sm/entity/SysGenerator.java
Normal file
@ -0,0 +1,30 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 代码生成
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
public class SysGenerator extends BasePageEntity implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String tableName;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
private String tableComment;
|
||||
|
||||
}
|
||||
48
src/main/java/vip/fuck/sm/entity/SysLog.java
Normal file
48
src/main/java/vip/fuck/sm/entity/SysLog.java
Normal file
@ -0,0 +1,48 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 操作日志
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class SysLog extends BasePageEntity implements Serializable {
|
||||
@TableId
|
||||
private String id;
|
||||
|
||||
private String userId;
|
||||
|
||||
private String username;
|
||||
|
||||
private String operation;
|
||||
|
||||
private Integer time;
|
||||
|
||||
private String method;
|
||||
|
||||
private String params;
|
||||
|
||||
private String ip;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String startTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String endTime;
|
||||
|
||||
}
|
||||
63
src/main/java/vip/fuck/sm/entity/SysPermission.java
Normal file
63
src/main/java/vip/fuck/sm/entity/SysPermission.java
Normal file
@ -0,0 +1,63 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
import org.noear.solon.validation.annotation.NotBlank;
|
||||
import org.noear.solon.validation.annotation.NotNull;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 权限菜单
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
public class SysPermission implements Serializable {
|
||||
|
||||
|
||||
@TableId
|
||||
private String id;
|
||||
|
||||
@NotBlank(message = "菜单权限名称不能为空")
|
||||
private String name;
|
||||
|
||||
private String perms;
|
||||
|
||||
private String url;
|
||||
|
||||
private String icon;
|
||||
|
||||
private String target;
|
||||
|
||||
@NotNull(message = "所属菜单不能为空")
|
||||
private String pid;
|
||||
|
||||
private Integer orderNum;
|
||||
|
||||
@NotNull(message = "菜单权限类型不能为空")
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 1正常 2禁用
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Integer deleted;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String pidName;
|
||||
|
||||
}
|
||||
66
src/main/java/vip/fuck/sm/entity/SysRole.java
Normal file
66
src/main/java/vip/fuck/sm/entity/SysRole.java
Normal file
@ -0,0 +1,66 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import vip.fuck.sm.vo.resp.DeptRespNodeVO;
|
||||
import vip.fuck.sm.vo.resp.PermissionRespNode;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.noear.solon.validation.annotation.NotBlank;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class SysRole extends BasePageEntity implements Serializable {
|
||||
@TableId
|
||||
private String id;
|
||||
|
||||
@NotBlank(message = "名称不能为空")
|
||||
private String name;
|
||||
|
||||
private String description;
|
||||
|
||||
private Integer status;
|
||||
|
||||
private Integer dataScope;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Integer deleted;
|
||||
|
||||
@TableField(exist = false)
|
||||
private List<PermissionRespNode> permissionRespNodes;
|
||||
@TableField(exist = false)
|
||||
private List<DeptRespNodeVO> deptRespNodes;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String startTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String endTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private List<String> permissions;
|
||||
|
||||
@TableField(exist = false)
|
||||
private List<String> depts;
|
||||
|
||||
}
|
||||
49
src/main/java/vip/fuck/sm/entity/SysRoleDeptEntity.java
Normal file
49
src/main/java/vip/fuck/sm/entity/SysRoleDeptEntity.java
Normal file
@ -0,0 +1,49 @@
|
||||
package vip.fuck.sm.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 lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 角色部门
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @email *****@mail.com
|
||||
* @date 2020-09-27 17:30:15
|
||||
*/
|
||||
@Data
|
||||
@TableName("sys_role_dept")
|
||||
public class SysRoleDeptEntity extends BasePageEntity implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@TableId("id")
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 角色id
|
||||
*/
|
||||
@TableField("role_id")
|
||||
private String roleId;
|
||||
|
||||
/**
|
||||
* 菜单权限id
|
||||
*/
|
||||
@TableField("dept_id")
|
||||
private String deptId;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@TableField(value = "create_time", fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
||||
30
src/main/java/vip/fuck/sm/entity/SysRolePermission.java
Normal file
30
src/main/java/vip/fuck/sm/entity/SysRolePermission.java
Normal file
@ -0,0 +1,30 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 角色权限
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
public class SysRolePermission implements Serializable {
|
||||
@TableId
|
||||
private String id;
|
||||
|
||||
private String roleId;
|
||||
|
||||
private String permissionId;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
}
|
||||
88
src/main/java/vip/fuck/sm/entity/SysUser.java
Normal file
88
src/main/java/vip/fuck/sm/entity/SysUser.java
Normal file
@ -0,0 +1,88 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.noear.solon.validation.annotation.NotBlank;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class SysUser extends BasePageEntity implements Serializable {
|
||||
@TableId
|
||||
private String id;
|
||||
|
||||
@NotBlank(message = "账号不能为空")
|
||||
private String username;
|
||||
|
||||
private String salt;
|
||||
|
||||
@NotBlank(message = "密码不能为空")
|
||||
private String password;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String oldPwd;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String newPwd;
|
||||
|
||||
private String phone;
|
||||
|
||||
private String deptId;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String deptName;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String deptNo;
|
||||
|
||||
|
||||
private String realName;
|
||||
|
||||
private String nickName;
|
||||
|
||||
private String email;
|
||||
|
||||
private Integer status;
|
||||
|
||||
private Integer sex;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Integer deleted;
|
||||
|
||||
private String createId;
|
||||
|
||||
private String updateId;
|
||||
|
||||
private Integer createWhere;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String startTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String endTime;
|
||||
|
||||
@TableField(exist = false)
|
||||
private List<String> roleIds;
|
||||
|
||||
@TableField(exist = false)
|
||||
private String captcha;
|
||||
}
|
||||
31
src/main/java/vip/fuck/sm/entity/SysUserRole.java
Normal file
31
src/main/java/vip/fuck/sm/entity/SysUserRole.java
Normal file
@ -0,0 +1,31 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 用户角色
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
public class SysUserRole implements Serializable {
|
||||
@TableId
|
||||
private String id;
|
||||
|
||||
private String userId;
|
||||
|
||||
private String roleId;
|
||||
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Date createTime;
|
||||
|
||||
|
||||
}
|
||||
93
src/main/java/vip/fuck/sm/entity/TableEntity.java
Normal file
93
src/main/java/vip/fuck/sm/entity/TableEntity.java
Normal file
@ -0,0 +1,93 @@
|
||||
package vip.fuck.sm.entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 代码生成 表数据
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public class TableEntity {
|
||||
//表的名称
|
||||
private String tableName;
|
||||
//表的备注
|
||||
private String comments;
|
||||
//表的主键
|
||||
private ColumnEntity pk;
|
||||
//表的列名(不包含主键)
|
||||
private List<ColumnEntity> columns;
|
||||
private List<ColumnEntity> htmlColumns;
|
||||
|
||||
//类名(第一个字母大写),如:sys_user => SysUser
|
||||
private String className;
|
||||
//类名(第一个字母小写),如:sys_user => sysUser
|
||||
private String classname;
|
||||
//类名(都小写),如:sys_user => sysuser
|
||||
private String classNameLower;
|
||||
|
||||
public List<ColumnEntity> getHtmlColumns() {
|
||||
return htmlColumns;
|
||||
}
|
||||
|
||||
public void setHtmlColumns(List<ColumnEntity> htmlColumns) {
|
||||
this.htmlColumns = htmlColumns;
|
||||
}
|
||||
|
||||
public String getTableName() {
|
||||
return tableName;
|
||||
}
|
||||
|
||||
public void setTableName(String tableName) {
|
||||
this.tableName = tableName;
|
||||
}
|
||||
|
||||
public String getComments() {
|
||||
return comments;
|
||||
}
|
||||
|
||||
public void setComments(String comments) {
|
||||
this.comments = comments;
|
||||
}
|
||||
|
||||
public ColumnEntity getPk() {
|
||||
return pk;
|
||||
}
|
||||
|
||||
public void setPk(ColumnEntity pk) {
|
||||
this.pk = pk;
|
||||
}
|
||||
|
||||
public List<ColumnEntity> getColumns() {
|
||||
return columns;
|
||||
}
|
||||
|
||||
public void setColumns(List<ColumnEntity> columns) {
|
||||
this.columns = columns;
|
||||
}
|
||||
|
||||
public String getClassName() {
|
||||
return className;
|
||||
}
|
||||
|
||||
public void setClassName(String className) {
|
||||
this.className = className;
|
||||
}
|
||||
|
||||
public String getClassname() {
|
||||
return classname;
|
||||
}
|
||||
|
||||
public void setClassname(String classname) {
|
||||
this.classname = classname;
|
||||
}
|
||||
|
||||
public String getClassNameLower() {
|
||||
return classNameLower;
|
||||
}
|
||||
|
||||
public void setClassNameLower(String classNameLower) {
|
||||
this.classNameLower = classNameLower;
|
||||
}
|
||||
}
|
||||
28
src/main/java/vip/fuck/sm/mapper/GeneratorMapper.java
Normal file
28
src/main/java/vip/fuck/sm/mapper/GeneratorMapper.java
Normal file
@ -0,0 +1,28 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import vip.fuck.sm.entity.SysGenerator;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 代码生成 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface GeneratorMapper extends BaseMapper<SysGenerator> {
|
||||
|
||||
IPage<SysGenerator> selectAllTables(Page<SysGenerator> page, @Param(value = "vo") SysGenerator vo);
|
||||
|
||||
Map<String, String> queryTable(String tableName);
|
||||
|
||||
List<Map<String, String>> queryColumns(String tableName);
|
||||
}
|
||||
17
src/main/java/vip/fuck/sm/mapper/SysContentMapper.java
Normal file
17
src/main/java/vip/fuck/sm/mapper/SysContentMapper.java
Normal file
@ -0,0 +1,17 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysContentEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 内容管理 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysContentMapper extends BaseMapper<SysContentEntity> {
|
||||
|
||||
}
|
||||
16
src/main/java/vip/fuck/sm/mapper/SysDeptMapper.java
Normal file
16
src/main/java/vip/fuck/sm/mapper/SysDeptMapper.java
Normal file
@ -0,0 +1,16 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysDept;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 部门 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysDeptMapper extends BaseMapper<SysDept> {
|
||||
}
|
||||
17
src/main/java/vip/fuck/sm/mapper/SysDictDetailMapper.java
Normal file
17
src/main/java/vip/fuck/sm/mapper/SysDictDetailMapper.java
Normal file
@ -0,0 +1,17 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysDictDetailEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 字典详情 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysDictDetailMapper extends BaseMapper<SysDictDetailEntity> {
|
||||
|
||||
}
|
||||
17
src/main/java/vip/fuck/sm/mapper/SysDictMapper.java
Normal file
17
src/main/java/vip/fuck/sm/mapper/SysDictMapper.java
Normal file
@ -0,0 +1,17 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysDictEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 字典 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysDictMapper extends BaseMapper<SysDictEntity> {
|
||||
|
||||
}
|
||||
17
src/main/java/vip/fuck/sm/mapper/SysFilesMapper.java
Normal file
17
src/main/java/vip/fuck/sm/mapper/SysFilesMapper.java
Normal file
@ -0,0 +1,17 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysFilesEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 文件上传 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysFilesMapper extends BaseMapper<SysFilesEntity> {
|
||||
|
||||
}
|
||||
16
src/main/java/vip/fuck/sm/mapper/SysLogMapper.java
Normal file
16
src/main/java/vip/fuck/sm/mapper/SysLogMapper.java
Normal file
@ -0,0 +1,16 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysLog;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 操作日志 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysLogMapper extends BaseMapper<SysLog> {
|
||||
}
|
||||
17
src/main/java/vip/fuck/sm/mapper/SysPermissionMapper.java
Normal file
17
src/main/java/vip/fuck/sm/mapper/SysPermissionMapper.java
Normal file
@ -0,0 +1,17 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysPermission;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 菜单权限 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysPermissionMapper extends BaseMapper<SysPermission> {
|
||||
|
||||
}
|
||||
17
src/main/java/vip/fuck/sm/mapper/SysRoleDeptMapper.java
Normal file
17
src/main/java/vip/fuck/sm/mapper/SysRoleDeptMapper.java
Normal file
@ -0,0 +1,17 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysRoleDeptEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 角色部门
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @email *****@mail.com
|
||||
* @date 2020-09-27 17:30:15
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysRoleDeptMapper extends BaseMapper<SysRoleDeptEntity> {
|
||||
|
||||
}
|
||||
17
src/main/java/vip/fuck/sm/mapper/SysRoleMapper.java
Normal file
17
src/main/java/vip/fuck/sm/mapper/SysRoleMapper.java
Normal file
@ -0,0 +1,17 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysRole;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 角色 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysRoleMapper extends BaseMapper<SysRole> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysRolePermission;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 角色权限 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysRolePermissionMapper extends BaseMapper<SysRolePermission> {
|
||||
|
||||
}
|
||||
16
src/main/java/vip/fuck/sm/mapper/SysUserMapper.java
Normal file
16
src/main/java/vip/fuck/sm/mapper/SysUserMapper.java
Normal file
@ -0,0 +1,16 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysUser;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 用户 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysUserMapper extends BaseMapper<SysUser> {
|
||||
}
|
||||
17
src/main/java/vip/fuck/sm/mapper/SysUserRoleMapper.java
Normal file
17
src/main/java/vip/fuck/sm/mapper/SysUserRoleMapper.java
Normal file
@ -0,0 +1,17 @@
|
||||
package vip.fuck.sm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import vip.fuck.sm.entity.SysUserRole;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 用户角色 Mapper
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
|
||||
|
||||
}
|
||||
47
src/main/java/vip/fuck/sm/service/DeptService.java
Normal file
47
src/main/java/vip/fuck/sm/service/DeptService.java
Normal file
@ -0,0 +1,47 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysDept;
|
||||
import vip.fuck.sm.vo.resp.DeptRespNodeVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 部门
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface DeptService extends IService<SysDept> {
|
||||
|
||||
/**
|
||||
* 添加部门
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void addDept(SysDept vo);
|
||||
|
||||
/**
|
||||
* 更新部门
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void updateDept(SysDept vo);
|
||||
|
||||
/**
|
||||
* 删除部门
|
||||
*
|
||||
* @param id id
|
||||
*/
|
||||
void deleted(String id);
|
||||
|
||||
/**
|
||||
* 部门树形列表
|
||||
*
|
||||
* @param deptId deptId
|
||||
* @param disabled 最顶级是否可用
|
||||
* @return 树形列表
|
||||
*/
|
||||
List<DeptRespNodeVO> deptTreeList(String deptId, Boolean disabled);
|
||||
}
|
||||
21
src/main/java/vip/fuck/sm/service/HomeService.java
Normal file
21
src/main/java/vip/fuck/sm/service/HomeService.java
Normal file
@ -0,0 +1,21 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import vip.fuck.sm.vo.resp.HomeRespVO;
|
||||
|
||||
/**
|
||||
* 首页
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface HomeService {
|
||||
|
||||
/**
|
||||
* 获取首页信息
|
||||
*
|
||||
* @param userId userId
|
||||
* @return HomeRespVO
|
||||
*/
|
||||
HomeRespVO getHomeInfo(String userId);
|
||||
}
|
||||
32
src/main/java/vip/fuck/sm/service/ISysGeneratorService.java
Normal file
32
src/main/java/vip/fuck/sm/service/ISysGeneratorService.java
Normal file
@ -0,0 +1,32 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import vip.fuck.sm.entity.SysGenerator;
|
||||
|
||||
/**
|
||||
* 代码生成
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface ISysGeneratorService {
|
||||
|
||||
/**
|
||||
* 获取所有表
|
||||
*
|
||||
* @param page page
|
||||
* @param vo vo
|
||||
* @return IPage
|
||||
*/
|
||||
IPage<SysGenerator> selectAllTables(Page<SysGenerator> page, SysGenerator vo);
|
||||
|
||||
/**
|
||||
* 生成代码
|
||||
*
|
||||
* @param tables tables
|
||||
* @return byte[]
|
||||
*/
|
||||
byte[] generatorCode(String[] tables);
|
||||
}
|
||||
14
src/main/java/vip/fuck/sm/service/LogService.java
Normal file
14
src/main/java/vip/fuck/sm/service/LogService.java
Normal file
@ -0,0 +1,14 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysLog;
|
||||
|
||||
/**
|
||||
* 系统日志
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface LogService extends IService<SysLog> {
|
||||
}
|
||||
86
src/main/java/vip/fuck/sm/service/PermissionService.java
Normal file
86
src/main/java/vip/fuck/sm/service/PermissionService.java
Normal file
@ -0,0 +1,86 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysPermission;
|
||||
import vip.fuck.sm.vo.resp.PermissionRespNode;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单权限
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface PermissionService extends IService<SysPermission> {
|
||||
|
||||
/**
|
||||
* 根据userId获取权限
|
||||
*
|
||||
* @param userId userId
|
||||
* @return 权限
|
||||
*/
|
||||
List<SysPermission> getPermission(String userId);
|
||||
|
||||
/**
|
||||
* 删除权限
|
||||
*
|
||||
* @param permissionId 权限id
|
||||
*/
|
||||
void deleted(String permissionId);
|
||||
|
||||
/**
|
||||
* 获取所有
|
||||
*
|
||||
* @return List
|
||||
*/
|
||||
List<SysPermission> selectAll(Integer status);
|
||||
|
||||
/**
|
||||
* 根据userId获取权限标志
|
||||
*
|
||||
* @param userId userId
|
||||
* @return Set
|
||||
*/
|
||||
List<String> getPermissionsByUserId(String userId);
|
||||
|
||||
/**
|
||||
* 根据userId获取权限树
|
||||
*
|
||||
* @param userId
|
||||
* @return List
|
||||
*/
|
||||
List<PermissionRespNode> permissionTreeList(String userId);
|
||||
|
||||
/**
|
||||
* 根据权限树
|
||||
*
|
||||
* @return List
|
||||
*/
|
||||
List<PermissionRespNode> selectAllByTree(Integer status);
|
||||
|
||||
/**
|
||||
* 根据目录树
|
||||
*
|
||||
* @param permissionId permissionId
|
||||
* @return List
|
||||
*/
|
||||
List<PermissionRespNode> selectAllMenuByTree(String permissionId);
|
||||
|
||||
|
||||
/**
|
||||
* 根据权限id获取绑定的userId
|
||||
*
|
||||
* @param permissionId permissionId
|
||||
* @return List
|
||||
*/
|
||||
List<String> getUserIdsById(String permissionId);
|
||||
|
||||
/**
|
||||
* 更新
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void updatePermission(SysPermission vo);
|
||||
}
|
||||
22
src/main/java/vip/fuck/sm/service/RolePermissionService.java
Normal file
22
src/main/java/vip/fuck/sm/service/RolePermissionService.java
Normal file
@ -0,0 +1,22 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysRolePermission;
|
||||
import vip.fuck.sm.vo.req.RolePermissionOperationReqVO;
|
||||
|
||||
/**
|
||||
* 角色权限关联
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface RolePermissionService extends IService<SysRolePermission> {
|
||||
|
||||
/**
|
||||
* 角色绑定权限
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void addRolePermission(RolePermissionOperationReqVO vo);
|
||||
}
|
||||
53
src/main/java/vip/fuck/sm/service/RoleService.java
Normal file
53
src/main/java/vip/fuck/sm/service/RoleService.java
Normal file
@ -0,0 +1,53 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysRole;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface RoleService extends IService<SysRole> {
|
||||
|
||||
/**
|
||||
* 添加角色
|
||||
*
|
||||
* @param vo SysRole
|
||||
*/
|
||||
void addRole(SysRole vo);
|
||||
|
||||
/**
|
||||
* 更新角色
|
||||
*
|
||||
* @param vo SysRole
|
||||
*/
|
||||
void updateRole(SysRole vo);
|
||||
|
||||
/**
|
||||
* 根据id获取角色详情
|
||||
*
|
||||
* @param id id
|
||||
* @return SysRole
|
||||
*/
|
||||
SysRole detailInfo(String id);
|
||||
|
||||
/**
|
||||
* 根据id删除
|
||||
*
|
||||
* @param id id
|
||||
*/
|
||||
void deletedRole(String id);
|
||||
|
||||
/**
|
||||
* 根据userId获取绑定的角色
|
||||
*
|
||||
* @param userId userId
|
||||
* @return List
|
||||
*/
|
||||
List<SysRole> getRoleInfoByUserId(String userId);
|
||||
}
|
||||
16
src/main/java/vip/fuck/sm/service/SysContentService.java
Normal file
16
src/main/java/vip/fuck/sm/service/SysContentService.java
Normal file
@ -0,0 +1,16 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysContentEntity;
|
||||
|
||||
/**
|
||||
* 内容 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface SysContentService extends IService<SysContentEntity> {
|
||||
|
||||
}
|
||||
|
||||
26
src/main/java/vip/fuck/sm/service/SysDictDetailService.java
Normal file
26
src/main/java/vip/fuck/sm/service/SysDictDetailService.java
Normal file
@ -0,0 +1,26 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysDictDetailEntity;
|
||||
|
||||
/**
|
||||
* 数据字典 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface SysDictDetailService extends IService<SysDictDetailEntity> {
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*
|
||||
* @param page page
|
||||
* @param dictId dictId
|
||||
* @return IPage
|
||||
*/
|
||||
IPage<SysDictDetailEntity> listByPage(Page<SysDictDetailEntity> page, String dictId);
|
||||
}
|
||||
|
||||
16
src/main/java/vip/fuck/sm/service/SysDictService.java
Normal file
16
src/main/java/vip/fuck/sm/service/SysDictService.java
Normal file
@ -0,0 +1,16 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysDictEntity;
|
||||
|
||||
/**
|
||||
* 数据字典 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface SysDictService extends IService<SysDictEntity> {
|
||||
|
||||
}
|
||||
|
||||
36
src/main/java/vip/fuck/sm/service/SysFilesService.java
Normal file
36
src/main/java/vip/fuck/sm/service/SysFilesService.java
Normal file
@ -0,0 +1,36 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysFilesEntity;
|
||||
import org.noear.solon.core.handle.Context;
|
||||
import org.noear.solon.core.handle.UploadedFile;
|
||||
import org.smartboot.http.server.HttpRequest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 文件上传 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface SysFilesService extends IService<SysFilesEntity> {
|
||||
|
||||
/**
|
||||
* 保存图片返回url
|
||||
*
|
||||
* @param file
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
String saveFile(UploadedFile file, HttpRequest request);
|
||||
|
||||
/**
|
||||
* 删除图片
|
||||
*
|
||||
* @param ids
|
||||
*/
|
||||
void removeByIdsAndFiles(List<String> ids);
|
||||
}
|
||||
|
||||
16
src/main/java/vip/fuck/sm/service/SysRoleDeptService.java
Normal file
16
src/main/java/vip/fuck/sm/service/SysRoleDeptService.java
Normal file
@ -0,0 +1,16 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysRoleDeptEntity;
|
||||
|
||||
/**
|
||||
* 角色部门
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @email *****@mail.com
|
||||
* @date 2020-09-27 17:30:15
|
||||
*/
|
||||
public interface SysRoleDeptService extends IService<SysRoleDeptEntity> {
|
||||
|
||||
}
|
||||
|
||||
32
src/main/java/vip/fuck/sm/service/UserRoleService.java
Normal file
32
src/main/java/vip/fuck/sm/service/UserRoleService.java
Normal file
@ -0,0 +1,32 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysUserRole;
|
||||
import vip.fuck.sm.vo.req.UserRoleOperationReqVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户角色 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface UserRoleService extends IService<SysUserRole> {
|
||||
|
||||
/**
|
||||
* 根据userId获取绑定的角色id
|
||||
*
|
||||
* @param userId userId
|
||||
* @return List
|
||||
*/
|
||||
List<String> getRoleIdsByUserId(String userId);
|
||||
|
||||
/**
|
||||
* 用户绑定角色
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void addUserRoleInfo(UserRoleOperationReqVO vo);
|
||||
}
|
||||
76
src/main/java/vip/fuck/sm/service/UserService.java
Normal file
76
src/main/java/vip/fuck/sm/service/UserService.java
Normal file
@ -0,0 +1,76 @@
|
||||
package vip.fuck.sm.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import vip.fuck.sm.entity.SysUser;
|
||||
import vip.fuck.sm.vo.resp.LoginRespVO;
|
||||
import vip.fuck.sm.vo.resp.UserOwnRoleRespVO;
|
||||
|
||||
/**
|
||||
* 用户 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
public interface UserService extends IService<SysUser> {
|
||||
|
||||
/**
|
||||
* 注册
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void register(SysUser vo);
|
||||
|
||||
/**
|
||||
* 登陆
|
||||
*
|
||||
* @param vo vo
|
||||
* @return LoginRespVO
|
||||
*/
|
||||
LoginRespVO login(SysUser vo);
|
||||
|
||||
/**
|
||||
* 更新用户信息
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void updateUserInfo(SysUser vo);
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*
|
||||
* @param vo vo
|
||||
* @return IPage
|
||||
*/
|
||||
IPage<SysUser> pageInfo(SysUser vo);
|
||||
|
||||
/**
|
||||
* 添加用户
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void addUser(SysUser vo);
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void updatePwd(SysUser vo);
|
||||
|
||||
/**
|
||||
* 根据userid获取绑定角色
|
||||
*
|
||||
* @param userId userId
|
||||
* @return UserOwnRoleRespVO
|
||||
*/
|
||||
UserOwnRoleRespVO getUserOwnRole(String userId);
|
||||
|
||||
/**
|
||||
* 修改自己信息
|
||||
*
|
||||
* @param vo vo
|
||||
*/
|
||||
void updateUserInfoMy(SysUser vo);
|
||||
}
|
||||
214
src/main/java/vip/fuck/sm/service/impl/DeptServiceImpl.java
Normal file
214
src/main/java/vip/fuck/sm/service/impl/DeptServiceImpl.java
Normal file
@ -0,0 +1,214 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.exception.code.BaseResponseCode;
|
||||
import vip.fuck.sm.entity.SysDept;
|
||||
import vip.fuck.sm.entity.SysUser;
|
||||
import vip.fuck.sm.mapper.SysDeptMapper;
|
||||
import vip.fuck.sm.mapper.SysUserMapper;
|
||||
import vip.fuck.sm.service.DeptService;
|
||||
import vip.fuck.sm.vo.resp.DeptRespNodeVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.data.annotation.Tran;
|
||||
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/**
|
||||
* 部门
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class DeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements DeptService {
|
||||
|
||||
@Db
|
||||
private SysDeptMapper sysDeptMapper;
|
||||
@Db
|
||||
private SysUserMapper sysUserMapper;
|
||||
|
||||
@Override
|
||||
public void addDept(SysDept vo) {
|
||||
String relationCode;
|
||||
String deptCode = this.getNewDeptCode();
|
||||
SysDept parent = sysDeptMapper.selectById(vo.getPid());
|
||||
if ("0".equals(vo.getPid())) {
|
||||
relationCode = deptCode;
|
||||
} else if (null == parent) {
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
} else {
|
||||
relationCode = parent.getRelationCode() + deptCode;
|
||||
}
|
||||
vo.setDeptNo(deptCode);
|
||||
vo.setRelationCode(relationCode);
|
||||
sysDeptMapper.insert(vo);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Tran
|
||||
public void updateDept(SysDept vo) {
|
||||
|
||||
SysDept sysDept = sysDeptMapper.selectById(vo.getId());
|
||||
if (null == sysDept) {
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
sysDeptMapper.updateById(vo);
|
||||
//说明层级发生了变化
|
||||
if (!StrUtil.isEmpty(vo.getPid()) && !vo.getPid().equals(sysDept.getPid())) {
|
||||
SysDept parent = sysDeptMapper.selectById(vo.getPid());
|
||||
if (!"0".equals(vo.getPid()) && null == parent) {
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
SysDept oldParent = sysDeptMapper.selectById(sysDept.getPid());
|
||||
String oldRelationCode;
|
||||
String newRelationCode;
|
||||
//根目录降到其他目录
|
||||
if ("0".equals(sysDept.getPid())) {
|
||||
oldRelationCode = sysDept.getDeptNo();
|
||||
newRelationCode = parent.getRelationCode() + sysDept.getDeptNo();
|
||||
} else if ("0".equals(vo.getPid())) { // 其他目录升级到跟目录
|
||||
oldRelationCode = sysDept.getRelationCode();
|
||||
newRelationCode = sysDept.getDeptNo();
|
||||
} else {
|
||||
oldRelationCode = oldParent.getRelationCode();
|
||||
newRelationCode = parent.getRelationCode();
|
||||
}
|
||||
LambdaQueryWrapper<SysDept> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.likeLeft(SysDept::getDeptNo, sysDept.getDeptNo());
|
||||
List<SysDept> list = sysDeptMapper.selectList(wrapper);
|
||||
list.stream().forEach(entity -> {
|
||||
String relationCode = entity.getRelationCode().replace(oldRelationCode, newRelationCode);
|
||||
entity.setRelationCode(relationCode);
|
||||
sysDeptMapper.updateById(entity);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleted(String id) {
|
||||
SysDept sysDept = sysDeptMapper.selectById(id);
|
||||
if (null == sysDept) {
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
List<Object> deptIds = sysDeptMapper.selectObjs(Wrappers.<SysDept>lambdaQuery().select(SysDept::getId).likeRight(SysDept::getRelationCode, sysDept.getRelationCode()));
|
||||
List<SysUser> list = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery().in(SysUser::getDeptId, deptIds));
|
||||
if (!ObjectUtil.isEmpty(list)) {
|
||||
throw new BusinessException(BaseResponseCode.NOT_PERMISSION_DELETED_DEPT);
|
||||
}
|
||||
sysDeptMapper.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeptRespNodeVO> deptTreeList(String deptId, Boolean disabled) {
|
||||
List<SysDept> list;
|
||||
if (ObjectUtil.isEmpty(deptId)) {
|
||||
list = sysDeptMapper.selectList(Wrappers.emptyWrapper());
|
||||
} else {
|
||||
SysDept sysDept = sysDeptMapper.selectById(deptId);
|
||||
if (sysDept == null) {
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
LambdaQueryWrapper<SysDept> queryWrapper = Wrappers.<SysDept>lambdaQuery().likeRight(SysDept::getRelationCode, sysDept.getRelationCode());
|
||||
List<Object> childIds = sysDeptMapper.selectObjs(queryWrapper);
|
||||
list = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery().notIn(SysDept::getId, childIds));
|
||||
}
|
||||
// 默认加一个顶级方便新增顶级部门
|
||||
DeptRespNodeVO respNodeVO = new DeptRespNodeVO();
|
||||
respNodeVO.setTitle("默认顶级部门");
|
||||
respNodeVO.setId("0");
|
||||
respNodeVO.setSpread(true);
|
||||
respNodeVO.setDisabled(disabled);
|
||||
respNodeVO.setChildren(getTree(list));
|
||||
List<DeptRespNodeVO> result = new ArrayList<>();
|
||||
result.add(respNodeVO);
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<DeptRespNodeVO> getTree(List<SysDept> all) {
|
||||
List<DeptRespNodeVO> list = new ArrayList<>();
|
||||
for (SysDept sysDept : all) {
|
||||
if ("0".equals(sysDept.getPid())) {
|
||||
DeptRespNodeVO deptTree = new DeptRespNodeVO();
|
||||
BeanUtil.copyProperties(sysDept, deptTree);
|
||||
deptTree.setTitle(sysDept.getName());
|
||||
deptTree.setSpread(true);
|
||||
deptTree.setChildren(getChild(sysDept.getId(), all));
|
||||
list.add(deptTree);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private List<DeptRespNodeVO> getChild(String id, List<SysDept> all) {
|
||||
List<DeptRespNodeVO> list = new ArrayList<>();
|
||||
for (SysDept sysDept : all) {
|
||||
if (sysDept.getPid().equals(id)) {
|
||||
DeptRespNodeVO deptTree = new DeptRespNodeVO();
|
||||
BeanUtil.copyProperties(sysDept, deptTree);
|
||||
deptTree.setTitle(sysDept.getName());
|
||||
deptTree.setChildren(getChild(sysDept.getId(), all));
|
||||
list.add(deptTree);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
//获取新的部门编码
|
||||
public String getNewDeptCode() {
|
||||
LambdaQueryWrapper<SysDept> lambdaQueryWrapper = Wrappers.lambdaQuery();
|
||||
lambdaQueryWrapper.select(SysDept::getDeptNo);
|
||||
//获取所有的deptCode
|
||||
List<Object> deptCodes = sysDeptMapper.selectObjs(lambdaQueryWrapper);
|
||||
AtomicReference<Integer> maxDeptCode = new AtomicReference<>(0);
|
||||
|
||||
//遍历获取最大的DeptCode
|
||||
deptCodes.forEach(o -> {
|
||||
String str = String.valueOf(o);
|
||||
if (str.length() >= 7) {
|
||||
Integer one = Integer.parseInt(str.substring(str.length() - 5));
|
||||
if (one > maxDeptCode.get()) {
|
||||
maxDeptCode.set(one);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return padRight(maxDeptCode.get() + 1, 6, "0");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 右补位,左对齐
|
||||
*
|
||||
* @param len 目标字符串长度
|
||||
* @param alexi 补位字符
|
||||
* @param oriStr 原字符串
|
||||
* @return 目标字符串
|
||||
* 以alexin 做为补位
|
||||
*/
|
||||
public static String padRight(int oriStr, int len, String alexi) {
|
||||
StringBuilder str = new StringBuilder();
|
||||
int strlen = String.valueOf(oriStr).length();
|
||||
if (strlen < len) {
|
||||
for (int i = 0; i < len - strlen; i++) {
|
||||
str.append(alexi);
|
||||
}
|
||||
}
|
||||
str.append(oriStr);
|
||||
return "D" + str.toString();
|
||||
}
|
||||
}
|
||||
59
src/main/java/vip/fuck/sm/service/impl/HomeServiceImpl.java
Normal file
59
src/main/java/vip/fuck/sm/service/impl/HomeServiceImpl.java
Normal file
@ -0,0 +1,59 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import vip.fuck.sm.entity.SysDept;
|
||||
import vip.fuck.sm.entity.SysUser;
|
||||
import vip.fuck.sm.service.DeptService;
|
||||
import vip.fuck.sm.service.HomeService;
|
||||
import vip.fuck.sm.service.PermissionService;
|
||||
import vip.fuck.sm.service.UserService;
|
||||
import vip.fuck.sm.vo.resp.HomeRespVO;
|
||||
import vip.fuck.sm.vo.resp.PermissionRespNode;
|
||||
import vip.fuck.sm.vo.resp.UserInfoRespVO;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.annotation.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 首页
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
public class HomeServiceImpl implements HomeService {
|
||||
@Inject
|
||||
private UserService userService;
|
||||
@Inject
|
||||
private DeptService deptService;
|
||||
@Inject
|
||||
private PermissionService permissionService;
|
||||
|
||||
@Override
|
||||
public HomeRespVO getHomeInfo(String userId) {
|
||||
|
||||
|
||||
SysUser sysUser = userService.getById(userId);
|
||||
UserInfoRespVO vo = new UserInfoRespVO();
|
||||
|
||||
if (sysUser != null) {
|
||||
BeanUtil.copyProperties(sysUser, vo);
|
||||
SysDept sysDept = deptService.getById(sysUser.getDeptId());
|
||||
if (sysDept != null) {
|
||||
vo.setDeptId(sysDept.getId());
|
||||
vo.setDeptName(sysDept.getName());
|
||||
}
|
||||
}
|
||||
|
||||
List<PermissionRespNode> menus = permissionService.permissionTreeList(userId);
|
||||
|
||||
HomeRespVO respVO = new HomeRespVO();
|
||||
respVO.setMenus(menus);
|
||||
respVO.setUserInfo(vo);
|
||||
|
||||
return respVO;
|
||||
}
|
||||
}
|
||||
18
src/main/java/vip/fuck/sm/service/impl/LogServiceImpl.java
Normal file
18
src/main/java/vip/fuck/sm/service/impl/LogServiceImpl.java
Normal file
@ -0,0 +1,18 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.entity.SysLog;
|
||||
import vip.fuck.sm.mapper.SysLogMapper;
|
||||
import vip.fuck.sm.service.LogService;
|
||||
import org.noear.solon.annotation.Component;
|
||||
|
||||
/**
|
||||
* 系统日志
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
public class LogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> implements LogService {
|
||||
}
|
||||
@ -0,0 +1,263 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.exception.code.BaseResponseCode;
|
||||
import vip.fuck.sm.entity.SysPermission;
|
||||
import vip.fuck.sm.entity.SysRolePermission;
|
||||
import vip.fuck.sm.entity.SysUserRole;
|
||||
import vip.fuck.sm.mapper.SysPermissionMapper;
|
||||
import vip.fuck.sm.service.PermissionService;
|
||||
import vip.fuck.sm.service.RolePermissionService;
|
||||
import vip.fuck.sm.service.UserRoleService;
|
||||
import vip.fuck.sm.vo.resp.PermissionRespNode;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.data.annotation.Tran;
|
||||
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 菜单权限
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class PermissionServiceImpl extends ServiceImpl<SysPermissionMapper, SysPermission> implements PermissionService {
|
||||
@Inject
|
||||
private UserRoleService userRoleService;
|
||||
@Inject
|
||||
private RolePermissionService rolePermissionService;
|
||||
@Db
|
||||
private SysPermissionMapper sysPermissionMapper;
|
||||
|
||||
/**
|
||||
* 根据用户查询拥有的权限
|
||||
* 先查出用户拥有的角色
|
||||
* 再去差用户拥有的权限
|
||||
* 也可以多表关联查询
|
||||
*/
|
||||
@Override
|
||||
public List<SysPermission> getPermission(String userId) {
|
||||
List<String> roleIds = userRoleService.getRoleIdsByUserId(userId);
|
||||
if (ObjectUtil.isEmpty(roleIds)) {
|
||||
return null;
|
||||
}
|
||||
List<Object> permissionIds = rolePermissionService.listObjs(Wrappers.<SysRolePermission>lambdaQuery().select(SysRolePermission::getPermissionId).in(SysRolePermission::getRoleId, roleIds));
|
||||
if (ObjectUtil.isEmpty(permissionIds)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<SysPermission> queryWrapper = Wrappers.<SysPermission>lambdaQuery().in(SysPermission::getId, permissionIds).eq(SysPermission::getStatus, 1).orderByAsc(SysPermission::getOrderNum);
|
||||
return sysPermissionMapper.selectList(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除菜单权限
|
||||
* 判断是否 有角色关联
|
||||
* 判断是否有子集
|
||||
*/
|
||||
@Tran
|
||||
@Override
|
||||
public void deleted(String permissionId) {
|
||||
//获取关联userId
|
||||
List<String> userIds = getUserIdsById(permissionId);
|
||||
SysPermission sysPermission = sysPermissionMapper.selectById(permissionId);
|
||||
if (null == sysPermission) {
|
||||
log.error("传入 的 id:{}不合法", permissionId);
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
//获取下一级
|
||||
List<SysPermission> childs = sysPermissionMapper.selectList(Wrappers.<SysPermission>lambdaQuery().eq(SysPermission::getPid, permissionId));
|
||||
if (!ObjectUtil.isEmpty(childs)) {
|
||||
throw new BusinessException(BaseResponseCode.ROLE_PERMISSION_RELATION);
|
||||
}
|
||||
sysPermissionMapper.deleteById(permissionId);
|
||||
//删除和角色关联
|
||||
rolePermissionService.remove(Wrappers.<SysRolePermission>lambdaQuery().eq(SysRolePermission::getPermissionId, permissionId));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePermission(SysPermission vo) {
|
||||
sysPermissionMapper.updateById(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有菜单权限
|
||||
*/
|
||||
@Override
|
||||
public List<SysPermission> selectAll(Integer status) {
|
||||
List<SysPermission> result = sysPermissionMapper.selectList(Wrappers.<SysPermission>lambdaQuery().eq(status != null, SysPermission::getStatus, status).orderByAsc(SysPermission::getOrderNum));
|
||||
if (!ObjectUtil.isEmpty(result)) {
|
||||
for (SysPermission sysPermission : result) {
|
||||
SysPermission parent = sysPermissionMapper.selectById(sysPermission.getPid());
|
||||
if (parent != null) {
|
||||
sysPermission.setPidName(parent.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取权限标识
|
||||
*/
|
||||
@Override
|
||||
public List<String> getPermissionsByUserId(String userId) {
|
||||
|
||||
List<SysPermission> list = getPermission(userId);
|
||||
Set<String> permissions = new HashSet<>();
|
||||
if (ObjectUtil.isEmpty(list)) {
|
||||
return null;
|
||||
}
|
||||
for (SysPermission sysPermission : list) {
|
||||
if (!ObjectUtil.isEmpty(sysPermission.getPerms())) {
|
||||
permissions.add(sysPermission.getPerms());
|
||||
}
|
||||
|
||||
}
|
||||
return new ArrayList<String>(permissions);
|
||||
}
|
||||
|
||||
/**
|
||||
* 以树型的形式把用户拥有的菜单权限返回给客户端
|
||||
*/
|
||||
@Override
|
||||
public List<PermissionRespNode> permissionTreeList(String userId) {
|
||||
List<SysPermission> list = getPermission(userId);
|
||||
return getTree(list, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归获取菜单树
|
||||
*/
|
||||
private List<PermissionRespNode> getTree(List<SysPermission> all, boolean type) {
|
||||
|
||||
List<PermissionRespNode> list = new ArrayList<>();
|
||||
if (ObjectUtil.isEmpty(all)) {
|
||||
return list;
|
||||
}
|
||||
for (SysPermission sysPermission : all) {
|
||||
if ("0".equals(sysPermission.getPid())) {
|
||||
PermissionRespNode permissionRespNode = new PermissionRespNode();
|
||||
BeanUtil.copyProperties(sysPermission, permissionRespNode);
|
||||
permissionRespNode.setTitle(sysPermission.getName());
|
||||
|
||||
if (type) {
|
||||
permissionRespNode.setChildren(getChildExcBtn(sysPermission.getId(), all));
|
||||
} else {
|
||||
permissionRespNode.setChildren(getChildAll(sysPermission.getId(), all));
|
||||
}
|
||||
list.add(permissionRespNode);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归遍历所有
|
||||
*/
|
||||
private List<PermissionRespNode> getChildAll(String id, List<SysPermission> all) {
|
||||
|
||||
List<PermissionRespNode> list = new ArrayList<>();
|
||||
for (SysPermission sysPermission : all) {
|
||||
if (sysPermission.getPid().equals(id)) {
|
||||
PermissionRespNode permissionRespNode = new PermissionRespNode();
|
||||
BeanUtil.copyProperties(sysPermission, permissionRespNode);
|
||||
permissionRespNode.setTitle(sysPermission.getName());
|
||||
permissionRespNode.setChildren(getChildAll(sysPermission.getId(), all));
|
||||
list.add(permissionRespNode);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 只递归获取目录和菜单
|
||||
*/
|
||||
private List<PermissionRespNode> getChildExcBtn(String id, List<SysPermission> all) {
|
||||
|
||||
List<PermissionRespNode> list = new ArrayList<>();
|
||||
for (SysPermission sysPermission : all) {
|
||||
if (sysPermission.getPid().equals(id) && sysPermission.getType() != 3) {
|
||||
PermissionRespNode permissionRespNode = new PermissionRespNode();
|
||||
BeanUtil.copyProperties(sysPermission, permissionRespNode);
|
||||
permissionRespNode.setTitle(sysPermission.getName());
|
||||
permissionRespNode.setChildren(getChildExcBtn(sysPermission.getId(), all));
|
||||
list.add(permissionRespNode);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有菜单权限按钮
|
||||
*/
|
||||
@Override
|
||||
public List<PermissionRespNode> selectAllByTree(Integer status) {
|
||||
|
||||
List<SysPermission> list = selectAll(status);
|
||||
return getTree(list, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有的目录菜单树排除按钮
|
||||
* 因为不管是新增或者修改
|
||||
* 选择所属菜单目录的时候
|
||||
* 都不可能选择到按钮
|
||||
* 而且编辑的时候 所属目录不能
|
||||
* 选择自己和它的子类
|
||||
*/
|
||||
@Override
|
||||
public List<PermissionRespNode> selectAllMenuByTree(String permissionId) {
|
||||
|
||||
List<SysPermission> list = selectAll(1);
|
||||
if (!ObjectUtil.isEmpty(list) && !ObjectUtil.isEmpty(permissionId)) {
|
||||
for (SysPermission sysPermission : list) {
|
||||
if (sysPermission.getId().equals(permissionId)) {
|
||||
list.remove(sysPermission);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
List<PermissionRespNode> result = new ArrayList<>();
|
||||
//新增顶级目录是为了方便添加一级目录
|
||||
PermissionRespNode respNode = new PermissionRespNode();
|
||||
respNode.setId("0");
|
||||
respNode.setTitle("默认顶级菜单");
|
||||
respNode.setSpread(true);
|
||||
respNode.setChildren(getTree(list, true));
|
||||
result.add(respNode);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List getUserIdsById(String id) {
|
||||
//根据权限id,获取所有角色id
|
||||
//根据权限id,获取所有角色id
|
||||
List<Object> roleIds = rolePermissionService.listObjs(Wrappers.<SysRolePermission>lambdaQuery().select(SysRolePermission::getRoleId).eq(SysRolePermission::getPermissionId, id));
|
||||
if (!ObjectUtil.isEmpty(roleIds)) {
|
||||
//根据角色id, 获取关联用户
|
||||
return userRoleService.listObjs(Wrappers.<SysUserRole>lambdaQuery().select(SysUserRole::getUserId).in(SysUserRole::getRoleId, roleIds));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.entity.SysRolePermission;
|
||||
import vip.fuck.sm.mapper.SysRolePermissionMapper;
|
||||
import vip.fuck.sm.service.RolePermissionService;
|
||||
import vip.fuck.sm.vo.req.RolePermissionOperationReqVO;
|
||||
import org.noear.solon.annotation.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色权限关联
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
public class RolePermissionServiceImpl extends ServiceImpl<SysRolePermissionMapper, SysRolePermission> implements RolePermissionService {
|
||||
@Override
|
||||
public void addRolePermission(RolePermissionOperationReqVO vo) {
|
||||
List<SysRolePermission> list = new ArrayList<>();
|
||||
for (String permissionId : vo.getPermissionIds()) {
|
||||
SysRolePermission sysRolePermission = new SysRolePermission();
|
||||
sysRolePermission.setPermissionId(permissionId);
|
||||
sysRolePermission.setRoleId(vo.getRoleId());
|
||||
list.add(sysRolePermission);
|
||||
}
|
||||
this.remove(Wrappers.<SysRolePermission>lambdaQuery().eq(SysRolePermission::getRoleId, vo.getRoleId()));
|
||||
this.saveBatch(list);
|
||||
}
|
||||
|
||||
}
|
||||
147
src/main/java/vip/fuck/sm/service/impl/RoleServiceImpl.java
Normal file
147
src/main/java/vip/fuck/sm/service/impl/RoleServiceImpl.java
Normal file
@ -0,0 +1,147 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.exception.code.BaseResponseCode;
|
||||
import vip.fuck.sm.entity.SysRole;
|
||||
import vip.fuck.sm.entity.SysRoleDeptEntity;
|
||||
import vip.fuck.sm.entity.SysRolePermission;
|
||||
import vip.fuck.sm.entity.SysUserRole;
|
||||
import vip.fuck.sm.mapper.SysRoleMapper;
|
||||
import vip.fuck.sm.service.*;
|
||||
import vip.fuck.sm.vo.req.RolePermissionOperationReqVO;
|
||||
import vip.fuck.sm.vo.resp.DeptRespNodeVO;
|
||||
import vip.fuck.sm.vo.resp.PermissionRespNode;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.data.annotation.Tran;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class RoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements RoleService {
|
||||
@Db
|
||||
private SysRoleMapper sysRoleMapper;
|
||||
@Inject
|
||||
private UserRoleService userRoleService;
|
||||
@Inject
|
||||
private RolePermissionService rolePermissionService;
|
||||
@Inject
|
||||
private PermissionService permissionService;
|
||||
@Inject
|
||||
private DeptService deptService;
|
||||
@Inject
|
||||
private SysRoleDeptService sysRoleDeptService;
|
||||
|
||||
@Tran
|
||||
@Override
|
||||
public void addRole(SysRole vo) {
|
||||
vo.setStatus(1);
|
||||
sysRoleMapper.insert(vo);
|
||||
if (!ObjectUtil.isEmpty(vo.getPermissions())) {
|
||||
RolePermissionOperationReqVO reqVO = new RolePermissionOperationReqVO();
|
||||
reqVO.setRoleId(vo.getId());
|
||||
reqVO.setPermissionIds(vo.getPermissions());
|
||||
rolePermissionService.addRolePermission(reqVO);
|
||||
}
|
||||
}
|
||||
|
||||
@Tran
|
||||
@Override
|
||||
public void updateRole(SysRole vo) {
|
||||
SysRole sysRole = sysRoleMapper.selectById(vo.getId());
|
||||
if (null == sysRole) {
|
||||
log.error("传入 的 id:{}不合法", vo.getId());
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
sysRoleMapper.updateById(vo);
|
||||
//删除角色权限关联
|
||||
rolePermissionService.remove(Wrappers.<SysRolePermission>lambdaQuery().eq(SysRolePermission::getRoleId, sysRole.getId()));
|
||||
if (!ObjectUtil.isEmpty(vo.getPermissions())) {
|
||||
RolePermissionOperationReqVO reqVO = new RolePermissionOperationReqVO();
|
||||
reqVO.setRoleId(sysRole.getId());
|
||||
reqVO.setPermissionIds(vo.getPermissions());
|
||||
rolePermissionService.addRolePermission(reqVO);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysRole detailInfo(String id) {
|
||||
SysRole sysRole = sysRoleMapper.selectById(id);
|
||||
if (sysRole == null) {
|
||||
log.error("传入 的 id:{}不合法", id);
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
List<PermissionRespNode> permissionRespNodes = permissionService.selectAllByTree(1);
|
||||
LambdaQueryWrapper<SysRolePermission> queryWrapper = Wrappers.<SysRolePermission>lambdaQuery().select(SysRolePermission::getPermissionId).eq(SysRolePermission::getRoleId, sysRole.getId());
|
||||
Set<Object> checkList =
|
||||
new HashSet<>(rolePermissionService.listObjs(queryWrapper));
|
||||
setChecked(permissionRespNodes, checkList);
|
||||
sysRole.setPermissionRespNodes(permissionRespNodes);
|
||||
|
||||
LambdaQueryWrapper<SysRoleDeptEntity> queryWrapperDept = Wrappers.<SysRoleDeptEntity>lambdaQuery().select(SysRoleDeptEntity::getDeptId).eq(SysRoleDeptEntity::getRoleId, sysRole.getId());
|
||||
List<DeptRespNodeVO> deptRespNodes = deptService.deptTreeList(null, true);
|
||||
Set<Object> checkDeptList =
|
||||
new HashSet<>(sysRoleDeptService.listObjs(queryWrapperDept));
|
||||
setCheckedDept(deptRespNodes, checkDeptList);
|
||||
sysRole.setDeptRespNodes(deptRespNodes);
|
||||
return sysRole;
|
||||
}
|
||||
|
||||
private void setCheckedDept(List<DeptRespNodeVO> deptRespNodes, Set<Object> checkDeptList) {
|
||||
for (DeptRespNodeVO node : deptRespNodes) {
|
||||
if (checkDeptList.contains(node.getId())) {
|
||||
node.setChecked(true);
|
||||
}
|
||||
setCheckedDept((List<DeptRespNodeVO>) node.getChildren(), checkDeptList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void setChecked(List<PermissionRespNode> list, Set<Object> checkList) {
|
||||
for (PermissionRespNode node : list) {
|
||||
if (checkList.contains(node.getId())
|
||||
&& ObjectUtil.isEmpty(node.getChildren())) {
|
||||
node.setChecked(true);
|
||||
}
|
||||
setChecked((List<PermissionRespNode>) node.getChildren(), checkList);
|
||||
}
|
||||
}
|
||||
|
||||
@Tran
|
||||
@Override
|
||||
public void deletedRole(String id) {
|
||||
//删除角色
|
||||
sysRoleMapper.deleteById(id);
|
||||
//删除角色权限关联
|
||||
rolePermissionService.remove(Wrappers.<SysRolePermission>lambdaQuery().eq(SysRolePermission::getRoleId, id));
|
||||
//删除角色用户关联
|
||||
userRoleService.remove(Wrappers.<SysUserRole>lambdaQuery().eq(SysUserRole::getRoleId, id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysRole> getRoleInfoByUserId(String userId) {
|
||||
|
||||
List<String> roleIds = userRoleService.getRoleIdsByUserId(userId);
|
||||
if (ObjectUtil.isEmpty(roleIds)) {
|
||||
return null;
|
||||
}
|
||||
return sysRoleMapper.selectBatchIds(roleIds);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.entity.SysContentEntity;
|
||||
import vip.fuck.sm.mapper.SysContentMapper;
|
||||
import vip.fuck.sm.service.SysContentService;
|
||||
import org.noear.solon.annotation.Component;
|
||||
|
||||
/**
|
||||
* 内容 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component(value = "share:sysContentService",typed = true)
|
||||
public class SysContentServiceImpl extends ServiceImpl<SysContentMapper, SysContentEntity> implements SysContentService {
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,53 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.entity.SysDictDetailEntity;
|
||||
import vip.fuck.sm.entity.SysDictEntity;
|
||||
import vip.fuck.sm.mapper.SysDictDetailMapper;
|
||||
import vip.fuck.sm.mapper.SysDictMapper;
|
||||
import vip.fuck.sm.service.SysDictDetailService;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 数据字典 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component(value = "share:sysDictDetailService",typed = true)
|
||||
public class SysDictDetailServiceImpl extends ServiceImpl<SysDictDetailMapper, SysDictDetailEntity> implements SysDictDetailService {
|
||||
@Db
|
||||
private SysDictDetailMapper sysDictDetailMapper;
|
||||
@Db
|
||||
private SysDictMapper sysDictMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public IPage<SysDictDetailEntity> listByPage(Page<SysDictDetailEntity> page, String dictId) {
|
||||
|
||||
SysDictEntity sysDictEntity = sysDictMapper.selectById(dictId);
|
||||
if (sysDictEntity == null) {
|
||||
throw new BusinessException("获取字典数据失败!");
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<SysDictDetailEntity> wrapper = Wrappers.lambdaQuery();
|
||||
wrapper.eq(SysDictDetailEntity::getDictId, dictId);
|
||||
wrapper.orderByAsc(SysDictDetailEntity::getSort);
|
||||
IPage<SysDictDetailEntity> result = sysDictDetailMapper.selectPage(page, wrapper);
|
||||
if (!ObjectUtil.isEmpty(result.getRecords())) {
|
||||
result.getRecords().stream().forEach(entity -> entity.setDictName(sysDictEntity.getName()));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,57 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.entity.SysDictDetailEntity;
|
||||
import vip.fuck.sm.entity.SysDictEntity;
|
||||
import vip.fuck.sm.mapper.SysDictDetailMapper;
|
||||
import vip.fuck.sm.mapper.SysDictMapper;
|
||||
import vip.fuck.sm.service.SysDictService;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonArrayFormatVisitor;
|
||||
import com.fasterxml.jackson.databind.util.JSONPObject;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据字典 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component(value = "share:sysDictService",typed = true)
|
||||
public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDictEntity> implements SysDictService {
|
||||
|
||||
@Db
|
||||
private SysDictDetailMapper sysDictDetailMapper;
|
||||
|
||||
/**
|
||||
* 根据字典类型查询字典数据信息
|
||||
*
|
||||
* @param name 字典名称
|
||||
* @return 参数键值
|
||||
**/
|
||||
public JSONArray getType(String name) {
|
||||
if (ObjectUtil.isEmpty(name)) {
|
||||
return new JSONArray();
|
||||
}
|
||||
//根据名称获取字典
|
||||
SysDictEntity dict = this.getOne(Wrappers.<SysDictEntity>lambdaQuery().eq(SysDictEntity::getName, name));
|
||||
if (dict == null || dict.getId() == null) {
|
||||
return new JSONArray();
|
||||
}
|
||||
//获取明细
|
||||
List<SysDictDetailEntity> list = sysDictDetailMapper.selectList(Wrappers.<SysDictDetailEntity>lambdaQuery().eq(SysDictDetailEntity::getDictId, dict.getId()));
|
||||
return JSONUtil.parseArray(list);
|
||||
}
|
||||
|
||||
}
|
||||
123
src/main/java/vip/fuck/sm/service/impl/SysFilesServiceImpl.java
Normal file
123
src/main/java/vip/fuck/sm/service/impl/SysFilesServiceImpl.java
Normal file
@ -0,0 +1,123 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.utils.DateUtils;
|
||||
import vip.fuck.sm.entity.SysFilesEntity;
|
||||
import vip.fuck.sm.mapper.SysFilesMapper;
|
||||
import vip.fuck.sm.service.SysFilesService;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.core.handle.UploadedFile;
|
||||
import org.smartboot.http.server.HttpRequest;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* 文件上传 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component(value = "share:sysFilesService",typed = true)
|
||||
public class SysFilesServiceImpl extends ServiceImpl<SysFilesMapper, SysFilesEntity> implements SysFilesService {
|
||||
@Inject("${server.contextPath}")
|
||||
private String contextPath;
|
||||
@Inject("${file.path}")
|
||||
private String filePath;
|
||||
|
||||
@Override
|
||||
public String saveFile(UploadedFile file, HttpRequest request) {
|
||||
//存储文件夹
|
||||
String createTime = DateUtils.format(new Date(), DateUtils.DATEPATTERN);
|
||||
String newPath = filePath + File.separator + createTime + File.separator;
|
||||
File uploadDirectory = new File(newPath);
|
||||
if (uploadDirectory.exists()) {
|
||||
if (!uploadDirectory.isDirectory()) {
|
||||
uploadDirectory.delete();
|
||||
}
|
||||
} else {
|
||||
uploadDirectory.mkdir();
|
||||
}
|
||||
try {
|
||||
String fileName = file.getName();
|
||||
//id与filename保持一直,删除文件
|
||||
String fileNameNew = UUID.randomUUID().toString().replace("-", "") + getFileType(fileName);
|
||||
String newFilePathName = newPath + fileNameNew;
|
||||
String url = this.getRootDir(request) + ("/" + contextPath + "/files/" + createTime + "/" + fileNameNew).replaceAll("/+", "/");
|
||||
//创建输出文件对象
|
||||
File outFile = new File(newFilePathName);
|
||||
//拷贝文件到输出文件对象
|
||||
// FileUtils.copyInputStreamToFile(file.getInputStream(), outFile);
|
||||
file.transferTo(outFile);
|
||||
//保存文件记录
|
||||
SysFilesEntity sysFilesEntity = new SysFilesEntity();
|
||||
sysFilesEntity.setFileName(fileName);
|
||||
sysFilesEntity.setFilePath(newFilePathName);
|
||||
sysFilesEntity.setUrl(url);
|
||||
this.save(sysFilesEntity);
|
||||
return url;
|
||||
} catch (Exception e) {
|
||||
throw new BusinessException("上传文件失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeByIdsAndFiles(List<String> ids) {
|
||||
List<SysFilesEntity> list = this.listByIds(ids);
|
||||
list.forEach(entity -> {
|
||||
//如果之前的文件存在,删除
|
||||
File file = new File(entity.getFilePath());
|
||||
if (file.exists()) {
|
||||
file.delete();
|
||||
}
|
||||
});
|
||||
this.removeByIds(ids);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件后缀名
|
||||
*
|
||||
* @param fileName 文件名
|
||||
* @return 后缀名
|
||||
*/
|
||||
private String getFileType(String fileName) {
|
||||
if (fileName != null && fileName.contains(".")) {
|
||||
return fileName.substring(fileName.lastIndexOf("."));
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取跟路径
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
private String getRootDir(HttpRequest request) {
|
||||
// 获取协议 (http 或 https)
|
||||
String scheme = request.getScheme();
|
||||
|
||||
// 获取域名
|
||||
String serverName = ""; // = request.getServerName();
|
||||
|
||||
// 获取端口号
|
||||
int serverPort = request.getLocalAddress().getPort();
|
||||
|
||||
// 构建根路径
|
||||
StringBuilder rootURL = new StringBuilder();
|
||||
rootURL.append(scheme).append("://").append(serverName);
|
||||
|
||||
// 仅当端口不是默认端口时,才包括端口号
|
||||
if ((scheme.equals("http") && serverPort != 80) || (scheme.equals("https") && serverPort != 443)) {
|
||||
rootURL.append(":").append(serverPort);
|
||||
}
|
||||
|
||||
return rootURL.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,64 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import vip.fuck.sm.common.utils.GenUtils;
|
||||
import vip.fuck.sm.entity.SysGenerator;
|
||||
import vip.fuck.sm.mapper.GeneratorMapper;
|
||||
import vip.fuck.sm.service.ISysGeneratorService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Component;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
/**
|
||||
* 代码生成
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class SysGeneratorServiceImpl implements ISysGeneratorService {
|
||||
@Db
|
||||
private GeneratorMapper generatorMapper;
|
||||
|
||||
|
||||
@Override
|
||||
public IPage<SysGenerator> selectAllTables(Page<SysGenerator> page, SysGenerator vo) {
|
||||
return generatorMapper.selectAllTables(page, vo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] generatorCode(String[] tableNames) {
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
ZipOutputStream zip = new ZipOutputStream(outputStream);
|
||||
|
||||
for (String tableName : tableNames) {
|
||||
//查询表信息
|
||||
Map<String, String> table = queryTable(tableName);
|
||||
//查询列信息
|
||||
List<Map<String, String>> columns = queryColumns(tableName);
|
||||
//生成代码
|
||||
GenUtils.generatorCode(table, columns, zip);
|
||||
}
|
||||
IOUtils.closeQuietly(zip);
|
||||
return outputStream.toByteArray();
|
||||
}
|
||||
|
||||
public Map<String, String> queryTable(String tableName) {
|
||||
return generatorMapper.queryTable(tableName);
|
||||
}
|
||||
|
||||
public List<Map<String, String>> queryColumns(String tableName) {
|
||||
return generatorMapper.queryColumns(tableName);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.entity.SysRoleDeptEntity;
|
||||
import vip.fuck.sm.mapper.SysRoleDeptMapper;
|
||||
import vip.fuck.sm.service.SysRoleDeptService;
|
||||
import org.noear.solon.annotation.Component;
|
||||
|
||||
|
||||
@Component(value = "share:sysRoleDeptService",typed = true)
|
||||
public class SysRoleDeptServiceImpl extends ServiceImpl<SysRoleDeptMapper, SysRoleDeptEntity> implements SysRoleDeptService {
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.entity.SysUserRole;
|
||||
import vip.fuck.sm.mapper.SysUserRoleMapper;
|
||||
import vip.fuck.sm.service.UserRoleService;
|
||||
import vip.fuck.sm.vo.req.UserRoleOperationReqVO;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.data.annotation.Tran;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户角色 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
public class UserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements UserRoleService {
|
||||
@Db
|
||||
private SysUserRoleMapper sysUserRoleMapper;
|
||||
|
||||
@Override
|
||||
public List getRoleIdsByUserId(String userId) {
|
||||
LambdaQueryWrapper<SysUserRole> queryWrapper = Wrappers.<SysUserRole>lambdaQuery().select(SysUserRole::getRoleId).eq(SysUserRole::getUserId, userId);
|
||||
return sysUserRoleMapper.selectObjs(queryWrapper);
|
||||
}
|
||||
|
||||
@Tran
|
||||
@Override
|
||||
public void addUserRoleInfo(UserRoleOperationReqVO vo) {
|
||||
if (CollectionUtils.isEmpty(vo.getRoleIds())) {
|
||||
return;
|
||||
}
|
||||
List<SysUserRole> list = new ArrayList<>();
|
||||
for (String roleId : vo.getRoleIds()) {
|
||||
SysUserRole sysUserRole = new SysUserRole();
|
||||
sysUserRole.setUserId(vo.getUserId());
|
||||
sysUserRole.setRoleId(roleId);
|
||||
list.add(sysUserRole);
|
||||
}
|
||||
sysUserRoleMapper.delete(Wrappers.<SysUserRole>lambdaQuery().eq(SysUserRole::getUserId, vo.getUserId()));
|
||||
//批量插入
|
||||
this.saveBatch(list);
|
||||
}
|
||||
}
|
||||
237
src/main/java/vip/fuck/sm/service/impl/UserServiceImpl.java
Normal file
237
src/main/java/vip/fuck/sm/service/impl/UserServiceImpl.java
Normal file
@ -0,0 +1,237 @@
|
||||
package vip.fuck.sm.service.impl;
|
||||
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import vip.fuck.sm.common.exception.BusinessException;
|
||||
import vip.fuck.sm.common.exception.code.BaseResponseCode;
|
||||
import vip.fuck.sm.common.utils.PasswordUtils;
|
||||
import vip.fuck.sm.entity.SysDept;
|
||||
import vip.fuck.sm.entity.SysRole;
|
||||
import vip.fuck.sm.entity.SysUser;
|
||||
import vip.fuck.sm.mapper.SysDeptMapper;
|
||||
import vip.fuck.sm.mapper.SysUserMapper;
|
||||
import vip.fuck.sm.service.PermissionService;
|
||||
import vip.fuck.sm.service.RoleService;
|
||||
import vip.fuck.sm.service.UserRoleService;
|
||||
import vip.fuck.sm.service.UserService;
|
||||
import vip.fuck.sm.vo.req.UserRoleOperationReqVO;
|
||||
import vip.fuck.sm.vo.resp.LoginRespVO;
|
||||
import vip.fuck.sm.vo.resp.UserOwnRoleRespVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.ibatis.solon.annotation.Db;
|
||||
import org.noear.solon.annotation.Inject;
|
||||
import org.noear.solon.annotation.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户 服务类
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements UserService {
|
||||
|
||||
@Db
|
||||
private SysUserMapper sysUserMapper;
|
||||
@Inject
|
||||
private RoleService roleService;
|
||||
@Inject
|
||||
private PermissionService permissionService;
|
||||
@Inject
|
||||
private UserRoleService userRoleService;
|
||||
@Db
|
||||
private SysDeptMapper sysDeptMapper;
|
||||
|
||||
@Inject("${solon.env}")
|
||||
private String env;
|
||||
|
||||
@Override
|
||||
public void register(SysUser sysUser) {
|
||||
SysUser sysUserOne = sysUserMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, sysUser.getUsername()));
|
||||
if (sysUserOne != null) {
|
||||
throw new BusinessException("用户名已存在!");
|
||||
}
|
||||
sysUser.setSalt(PasswordUtils.getSalt());
|
||||
String encode = PasswordUtils.encode(sysUser.getPassword(), sysUser.getSalt());
|
||||
sysUser.setPassword(encode);
|
||||
sysUserMapper.insert(sysUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginRespVO login(SysUser vo) {
|
||||
SysUser sysUser = sysUserMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, vo.getUsername()));
|
||||
if (null == sysUser) {
|
||||
throw new BusinessException(BaseResponseCode.NOT_ACCOUNT);
|
||||
}
|
||||
if (sysUser.getStatus() == 2) {
|
||||
throw new BusinessException(BaseResponseCode.USER_LOCK);
|
||||
}
|
||||
if (!PasswordUtils.matches(sysUser.getSalt(), vo.getPassword(), sysUser.getPassword())) {
|
||||
throw new BusinessException(BaseResponseCode.PASSWORD_ERROR);
|
||||
}
|
||||
LoginRespVO respVO = new LoginRespVO();
|
||||
BeanUtil.copyProperties(sysUser, respVO);
|
||||
|
||||
if (StringUtils.isNotBlank(sysUser.getDeptId())) {
|
||||
SysDept sysDept = sysDeptMapper.selectById(sysUser.getDeptId());
|
||||
if (sysDept != null) {
|
||||
sysUser.setDeptNo(sysDept.getDeptNo());
|
||||
}
|
||||
}
|
||||
//saToken
|
||||
StpUtil.login(sysUser.getId());
|
||||
|
||||
return respVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUserInfo(SysUser vo) {
|
||||
|
||||
|
||||
SysUser sysUser = sysUserMapper.selectById(vo.getId());
|
||||
if (null == sysUser) {
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
|
||||
//如果用户名变更
|
||||
if (!sysUser.getUsername().equals(vo.getUsername())) {
|
||||
SysUser sysUserOne = sysUserMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, vo.getUsername()));
|
||||
if (sysUserOne != null) {
|
||||
throw new BusinessException("用户名已存在!");
|
||||
}
|
||||
}
|
||||
|
||||
//如果用户名、密码、状态 变更,删除redis中用户绑定的角色跟权限
|
||||
if (!sysUser.getUsername().equals(vo.getUsername())
|
||||
|| (!StringUtils.isEmpty(vo.getPassword())
|
||||
&& !sysUser.getPassword().equals(PasswordUtils.encode(vo.getPassword(), sysUser.getSalt())))
|
||||
|| !sysUser.getStatus().equals(vo.getStatus())) {
|
||||
}
|
||||
|
||||
if (!StringUtils.isEmpty(vo.getPassword())) {
|
||||
String newPassword = PasswordUtils.encode(vo.getPassword(), sysUser.getSalt());
|
||||
vo.setPassword(newPassword);
|
||||
} else {
|
||||
vo.setPassword(null);
|
||||
}
|
||||
sysUserMapper.updateById(vo);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUserInfoMy(SysUser vo) {
|
||||
SysUser user = sysUserMapper.selectById(StpUtil.getLoginIdAsString());
|
||||
if (null == user) {
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
if (!StringUtils.isEmpty(vo.getPassword())) {
|
||||
String newPassword = PasswordUtils.encode(vo.getPassword(), user.getSalt());
|
||||
vo.setPassword(newPassword);
|
||||
} else {
|
||||
vo.setPassword(null);
|
||||
}
|
||||
vo.setUpdateId(StpUtil.getLoginIdAsString());
|
||||
sysUserMapper.updateById(vo);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<SysUser> pageInfo(SysUser vo) {
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = Wrappers.lambdaQuery();
|
||||
if (!StringUtils.isEmpty(vo.getUsername())) {
|
||||
queryWrapper.like(SysUser::getUsername, vo.getUsername());
|
||||
}
|
||||
if (!StringUtils.isEmpty(vo.getStartTime())) {
|
||||
queryWrapper.gt(SysUser::getCreateTime, vo.getStartTime());
|
||||
}
|
||||
if (!StringUtils.isEmpty(vo.getEndTime())) {
|
||||
queryWrapper.lt(SysUser::getCreateTime, vo.getEndTime());
|
||||
}
|
||||
if (!StringUtils.isEmpty(vo.getNickName())) {
|
||||
queryWrapper.like(SysUser::getNickName, vo.getNickName());
|
||||
}
|
||||
if (null != vo.getStatus()) {
|
||||
queryWrapper.eq(SysUser::getStatus, vo.getStatus());
|
||||
}
|
||||
if (!StringUtils.isEmpty(vo.getDeptNo())) {
|
||||
LambdaQueryWrapper<SysDept> queryWrapperDept = Wrappers.lambdaQuery();
|
||||
queryWrapperDept.select(SysDept::getId).like(SysDept::getRelationCode, vo.getDeptNo());
|
||||
List<Object> list = sysDeptMapper.selectObjs(queryWrapperDept);
|
||||
queryWrapper.in(SysUser::getDeptId, list);
|
||||
}
|
||||
queryWrapper.orderByDesc(SysUser::getCreateTime);
|
||||
IPage<SysUser> iPage = sysUserMapper.selectPage(vo.getQueryPage(), queryWrapper);
|
||||
if (!CollectionUtils.isEmpty(iPage.getRecords())) {
|
||||
for (SysUser sysUser : iPage.getRecords()) {
|
||||
SysDept sysDept = sysDeptMapper.selectById(sysUser.getDeptId());
|
||||
if (sysDept != null) {
|
||||
sysUser.setDeptName(sysDept.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
return iPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addUser(SysUser vo) {
|
||||
|
||||
SysUser sysUserOne = sysUserMapper.selectOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, vo.getUsername()));
|
||||
if (sysUserOne != null) {
|
||||
throw new BusinessException("用户已存在,请勿重复添加!");
|
||||
}
|
||||
vo.setSalt(PasswordUtils.getSalt());
|
||||
String encode = PasswordUtils.encode(vo.getPassword(), vo.getSalt());
|
||||
vo.setPassword(encode);
|
||||
vo.setStatus(1);
|
||||
vo.setCreateWhere(1);
|
||||
sysUserMapper.insert(vo);
|
||||
if (!CollectionUtils.isEmpty(vo.getRoleIds())) {
|
||||
UserRoleOperationReqVO reqVO = new UserRoleOperationReqVO();
|
||||
reqVO.setUserId(vo.getId());
|
||||
reqVO.setRoleIds(vo.getRoleIds());
|
||||
userRoleService.addUserRoleInfo(reqVO);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePwd(SysUser vo) {
|
||||
|
||||
SysUser sysUser = sysUserMapper.selectById(vo.getId());
|
||||
if (sysUser == null) {
|
||||
throw new BusinessException(BaseResponseCode.DATA_ERROR);
|
||||
}
|
||||
if ("test".equals(env) && "guest".equals(sysUser.getUsername())) {
|
||||
throw new BusinessException("演示环境禁止修改演示账号密码");
|
||||
}
|
||||
|
||||
if (!PasswordUtils.matches(sysUser.getSalt(), vo.getOldPwd(), sysUser.getPassword())) {
|
||||
throw new BusinessException(BaseResponseCode.OLD_PASSWORD_ERROR);
|
||||
}
|
||||
if (sysUser.getPassword().equals(PasswordUtils.encode(vo.getNewPwd(), sysUser.getSalt()))) {
|
||||
throw new BusinessException("新密码不能与旧密码相同");
|
||||
}
|
||||
sysUser.setPassword(PasswordUtils.encode(vo.getNewPwd(), sysUser.getSalt()));
|
||||
sysUserMapper.updateById(sysUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserOwnRoleRespVO getUserOwnRole(String userId) {
|
||||
List<String> roleIdsByUserId = userRoleService.getRoleIdsByUserId(userId);
|
||||
List<SysRole> list = roleService.list();
|
||||
UserOwnRoleRespVO vo = new UserOwnRoleRespVO();
|
||||
vo.setAllRole(list);
|
||||
vo.setOwnRoles(roleIdsByUserId);
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
package vip.fuck.sm.vo.req;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.noear.solon.validation.annotation.NotBlank;
|
||||
import org.noear.solon.validation.annotation.NotEmpty;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* RolePermissionOperationReqVO
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
public class RolePermissionOperationReqVO {
|
||||
@ApiModelProperty(value = "角色id")
|
||||
@NotBlank(message = "角色id不能为空")
|
||||
private String roleId;
|
||||
@ApiModelProperty(value = "菜单权限集合")
|
||||
@NotEmpty(message = "菜单权限集合不能为空")
|
||||
private List<String> permissionIds;
|
||||
}
|
||||
25
src/main/java/vip/fuck/sm/vo/req/UserRoleOperationReqVO.java
Normal file
25
src/main/java/vip/fuck/sm/vo/req/UserRoleOperationReqVO.java
Normal file
@ -0,0 +1,25 @@
|
||||
package vip.fuck.sm.vo.req;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.noear.solon.validation.annotation.NotBlank;
|
||||
import org.noear.solon.validation.annotation.NotEmpty;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* UserRoleOperationReqVO
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
public class UserRoleOperationReqVO {
|
||||
@ApiModelProperty(value = "用户id")
|
||||
@NotBlank(message = "用户id不能为空")
|
||||
private String userId;
|
||||
@ApiModelProperty(value = "角色id集合")
|
||||
@NotEmpty(message = "角色id集合不能为空")
|
||||
private List<String> roleIds;
|
||||
}
|
||||
53
src/main/java/vip/fuck/sm/vo/resp/DeptRespNodeVO.java
Normal file
53
src/main/java/vip/fuck/sm/vo/resp/DeptRespNodeVO.java
Normal file
@ -0,0 +1,53 @@
|
||||
package vip.fuck.sm.vo.resp;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* DeptRespNodeVO
|
||||
*
|
||||
* @author xian.zi.ming@qq.com fuck.vip
|
||||
* @version V1.0
|
||||
* @date 2020年3月18日
|
||||
*/
|
||||
@Data
|
||||
public class DeptRespNodeVO {
|
||||
@ApiModelProperty(value = "组织id")
|
||||
private String id;
|
||||
|
||||
@ApiModelProperty(value = "组织编码")
|
||||
private String deptNo;
|
||||
|
||||
@ApiModelProperty(value = "组织名称")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "组织名称")
|
||||
private String label;
|
||||
|
||||
@ApiModelProperty(value = "组织父级id")
|
||||
private String pid;
|
||||
|
||||
@ApiModelProperty(value = "组织状态")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty(value = "组织关系id")
|
||||
private String relationCode;
|
||||
|
||||
@ApiModelProperty(value = "是否展开 默认不展开(false)")
|
||||
private boolean spread = true;
|
||||
|
||||
@ApiModelProperty(value = "是否选中")
|
||||
private boolean checked = false;
|
||||
|
||||
private boolean disabled = false;
|
||||
|
||||
@ApiModelProperty(value = "子集")
|
||||
private List<?> children;
|
||||
|
||||
public String getLabel() {
|
||||
return title;
|
||||
}
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user