提交 75006bbe authored 作者: 许志图's avatar 许志图

Initial commit

上级
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
/build/
-- ----------------------------
-- Table structure for `美食表`
-- ----------------------------
DROP TABLE IF EXISTS `t_food`;
CREATE TABLE `t_food`
(
`food_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '食品ID',
`food_name` varchar(32) NOT NULL COMMENT '食品名称',
`favorite` int(11) DEFAULT NULL COMMENT '喜欢',
`sort` int(11) DEFAULT '1' COMMENT '排序值',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记(0--正常 1--删除)',
PRIMARY KEY (`food_id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
ROW_FORMAT = DYNAMIC COMMENT ='美食表';
/*
Navicat Premium Data Transfer
Source Server : 本地
Source Server Type : MySQL
Source Server Version : 50725
Source Host : localhost:3306
Source Schema : travel
Target Server Type : MySQL
Target Server Version : 50725
File Encoding : 65001
Date: 27/02/2019 10:34:31
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
`dept_id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL COMMENT '部门名称',
`sort` int(11) DEFAULT NULL COMMENT '排序',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`del_flag` char(1) DEFAULT '0' COMMENT '是否删除 -1:已删除 0:正常',
`parent_id` int(11) DEFAULT NULL,
`tenant_id` int(11) DEFAULT NULL,
PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='部门管理';
-- ----------------------------
-- Records of sys_dept
-- ----------------------------
BEGIN;
INSERT INTO `sys_dept` VALUES (16, '品象软件', NULL, '2019-02-25 07:40:58', NULL, '0', 0, NULL);
INSERT INTO `sys_dept` VALUES (17, '技术部', NULL, '2019-02-25 07:41:56', '2019-02-25 16:43:29', '0', 16, NULL);
INSERT INTO `sys_dept` VALUES (18, 'JAVA团队', NULL, '2019-02-25 08:05:37', '2019-02-25 16:43:39', '0', 17, NULL);
INSERT INTO `sys_dept` VALUES (19, '大数据', NULL, '2019-02-25 08:40:52', '2019-02-25 16:41:11', '0', 17, NULL);
INSERT INTO `sys_dept` VALUES (20, 'VUE团队', NULL, '2019-02-25 08:44:05', NULL, '0', 17, NULL);
COMMIT;
-- ----------------------------
-- Table structure for sys_dept_relation
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept_relation`;
CREATE TABLE `sys_dept_relation` (
`ancestor` int(11) NOT NULL COMMENT '祖先节点',
`descendant` int(11) NOT NULL COMMENT '后代节点',
PRIMARY KEY (`ancestor`,`descendant`) USING BTREE,
KEY `idx1` (`ancestor`) USING BTREE,
KEY `idx2` (`descendant`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC COMMENT='部门关系表';
-- ----------------------------
-- Records of sys_dept_relation
-- ----------------------------
BEGIN;
INSERT INTO `sys_dept_relation` VALUES (16, 16);
INSERT INTO `sys_dept_relation` VALUES (16, 17);
INSERT INTO `sys_dept_relation` VALUES (16, 18);
INSERT INTO `sys_dept_relation` VALUES (16, 19);
INSERT INTO `sys_dept_relation` VALUES (16, 20);
INSERT INTO `sys_dept_relation` VALUES (17, 17);
INSERT INTO `sys_dept_relation` VALUES (17, 18);
INSERT INTO `sys_dept_relation` VALUES (17, 19);
INSERT INTO `sys_dept_relation` VALUES (17, 20);
INSERT INTO `sys_dept_relation` VALUES (18, 18);
INSERT INTO `sys_dept_relation` VALUES (19, 19);
INSERT INTO `sys_dept_relation` VALUES (20, 20);
COMMIT;
-- ----------------------------
-- Table structure for sys_dict
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict` (
`id` int(64) NOT NULL AUTO_INCREMENT COMMENT '编号',
`value` varchar(100) NOT NULL COMMENT '数据值',
`label` varchar(100) NOT NULL COMMENT '标签名',
`type` varchar(100) NOT NULL COMMENT '类型',
`description` varchar(100) NOT NULL COMMENT '描述',
`sort` int(10) NOT NULL COMMENT '排序(升序)',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remarks` varchar(255) DEFAULT NULL COMMENT '备注信息',
`del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标记',
`tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '所属租户',
PRIMARY KEY (`id`) USING BTREE,
KEY `sys_dict_value` (`value`) USING BTREE,
KEY `sys_dict_label` (`label`) USING BTREE,
KEY `sys_dict_del_flag` (`del_flag`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='字典表';
-- ----------------------------
-- Records of sys_dict
-- ----------------------------
BEGIN;
INSERT INTO `sys_dict` VALUES (1, '9', '异常', 'log_type', '日志异常', 1, '2018-07-09 06:16:14', '2018-11-24 07:25:11', '日志异常', '0', 1);
INSERT INTO `sys_dict` VALUES (5, '0', '正常', 'log_type', '日志类型', 0, '2018-09-30 02:33:53', '2019-02-25 15:37:48', '日志正常', '0', 1);
INSERT INTO `sys_dict` VALUES (6, '0', '未提交', 'leave_status', '请假状态', 0, '2018-09-30 02:34:45', '2018-11-24 07:25:23', '请假状态', '0', 1);
INSERT INTO `sys_dict` VALUES (7, '1', '审批中', 'leave_status', '请假状态', 1, '2018-09-30 02:35:16', '2018-11-24 07:25:25', '请假状态', '0', 1);
INSERT INTO `sys_dict` VALUES (8, '2', '完成', 'leave_status', '请假状态', 2, '2018-09-30 02:35:58', '2018-11-24 07:25:28', '请假状态', '0', 1);
INSERT INTO `sys_dict` VALUES (9, '9', '驳回', 'leave_status', '请假状态', 9, '2018-09-30 02:36:31', '2018-11-24 07:25:31', '请假状态', '0', 1);
COMMIT;
-- ----------------------------
-- Table structure for sys_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_log`;
CREATE TABLE `sys_log` (
`id` bigint(64) NOT NULL AUTO_INCREMENT COMMENT '编号',
`type` char(1) DEFAULT '1' COMMENT '日志类型',
`title` varchar(255) DEFAULT '' COMMENT '日志标题',
`service_id` varchar(32) DEFAULT NULL COMMENT '服务ID',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remote_addr` varchar(255) DEFAULT NULL COMMENT '操作IP地址',
`user_agent` varchar(1000) DEFAULT NULL COMMENT '用户代理',
`request_uri` varchar(255) DEFAULT NULL COMMENT '请求URI',
`method` varchar(10) DEFAULT NULL COMMENT '操作方式',
`params` text COMMENT '操作提交的数据',
`time` mediumtext COMMENT '执行时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标记',
`exception` text COMMENT '异常信息',
`tenant_id` int(11) DEFAULT '0' COMMENT '所属租户',
PRIMARY KEY (`id`) USING BTREE,
KEY `sys_log_create_by` (`create_by`) USING BTREE,
KEY `sys_log_request_uri` (`request_uri`) USING BTREE,
KEY `sys_log_type` (`type`) USING BTREE,
KEY `sys_log_create_date` (`create_time`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='日志表';
-- ----------------------------
-- Records of sys_log
-- ----------------------------
BEGIN;
INSERT INTO `sys_log` VALUES (51, '0', '添加角色', 'test', 'admin', '2019-01-24 20:56:43', NULL, '0:0:0:0:0:0:0:1', 'PostmanRuntime/7.6.0', '/role', 'POST', 'Authorization=%5B%5D', '65', '0', NULL, 1);
INSERT INTO `sys_log` VALUES (52, '0', '更新用户信息', 'pig', 'admin', '2019-02-20 05:28:01', NULL, '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36', '/user', 'PUT', '', '55', '0', NULL, 1);
COMMIT;
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`menu_id` int(11) NOT NULL COMMENT '菜单ID',
`name` varchar(32) NOT NULL COMMENT '菜单名称',
`permission` varchar(32) DEFAULT NULL COMMENT '菜单权限标识',
`path` varchar(128) DEFAULT NULL COMMENT '前端URL',
`parent_id` int(11) DEFAULT NULL COMMENT '父菜单ID',
`icon` varchar(32) DEFAULT NULL COMMENT '图标',
`component` varchar(64) DEFAULT NULL COMMENT 'VUE页面',
`sort` int(11) DEFAULT '1' COMMENT '排序值',
`keep_alive` char(1) DEFAULT '0' COMMENT '0-开启,1- 关闭',
`type` char(1) DEFAULT NULL COMMENT '菜单类型 (0菜单 1按钮)',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` char(1) DEFAULT '0' COMMENT '逻辑删除标记(0--正常 1--删除)',
PRIMARY KEY (`menu_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='菜单权限表';
-- ----------------------------
-- Records of sys_menu
-- ----------------------------
BEGIN;
INSERT INTO `sys_menu` VALUES (1000, '权限管理', NULL, '/upms', -1, 'icon-quanxianguanli', 'Layout', 0, '0', '0', '2018-09-28 08:29:53', '2018-09-28 08:53:01', '0');
INSERT INTO `sys_menu` VALUES (1100, '用户管理', NULL, 'user', 1000, 'icon-yonghuguanli', 'views/admin/user/index', 1, '0', '0', '2017-11-02 22:24:37', '2018-09-28 09:00:41', '0');
INSERT INTO `sys_menu` VALUES (1101, '用户新增', 'sys_user_add', NULL, 1100, NULL, NULL, NULL, '0', '1', '2017-11-08 09:52:09', '2018-09-28 09:06:34', '0');
INSERT INTO `sys_menu` VALUES (1102, '用户修改', 'sys_user_edit', NULL, 1100, NULL, NULL, NULL, '0', '1', '2017-11-08 09:52:48', '2018-09-28 09:06:37', '0');
INSERT INTO `sys_menu` VALUES (1103, '用户删除', 'sys_user_del', NULL, 1100, NULL, NULL, NULL, '0', '1', '2017-11-08 09:54:01', '2018-09-28 09:06:42', '0');
INSERT INTO `sys_menu` VALUES (1200, '菜单管理', NULL, 'menu', 1000, 'icon-caidanguanli', 'views/admin/menu/index', 2, '0', '0', '2017-11-08 09:57:27', '2018-09-28 09:00:45', '0');
INSERT INTO `sys_menu` VALUES (1201, '菜单新增', 'sys_menu_add', NULL, 1200, NULL, NULL, NULL, '0', '1', '2017-11-08 10:15:53', '2018-09-28 09:07:16', '0');
INSERT INTO `sys_menu` VALUES (1202, '菜单修改', 'sys_menu_edit', NULL, 1200, NULL, NULL, NULL, '0', '1', '2017-11-08 10:16:23', '2018-09-28 09:07:18', '0');
INSERT INTO `sys_menu` VALUES (1203, '菜单删除', 'sys_menu_del', NULL, 1200, NULL, NULL, NULL, '0', '1', '2017-11-08 10:16:43', '2018-09-28 09:07:22', '0');
INSERT INTO `sys_menu` VALUES (1300, '角色管理', NULL, 'role', 1000, 'icon-jiaoseguanli', 'views/admin/role/index', 3, '0', '0', '2017-11-08 10:13:37', '2018-09-28 09:00:48', '0');
INSERT INTO `sys_menu` VALUES (1301, '角色新增', 'sys_role_add', NULL, 1300, NULL, NULL, NULL, '0', '1', '2017-11-08 10:14:18', '2018-09-28 09:07:46', '0');
INSERT INTO `sys_menu` VALUES (1302, '角色修改', 'sys_role_edit', NULL, 1300, NULL, NULL, NULL, '0', '1', '2017-11-08 10:14:41', '2018-09-28 09:07:49', '0');
INSERT INTO `sys_menu` VALUES (1303, '角色删除', 'sys_role_del', NULL, 1300, NULL, NULL, NULL, '0', '1', '2017-11-08 10:14:59', '2018-09-28 09:07:53', '0');
INSERT INTO `sys_menu` VALUES (1304, '分配权限', 'sys_role_perm', NULL, 1300, NULL, NULL, NULL, '0', '1', '2018-04-20 07:22:55', '2018-09-28 09:13:23', '0');
INSERT INTO `sys_menu` VALUES (1400, '部门管理', NULL, 'dept', 1000, 'icon-web-icon-', 'views/admin/dept/index', 4, '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:12', '0');
INSERT INTO `sys_menu` VALUES (1401, '部门新增', 'sys_dept_add', NULL, 1400, NULL, NULL, NULL, '0', '1', '2018-01-20 14:56:16', '2018-09-28 09:08:13', '0');
INSERT INTO `sys_menu` VALUES (1402, '部门修改', 'sys_dept_edit', NULL, 1400, NULL, NULL, NULL, '0', '1', '2018-01-20 14:56:59', '2018-09-28 09:08:16', '0');
INSERT INTO `sys_menu` VALUES (1403, '部门删除', 'sys_dept_del', NULL, 1400, NULL, NULL, NULL, '0', '1', '2018-01-20 14:57:28', '2018-09-28 09:08:18', '0');
INSERT INTO `sys_menu` VALUES (2000, '系统管理', NULL, '/admin', -1, 'icon-xitongguanli', 'Layout', 1, '0', '0', '2017-11-07 20:56:00', '2018-09-28 08:53:18', '0');
INSERT INTO `sys_menu` VALUES (2100, '日志管理', NULL, 'log', 2000, 'icon-rizhiguanli', 'views/admin/log/index', 5, '0', '0', '2017-11-20 14:06:22', '2018-09-28 09:01:52', '0');
INSERT INTO `sys_menu` VALUES (2101, '日志删除', 'sys_log_del', NULL, 2100, NULL, NULL, NULL, '0', '1', '2017-11-20 20:37:37', '2018-09-28 09:08:44', '0');
INSERT INTO `sys_menu` VALUES (2200, '字典管理', NULL, 'dict', 2000, 'icon-navicon-zdgl', 'views/admin/dict/index', 6, '0', '0', '2017-11-29 11:30:52', '2018-09-28 09:01:47', '0');
INSERT INTO `sys_menu` VALUES (2201, '字典删除', 'sys_dict_del', NULL, 2200, NULL, NULL, NULL, '0', '1', '2017-11-29 11:30:11', '2018-09-28 09:09:10', '0');
INSERT INTO `sys_menu` VALUES (2202, '字典新增', 'sys_dict_add', NULL, 2200, NULL, NULL, NULL, '0', '1', '2018-05-11 22:34:55', '2018-09-28 09:09:12', '0');
INSERT INTO `sys_menu` VALUES (2203, '字典修改', 'sys_dict_edit', NULL, 2200, NULL, NULL, NULL, '0', '1', '2018-05-11 22:36:03', '2018-09-28 09:09:16', '0');
INSERT INTO `sys_menu` VALUES (2300, '代码生成', '', 'gen', 2000, 'icon-weibiaoti46', 'views/gen/index', 8, '0', '0', '2018-01-20 13:17:19', '2018-11-24 05:21:01', '0');
INSERT INTO `sys_menu` VALUES (2400, '终端管理', '', 'client', 2000, 'icon-shouji', 'views/admin/client/index', 9, '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:43', '0');
INSERT INTO `sys_menu` VALUES (2401, '客户端新增', 'sys_client_add', NULL, 2400, '1', NULL, NULL, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:10:25', '0');
INSERT INTO `sys_menu` VALUES (2402, '客户端修改', 'sys_client_edit', NULL, 2400, NULL, NULL, NULL, '0', '1', '2018-05-15 21:37:06', '2018-09-28 09:10:27', '0');
INSERT INTO `sys_menu` VALUES (2403, '客户端删除', 'sys_client_del', NULL, 2400, NULL, NULL, NULL, '0', '1', '2018-05-15 21:39:16', '2018-09-28 09:10:30', '0');
INSERT INTO `sys_menu` VALUES (2500, '密钥管理', '', 'social', 2000, 'icon-miyue', 'views/admin/social/index', 10, '0', '0', '2018-01-20 13:17:19', '2018-09-28 09:01:41', '0');
INSERT INTO `sys_menu` VALUES (2501, '密钥新增', 'generator_syssocialdetails_add', NULL, 2500, '1', NULL, 0, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:02', '0');
INSERT INTO `sys_menu` VALUES (2502, '密钥修改', 'generator_syssocialdetails_edit', NULL, 2500, '1', NULL, 1, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:04', '0');
INSERT INTO `sys_menu` VALUES (2503, '密钥删除', 'generator_syssocialdetails_del', NULL, 2500, '1', NULL, 2, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:11:06', '0');
INSERT INTO `sys_menu` VALUES (2600, '令牌管理', NULL, 'token', 2000, 'icon-denglvlingpai', 'views/admin/token/index', 11, '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0');
INSERT INTO `sys_menu` VALUES (2601, '令牌删除', 'sys_token_del', NULL, 2600, NULL, NULL, 1, '0', '1', '2018-09-04 05:59:50', '2018-09-28 09:11:24', '0');
INSERT INTO `sys_menu` VALUES (2700, '动态路由', NULL, 'route', 2000, 'icon-luyou', 'views/admin/route/index', 12, '0', '0', '2018-09-04 05:58:41', '2018-09-28 09:01:38', '0');
INSERT INTO `sys_menu` VALUES (3000, '系统监控', NULL, '/daemon', -1, 'icon-msnui-supervise', 'Layout', 2, '0', '0', '2018-07-27 01:13:21', '2018-09-28 08:53:24', '0');
INSERT INTO `sys_menu` VALUES (3100, '服务监控', NULL, 'http://127.0.0.1:5001', 3000, 'icon-server', NULL, 0, '0', '0', '2018-06-26 10:50:32', '2018-12-11 17:17:07', '0');
INSERT INTO `sys_menu` VALUES (3200, '接口文档', NULL, 'http://127.0.0.1:9999/swagger-ui.html', 3000, 'icon-wendang', NULL, 1, '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:05:16', '0');
INSERT INTO `sys_menu` VALUES (3300, '事务监控', NULL, 'tx', 3000, 'icon-gtsquanjushiwufuwuGTS', 'views/tx/index', 5, '0', '0', '2018-08-19 11:02:39', '2018-11-23 14:25:08', '0');
INSERT INTO `sys_menu` VALUES (3400, '在线事务', NULL, 'model', 3000, 'icon-online', 'views/tx/model', 6, '0', '0', '2018-08-19 11:32:04', '2018-11-23 14:25:14', '0');
INSERT INTO `sys_menu` VALUES (3500, '任务监控', NULL, 'http://139.224.200.249:8899', 3000, 'icon-msnui-supervise', NULL, 7, '0', '0', '2018-06-26 10:50:32', '2018-09-28 09:03:33', '0');
INSERT INTO `sys_menu` VALUES (3600, '任务轨迹', '', 'status-trace-log', 3000, 'icon-guiji', 'views/daemon/status-trace-log/index', 8, '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0');
INSERT INTO `sys_menu` VALUES (3601, '删除任务轨迹', 'daemon_status_trace_log_del', NULL, 3600, '1', NULL, 2, '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:37:31', '0');
INSERT INTO `sys_menu` VALUES (3700, '调用拓扑', NULL, 'http://139.224.200.249:8081', 3000, 'icon-line', NULL, 10, '0', '0', '2018-01-25 11:08:52', '2018-09-28 09:04:29', '0');
INSERT INTO `sys_menu` VALUES (3800, '缓存状态', NULL, 'http://139.224.200.249:8585', 3000, 'icon-qingchuhuancun', NULL, 12, '0', '0', '2018-01-23 10:56:11', '2018-09-28 09:13:56', '0');
INSERT INTO `sys_menu` VALUES (3900, '任务日志', '', 'execution-log', 3000, 'icon-guiji', 'views/daemon/execution-log/index', 8, '0', '0', '2018-01-20 13:17:19', '2018-11-24 06:34:52', '0');
INSERT INTO `sys_menu` VALUES (3901, '删除日志', 'daemon_execution_log_del', NULL, 3900, '1', NULL, 2, '0', '1', '2018-05-15 21:35:18', '2018-11-24 06:39:03', '0');
INSERT INTO `sys_menu` VALUES (4000, '协同管理', NULL, '/activti', -1, 'icon-kuaisugongzuoliu_o', 'Layout', 3, '0', '0', '2018-09-26 01:38:13', '2018-09-28 08:58:24', '0');
INSERT INTO `sys_menu` VALUES (4100, '模型管理', NULL, 'activiti', 4000, 'icon-weibiaoti13', 'views/activiti/index', 1, '0', '0', '2018-09-26 01:39:07', '2018-12-09 16:35:16', '0');
INSERT INTO `sys_menu` VALUES (4101, '模型管理', 'act_model_manage', NULL, 4100, '1', NULL, 0, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0');
INSERT INTO `sys_menu` VALUES (4200, '流程管理', NULL, 'process', 4000, 'icon-liucheng', 'views/activiti/process', 2, '0', '0', '2018-09-26 06:41:05', '2018-11-23 14:25:33', '0');
INSERT INTO `sys_menu` VALUES (4201, '流程管理', 'act_process_manage', NULL, 4200, '1', NULL, 0, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0');
INSERT INTO `sys_menu` VALUES (4300, '请假管理', '', 'leavebill', 4000, 'icon-qingjia', 'views/activiti/leave', 3, '0', '0', '2018-01-20 13:17:19', '2018-12-09 16:35:20', '0');
INSERT INTO `sys_menu` VALUES (4301, '请假新增', 'act_leavebill_add', NULL, 4300, '1', NULL, 0, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0');
INSERT INTO `sys_menu` VALUES (4302, '请假修改', 'act_leavebill_edit', NULL, 4300, '1', NULL, 1, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:09', '0');
INSERT INTO `sys_menu` VALUES (4303, '请假删除', 'act_leavebill_del', NULL, 4300, '1', NULL, 2, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:14', '0');
INSERT INTO `sys_menu` VALUES (4400, '待办任务', NULL, 'task', 4000, 'icon-renwu', 'views/activiti/task', 4, '0', '0', '2018-09-27 09:52:31', '2018-12-09 16:35:26', '0');
INSERT INTO `sys_menu` VALUES (4401, '流程管理', 'act_task_manage', NULL, 4400, '1', NULL, 0, '0', '1', '2018-05-15 21:35:18', '2018-09-28 09:12:07', '0');
INSERT INTO `sys_menu` VALUES (5000, '一级菜单', NULL, '/crud', -1, 'icon-caidanguanli', '', 4, '0', '0', '2018-08-28 01:50:22', '2018-09-28 08:58:20', '0');
INSERT INTO `sys_menu` VALUES (5001, '一级菜单', NULL, 'index', 5000, 'icon-caidanguanli', 'views/crud/index', 1, '0', '0', '2018-08-28 01:50:48', '2018-11-21 17:48:19', '1');
INSERT INTO `sys_menu` VALUES (5002, '二级菜单', NULL, 'crud', 5001, 'icon-caidanguanli', 'views/crud/index', 1, '0', '0', '2018-08-28 01:51:23', '2018-11-21 17:47:40', '1');
INSERT INTO `sys_menu` VALUES (5003, '二级菜单', NULL, '', 5000, 'icon-caidanguanli', '', 1, '0', '0', '2018-11-21 17:49:18', '2018-11-21 17:53:25', '0');
INSERT INTO `sys_menu` VALUES (5004, '二级菜单', NULL, 'index', 5003, 'icon-caidanguanli', 'views/crud/index', 1, '0', '0', '2018-11-21 17:53:51', '2018-12-20 14:26:53', '1');
COMMIT;
-- ----------------------------
-- Table structure for sys_oauth_client_details
-- ----------------------------
DROP TABLE IF EXISTS `sys_oauth_client_details`;
CREATE TABLE `sys_oauth_client_details` (
`client_id` varchar(32) NOT NULL,
`resource_ids` varchar(256) DEFAULT NULL,
`client_secret` varchar(256) DEFAULT NULL,
`scope` varchar(256) DEFAULT NULL,
`authorized_grant_types` varchar(256) DEFAULT NULL,
`web_server_redirect_uri` varchar(256) DEFAULT NULL,
`authorities` varchar(256) DEFAULT NULL,
`access_token_validity` int(11) DEFAULT NULL,
`refresh_token_validity` int(11) DEFAULT NULL,
`additional_information` varchar(4096) DEFAULT NULL,
`autoapprove` varchar(256) DEFAULT NULL,
`tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '所属租户',
PRIMARY KEY (`client_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='终端信息表';
-- ----------------------------
-- Records of sys_oauth_client_details
-- ----------------------------
BEGIN;
INSERT INTO `sys_oauth_client_details` VALUES ('app', NULL, 'app', 'server', 'password,refresh_token', NULL, NULL, NULL, NULL, NULL, 'true', 1);
INSERT INTO `sys_oauth_client_details` VALUES ('daemon', NULL, 'daemon', 'server', 'password,refresh_token', NULL, NULL, NULL, NULL, NULL, 'true', 1);
INSERT INTO `sys_oauth_client_details` VALUES ('gen', NULL, 'gen', 'server', 'password,refresh_token', NULL, NULL, NULL, NULL, NULL, 'true', 1);
INSERT INTO `sys_oauth_client_details` VALUES ('pig', NULL, 'pig', 'server', 'password,refresh_token,authorization_code,client_credentials', 'http://localhost:4040/sso1/login,http://localhost:4041/sso1/login', NULL, NULL, NULL, NULL, 'true', 1);
INSERT INTO `sys_oauth_client_details` VALUES ('test', NULL, 'test', 'server', 'password,refresh_token', NULL, NULL, NULL, NULL, NULL, 'true', 1);
COMMIT;
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`role_id` int(11) NOT NULL AUTO_INCREMENT,
`role_name` varchar(64) COLLATE utf8mb4_bin NOT NULL,
`role_code` varchar(64) COLLATE utf8mb4_bin NOT NULL,
`role_desc` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`ds_type` char(1) COLLATE utf8mb4_bin NOT NULL DEFAULT '2' COMMENT '数据权限类型',
`ds_scope` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '数据权限范围',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '删除标识(0-正常,1-删除)',
`tenant_id` int(11) DEFAULT NULL,
PRIMARY KEY (`role_id`) USING BTREE,
UNIQUE KEY `role_idx1_role_code` (`role_code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='系统角色表';
-- ----------------------------
-- Records of sys_role
-- ----------------------------
BEGIN;
INSERT INTO `sys_role` VALUES (1, '管理员', 'ROLE_ADMIN', '管理员', '2', '2', '2017-10-29 15:45:51', '2018-12-26 14:09:11', '0', 1);
INSERT INTO `sys_role` VALUES (2, 'ROLE_CQQ', 'ROLE_CQQ', 'ROLE_CQQ', '2', NULL, '2018-11-11 19:42:26', '2018-12-26 14:09:07', '0', 2);
COMMIT;
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu` (
`role_id` int(11) NOT NULL COMMENT '角色ID',
`menu_id` int(11) NOT NULL COMMENT '菜单ID',
PRIMARY KEY (`role_id`,`menu_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='角色菜单表';
-- ----------------------------
-- Records of sys_role_menu
-- ----------------------------
BEGIN;
INSERT INTO `sys_role_menu` VALUES (1, 1000);
INSERT INTO `sys_role_menu` VALUES (1, 1100);
INSERT INTO `sys_role_menu` VALUES (1, 1101);
INSERT INTO `sys_role_menu` VALUES (1, 1102);
INSERT INTO `sys_role_menu` VALUES (1, 1103);
INSERT INTO `sys_role_menu` VALUES (1, 1200);
INSERT INTO `sys_role_menu` VALUES (1, 1201);
INSERT INTO `sys_role_menu` VALUES (1, 1202);
INSERT INTO `sys_role_menu` VALUES (1, 1203);
INSERT INTO `sys_role_menu` VALUES (1, 1300);
INSERT INTO `sys_role_menu` VALUES (1, 1301);
INSERT INTO `sys_role_menu` VALUES (1, 1302);
INSERT INTO `sys_role_menu` VALUES (1, 1303);
INSERT INTO `sys_role_menu` VALUES (1, 1304);
INSERT INTO `sys_role_menu` VALUES (1, 1400);
INSERT INTO `sys_role_menu` VALUES (1, 1401);
INSERT INTO `sys_role_menu` VALUES (1, 1402);
INSERT INTO `sys_role_menu` VALUES (1, 1403);
INSERT INTO `sys_role_menu` VALUES (1, 2000);
INSERT INTO `sys_role_menu` VALUES (1, 2100);
INSERT INTO `sys_role_menu` VALUES (1, 2101);
INSERT INTO `sys_role_menu` VALUES (1, 2200);
INSERT INTO `sys_role_menu` VALUES (1, 2201);
INSERT INTO `sys_role_menu` VALUES (1, 2202);
INSERT INTO `sys_role_menu` VALUES (1, 2203);
INSERT INTO `sys_role_menu` VALUES (1, 2300);
INSERT INTO `sys_role_menu` VALUES (1, 2400);
INSERT INTO `sys_role_menu` VALUES (1, 2401);
INSERT INTO `sys_role_menu` VALUES (1, 2402);
INSERT INTO `sys_role_menu` VALUES (1, 2403);
INSERT INTO `sys_role_menu` VALUES (1, 2500);
INSERT INTO `sys_role_menu` VALUES (1, 2501);
INSERT INTO `sys_role_menu` VALUES (1, 2502);
INSERT INTO `sys_role_menu` VALUES (1, 2503);
INSERT INTO `sys_role_menu` VALUES (1, 2600);
INSERT INTO `sys_role_menu` VALUES (1, 2601);
INSERT INTO `sys_role_menu` VALUES (1, 2700);
INSERT INTO `sys_role_menu` VALUES (1, 3000);
INSERT INTO `sys_role_menu` VALUES (1, 3100);
INSERT INTO `sys_role_menu` VALUES (1, 3200);
INSERT INTO `sys_role_menu` VALUES (1, 3300);
INSERT INTO `sys_role_menu` VALUES (1, 3400);
INSERT INTO `sys_role_menu` VALUES (1, 3500);
INSERT INTO `sys_role_menu` VALUES (1, 3600);
INSERT INTO `sys_role_menu` VALUES (1, 3601);
INSERT INTO `sys_role_menu` VALUES (1, 3700);
INSERT INTO `sys_role_menu` VALUES (1, 3800);
INSERT INTO `sys_role_menu` VALUES (1, 3900);
INSERT INTO `sys_role_menu` VALUES (1, 3901);
INSERT INTO `sys_role_menu` VALUES (1, 4000);
INSERT INTO `sys_role_menu` VALUES (1, 4100);
INSERT INTO `sys_role_menu` VALUES (1, 4101);
INSERT INTO `sys_role_menu` VALUES (1, 4200);
INSERT INTO `sys_role_menu` VALUES (1, 4201);
INSERT INTO `sys_role_menu` VALUES (1, 4300);
INSERT INTO `sys_role_menu` VALUES (1, 4301);
INSERT INTO `sys_role_menu` VALUES (1, 4302);
INSERT INTO `sys_role_menu` VALUES (1, 4303);
INSERT INTO `sys_role_menu` VALUES (1, 4400);
INSERT INTO `sys_role_menu` VALUES (1, 4401);
INSERT INTO `sys_role_menu` VALUES (2, 1000);
INSERT INTO `sys_role_menu` VALUES (2, 1100);
INSERT INTO `sys_role_menu` VALUES (2, 1101);
INSERT INTO `sys_role_menu` VALUES (2, 1102);
INSERT INTO `sys_role_menu` VALUES (2, 1103);
INSERT INTO `sys_role_menu` VALUES (2, 1200);
INSERT INTO `sys_role_menu` VALUES (2, 1201);
INSERT INTO `sys_role_menu` VALUES (2, 1202);
INSERT INTO `sys_role_menu` VALUES (2, 1203);
INSERT INTO `sys_role_menu` VALUES (2, 1300);
INSERT INTO `sys_role_menu` VALUES (2, 1301);
INSERT INTO `sys_role_menu` VALUES (2, 1302);
INSERT INTO `sys_role_menu` VALUES (2, 1303);
INSERT INTO `sys_role_menu` VALUES (2, 1304);
INSERT INTO `sys_role_menu` VALUES (2, 1400);
INSERT INTO `sys_role_menu` VALUES (2, 1401);
INSERT INTO `sys_role_menu` VALUES (2, 1402);
INSERT INTO `sys_role_menu` VALUES (2, 1403);
COMMIT;
-- ----------------------------
-- Table structure for sys_social_details
-- ----------------------------
DROP TABLE IF EXISTS `sys_social_details`;
CREATE TABLE `sys_social_details` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`type` varchar(16) NOT NULL COMMENT '类型',
`remark` varchar(64) DEFAULT NULL COMMENT '描述',
`app_id` varchar(64) NOT NULL COMMENT 'appid',
`app_secret` varchar(64) NOT NULL COMMENT 'app_secret',
`redirect_url` varchar(128) DEFAULT NULL COMMENT '回调地址',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`del_flag` char(50) NOT NULL DEFAULT '0' COMMENT '删除标记',
`tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '所属租户',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='系统社交登录账号表';
-- ----------------------------
-- Records of sys_social_details
-- ----------------------------
BEGIN;
INSERT INTO `sys_social_details` VALUES (1, 'WX', '微信互联参数', 'wxd1678d3f83b1d83a', '6ddb043f94da5d2172926abe8533504f', 'daoweicloud.com', '2018-08-16 14:24:25', '2018-12-04 11:50:57', '0', 1);
COMMIT;
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`username` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '用户名',
`password` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`salt` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '随机盐',
`phone` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '简介',
`avatar` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '头像',
`dept_id` int(11) DEFAULT NULL COMMENT '部门ID',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`lock_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '0-正常,9-锁定',
`del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '0-正常,1-删除',
`wx_openid` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '微信openid',
`qq_openid` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'QQ openid',
`tenant_id` int(11) NOT NULL DEFAULT '0' COMMENT '所属租户',
PRIMARY KEY (`user_id`) USING BTREE,
KEY `user_wx_openid` (`wx_openid`) USING BTREE,
KEY `user_qq_openid` (`qq_openid`) USING BTREE,
KEY `user_idx1_username` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC COMMENT='用户表';
-- ----------------------------
-- Records of sys_user
-- ----------------------------
BEGIN;
INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$QOfWxxFyAMmEEmnuw9UI/..1s4B4eF/u9PzE2ZaGO.ij9YfmcUy.u', NULL, '18678892721', '', 16, '2018-04-20 07:15:18', '2019-02-25 23:08:40', '0', '0', 'o_0FT0uyg_H1vVy2H0JpSwlVGhWQ', NULL, 1);
COMMIT;
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`user_id` int(11) NOT NULL COMMENT '用户ID',
`role_id` int(11) NOT NULL COMMENT '角色ID',
PRIMARY KEY (`user_id`,`role_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户角色表';
-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
BEGIN;
INSERT INTO `sys_user_role` VALUES (1, 1);
INSERT INTO `sys_user_role` VALUES (2, 2);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
This source diff could not be displayed because it is too large. You can view the blob instead.
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.elephant.framework.galaxy</groupId>
<artifactId>aroad</artifactId>
<version>0.0.1</version>
<name>aroad</name>
<description>智慧公路项目</description>
<properties>
<java.version>1.8</java.version>
<hutool.version>4.3.2</hutool.version>
<ttl.version>2.10.1</ttl.version>
<spring.security.oauth2.version>2.3.5.RELEASE</spring.security.oauth2.version>
</properties>
<dependencies>
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-amqp</artifactId>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>${spring.security.oauth2.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.7.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.0.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!--TTL-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId>
<version>${ttl.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package com.elephant.framework.galaxy.aroad;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Description
* @auther wangjian
* @create 2019-02-18 15:19
*/
@SpringBootApplication
public class ARoadApplication {
public static void main(String[] args) {
SpringApplication.run(ARoadApplication.class, args);
}
}
package com.elephant.framework.galaxy.aroad.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @Description
* @auther wangjian
* @create 2019-02-20 21:49
*/
@EnableTransactionManagement
@Configuration
@MapperScan("com.elephant.framework.galaxy.aroad.module.*.mapper*")
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
package com.elephant.framework.galaxy.aroad.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ResourceLoader;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* RedisTemplate 配置
*
* @author wangjian
*/
@EnableCaching
@Configuration
public class RedisTemplateConfig extends CachingConfigurerSupport {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Bean
public KeyGenerator KeyGenerator() {
return (target, method, params) -> {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
};
}
@Bean
public RedisCacheManager cacheManager() {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofHours(1)); // 设置缓存有效期一小时
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration).build();
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
package com.elephant.framework.galaxy.aroad.constant;
/**
* @Description
* @auther wangjian
* @create 2019-02-21 23:20
*/
public interface CommonConstants {
/**
* header 中租户ID
*/
String TENANT_ID = "TENANT_ID";
/**
* 删除
*/
String STATUS_DEL = "1";
/**
* 正常
*/
String STATUS_NORMAL = "0";
/**
* 锁定
*/
String STATUS_LOCK = "9";
/**
* 菜单
*/
String MENU = "0";
/**
* 编码
*/
String UTF8 = "UTF-8";
/**
* 前端工程名
*/
String FRONT_END_PROJECT = "galaxy-ui";
/**
* 后端工程名
*/
String BACK_END_PROJECT = "galaxy";
/**
* 路由存放
*/
String ROUTE_KEY = "gateway_route_key";
/**
* spring boot admin 事件key
*/
String EVENT_KEY = "event_key";
/**
* 验证码前缀
*/
String DEFAULT_CODE_KEY = "DEFAULT_CODE_KEY_";
/**
* 成功标记
*/
Integer SUCCESS = 0;
/**
* 失败标记
*/
Integer FAIL = 1;
/**
* 默认存储bucket
*/
String BUCKET_NAME = "galaxy";
}
package com.elephant.framework.galaxy.aroad.constant;
/**
* 分页相关的参数
* @author wangjian
* @date 2018/11/22
*/
public interface PaginationConstants {
/**
* 当前页
*/
String CURRENT="current";
/**
* 每页大小
*/
String SIZE="size";
}
package com.elephant.framework.galaxy.aroad.constant;
/**
* @Description
* @auther wangjian
* @create 2019-02-21 21:43
*/
public interface SecurityConstants {
/**
* 刷新
*/
String REFRESH_TOKEN = "refresh_token";
/**
* 验证码有效期
*/
int CODE_TIME = 60;
/**
* 验证码长度
*/
String CODE_SIZE = "4";
/**
* 角色前缀
*/
String ROLE = "ROLE_";
/**
* 前缀
*/
String GALAXY_PREFIX = "galaxy_";
/**
* oauth 相关前缀
*/
String OAUTH_PREFIX = "oauth:";
/**
* 项目的license
*/
String GALAXY_LICENSE = "EP-Galaxy";
/**
* 内部
*/
String FROM_IN = "Y";
/**
* 标志
*/
String FROM = "from";
/**
* OAUTH URL
*/
String OAUTH_TOKEN_URL = "/oauth/token";
/**
* 手机号登录URL
*/
String SMS_TOKEN_URL = "/mobile/token/sms";
/**
* 社交登录URL
*/
String SOCIAL_TOKEN_URL = "/mobile/token/social";
/**
* 自定义登录URL
*/
String MOBILE_TOKEN_URL = "/mobile/token/*";
/**
* oauth 客户端信息
*/
String CLIENT_DETAILS_KEY = "galaxy_oauth:client:details";
/**
* 微信获取OPENID
*/
String WX_AUTHORIZATION_CODE_URL = "https://api.weixin.qq.com/sns/oauth2/access_token" +
"?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
/**
* {bcrypt} 加密的特征码
*/
String BCRYPT = "{bcrypt}";
/**
* sys_oauth_client_details 表的字段,不包括client_id、client_secret
*/
String CLIENT_FIELDS = "client_id, CONCAT('{noop}',client_secret) as client_secret, resource_ids, scope, "
+ "authorized_grant_types, web_server_redirect_uri, authorities, access_token_validity, "
+ "refresh_token_validity, additional_information, autoapprove";
/**
* JdbcClientDetailsService 查询语句
*/
String BASE_FIND_STATEMENT = "select " + CLIENT_FIELDS
+ " from sys_oauth_client_details";
/**
* 默认的查询语句
*/
String DEFAULT_FIND_STATEMENT = BASE_FIND_STATEMENT + " order by client_id";
/**
* 按条件client_id 查询
*/
String DEFAULT_SELECT_STATEMENT = BASE_FIND_STATEMENT + " where client_id = ?";
/**
* 资源服务器默认bean名称
*/
String RESOURCE_SERVER_CONFIGURER = "resourceServerConfigurerAdapter";
/**
* 客户端模式
*/
String CLIENT_CREDENTIALS = "client_credentials";
}
package com.elephant.framework.galaxy.aroad.exception;
import lombok.NoArgsConstructor;
/**
* @author wangjian
* @date 😴2018年06月22日16:21:57
*/
@NoArgsConstructor
public class CheckedException extends RuntimeException {
private static final long serialVersionUID = 1L;
public CheckedException(String message) {
super(message);
}
public CheckedException(Throwable cause) {
super(cause);
}
public CheckedException(String message, Throwable cause) {
super(message, cause);
}
public CheckedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
package com.elephant.framework.galaxy.aroad.exception;
/**
* @Description
* @auther wangjian
* @create 2019-02-18 15:45
*/
public interface CommonError {
public int getErrorCode();
public String getErrorMessage();
public CommonError setErrorMessage(String errorMessage);
}
package com.elephant.framework.galaxy.aroad.exception;
/**
* @Description 全局异常类实现(包装器模式)
* @auther wangjian
* @create 2019-02-18 15:56
*/
public class GlobalException extends Exception implements CommonError {
private CommonError commonError;
public GlobalException(CommonError commonError) {
super();
this.commonError = commonError;
}
public GlobalException(CommonError commonError, String errorMessage) {
super();
this.commonError = commonError;
this.commonError.setErrorMessage(errorMessage);
}
@Override
public int getErrorCode() {
return this.commonError.getErrorCode();
}
@Override
public String getErrorMessage() {
return this.commonError.getErrorMessage();
}
@Override
public CommonError setErrorMessage(String errorMessage) {
this.commonError.setErrorMessage(errorMessage);
return this;
}
}
package com.elephant.framework.galaxy.aroad.exception;
/**
* @Description
* @auther wangjian
* @create 2019-02-18 15:48
*/
public enum GlobalExceptionEnum implements CommonError {
// 通用错误码定义
UNKNOWN_ERROR(10001, "未知错误"),
PARAMETER_VALIDATION_ERROR(10002, "非法参数"),
// 20000 用户相关错误码定义
USER_NOT_EXIST(20001, "用户不存在"),
MENU_HAS_CHILD(20002, "菜单含有下级不能删除"),
;
private int errorCode;
private String errorMessage;
private GlobalExceptionEnum(int errorCode, String errorMessage) {
this.errorCode = errorCode;
this.errorMessage = errorMessage;
}
@Override
public int getErrorCode() {
return this.errorCode;
}
@Override
public String getErrorMessage() {
return this.errorMessage;
}
@Override
public CommonError setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
return this;
}}
package com.elephant.framework.galaxy.aroad.generator;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @Description
* @auther wangjian
* @create 2019-02-21 14:52
*/
public class MysqlGenerator {
/**
* <p>
* 读取控制台内容
* </p>
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入" + tip + ":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");//生成文件的输出目录
gc.setAuthor("wangjian");//开发人员
gc.setOpen(false);//是否打开输出目录
gc.setServiceName("%sService");// service 命名方式去掉service接口名中I开头
gc.setServiceImplName("%sServiceImpl");//service impl 命名方式
// 自定义文件命名,注意 %s 会自动填充表实体属性!
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setFileOverride(true);
gc.setActiveRecord(true);
gc.setEnableCache(false);// XML 二级缓存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(false);// XML Column List
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setUrl("jdbc:mysql://localhost:3306/aroad?useUnicode=true&useSSL=false&characterEncoding=utf8");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(scanner("模块名"));//父包模块名
pc.setParent("com.elephant.framework.galaxy.aroad.module");//父包名
// pc.setEntity("pojo");
// pc.setService("service");
// pc.setServiceImpl("service.impl");
// pc.setController("controller");//设置控制器包名
mpg.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
// String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("templates/entity2.java");
// templateConfig.setService();
// templateConfig.setController();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
// strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");//自定义继承的Entity类全称,带包名
// strategy.setEntityLombokModel(true); //【实体】是否为lombok模型(默认 false)
strategy.setRestControllerStyle(true);//生成 @RestController 控制器
strategy.setSuperControllerClass("BaseController");//自定义继承的Controller类全称,带包名
strategy.setInclude(scanner("表名"));//需要包含的表名,允许正则表达式
// strategy.setSuperEntityColumns("id");//自定义基础的Entity类,公共字段
strategy.setControllerMappingHyphenStyle(true);//驼峰转连字符
// strategy.setTablePrefix(pc.getModuleName() + "_");
strategy.setTablePrefix(scanner("表前缀"));//表前缀
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new VelocityTemplateEngine());
mpg.execute();
}
}
package com.elephant.framework.galaxy.aroad.module.codegen.controller;
import cn.hutool.core.io.IoUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.codegen.response.R;
import com.elephant.framework.galaxy.aroad.module.codegen.service.SysGeneratorService;
import com.elephant.framework.galaxy.aroad.module.codegen.entity.GenConfig;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
/**
* 代码生成器
*
* @author wangjian
* @date 2018-07-30
*/
@RestController
@AllArgsConstructor
@RequestMapping("/gen/generator")
public class SysGeneratorController {
private final SysGeneratorService sysGeneratorService;
/**
* 列表
*
* @param tableName 参数集
* @return 数据库表
*/
@GetMapping("/page")
public R getPage(Page page, String tableName) {
return new R<>(sysGeneratorService.getPage(page, tableName));
}
/**
* 生成代码
*/
@SneakyThrows
@PostMapping("/code")
public void generatorCode(@RequestBody GenConfig genConfig, HttpServletResponse response) {
byte[] data = sysGeneratorService.generatorCode(genConfig);
response.reset();
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, String.format("attachment; filename=%s.zip", genConfig.getTableName()));
response.addHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(data.length));
response.setContentType("application/octet-stream; charset=UTF-8");
IoUtil.write(response.getOutputStream(), Boolean.TRUE, data);
}
}
package com.elephant.framework.galaxy.aroad.module.codegen.entity;
import lombok.Data;
/**
* @author wangjian
* @date 2018/07/29
* 列属性: https://blog.csdn.net/lkforce/article/details/79557482
*/
@Data
public class ColumnEntity {
/**
* 列表
*/
private String columnName;
/**
* 数据类型
*/
private String dataType;
/**
* 备注
*/
private String comments;
/**
* 驼峰属性
*/
private String caseAttrName;
/**
* 普通属性
*/
private String lowerAttrName;
/**
* 属性类型
*/
private String attrType;
/**
* 其他信息
*/
private String extra;
}
package com.elephant.framework.galaxy.aroad.module.codegen.entity;
import lombok.Data;
/**
* @author wangjian
* @date 2018/8/2
* 生成配置
*/
@Data
public class GenConfig {
/**
* 包名
*/
private String packageName;
/**
* 作者
*/
private String author;
/**
* 模块名称
*/
private String moduleName;
/**
* 表前缀
*/
private String tablePrefix;
/**
* 表名称
*/
private String tableName;
/**
* 表备注
*/
private String comments;
}
package com.elephant.framework.galaxy.aroad.module.codegen.entity;
import lombok.Data;
import java.util.List;
/**
* @author wangjian
* @date 2018/07/29
* 表属性: https://blog.csdn.net/lkforce/article/details/79557482
*/
@Data
public class TableEntity {
/**
* 名称
*/
private String tableName;
/**
* 备注
*/
private String comments;
/**
* 主键
*/
private ColumnEntity pk;
/**
* 列名
*/
private List<ColumnEntity> columns;
/**
* 驼峰类型
*/
private String caseClassName;
/**
* 普通类型
*/
private String lowerClassName;
}
package com.elephant.framework.galaxy.aroad.module.codegen.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 代码生成器
*
* @author wangjian
* @date 2018-07-30
*/
public interface SysGeneratorMapper {
/**
* 分页查询表格
*
* @param page
* @param tableName
* @return
*/
IPage<List<Map<String, Object>>> queryList(Page page, @Param("tableName") String tableName);
/**
* 查询表信息
*
* @param tableName 表名称
* @return
*/
Map<String, String> queryTable(String tableName);
/**
* 查询表列信息
*
* @param tableName 表名称
* @return
*/
List<Map<String, String>> queryColumns(String tableName);
}
package com.elephant.framework.galaxy.aroad.module.codegen.response;
import com.elephant.framework.galaxy.aroad.constant.CommonConstants;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 响应信息主体
*
* @param <T>
* @author wangjian
*/
@Builder
@ToString
@Accessors(chain = true)
@AllArgsConstructor
public class R<T> implements Serializable {
private static final long serialVersionUID = 1L;
@Getter
@Setter
private int code = CommonConstants.SUCCESS;
@Getter
@Setter
private String msg = "success";
@Getter
@Setter
private T data;
public R() {
super();
}
public R(T data) {
super();
this.data = data;
}
public R(T data, String msg) {
super();
this.data = data;
this.msg = msg;
}
public R(Throwable e) {
super();
this.msg = e.getMessage();
this.code = CommonConstants.FAIL;
}
}
package com.elephant.framework.galaxy.aroad.module.codegen.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.codegen.entity.GenConfig;
import java.util.List;
import java.util.Map;
/**
* @author wangjian
* @date 2018/7/29
*/
public interface SysGeneratorService {
/**
* 生成代码
*
* @param tableNames 表名称
* @return
*/
byte[] generatorCode(GenConfig tableNames);
/**
* 分页查询表
* @param tableName 表名
* @return
*/
IPage<List<Map<String, Object>>> getPage(Page page, String tableName);
}
package com.elephant.framework.galaxy.aroad.module.codegen.service.impl;
import cn.hutool.core.io.IoUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.codegen.service.SysGeneratorService;
import com.elephant.framework.galaxy.aroad.module.codegen.util.GenUtils;
import com.elephant.framework.galaxy.aroad.module.codegen.entity.GenConfig;
import com.elephant.framework.galaxy.aroad.module.codegen.mapper.SysGeneratorMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.io.ByteArrayOutputStream;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipOutputStream;
/**
* 代码生成器
*
* @author wangjian
* @date 2018-07-30
*/
@Service
@AllArgsConstructor
public class SysGeneratorServiceImpl implements SysGeneratorService {
private final SysGeneratorMapper sysGeneratorMapper;
/**
* 分页查询表
*
* @param tableName 查询条件
* @return
*/
@Override
public IPage<List<Map<String, Object>>> getPage(Page page, String tableName) {
return sysGeneratorMapper.queryList(page,tableName);
}
/**
* 生成代码
*
* @param genConfig 生成配置
* @return
*/
@Override
public byte[] generatorCode(GenConfig genConfig) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
//查询表信息
Map<String, String> table = queryTable(genConfig.getTableName());
//查询列信息
List<Map<String, String>> columns = queryColumns(genConfig.getTableName());
//生成代码
GenUtils.generatorCode(genConfig, table, columns, zip);
IoUtil.close(zip);
return outputStream.toByteArray();
}
private Map<String, String> queryTable(String tableName) {
return sysGeneratorMapper.queryTable(tableName);
}
private List<Map<String, String>> queryColumns(String tableName) {
return sysGeneratorMapper.queryColumns(tableName);
}
}
package com.elephant.framework.galaxy.aroad.module.codegen.util;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import com.elephant.framework.galaxy.aroad.constant.CommonConstants;
import com.elephant.framework.galaxy.aroad.exception.CheckedException;
import com.elephant.framework.galaxy.aroad.module.codegen.entity.ColumnEntity;
import com.elephant.framework.galaxy.aroad.module.codegen.entity.GenConfig;
import com.elephant.framework.galaxy.aroad.module.codegen.entity.TableEntity;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.lang.WordUtils;
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.nio.charset.StandardCharsets;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 代码生成器 工具类
*
* @author lengleng
* @date 2018-07-30
*/
@Slf4j
@UtilityClass
public class GenUtils {
private final String ENTITY_JAVA_VM = "Entity.java.vm";
private final String MAPPER_JAVA_VM = "Mapper.java.vm";
private final String SERVICE_JAVA_VM = "Service.java.vm";
private final String SERVICE_IMPL_JAVA_VM = "ServiceImpl.java.vm";
private final String CONTROLLER_JAVA_VM = "Controller.java.vm";
private final String MAPPER_XML_VM = "Mapper.xml.vm";
private final String MENU_SQL_VM = "menu.sql.vm";
private final String INDEX_VUE_VM = "index.vue.vm";
private final String API_JS_VM = "api.js.vm";
private final String CRUD_JS_VM = "crud.js.vm";
private List<String> getTemplates() {
List<String> templates = new ArrayList<>();
templates.add("template/Entity.java.vm");
templates.add("template/Mapper.java.vm");
templates.add("template/Mapper.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/index.vue.vm");
templates.add("template/api.js.vm");
templates.add("template/crud.js.vm");
return templates;
}
/**
* 生成代码
*/
public void generatorCode(GenConfig genConfig, 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"));
if (StrUtil.isNotBlank(genConfig.getComments())) {
tableEntity.setComments(genConfig.getComments());
} else {
tableEntity.setComments(table.get("tableComment"));
}
String tablePrefix;
if (StrUtil.isNotBlank(genConfig.getTablePrefix())) {
tablePrefix = genConfig.getTablePrefix();
} else {
tablePrefix = config.getString("tablePrefix");
}
//表名转换成Java类名
String className = tableToJava(tableEntity.getTableName(), tablePrefix);
tableEntity.setCaseClassName(className);
tableEntity.setLowerClassName(StringUtils.uncapitalize(className));
//列信息
List<ColumnEntity> columnList = 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.setCaseAttrName(attrName);
columnEntity.setLowerAttrName(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);
}
columnList.add(columnEntity);
}
tableEntity.setColumns(columnList);
//没主键,则第一个字段为主键
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);
//封装模板数据
Map<String, Object> map = new HashMap<>(16);
map.put("tableName", tableEntity.getTableName());
map.put("pk", tableEntity.getPk());
map.put("className", tableEntity.getCaseClassName());
map.put("classname", tableEntity.getLowerClassName());
map.put("pathName", tableEntity.getLowerClassName().toLowerCase());
map.put("columns", tableEntity.getColumns());
map.put("hasBigDecimal", hasBigDecimal);
map.put("datetime", DateUtil.now());
if (StrUtil.isNotBlank(genConfig.getComments())) {
map.put("comments", genConfig.getComments());
} else {
map.put("comments", tableEntity.getComments());
}
if (StrUtil.isNotBlank(genConfig.getAuthor())) {
map.put("author", genConfig.getAuthor());
} else {
map.put("author", config.getString("author"));
}
if (StrUtil.isNotBlank(genConfig.getModuleName())) {
map.put("moduleName", genConfig.getModuleName());
} else {
map.put("moduleName", config.getString("moduleName"));
}
if (StrUtil.isNotBlank(genConfig.getPackageName())) {
map.put("package", genConfig.getPackageName());
map.put("mainPath", genConfig.getPackageName());
} else {
map.put("package", config.getString("package"));
map.put("mainPath", config.getString("mainPath"));
}
VelocityContext context = new VelocityContext(map);
//获取模板列表
List<String> templates = getTemplates();
for (String template : templates) {
//渲染模板
StringWriter sw = new StringWriter();
Template tpl = Velocity.getTemplate(template, CharsetUtil.UTF_8);
tpl.merge(context, sw);
try {
//添加到zip
zip.putNextEntry(new ZipEntry(Objects
.requireNonNull(getFileName(template, tableEntity.getCaseClassName()
, map.get("package").toString(), map.get("moduleName").toString()))));
IoUtil.write(zip, StandardCharsets.UTF_8, false, sw.toString());
IoUtil.close(sw);
zip.closeEntry();
} catch (IOException e) {
throw new CheckedException("渲染模板失败,表名:" + tableEntity.getTableName(), e);
}
}
}
/**
* 列名转换成Java属性名
*/
private String columnToJava(String columnName) {
return WordUtils.capitalizeFully(columnName, new char[]{'_'}).replace("_", "");
}
/**
* 表名转换成Java类名
*/
private String tableToJava(String tableName, String tablePrefix) {
if (StringUtils.isNotBlank(tablePrefix)) {
tableName = tableName.replace(tablePrefix, "");
}
return columnToJava(tableName);
}
/**
* 获取配置信息
*/
private Configuration getConfig() {
try {
return new PropertiesConfiguration("generator.properties");
} catch (ConfigurationException e) {
throw new CheckedException("获取配置文件失败,", e);
}
}
/**
* 获取文件名
*/
private String getFileName(String template, String className, String packageName, String moduleName) {
String packagePath = CommonConstants.BACK_END_PROJECT + File.separator + "src" + File.separator + "main" + File.separator + "java" + File.separator;
if (StringUtils.isNotBlank(packageName)) {
packagePath += packageName.replace(".", File.separator) + File.separator + moduleName + File.separator;
}
if (template.contains(ENTITY_JAVA_VM)) {
return packagePath + "entity" + File.separator + className + ".java";
}
if (template.contains(MAPPER_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(SERVICE_IMPL_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(MAPPER_XML_VM)) {
return CommonConstants.BACK_END_PROJECT + File.separator + "src" + File.separator + "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(INDEX_VUE_VM)) {
return CommonConstants.FRONT_END_PROJECT + File.separator + "src" + File.separator + "views" +
File.separator + moduleName + File.separator + className.toLowerCase() + File.separator + "index.vue";
}
if (template.contains(API_JS_VM)) {
return CommonConstants.FRONT_END_PROJECT + File.separator + "src" + File.separator + "api" + File.separator + className.toLowerCase() + ".js";
}
if (template.contains(CRUD_JS_VM)) {
return CommonConstants.FRONT_END_PROJECT + File.separator + "src" + File.separator + "const" +
File.separator + "crud" + File.separator + className.toLowerCase() + ".js";
}
return null;
}
}
package com.elephant.framework.galaxy.aroad.module.common.annotation;
import java.lang.annotation.*;
/**
* @author wangjian
* @date 2018/6/28
* 操作日志注解
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {
/**
* 描述
*
* @return {String}
*/
String value();
}
package com.elephant.framework.galaxy.aroad.module.common.controller;
import com.elephant.framework.galaxy.aroad.exception.GlobalException;
import com.elephant.framework.galaxy.aroad.exception.GlobalExceptionEnum;
import com.elephant.framework.galaxy.aroad.response.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import javax.servlet.http.HttpServletRequest;
/**
* @Description
* @auther wangjian
* @create 2019-02-18 16:07
*/
@Slf4j
public class BaseController {
/**
* 解决所有未被Controller层处理的异常,不会反应的客户端
*
* @param request
* @param exception
* @return
*/
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public Object handlerException(HttpServletRequest request, Exception exception) {
exception.printStackTrace();
if (exception instanceof GlobalException) {
GlobalException globalException = (GlobalException) exception;
return new R(globalException.getErrorCode(),globalException.getErrorMessage());
} else if (exception instanceof AccessDeniedException) {
AccessDeniedException accessDeniedException = (AccessDeniedException) exception;
return new R(accessDeniedException);
} else {
return new R(GlobalExceptionEnum.UNKNOWN_ERROR.getErrorCode(), GlobalExceptionEnum.UNKNOWN_ERROR.getErrorMessage());
}
}
}
package com.elephant.framework.galaxy.aroad.module.common.data;
import com.alibaba.ttl.TransmittableThreadLocal;
import lombok.experimental.UtilityClass;
/**
* @author lengleng
* @date 2018/10/4
* 租户工具类
*/
@UtilityClass
public class TenantContextHolder {
private final ThreadLocal<Integer> THREAD_LOCAL_TENANT = new TransmittableThreadLocal<>();
/**
* TTL 设置租户ID
*
* @param tenantId
*/
void setTenantId(Integer tenantId) {
THREAD_LOCAL_TENANT.set(tenantId);
}
/**
* 获取TTL中的租户ID
*
* @return
*/
public Integer getTenantId() {
return THREAD_LOCAL_TENANT.get();
}
public void clear() {
THREAD_LOCAL_TENANT.remove();
}
}
package com.elephant.framework.galaxy.aroad.module.common.datascope;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* @author wangjian
* @date 2018/8/30
* 数据权限查询参数
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DataScope extends HashMap {
/**
* 限制范围的字段名称
*/
private String scopeName = "deptId";
/**
* 具体的数据范围
*/
private List<Integer> deptIds = new ArrayList<>();
/**
* 是否只查询本部门
*/
private Boolean isOnly = false;
}
package com.elephant.framework.galaxy.aroad.module.common.datascope;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
import com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler;
import com.elephant.framework.galaxy.aroad.util.SecurityUtils;
import com.elephant.framework.galaxy.aroad.constant.SecurityConstants;
import com.elephant.framework.galaxy.aroad.exception.CheckedException;
import com.elephant.framework.galaxy.aroad.security.entity.GalaxyUser;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import org.springframework.security.core.GrantedAuthority;
import javax.sql.DataSource;
import java.sql.Connection;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author wangjian
* @date 2018/12/26
* <p>
* mybatis 数据权限拦截器
*/
@Slf4j
@AllArgsConstructor
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
public class DataScopeInterceptor extends AbstractSqlParserHandler implements Interceptor {
private final DataSource dataSource;
@Override
@SneakyThrows
public Object intercept(Invocation invocation) {
StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
this.sqlParser(metaObject);
// 先判断是不是SELECT操作
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
if (!SqlCommandType.SELECT.equals(mappedStatement.getSqlCommandType())) {
return invocation.proceed();
}
BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
String originalSql = boundSql.getSql();
Object parameterObject = boundSql.getParameterObject();
//查找参数中包含DataScope类型的参数
DataScope dataScope = findDataScopeObject(parameterObject);
if (dataScope == null) {
return invocation.proceed();
}
String scopeName = dataScope.getScopeName();
List<Integer> deptIds = dataScope.getDeptIds();
// 优先获取赋值数据
if (CollUtil.isEmpty(deptIds)) {
GalaxyUser user = SecurityUtils.getUser();
if (user == null) {
throw new CheckedException("auto datascope, set up security details true");
}
List<String> roleIdList = user.getAuthorities()
.stream().map(GrantedAuthority::getAuthority)
.filter(authority -> authority.startsWith(SecurityConstants.ROLE))
.map(authority -> authority.split("_")[1])
.collect(Collectors.toList());
Entity query = Db.use(dataSource)
.query("SELECT * FROM sys_role where role_id IN (" + CollUtil.join(roleIdList, ",") + ")")
.stream().min(Comparator.comparingInt(o -> o.getInt("ds_type"))).get();
Integer dsType = query.getInt("ds_type");
// 查询全部
if (DataScopeTypeEnum.ALL.getType() == dsType) {
return invocation.proceed();
}
// 自定义
if (DataScopeTypeEnum.CUSTOM.getType() == dsType) {
String dsScope = query.getStr("ds_scope");
deptIds.addAll(Arrays.stream(dsScope.split(","))
.map(Integer::parseInt).collect(Collectors.toList()));
}
// 查询本级及其下级
if (DataScopeTypeEnum.OWN_CHILD_LEVEL.getType() == dsType) {
List<Integer> deptIdList = Db.use(dataSource)
.findBy("sys_dept_relation", "ancestor", user.getDeptId())
.stream().map(entity -> entity.getInt("descendant"))
.collect(Collectors.toList());
deptIds.addAll(deptIdList);
}
// 只查询本级
if (DataScopeTypeEnum.OWN_LEVEL.getType() == dsType) {
deptIds.add(user.getDeptId());
}
}
String join = CollectionUtil.join(deptIds, ",");
originalSql = "select * from (" + originalSql + ") temp_data_scope where temp_data_scope." + scopeName + " in (" + join + ")";
metaObject.setValue("delegate.boundSql.sql", originalSql);
return invocation.proceed();
}
/**
* 生成拦截对象的代理
*
* @param target 目标对象
* @return 代理对象
*/
@Override
public Object plugin(Object target) {
if (target instanceof StatementHandler) {
return Plugin.wrap(target, this);
}
return target;
}
/**
* mybatis配置的属性
*
* @param properties mybatis配置的属性
*/
@Override
public void setProperties(Properties properties) {
}
/**
* 查找参数是否包括DataScope对象
*
* @param parameterObj 参数列表
* @return DataScope
*/
private DataScope findDataScopeObject(Object parameterObj) {
if (parameterObj instanceof DataScope) {
return (DataScope) parameterObj;
} else if (parameterObj instanceof Map) {
for (Object val : ((Map<?, ?>) parameterObj).values()) {
if (val instanceof DataScope) {
return (DataScope) val;
}
}
}
return null;
}
}
package com.elephant.framework.galaxy.aroad.module.common.datascope;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author wangjian
* @date 2018/12/26
* <p>
* 数据权限类型
*/
@Getter
@AllArgsConstructor
public enum DataScopeTypeEnum {
/**
* 查询全部数据
*/
ALL(0, "全部"),
/**
* 自定义
*/
CUSTOM(1, "自定义"),
/**
* 本级及子级
*/
OWN_CHILD_LEVEL(2, "本级及子级"),
/**
* 本级
*/
OWN_LEVEL(3, "本级");
/**
* 类型
*/
private final int type;
/**
* 描述
*/
private final String description;
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dept;
import com.elephant.framework.galaxy.aroad.module.system.service.DeptService;
import com.elephant.framework.galaxy.aroad.response.R;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.time.LocalDateTime;
/**
* <p>
* 部门管理 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@AllArgsConstructor
@RequestMapping("/admin/dept")
public class DeptController extends BaseController {
private final DeptService deptService;
/**
* 通过ID查询
*
* @param id ID
* @return SysDept
*/
@GetMapping("/{id}")
public R getById(@PathVariable Integer id) {
return new R(deptService.getById(id));
}
/**
* 返回树形菜单集合
*
* @return 树形菜单
*/
@GetMapping(value = "/tree")
public R getTree() {
return new R(deptService.selectTree());
}
/**
* 返回当前用户树形菜单集合
*
* @return 树形菜单
*/
@GetMapping(value = "/user-tree")
public R getUserTree() {
return new R(deptService.getUserTree());
}
/**
* 添加
*
* @param dept 实体
* @return success/false
*/
@SysLog("添加部门")
@PostMapping
@PreAuthorize("@pms.hasPermission('sys_dept_add')")
public R save(@Valid @RequestBody Dept dept) {
return new R(deptService.saveDept(dept));
}
/**
* 删除
*
* @param id ID
* @return success/false
*/
@SysLog("删除部门")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('sys_dept_del')")
public R removeById(@PathVariable Integer id) {
return new R(deptService.removeDeptById(id));
}
/**
* 编辑
*
* @param dept 实体
* @return success/false
*/
@SysLog("编辑部门")
@PutMapping
@PreAuthorize("@pms.hasPermission('sys_dept_edit')")
public R update(@Valid @RequestBody Dept dept) {
dept.setUpdateTime(LocalDateTime.now());
return new R(deptService.updateDeptById(dept));
}
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 部门关系表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@RequestMapping("/system/dept-relation")
public class DeptRelationController extends BaseController {
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dict;
import com.elephant.framework.galaxy.aroad.module.system.service.DictService;
import com.elephant.framework.galaxy.aroad.response.R;
import lombok.AllArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* <p>
* 字典表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@AllArgsConstructor
@RequestMapping("/admin/dict")
public class DictController extends BaseController {
private final DictService dictService;
/**
* 通过ID查询字典信息
*
* @param id ID
* @return 字典信息
*/
@GetMapping("/{id}")
public R getById(@PathVariable Integer id) {
return new R(dictService.getById(id));
}
/**
* 分页查询字典信息
*
* @param page 分页对象
* @return 分页对象
*/
@GetMapping("/page")
public R<IPage> getDictPage(Page page, Dict dict) {
return new R(dictService.page(page, Wrappers.query(dict)));
}
/**
* 通过字典类型查找字典
*
* @param type 类型
* @return 同类型字典
*/
@GetMapping("/type/{type}")
@Cacheable(value = "dict_details", key = "#type")
public R getDictByType(@PathVariable String type) {
return new R(dictService.list(Wrappers
.<Dict>query().lambda()
.eq(Dict::getType, type)));
}
/**
* 添加字典
*
* @param dict 字典信息
* @return success、false
*/
@SysLog("添加字典")
@PostMapping
@CacheEvict(value = "dict_details", key = "#dict.type")
@PreAuthorize("@pms.hasPermission('sys_dict_add')")
public R save(@Valid @RequestBody Dict dict) {
return new R(dictService.save(dict));
}
/**
* 删除字典,并且清除字典缓存
*
* @param id ID
* @param type 类型
* @return R
*/
@SysLog("删除字典")
@DeleteMapping("/{id}/{type}")
@CacheEvict(value = "dict_details", key = "#type")
@PreAuthorize("@pms.hasPermission('sys_dict_del')")
public R removeById(@PathVariable Integer id, @PathVariable String type) {
return new R(dictService.removeById(id));
}
/**
* 修改字典
*
* @param dict 字典信息
* @return success/false
*/
@PutMapping
@SysLog("修改字典")
@CacheEvict(value = "dict_details", key = "#dict.type")
@PreAuthorize("@pms.hasPermission('sys_dict_edit')")
public R updateById(@Valid @RequestBody Dict dict) {
return new R(dictService.updateById(dict));
}
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.common.data.TenantContextHolder;
import com.elephant.framework.galaxy.aroad.constant.CommonConstants;
import com.elephant.framework.galaxy.aroad.constant.PaginationConstants;
import com.elephant.framework.galaxy.aroad.constant.SecurityConstants;
import com.elephant.framework.galaxy.aroad.module.codegen.response.R;
import lombok.AllArgsConstructor;
import org.springframework.cache.CacheManager;
import org.springframework.data.redis.core.ConvertingCursor;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.http.HttpHeaders;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author wangjian
* @date 2018/6/24
* 删除token端点
*/
@RestController
@AllArgsConstructor
@RequestMapping("/admin/token")
public class GalaxyTokenEndpoint {
private static final String GALAXY_OAUTH_ACCESS = SecurityConstants.GALAXY_PREFIX + SecurityConstants.OAUTH_PREFIX + "auth_to_access:";
private static final String GALAXY__ACCESS = SecurityConstants.GALAXY_PREFIX + SecurityConstants.OAUTH_PREFIX + "access:";
private final TokenStore tokenStore;
private final RedisTemplate redisTemplate;
private final CacheManager cacheManager;
/**
* 认证页面
*
* @return ModelAndView
*/
@GetMapping("/login")
public ModelAndView require() {
return new ModelAndView("ftl/login");
}
/**
* 退出token
*
* @param authHeader Authorization
*/
@DeleteMapping("/logout")
public R logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) {
if (StrUtil.isBlank(authHeader)) {
return R.builder()
.code(CommonConstants.FAIL)
.data(Boolean.FALSE)
.msg("退出失败,token 为空").build();
}
String tokenValue = authHeader.replace("Bearer", "").trim();
OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);
if (accessToken == null || StrUtil.isBlank(accessToken.getValue())) {
return R.builder()
.code(CommonConstants.FAIL)
.data(Boolean.FALSE)
.msg("退出失败,token 无效").build();
}
OAuth2Authentication auth2Authentication = tokenStore.readAuthentication(accessToken);
cacheManager.getCache("user_details")
.evict(auth2Authentication.getName());
tokenStore.removeAccessToken(accessToken);
return new R<>(Boolean.TRUE);
}
/**
* 令牌管理调用
*
* @param token token
* @return
*/
@DeleteMapping("/{token}")
public R<Boolean> delToken(@PathVariable("token") String token) {
OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(token);
tokenStore.removeAccessToken(oAuth2AccessToken);
return new R<>();
}
/**
* 查询token
*
* @param params 分页参数
* @return
*/
@PostMapping("/page")
public R<Page> tokenList(@RequestBody Map<String, Object> params) {
//根据分页参数获取对应数据
String key = String.format("%s*:%s", GALAXY_OAUTH_ACCESS, TenantContextHolder.getTenantId());
List<String> pages = findKeysForPage(key, MapUtil.getInt(params, PaginationConstants.CURRENT)
, MapUtil.getInt(params, PaginationConstants.SIZE));
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
Page result = new Page(MapUtil.getInt(params, PaginationConstants.CURRENT), MapUtil.getInt(params, PaginationConstants.SIZE));
result.setRecords(redisTemplate.opsForValue().multiGet(pages));
result.setTotal(Long.valueOf(redisTemplate.keys(key).size()));
return new R<>(result);
}
private List<String> findKeysForPage(String patternKey, int pageNum, int pageSize) {
ScanOptions options = ScanOptions.scanOptions().match(patternKey).build();
RedisSerializer<String> redisSerializer = (RedisSerializer<String>) redisTemplate.getKeySerializer();
Cursor cursor = (Cursor) redisTemplate.executeWithStickyConnection(redisConnection -> new ConvertingCursor<>(redisConnection.scan(options), redisSerializer::deserialize));
List<String> result = new ArrayList<>();
int tmpIndex = 0;
int startIndex = (pageNum - 1) * pageSize;
int end = pageNum * pageSize;
assert cursor != null;
while (cursor.hasNext()) {
if (tmpIndex >= startIndex && tmpIndex < end) {
result.add(cursor.next().toString());
tmpIndex++;
continue;
}
if (tmpIndex >= end) {
break;
}
tmpIndex++;
cursor.next();
}
return result;
}
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import com.elephant.framework.galaxy.aroad.module.system.entity.Log;
import com.elephant.framework.galaxy.aroad.module.system.service.LogService;
import com.elephant.framework.galaxy.aroad.module.system.vo.PreLogVO;
import com.elephant.framework.galaxy.aroad.response.R;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* <p>
* 日志表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@AllArgsConstructor
@RequestMapping("/admin/log")
public class LogController extends BaseController {
private final LogService logService;
/**
* 简单分页查询
*
* @param page 分页对象
* @param log 系统日志
* @return
*/
@GetMapping("/page")
public R getLogPage(Page page, Log log) {
return new R(logService.page(page, Wrappers.query(log)));
}
/**
* 删除日志
*
* @param id ID
* @return success/false
*/
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('sys_log_del')")
public R removeById(@PathVariable Long id) {
return new R(logService.removeById(id));
}
/**
* 插入日志
*
* @param log 日志实体
* @return success/false
*/
@PostMapping("/save")
public R save(@Valid @RequestBody Log log) {
return new R(logService.save(log));
}
/**
* 批量插入前端异常日志
*
* @param preLogVoList 日志实体
* @return success/false
*/
@PostMapping("/logs")
public R saveBatchLogs(@RequestBody List<PreLogVO> preLogVoList) {
return new R(logService.saveBatchLogs(preLogVoList));
}
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import com.elephant.framework.galaxy.aroad.module.system.dto.MenuTree;
import com.elephant.framework.galaxy.aroad.module.system.entity.Menu;
import com.elephant.framework.galaxy.aroad.module.system.service.MenuService;
import com.elephant.framework.galaxy.aroad.module.system.vo.MenuVO;
import com.elephant.framework.galaxy.aroad.util.SecurityUtils;
import com.elephant.framework.galaxy.aroad.util.TreeUtil;
import com.elephant.framework.galaxy.aroad.constant.CommonConstants;
import com.elephant.framework.galaxy.aroad.response.R;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* <p>
* 菜单权限表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@RequestMapping("/admin/menu")
@AllArgsConstructor
public class MenuController extends BaseController {
private final MenuService menuService;
/**
* 返回当前用户的树形菜单集合
*
* @return 当前用户的树形菜单
*/
@GetMapping
public R getUserMenu() {
// 获取符合条件的菜单
Set<MenuVO> all = new HashSet<>();
SecurityUtils.getRoles()
.forEach(roleId -> all.addAll(menuService.findMenuByRoleId(roleId)));
List<MenuTree> menuTreeList = all.stream()
.filter(menuVo -> CommonConstants.MENU.equals(menuVo.getType()))
.map(MenuTree::new)
.sorted(Comparator.comparingInt(MenuTree::getSort))
.collect(Collectors.toList());
return new R(TreeUtil.bulid(menuTreeList, -1));
}
/**
* 返回树形菜单集合
*
* @return 树形菜单
*/
@GetMapping(value = "/tree")
public R getTree() {
return new R(TreeUtil.bulidTree(menuService.list(Wrappers.emptyWrapper()), -1));
}
/**
* 返回角色的菜单集合
*
* @param roleId 角色ID
* @return 属性集合
*/
@GetMapping("/tree/{roleId}")
public List getRoleTree(@PathVariable Integer roleId) {
return menuService.findMenuByRoleId(roleId)
.stream()
.map(MenuVO::getMenuId)
.collect(Collectors.toList());
}
/**
* 通过ID查询菜单的详细信息
*
* @param id 菜单ID
* @return 菜单详细信息
*/
@GetMapping("/{id}")
public R getById(@PathVariable Integer id) {
return new R(menuService.getById(id));
}
/**
* 新增菜单
*
* @param menu 菜单信息
* @return success/false
*/
@SysLog("新增菜单")
@PostMapping
@PreAuthorize("@pms.hasPermission('sys_menu_add')")
public R save(@Valid @RequestBody Menu menu) {
return new R(menuService.save(menu));
}
/**
* 删除菜单
*
* @param id 菜单ID
* @return success/false
*/
@SysLog("删除菜单")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('sys_menu_del')")
public R removeById(@PathVariable Integer id) {
return menuService.removeMenuById(id);
}
/**
* 更新菜单
*
* @param menu
* @return
*/
@SysLog("更新菜单")
@PutMapping
@PreAuthorize("@pms.hasPermission('sys_menu_edit')")
public R update(@Valid @RequestBody Menu menu) {
return new R(menuService.updateMenuById(menu));
}
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import com.elephant.framework.galaxy.aroad.module.system.entity.OauthClientDetails;
import com.elephant.framework.galaxy.aroad.module.system.service.OauthClientDetailsService;
import com.elephant.framework.galaxy.aroad.response.R;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* <p>
* 终端信息表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@AllArgsConstructor
@RequestMapping("/admin/client")
public class OauthClientDetailsController extends BaseController {
private final OauthClientDetailsService oauthClientDetailsService;
/**
* 通过ID查询
*
* @param id ID
* @return SysOauthClientDetails
*/
@GetMapping("/{id}")
public R getById(@PathVariable Integer id) {
return new R(oauthClientDetailsService.getById(id));
}
/**
* 简单分页查询
*
* @param page 分页对象
* @param oauthClientDetails 系统终端
* @return
*/
@GetMapping("/page")
public R getOauthClientDetailsPage(Page page, OauthClientDetails oauthClientDetails) {
return new R(oauthClientDetailsService.page(page, Wrappers.query(oauthClientDetails)));
}
/**
* 添加
*
* @param oauthClientDetails 实体
* @return success/false
*/
@SysLog("添加终端")
@PostMapping
@PreAuthorize("@pms.hasPermission('sys_client_add')")
public R add(@Valid @RequestBody OauthClientDetails oauthClientDetails) {
return new R(oauthClientDetailsService.save(oauthClientDetails));
}
/**
* 删除
*
* @param id ID
* @return success/false
*/
@SysLog("删除终端")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('sys_client_del')")
public R removeById(@PathVariable String id) {
return new R(oauthClientDetailsService.removeClientDetailsById(id));
}
/**
* 编辑
*
* @param oauthClientDetails 实体
* @return success/false
*/
@SysLog("编辑终端")
@PutMapping
@PreAuthorize("@pms.hasPermission('sys_client_edit')")
public R update(@Valid @RequestBody OauthClientDetails oauthClientDetails) {
return new R(oauthClientDetailsService.updateClientDetailsById(oauthClientDetails));
}
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import com.elephant.framework.galaxy.aroad.module.system.entity.Role;
import com.elephant.framework.galaxy.aroad.module.system.service.RoleMenuService;
import com.elephant.framework.galaxy.aroad.module.system.service.RoleService;
import com.elephant.framework.galaxy.aroad.response.R;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* <p>
* 系统角色表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@AllArgsConstructor
@RequestMapping("/admin/role")
public class RoleController extends BaseController {
private final RoleService roleService;
private final RoleMenuService roleMenuService;
/**
* 通过ID查询角色信息
*
* @param id ID
* @return 角色信息
*/
@GetMapping("/{id}")
public R getById(@PathVariable Integer id) {
return new R(roleService.getById(id));
}
/**
* 添加角色
*
* @param role 角色信息
* @return success、false
*/
@SysLog("添加角色")
@PostMapping
@PreAuthorize("@pms.hasPermission('sys_role_add')")
public R save(@Valid @RequestBody Role role) {
return new R(roleService.save(role));
}
/**
* 修改角色
*
* @param role 角色信息
* @return success/false
*/
@SysLog("修改角色")
@PutMapping
@PreAuthorize("@pms.hasPermission('sys_role_edit')")
public R update(@Valid @RequestBody Role role) {
return new R(roleService.updateById(role));
}
/**
* 删除角色
*
* @param id
* @return
*/
@SysLog("删除角色")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('sys_role_del')")
public R removeById(@PathVariable Integer id) {
return new R(roleService.removeRoleById(id));
}
/**
* 获取角色列表
*
* @return 角色列表
*/
@GetMapping("/list")
public R listRoles() {
return new R(roleService.list(Wrappers.emptyWrapper()));
}
/**
* 分页查询角色信息
*
* @param page 分页对象
* @return 分页对象
*/
@GetMapping("/page")
public R getRolePage(Page page) {
return new R(roleService.page(page, Wrappers.emptyWrapper()));
}
/**
* 更新角色菜单
*
* @param roleId 角色ID
* @param menuIds 菜单ID拼成的字符串,每个id之间根据逗号分隔
* @return success、false
*/
@SysLog("更新角色菜单")
@PutMapping("/menu")
@PreAuthorize("@pms.hasPermission('sys_role_perm')")
public R saveRoleMenus(Integer roleId, @RequestParam(value = "menuIds", required = false) String menuIds) {
Role sysRole = roleService.getById(roleId);
return new R(roleMenuService.saveRoleMenus(sysRole.getRoleCode(), roleId, menuIds));
}
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 角色菜单表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@RequestMapping("/system/role-menu")
public class RoleMenuController extends BaseController {
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 系统社交登录账号表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@RequestMapping("/system/social-details")
public class SocialDetailsController extends BaseController {
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import com.elephant.framework.galaxy.aroad.module.system.dto.UserDTO;
import com.elephant.framework.galaxy.aroad.module.system.entity.User;
import com.elephant.framework.galaxy.aroad.module.system.service.UserService;
import com.elephant.framework.galaxy.aroad.util.SecurityUtils;
import com.elephant.framework.galaxy.aroad.exception.GlobalExceptionEnum;
import com.elephant.framework.galaxy.aroad.response.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* <p>
* 用户表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@RequestMapping("/admin/user")
public class UserController extends BaseController {
@Autowired
private UserService userService;
/**
* 获取当前用户全部信息
*
* @return 用户信息
*/
@GetMapping(value = {"/info"})
public R info() {
String username = SecurityUtils.getUser().getUsername();
return info(username);
}
/**
* 获取指定用户全部信息
*
* @return 用户信息
*/
@GetMapping("/info/{username}")
public R info(@PathVariable String username) {
User user = userService.getOne(Wrappers.<User>query()
.lambda().eq(User::getUsername, username));
if (user == null) {
return new R(GlobalExceptionEnum.USER_NOT_EXIST);
}
return new R(userService.findUserInfo(user));
}
/**
* 通过ID查询用户信息
*
* @param id ID
* @return 用户信息
*/
@GetMapping("/{id}")
public R user(@PathVariable Integer id) {
return new R(userService.selectUserVoById(id));
}
/**
* 根据用户名查询用户信息
*
* @param username 用户名
* @return
*/
@GetMapping("/details/{username}")
public R user(@PathVariable String username) {
User condition = new User();
condition.setUsername(username);
return new R(userService.getOne(new QueryWrapper<>(condition)));
}
/**
* 删除用户信息
*
* @param id ID
* @return R
*/
@SysLog("删除用户信息")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('sys_user_del')")
public R userDel(@PathVariable Integer id) {
User sysUser = userService.getById(id);
return new R(userService.deleteUserById(sysUser));
}
/**
* 添加用户
*
* @param userDto 用户信息
* @return success/false
*/
@SysLog("添加用户")
@PostMapping
@PreAuthorize("@pms.hasPermission('sys_user_add')")
public R user(@RequestBody UserDTO userDto) {
return new R(userService.saveUser(userDto));
}
/**
* 更新用户信息
*
* @param userDto 用户信息
* @return R
*/
@SysLog("更新用户信息")
@PutMapping
@PreAuthorize("@pms.hasPermission('sys_user_edit')")
public R updateUser(@Valid @RequestBody UserDTO userDto) {
return new R(userService.updateUser(userDto));
}
/**
* 分页查询用户
*
* @param page 参数集
* @param userDTO 查询参数列表
* @return 用户集合
*/
@GetMapping("/page")
public R getUserPage(Page page, UserDTO userDTO) {
return new R(userService.getUsersWithRolePage(page, userDTO));
}
/**
* 修改个人信息
*
* @param userDto userDto
* @return success/false
*/
@SysLog("修改个人信息")
@PutMapping("/edit")
public R updateUserInfo(@Valid @RequestBody UserDTO userDto) {
return userService.updateUserInfo(userDto);
}
/**
* @param username 用户名称
* @return 上级部门用户列表
*/
@GetMapping("/ancestor/{username}")
public R listAncestorUsers(@PathVariable String username) {
return new R(userService.listAncestorUsers(username));
}
}
package com.elephant.framework.galaxy.aroad.module.system.controller;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 用户角色表 前端控制器
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@RestController
@RequestMapping("/system/user-role")
public class UserRoleController extends BaseController {
}
package com.elephant.framework.galaxy.aroad.module.system.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author wangjian
* @date 2018/1/20
* 部门树
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class DeptTree extends TreeNode {
private String name;
}
package com.elephant.framework.galaxy.aroad.module.system.dto;
import com.elephant.framework.galaxy.aroad.module.system.vo.MenuVO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @author wangjian
* @date 2017年11月9日23:33:27
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class MenuTree extends TreeNode {
private String icon;
private String name;
private boolean spread = false;
private String path;
private String component;
private String authority;
private String redirect;
private String keepAlive;
private String code;
private String type;
private String label;
private Integer sort;
public MenuTree() {
}
public MenuTree(int id, String name, int parentId) {
this.id = id;
this.parentId = parentId;
this.name = name;
this.label = name;
}
public MenuTree(int id, String name, MenuTree parent) {
this.id = id;
this.parentId = parent.getId();
this.name = name;
this.label = name;
}
public MenuTree(MenuVO menuVo) {
this.id = menuVo.getMenuId();
this.parentId = menuVo.getParentId();
this.icon = menuVo.getIcon();
this.name = menuVo.getName();
this.path = menuVo.getPath();
this.component = menuVo.getComponent();
this.type = menuVo.getType();
this.label = menuVo.getName();
this.sort = menuVo.getSort();
this.keepAlive = menuVo.getKeepAlive();
}
}
package com.elephant.framework.galaxy.aroad.module.system.dto;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author wangjian
* @date 2017年11月9日23:33:45
*/
@Data
public class TreeNode {
protected int id;
protected int parentId;
protected List<TreeNode> children = new ArrayList<TreeNode>();
public void add(TreeNode node) {
children.add(node);
}
}
package com.elephant.framework.galaxy.aroad.module.system.dto;
import com.elephant.framework.galaxy.aroad.module.system.entity.User;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* @author wangjian
* @date 2017/11/5
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class UserDTO extends User {
/**
* 角色ID
*/
private List<Integer> role;
private Integer deptId;
/**
* 新密码
*/
private String newpassword1;
}
package com.elephant.framework.galaxy.aroad.module.system.dto;
import com.elephant.framework.galaxy.aroad.module.system.entity.User;
import lombok.Data;
import java.io.Serializable;
/**
* @Description
* @auther wangjian
* @create 2019-02-21 22:38
*/
@Data
public class UserInfo implements Serializable {
/**
* 用户基本信息
*/
private User user;
/**
* 权限标识集合
*/
private String[] permissions;
/**
* 角色集合
*/
private Integer[] roles;
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
/**
* <p>
* 部门管理
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_dept")
public class Dept extends Model<Dept> {
private static final long serialVersionUID = 1L;
@TableId(value = "dept_id", type = IdType.AUTO)
private Integer deptId;
/**
* 部门名称
*/
private String name;
/**
* 排序
*/
private Integer sort;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
private Integer parentId;
private Integer tenantId;
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public Integer getTenantId() {
return tenantId;
}
public void setTenantId(Integer tenantId) {
this.tenantId = tenantId;
}
@Override
protected Serializable pkVal() {
return this.deptId;
}
@Override
public String toString() {
return "Dept{" +
"deptId=" + deptId +
", name=" + name +
", sort=" + sort +
", createTime=" + createTime +
", updateTime=" + updateTime +
", delFlag=" + delFlag +
", parentId=" + parentId +
", tenantId=" + tenantId +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.io.Serializable;
/**
* <p>
* 部门关系表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_dept_relation")
public class DeptRelation extends Model<DeptRelation> {
private static final long serialVersionUID = 1L;
/**
* 祖先节点
*/
private Integer ancestor;
/**
* 后代节点
*/
private Integer descendant;
public Integer getAncestor() {
return ancestor;
}
public void setAncestor(Integer ancestor) {
this.ancestor = ancestor;
}
public Integer getDescendant() {
return descendant;
}
public void setDescendant(Integer descendant) {
this.descendant = descendant;
}
@Override
protected Serializable pkVal() {
return this.ancestor;
}
@Override
public String toString() {
return "DeptRelation{" +
"ancestor=" + ancestor +
", descendant=" + descendant +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
/**
* <p>
* 字典表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_dict")
public class Dict extends Model<Dict> {
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 数据值
*/
private String value;
/**
* 标签名
*/
private String label;
/**
* 类型
*/
private String type;
/**
* 描述
*/
private String description;
/**
* 排序(升序)
*/
private Integer sort;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 备注信息
*/
private String remarks;
/**
* 删除标记
*/
private String delFlag;
/**
* 所属租户
*/
private Integer tenantId;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public Integer getTenantId() {
return tenantId;
}
public void setTenantId(Integer tenantId) {
this.tenantId = tenantId;
}
@Override
protected Serializable pkVal() {
return this.id;
}
@Override
public String toString() {
return "Dict{" +
"id=" + id +
", value=" + value +
", label=" + label +
", type=" + type +
", description=" + description +
", sort=" + sort +
", createTime=" + createTime +
", updateTime=" + updateTime +
", remarks=" + remarks +
", delFlag=" + delFlag +
", tenantId=" + tenantId +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
/**
* <p>
* 日志表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_log")
public class Log extends Model<Log> {
private static final long serialVersionUID = 1L;
/**
* 编号
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 日志类型
*/
private String type;
/**
* 日志标题
*/
private String title;
/**
* 服务ID
*/
private String serviceId;
/**
* 创建者
*/
private String createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 操作IP地址
*/
private String remoteAddr;
/**
* 用户代理
*/
private String userAgent;
/**
* 请求URI
*/
private String requestUri;
/**
* 操作方式
*/
private String method;
/**
* 操作提交的数据
*/
private String params;
/**
* 执行时间
*/
private String time;
/**
* 删除标记
*/
private String delFlag;
/**
* 异常信息
*/
private String exception;
/**
* 所属租户
*/
private Integer tenantId;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
public String getRemoteAddr() {
return remoteAddr;
}
public void setRemoteAddr(String remoteAddr) {
this.remoteAddr = remoteAddr;
}
public String getUserAgent() {
return userAgent;
}
public void setUserAgent(String userAgent) {
this.userAgent = userAgent;
}
public String getRequestUri() {
return requestUri;
}
public void setRequestUri(String requestUri) {
this.requestUri = requestUri;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public String getException() {
return exception;
}
public void setException(String exception) {
this.exception = exception;
}
public Integer getTenantId() {
return tenantId;
}
public void setTenantId(Integer tenantId) {
this.tenantId = tenantId;
}
@Override
protected Serializable pkVal() {
return this.id;
}
@Override
public String toString() {
return "Log{" +
"id=" + id +
", type=" + type +
", title=" + title +
", serviceId=" + serviceId +
", createBy=" + createBy +
", createTime=" + createTime +
", updateTime=" + updateTime +
", remoteAddr=" + remoteAddr +
", userAgent=" + userAgent +
", requestUri=" + requestUri +
", method=" + method +
", params=" + params +
", time=" + time +
", delFlag=" + delFlag +
", exception=" + exception +
", tenantId=" + tenantId +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.time.LocalDateTime;
import java.io.Serializable;
/**
* <p>
* 菜单权限表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_menu")
public class Menu extends Model<Menu> {
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
@TableId(value = "menu_id")
private Integer menuId;
/**
* 菜单名称
*/
private String name;
/**
* 菜单权限标识
*/
private String permission;
/**
* 前端URL
*/
private String path;
/**
* 父菜单ID
*/
private Integer parentId;
/**
* 图标
*/
private String icon;
/**
* VUE页面
*/
private String component;
/**
* 排序值
*/
private Integer sort;
/**
* 0-开启,1- 关闭
*/
private String keepAlive;
/**
* 菜单类型 (0菜单 1按钮)
*/
private String type;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 逻辑删除标记(0--正常 1--删除)
*/
private String delFlag;
public Integer getMenuId() {
return menuId;
}
public void setMenuId(Integer menuId) {
this.menuId = menuId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getComponent() {
return component;
}
public void setComponent(String component) {
this.component = component;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public String getKeepAlive() {
return keepAlive;
}
public void setKeepAlive(String keepAlive) {
this.keepAlive = keepAlive;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
@Override
protected Serializable pkVal() {
return this.menuId;
}
@Override
public String toString() {
return "Menu{" +
"menuId=" + menuId +
", name=" + name +
", permission=" + permission +
", path=" + path +
", parentId=" + parentId +
", icon=" + icon +
", component=" + component +
", sort=" + sort +
", keepAlive=" + keepAlive +
", type=" + type +
", createTime=" + createTime +
", updateTime=" + updateTime +
", delFlag=" + delFlag +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.io.Serializable;
/**
* <p>
* 终端信息表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_oauth_client_details")
public class OauthClientDetails extends Model<OauthClientDetails> {
private static final long serialVersionUID = 1L;
private String clientId;
private String resourceIds;
private String clientSecret;
private String scope;
private String authorizedGrantTypes;
private String webServerRedirectUri;
private String authorities;
private Integer accessTokenValidity;
private Integer refreshTokenValidity;
private String additionalInformation;
private String autoapprove;
/**
* 所属租户
*/
private Integer tenantId;
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public String getResourceIds() {
return resourceIds;
}
public void setResourceIds(String resourceIds) {
this.resourceIds = resourceIds;
}
public String getClientSecret() {
return clientSecret;
}
public void setClientSecret(String clientSecret) {
this.clientSecret = clientSecret;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getAuthorizedGrantTypes() {
return authorizedGrantTypes;
}
public void setAuthorizedGrantTypes(String authorizedGrantTypes) {
this.authorizedGrantTypes = authorizedGrantTypes;
}
public String getWebServerRedirectUri() {
return webServerRedirectUri;
}
public void setWebServerRedirectUri(String webServerRedirectUri) {
this.webServerRedirectUri = webServerRedirectUri;
}
public String getAuthorities() {
return authorities;
}
public void setAuthorities(String authorities) {
this.authorities = authorities;
}
public Integer getAccessTokenValidity() {
return accessTokenValidity;
}
public void setAccessTokenValidity(Integer accessTokenValidity) {
this.accessTokenValidity = accessTokenValidity;
}
public Integer getRefreshTokenValidity() {
return refreshTokenValidity;
}
public void setRefreshTokenValidity(Integer refreshTokenValidity) {
this.refreshTokenValidity = refreshTokenValidity;
}
public String getAdditionalInformation() {
return additionalInformation;
}
public void setAdditionalInformation(String additionalInformation) {
this.additionalInformation = additionalInformation;
}
public String getAutoapprove() {
return autoapprove;
}
public void setAutoapprove(String autoapprove) {
this.autoapprove = autoapprove;
}
public Integer getTenantId() {
return tenantId;
}
public void setTenantId(Integer tenantId) {
this.tenantId = tenantId;
}
@Override
protected Serializable pkVal() {
return this.clientId;
}
@Override
public String toString() {
return "OauthClientDetails{" +
"clientId=" + clientId +
", resourceIds=" + resourceIds +
", clientSecret=" + clientSecret +
", scope=" + scope +
", authorizedGrantTypes=" + authorizedGrantTypes +
", webServerRedirectUri=" + webServerRedirectUri +
", authorities=" + authorities +
", accessTokenValidity=" + accessTokenValidity +
", refreshTokenValidity=" + refreshTokenValidity +
", additionalInformation=" + additionalInformation +
", autoapprove=" + autoapprove +
", tenantId=" + tenantId +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
/**
* <p>
* 系统角色表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_role")
public class Role extends Model<Role> {
private static final long serialVersionUID = 1L;
@TableId(value = "role_id", type = IdType.AUTO)
private Integer roleId;
private String roleName;
private String roleCode;
private String roleDesc;
/**
* 数据权限类型
*/
private String dsType;
/**
* 数据权限范围
*/
private String dsScope;
private LocalDateTime createTime;
private LocalDateTime updateTime;
/**
* 删除标识(0-正常,1-删除)
*/
private String delFlag;
private Integer tenantId;
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleCode() {
return roleCode;
}
public void setRoleCode(String roleCode) {
this.roleCode = roleCode;
}
public String getRoleDesc() {
return roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
public String getDsType() {
return dsType;
}
public void setDsType(String dsType) {
this.dsType = dsType;
}
public String getDsScope() {
return dsScope;
}
public void setDsScope(String dsScope) {
this.dsScope = dsScope;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public Integer getTenantId() {
return tenantId;
}
public void setTenantId(Integer tenantId) {
this.tenantId = tenantId;
}
@Override
protected Serializable pkVal() {
return this.roleId;
}
@Override
public String toString() {
return "Role{" +
"roleId=" + roleId +
", roleName=" + roleName +
", roleCode=" + roleCode +
", roleDesc=" + roleDesc +
", dsType=" + dsType +
", dsScope=" + dsScope +
", createTime=" + createTime +
", updateTime=" + updateTime +
", delFlag=" + delFlag +
", tenantId=" + tenantId +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.io.Serializable;
/**
* <p>
* 角色菜单表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_role_menu")
public class RoleMenu extends Model<RoleMenu> {
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
private Integer roleId;
/**
* 菜单ID
*/
private Integer menuId;
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public Integer getMenuId() {
return menuId;
}
public void setMenuId(Integer menuId) {
this.menuId = menuId;
}
@Override
protected Serializable pkVal() {
return this.roleId;
}
@Override
public String toString() {
return "RoleMenu{" +
"roleId=" + roleId +
", menuId=" + menuId +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
/**
* <p>
* 路由配置表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_route_conf")
public class RouteConf extends Model<RouteConf> {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 路由名称
*/
private String routeName;
/**
* 路由ID
*/
private String routeId;
/**
* 断言
*/
private String predicates;
/**
* 过滤器
*/
private String filters;
private String uri;
/**
* 排序
*/
private Integer order;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 删除标记
*/
private String delFlag;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getRouteName() {
return routeName;
}
public void setRouteName(String routeName) {
this.routeName = routeName;
}
public String getRouteId() {
return routeId;
}
public void setRouteId(String routeId) {
this.routeId = routeId;
}
public String getPredicates() {
return predicates;
}
public void setPredicates(String predicates) {
this.predicates = predicates;
}
public String getFilters() {
return filters;
}
public void setFilters(String filters) {
this.filters = filters;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
@Override
protected Serializable pkVal() {
return this.id;
}
@Override
public String toString() {
return "RouteConf{" +
"id=" + id +
", routeName=" + routeName +
", routeId=" + routeId +
", predicates=" + predicates +
", filters=" + filters +
", uri=" + uri +
", order=" + order +
", createTime=" + createTime +
", updateTime=" + updateTime +
", delFlag=" + delFlag +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
/**
* <p>
* 系统社交登录账号表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_social_details")
public class SocialDetails extends Model<SocialDetails> {
private static final long serialVersionUID = 1L;
/**
* 主鍵
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 类型
*/
private String type;
/**
* 描述
*/
private String remark;
/**
* appid
*/
private String appId;
/**
* app_secret
*/
private String appSecret;
/**
* 回调地址
*/
private String redirectUrl;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 删除标记
*/
private String delFlag;
/**
* 所属租户
*/
private Integer tenantId;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getAppSecret() {
return appSecret;
}
public void setAppSecret(String appSecret) {
this.appSecret = appSecret;
}
public String getRedirectUrl() {
return redirectUrl;
}
public void setRedirectUrl(String redirectUrl) {
this.redirectUrl = redirectUrl;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public Integer getTenantId() {
return tenantId;
}
public void setTenantId(Integer tenantId) {
this.tenantId = tenantId;
}
@Override
protected Serializable pkVal() {
return this.id;
}
@Override
public String toString() {
return "SocialDetails{" +
"id=" + id +
", type=" + type +
", remark=" + remark +
", appId=" + appId +
", appSecret=" + appSecret +
", redirectUrl=" + redirectUrl +
", createTime=" + createTime +
", updateTime=" + updateTime +
", delFlag=" + delFlag +
", tenantId=" + tenantId +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
/**
* <p>
* 用户表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_user")
public class User extends Model<User> {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "user_id", type = IdType.AUTO)
private Integer userId;
/**
* 用户名
*/
private String username;
private String password;
/**
* 随机盐
*/
private String salt;
/**
* 简介
*/
private String phone;
/**
* 头像
*/
private String avatar;
/**
* 部门ID
*/
private Integer deptId;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 0-正常,9-锁定
*/
private String lockFlag;
/**
* 0-正常,1-删除
*/
private String delFlag;
/**
* 微信openid
*/
private String wxOpenid;
/**
* QQ openid
*/
private String qqOpenid;
/**
* 所属租户
*/
private Integer tenantId;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public LocalDateTime getUpdateTime() {
return updateTime;
}
public void setUpdateTime(LocalDateTime updateTime) {
this.updateTime = updateTime;
}
public String getLockFlag() {
return lockFlag;
}
public void setLockFlag(String lockFlag) {
this.lockFlag = lockFlag;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public String getWxOpenid() {
return wxOpenid;
}
public void setWxOpenid(String wxOpenid) {
this.wxOpenid = wxOpenid;
}
public String getQqOpenid() {
return qqOpenid;
}
public void setQqOpenid(String qqOpenid) {
this.qqOpenid = qqOpenid;
}
public Integer getTenantId() {
return tenantId;
}
public void setTenantId(Integer tenantId) {
this.tenantId = tenantId;
}
@Override
protected Serializable pkVal() {
return this.userId;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", username=" + username +
", password=" + password +
", salt=" + salt +
", phone=" + phone +
", avatar=" + avatar +
", deptId=" + deptId +
", createTime=" + createTime +
", updateTime=" + updateTime +
", lockFlag=" + lockFlag +
", delFlag=" + delFlag +
", wxOpenid=" + wxOpenid +
", qqOpenid=" + qqOpenid +
", tenantId=" + tenantId +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.io.Serializable;
/**
* <p>
* 用户角色表
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@TableName("sys_user_role")
public class UserRole extends Model<UserRole> {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Integer userId;
/**
* 角色ID
*/
private Integer roleId;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
@Override
protected Serializable pkVal() {
return this.userId;
}
@Override
public String toString() {
return "UserRole{" +
"userId=" + userId +
", roleId=" + roleId +
"}";
}
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dept;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* 部门管理 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface DeptMapper extends BaseMapper<Dept> {
/**
* 关联dept——relation
*
* @return 数据列表
*/
List<Dept> listDepts();
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.DeptRelation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 部门关系表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface DeptRelationMapper extends BaseMapper<DeptRelation> {
/**
* 删除部门关系表数据
*
* @param id 部门ID
*/
void deleteDeptRelationsById(Integer id);
void deleteDeptRelations(DeptRelation deptRelation);
/**
* 更改部分关系表数据
*
* @param deptRelation
*/
void insertDeptRelations(DeptRelation deptRelation);
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dict;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 字典表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface DictMapper extends BaseMapper<Dict> {
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.Log;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 日志表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface LogMapper extends BaseMapper<Log> {
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.Menu;
import com.elephant.framework.galaxy.aroad.module.system.vo.MenuVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* 菜单权限表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface MenuMapper extends BaseMapper<Menu> {
/**
* 通过角色编号查询菜单
*
* @param roleId 角色ID
* @return
*/
List<MenuVO> listMenusByRoleId(Integer roleId);
/**
* 通过角色ID查询权限
*
* @param roleIds Ids
* @return
*/
List<String> listPermissionsByRoleIds(String roleIds);
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.OauthClientDetails;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 终端信息表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface OauthClientDetailsMapper extends BaseMapper<OauthClientDetails> {
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.Role;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* 系统角色表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface RoleMapper extends BaseMapper<Role> {
/**
* 通过用户ID,查询角色信息
*
* @param userId
* @return
*/
List<Role> listRolesByUserId(Integer userId);
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.RoleMenu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 角色菜单表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.SocialDetails;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 系统社交登录账号表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface SocialDetailsMapper extends BaseMapper<SocialDetails> {
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.common.datascope.DataScope;
import com.elephant.framework.galaxy.aroad.module.system.dto.UserDTO;
import com.elephant.framework.galaxy.aroad.module.system.entity.User;
import com.elephant.framework.galaxy.aroad.module.system.vo.UserVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 用户表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface UserMapper extends BaseMapper<User> {
/**
* 通过用户名查询用户信息(含有角色信息)
*
* @param username 用户名
* @return userVo
*/
UserVO getUserVoByUsername(String username);
/**
* 分页查询用户信息(含角色)
*
* @param page 分页
* @param userDTO 查询参数
* @param dataScope
* @return list
*/
IPage<List<UserVO>> getUserVosPage(Page page, @Param("query") UserDTO userDTO, DataScope dataScope);
/**
* 通过ID查询用户信息
*
* @param id 用户ID
* @return userVo
*/
UserVO getUserVoById(Integer id);
}
package com.elephant.framework.galaxy.aroad.module.system.mapper;
import com.elephant.framework.galaxy.aroad.module.system.entity.UserRole;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* 用户角色表 Mapper 接口
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface UserRoleMapper extends BaseMapper<UserRole> {
/**
* 根据用户Id删除该用户的角色关系
*
* @param userId 用户ID
* @return boolean
* @author 寻欢·李
* @date 2017年12月7日 16:31:38
*/
Boolean deleteByUserId(@Param("userId") Integer userId);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dept;
import com.elephant.framework.galaxy.aroad.module.system.entity.DeptRelation;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 部门关系表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface DeptRelationService extends IService<DeptRelation> {
/**
* 新建部门关系
*
* @param sysDept 部门
*/
void insertDeptRelation(Dept sysDept);
/**
* 通过ID删除部门关系
*
* @param id
*/
void deleteAllDeptRealtion(Integer id);
/**
* 更新部门关系
*
* @param relation
*/
void updateDeptRealtion(DeptRelation relation);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.dto.DeptTree;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dept;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 部门管理 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface DeptService extends IService<Dept> {
/**
* 查询部门树菜单
*
* @return 树
*/
List<DeptTree> selectTree();
/**
* 查询用户部门树
*
* @return
*/
List<DeptTree> getUserTree();
/**
* 添加信息部门
*
* @param sysDept
* @return
*/
Boolean saveDept(Dept sysDept);
/**
* 删除部门
*
* @param id 部门 ID
* @return 成功、失败
*/
Boolean removeDeptById(Integer id);
/**
* 更新部门
*
* @param sysDept 部门信息
* @return 成功、失败
*/
Boolean updateDeptById(Dept sysDept);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dict;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 字典表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface DictService extends IService<Dict> {
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.entity.Log;
import com.elephant.framework.galaxy.aroad.module.system.vo.PreLogVO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 日志表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface LogService extends IService<Log> {
/**
* 批量插入前端错误日志
*
* @param preLogVoList 日志信息
* @return true/false
*/
Boolean saveBatchLogs(List<PreLogVO> preLogVoList);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.entity.Menu;
import com.elephant.framework.galaxy.aroad.module.system.vo.MenuVO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.response.R;
import java.util.List;
/**
* <p>
* 菜单权限表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface MenuService extends IService<Menu> {
/**
* 通过角色编号查询URL 权限
*
* @param roleId 角色ID
* @return 菜单列表
*/
List<MenuVO> findMenuByRoleId(Integer roleId);
/**
* 级联删除菜单
*
* @param id 菜单ID
* @return 成功、失败
*/
R removeMenuById(Integer id);
/**
* 更新菜单信息
*
* @param menu 菜单信息
* @return 成功、失败
*/
Boolean updateMenuById(Menu menu);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.entity.OauthClientDetails;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 终端信息表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface OauthClientDetailsService extends IService<OauthClientDetails> {
/**
* 通过ID删除客户端
*
* @param id
* @return
*/
Boolean removeClientDetailsById(String id);
/**
* 根据客户端信息
*
* @param oauthClientDetails
* @return
*/
Boolean updateClientDetailsById(OauthClientDetails oauthClientDetails);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.entity.RoleMenu;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 角色菜单表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface RoleMenuService extends IService<RoleMenu> {
/**
* 更新角色菜单
*
* @param role
* @param roleId 角色
* @param menuIds 菜单ID拼成的字符串,每个id之间根据逗号分隔
* @return
*/
Boolean saveRoleMenus(String role, Integer roleId, String menuIds);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.entity.Role;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 系统角色表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface RoleService extends IService<Role> {
/**
* 通过用户ID,查询角色信息
*
* @param userId
* @return
*/
List<Role> findRolesByUserId(Integer userId);
/**
* 通过角色ID,删除角色
*
* @param id
* @return
*/
Boolean removeRoleById(Integer id);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.dto.UserInfo;
import com.elephant.framework.galaxy.aroad.module.system.entity.SocialDetails;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 系统社交登录账号表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface SocialDetailsService extends IService<SocialDetails> {
/**
* 根据入参查询用户信息
*
* @param inStr
* @return
*/
UserInfo getUserInfo(String inStr);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.elephant.framework.galaxy.aroad.module.system.entity.UserRole;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 用户角色表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface UserRoleService extends IService<UserRole> {
/**
* 根据用户Id删除该用户的角色关系
*
* @param userId 用户ID
* @return boolean
* @author 寻欢·李
* @date 2017年12月7日 16:31:38
*/
Boolean deleteByUserId(Integer userId);
}
package com.elephant.framework.galaxy.aroad.module.system.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.system.dto.UserDTO;
import com.elephant.framework.galaxy.aroad.module.system.dto.UserInfo;
import com.elephant.framework.galaxy.aroad.module.system.entity.User;
import com.elephant.framework.galaxy.aroad.module.system.vo.UserVO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.response.R;
import java.util.List;
/**
* <p>
* 用户表 服务类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
public interface UserService extends IService<User> {
/**
* 通过查用户的全部信息
*
* @param user 用户
* @return
*/
UserInfo findUserInfo(User user);
/**
* 分页查询用户信息(含有角色信息)
*
* @param page 分页对象
* @param userDTO 参数列表
* @return
*/
IPage getUsersWithRolePage(Page page, UserDTO userDTO);
/**
* 删除用户
*
* @param user 用户
* @return boolean
*/
Boolean deleteUserById(User user);
/**
* 更新当前用户基本信息
*
* @param userDto 用户信息
* @return Boolean
*/
R<Boolean> updateUserInfo(UserDTO userDto);
/**
* 更新指定用户信息
*
* @param userDto 用户信息
* @return
*/
Boolean updateUser(UserDTO userDto);
/**
* 通过ID查询用户信息
*
* @param id 用户ID
* @return 用户信息
*/
UserVO selectUserVoById(Integer id);
/**
* 查询上级部门的用户信息
*
* @param username 用户名
* @return R
*/
List<User> listAncestorUsers(String username);
/**
* 保存用户信息
*
* @param userDto DTO 对象
* @return success/fail
*/
Boolean saveUser(UserDTO userDto);
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dept;
import com.elephant.framework.galaxy.aroad.module.system.entity.DeptRelation;
import com.elephant.framework.galaxy.aroad.module.system.mapper.DeptRelationMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.DeptRelationService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 部门关系表 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Service
@AllArgsConstructor
public class DeptRelationServiceImpl extends ServiceImpl<DeptRelationMapper, DeptRelation> implements DeptRelationService {
private final DeptRelationMapper deptRelationMapper;
/**
* 维护部门关系
*
* @param dept 部门
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void insertDeptRelation(Dept dept) {
//增加部门关系表
DeptRelation condition = new DeptRelation();
condition.setDescendant(dept.getParentId());
List<DeptRelation> relationList = deptRelationMapper
.selectList(Wrappers.<DeptRelation>query().lambda()
.eq(DeptRelation::getDescendant, dept.getParentId()))
.stream().map(relation -> {
relation.setDescendant(dept.getDeptId());
return relation;
}).collect(Collectors.toList());
if (CollUtil.isNotEmpty(relationList)) {
this.saveBatch(relationList);
}
//自己也要维护到关系表中
DeptRelation own = new DeptRelation();
own.setDescendant(dept.getDeptId());
own.setAncestor(dept.getDeptId());
deptRelationMapper.insert(own);
}
/**
* 通过ID删除部门关系
*
* @param id
*/
@Override
public void deleteAllDeptRealtion(Integer id) {
baseMapper.deleteDeptRelationsById(id);
}
/**
* 更新部门关系
*
* @param relation
*/
@Override
public void updateDeptRealtion(DeptRelation relation) {
baseMapper.deleteDeptRelations(relation);
baseMapper.insertDeptRelations(relation);
}
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.elephant.framework.galaxy.aroad.module.system.dto.DeptTree;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dept;
import com.elephant.framework.galaxy.aroad.module.system.entity.DeptRelation;
import com.elephant.framework.galaxy.aroad.module.system.mapper.DeptMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.DeptRelationService;
import com.elephant.framework.galaxy.aroad.module.system.service.DeptService;
import com.elephant.framework.galaxy.aroad.util.SecurityUtils;
import com.elephant.framework.galaxy.aroad.util.TreeUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 部门管理 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Service
@AllArgsConstructor
public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements DeptService {
private final DeptRelationService deptRelationService;
/**
* 添加信息部门
*
* @param dept 部门
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveDept(Dept dept) {
Dept deptSave = new Dept();
BeanUtils.copyProperties(dept, deptSave);
this.save(deptSave);
deptRelationService.insertDeptRelation(deptSave);
return Boolean.TRUE;
}
/**
* 删除部门
*
* @param id 部门 ID
* @return 成功、失败
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean removeDeptById(Integer id) {
//级联删除部门
List<Integer> idList = deptRelationService
.list(Wrappers.<DeptRelation>query().lambda()
.eq(DeptRelation::getAncestor, id))
.stream()
.map(DeptRelation::getDescendant)
.collect(Collectors.toList());
if (CollUtil.isNotEmpty(idList)) {
this.removeByIds(idList);
}
//删除部门级联关系
deptRelationService.deleteAllDeptRealtion(id);
return Boolean.TRUE;
}
/**
* 更新部门
*
* @param dept 部门信息
* @return 成功、失败
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateDeptById(Dept dept) {
//更新部门状态
this.updateById(dept);
//更新部门关系
DeptRelation relation = new DeptRelation();
relation.setAncestor(dept.getParentId());
relation.setDescendant(dept.getDeptId());
deptRelationService.updateDeptRealtion(relation);
return Boolean.TRUE;
}
/**
* 查询全部部门树
*
* @return 树
*/
@Override
public List<DeptTree> selectTree() {
return getDeptTree(this.list(Wrappers.emptyWrapper()));
}
/**
* 查询用户部门树
*
* @return
*/
@Override
public List<DeptTree> getUserTree() {
Integer deptId = SecurityUtils.getUser().getDeptId();
List<Integer> descendantIdList = deptRelationService
.list(Wrappers.<DeptRelation>query().lambda()
.eq(DeptRelation::getAncestor, deptId))
.stream().map(DeptRelation::getDescendant)
.collect(Collectors.toList());
List<Dept> deptList = baseMapper.selectBatchIds(descendantIdList);
return getDeptTree(deptList);
}
/**
* 构建部门树
*
* @param depts 部门
* @return
*/
private List<DeptTree> getDeptTree(List<Dept> depts) {
List<DeptTree> treeList = depts.stream()
.filter(dept -> !dept.getDeptId().equals(dept.getParentId()))
.map(dept -> {
DeptTree node = new DeptTree();
node.setId(dept.getDeptId());
node.setParentId(dept.getParentId());
node.setName(dept.getName());
return node;
}).collect(Collectors.toList());
return TreeUtil.bulid(treeList, 0);
}
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import com.elephant.framework.galaxy.aroad.module.system.entity.Dict;
import com.elephant.framework.galaxy.aroad.module.system.mapper.DictMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.DictService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 字典表 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Service
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService {
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import com.elephant.framework.galaxy.aroad.module.system.entity.Log;
import com.elephant.framework.galaxy.aroad.module.system.mapper.LogMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.LogService;
import com.elephant.framework.galaxy.aroad.module.system.vo.PreLogVO;
import com.elephant.framework.galaxy.aroad.constant.CommonConstants;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 日志表 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Service
public class LogServiceImpl extends ServiceImpl<LogMapper, Log> implements LogService {
/**
* 批量插入前端错误日志
*
* @param preLogVoList 日志信息
* @return true/false
*/
@Override
public Boolean saveBatchLogs(List<PreLogVO> preLogVoList) {
List<Log> sysLogs = preLogVoList.stream()
.map(pre -> {
Log log = new Log();
log.setType(CommonConstants.STATUS_LOCK);
log.setTitle(pre.getInfo());
log.setException(pre.getStack());
log.setParams(pre.getMessage());
log.setCreateTime(LocalDateTime.now());
log.setRequestUri(pre.getUrl());
log.setCreateBy(pre.getUser());
return log;
})
.collect(Collectors.toList());
return this.saveBatch(sysLogs);
}
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.elephant.framework.galaxy.aroad.module.system.entity.Menu;
import com.elephant.framework.galaxy.aroad.module.system.entity.RoleMenu;
import com.elephant.framework.galaxy.aroad.module.system.mapper.MenuMapper;
import com.elephant.framework.galaxy.aroad.module.system.mapper.RoleMenuMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.MenuService;
import com.elephant.framework.galaxy.aroad.module.system.vo.MenuVO;
import com.elephant.framework.galaxy.aroad.exception.GlobalExceptionEnum;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.response.R;
import lombok.AllArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 菜单权限表 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Service
@AllArgsConstructor
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
private final RoleMenuMapper roleMenuMapper;
@Override
@Cacheable(value = "menu_details", key = "#roleId + '_menu'")
public List<MenuVO> findMenuByRoleId(Integer roleId) {
return baseMapper.listMenusByRoleId(roleId);
}
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = "menu_details", allEntries = true)
public R removeMenuById(Integer id) {
// 查询父节点为当前节点的节点
List<Menu> menuList = this.list(Wrappers.<Menu>query()
.lambda().eq(Menu::getParentId, id));
if (CollUtil.isNotEmpty(menuList)) {
return new R(GlobalExceptionEnum.MENU_HAS_CHILD);
}
roleMenuMapper
.delete(Wrappers.<RoleMenu>query()
.lambda().eq(RoleMenu::getMenuId, id));
//删除当前菜单及其子菜单
return new R(this.removeById(id));
}
@Override
@CacheEvict(value = "menu_details", allEntries = true)
public Boolean updateMenuById(Menu sysMenu) {
return this.updateById(sysMenu);
}
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import com.elephant.framework.galaxy.aroad.module.system.entity.OauthClientDetails;
import com.elephant.framework.galaxy.aroad.module.system.mapper.OauthClientDetailsMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.OauthClientDetailsService;
import com.elephant.framework.galaxy.aroad.constant.SecurityConstants;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
/**
* <p>
* 终端信息表 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Service
public class OauthClientDetailsServiceImpl extends ServiceImpl<OauthClientDetailsMapper, OauthClientDetails> implements OauthClientDetailsService {
/**
* 通过ID删除客户端
*
* @param id
* @return
*/
@Override
@CacheEvict(value = SecurityConstants.CLIENT_DETAILS_KEY, key = "#id")
public Boolean removeClientDetailsById(String id) {
return this.removeById(id);
}
/**
* 根据客户端信息
*
* @param clientDetails
* @return
*/
@Override
@CacheEvict(value = SecurityConstants.CLIENT_DETAILS_KEY, key = "#clientDetails.clientId")
public Boolean updateClientDetailsById(OauthClientDetails clientDetails) {
return this.updateById(clientDetails);
}
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.elephant.framework.galaxy.aroad.module.system.entity.RoleMenu;
import com.elephant.framework.galaxy.aroad.module.system.mapper.RoleMenuMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.RoleMenuService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 角色菜单表 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Service
@AllArgsConstructor
public class RoleMenuServiceImpl extends ServiceImpl<RoleMenuMapper, RoleMenu> implements RoleMenuService {
private final CacheManager cacheManager;
/**
* @param role
* @param roleId 角色
* @param menuIds 菜单ID拼成的字符串,每个id之间根据逗号分隔
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = "menu_details", key = "#roleId + '_menu'")
public Boolean saveRoleMenus(String role, Integer roleId, String menuIds) {
this.remove(Wrappers.<RoleMenu>query().lambda()
.eq(RoleMenu::getRoleId, roleId));
if (StrUtil.isBlank(menuIds)) {
return Boolean.TRUE;
}
List<RoleMenu> roleMenuList = Arrays
.stream(menuIds.split(","))
.map(menuId -> {
RoleMenu roleMenu = new RoleMenu();
roleMenu.setRoleId(roleId);
roleMenu.setMenuId(Integer.valueOf(menuId));
return roleMenu;
}).collect(Collectors.toList());
//清空userinfo
cacheManager.getCache("user_details").clear();
return this.saveBatch(roleMenuList);
}
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.elephant.framework.galaxy.aroad.module.system.entity.Role;
import com.elephant.framework.galaxy.aroad.module.system.entity.RoleMenu;
import com.elephant.framework.galaxy.aroad.module.system.mapper.RoleMapper;
import com.elephant.framework.galaxy.aroad.module.system.mapper.RoleMenuMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.RoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 系统角色表 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Service
@AllArgsConstructor
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {
private RoleMenuMapper roleMenuMapper;
/**
* 通过用户ID,查询角色信息
*
* @param userId
* @return
*/
@Override
public List<Role> findRolesByUserId(Integer userId) {
return baseMapper.listRolesByUserId(userId);
}
/**
* 通过角色ID,删除角色,并清空角色菜单缓存
*
* @param id
* @return
*/
@Override
@CacheEvict(value = "menu_details", allEntries = true)
@Transactional(rollbackFor = Exception.class)
public Boolean removeRoleById(Integer id) {
roleMenuMapper.delete(Wrappers
.<RoleMenu>update().lambda()
.eq(RoleMenu::getRoleId, id));
return this.removeById(id);
}
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import com.elephant.framework.galaxy.aroad.module.system.entity.UserRole;
import com.elephant.framework.galaxy.aroad.module.system.mapper.UserRoleMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.UserRoleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 用户角色表 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Service
public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements UserRoleService {
/**
* 根据用户Id删除该用户的角色关系
*
* @param userId 用户ID
* @return boolean
* @author 寻欢·李
* @date 2017年12月7日 16:31:38
*/
@Override
public Boolean deleteByUserId(Integer userId) {
return baseMapper.deleteByUserId(userId);
}
}
package com.elephant.framework.galaxy.aroad.module.system.service.impl;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.common.datascope.DataScope;
import com.elephant.framework.galaxy.aroad.module.system.dto.UserDTO;
import com.elephant.framework.galaxy.aroad.module.system.dto.UserInfo;
import com.elephant.framework.galaxy.aroad.module.system.entity.*;
import com.elephant.framework.galaxy.aroad.module.system.mapper.UserMapper;
import com.elephant.framework.galaxy.aroad.module.system.service.*;
import com.elephant.framework.galaxy.aroad.module.system.vo.MenuVO;
import com.elephant.framework.galaxy.aroad.module.system.vo.UserVO;
import com.elephant.framework.galaxy.aroad.util.SecurityUtils;
import com.elephant.framework.galaxy.aroad.constant.CommonConstants;
import com.elephant.framework.galaxy.aroad.module.system.entity.*;
import com.elephant.framework.galaxy.aroad.module.system.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.response.R;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* <p>
* 用户表 服务实现类
* </p>
*
* @author wangjian
* @since 2019-02-21
*/
@Slf4j
@Service
@AllArgsConstructor
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();
private final DeptService deptService;
private final RoleService roleService;
private final MenuService menuService;
private final UserRoleService userRoleService;
private final DeptRelationService deptRelationService;
/**
* 保存用户信息
*
* @param userDto DTO 对象
* @return success/fail
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveUser(UserDTO userDto) {
User sysUser = new User();
BeanUtils.copyProperties(userDto, sysUser);
sysUser.setDelFlag(CommonConstants.STATUS_NORMAL);
sysUser.setPassword(ENCODER.encode(userDto.getPassword()));
baseMapper.insert(sysUser);
List<UserRole> userRoleList = userDto.getRole()
.stream().map(roleId -> {
UserRole userRole = new UserRole();
userRole.setUserId(sysUser.getUserId());
userRole.setRoleId(roleId);
return userRole;
}).collect(Collectors.toList());
return userRoleService.saveBatch(userRoleList);
}
/**
* 通过查用户的全部信息
*
* @param user 用户
* @return
*/
@Override
public UserInfo findUserInfo(User user) {
UserInfo userInfo = new UserInfo();
userInfo.setUser(user);
//设置角色列表 (ID)
List<Integer> roleIds = roleService.findRolesByUserId(user.getUserId())
.stream()
.map(Role::getRoleId)
.collect(Collectors.toList());
userInfo.setRoles(ArrayUtil.toArray(roleIds, Integer.class));
//设置权限列表(menu.permission)
Set<String> permissions = new HashSet<>();
roleIds.forEach(roleId -> {
List<String> permissionList = menuService.findMenuByRoleId(roleId)
.stream()
.filter(menuVo -> StringUtils.isNotEmpty(menuVo.getPermission()))
.map(MenuVO::getPermission)
.collect(Collectors.toList());
permissions.addAll(permissionList);
});
userInfo.setPermissions(ArrayUtil.toArray(permissions, String.class));
return userInfo;
}
/**
* 分页查询用户信息(含有角色信息)
*
* @param page 分页对象
* @param userDTO 参数列表
* @return
*/
@Override
public IPage getUsersWithRolePage(Page page, UserDTO userDTO) {
return baseMapper.getUserVosPage(page, userDTO, new DataScope());
}
/**
* 通过ID查询用户信息
*
* @param id 用户ID
* @return 用户信息
*/
@Override
public UserVO selectUserVoById(Integer id) {
return baseMapper.getUserVoById(id);
}
/**
* 删除用户
*
* @param sysUser 用户
* @return Boolean
*/
@Override
@CacheEvict(value = "user_details", key = "#sysUser.username")
public Boolean deleteUserById(User sysUser) {
userRoleService.deleteByUserId(sysUser.getUserId());
this.removeById(sysUser.getUserId());
return Boolean.TRUE;
}
@Override
@CacheEvict(value = "user_details", key = "#userDto.username")
public R updateUserInfo(UserDTO userDto) {
UserVO userVO = baseMapper.getUserVoByUsername(userDto.getUsername());
User sysUser = new User();
if (StrUtil.isNotBlank(userDto.getPassword())
&& StrUtil.isNotBlank(userDto.getNewpassword1())) {
if (ENCODER.matches(userDto.getPassword(), userVO.getPassword())) {
sysUser.setPassword(ENCODER.encode(userDto.getNewpassword1()));
} else {
log.warn("原密码错误,修改密码失败:{}", userDto.getUsername());
return new R("fail", "原密码错误,修改失败");
}
}
sysUser.setPhone(userDto.getPhone());
sysUser.setUserId(userVO.getUserId());
sysUser.setAvatar(userDto.getAvatar());
return new R(this.updateById(sysUser));
}
@Override
@CacheEvict(value = "user_details", key = "#userDto.username")
public Boolean updateUser(UserDTO userDto) {
User sysUser = new User();
BeanUtils.copyProperties(userDto, sysUser);
sysUser.setUpdateTime(LocalDateTime.now());
if (StrUtil.isNotBlank(userDto.getPassword())) {
sysUser.setPassword(ENCODER.encode(userDto.getPassword()));
}
this.updateById(sysUser);
userRoleService.remove(Wrappers.<UserRole>update().lambda()
.eq(UserRole::getUserId, userDto.getUserId()));
userDto.getRole().forEach(roleId -> {
UserRole userRole = new UserRole();
userRole.setUserId(sysUser.getUserId());
userRole.setRoleId(roleId);
userRole.insert();
});
return Boolean.TRUE;
}
/**
* 查询上级部门的用户信息
*
* @param username 用户名
* @return R
*/
@Override
public List<User> listAncestorUsers(String username) {
User sysUser = this.getOne(Wrappers.<User>query().lambda()
.eq(User::getUsername, username));
Dept sysDept = deptService.getById(sysUser.getDeptId());
if (sysDept == null) {
return null;
}
Integer parentId = sysDept.getParentId();
return this.list(Wrappers.<User>query().lambda()
.eq(User::getDeptId, parentId));
}
/**
* 获取当前用户的子部门信息
*
* @return 子部门列表
*/
private List<Integer> getChildDepts() {
Integer deptId = SecurityUtils.getUser().getDeptId();
//获取当前部门的子部门
return deptRelationService
.list(Wrappers.<DeptRelation>query().lambda()
.eq(DeptRelation::getAncestor, deptId))
.stream()
.map(DeptRelation::getDescendant)
.collect(Collectors.toList());
}
}
package com.elephant.framework.galaxy.aroad.module.system.vo;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @Description 菜单权限
* @auther wangjian
* @create 2019-02-21 23:14
*/
@Data
public class MenuVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
private Integer menuId;
/**
* 菜单名称
*/
private String name;
/**
* 菜单权限标识
*/
private String permission;
/**
* 父菜单ID
*/
private Integer parentId;
/**
* 图标
*/
private String icon;
/**
* 一个路径
*/
private String path;
/**
* VUE页面
*/
private String component;
/**
* 排序值
*/
private Integer sort;
/**
* 菜单类型 (0菜单 1按钮)
*/
private String type;
/**
* 是否缓冲
*/
private String keepAlive;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 0--正常 1--删除
*/
private String delFlag;
@Override
public int hashCode() {
return menuId.hashCode();
}
/**
* menuId 相同则相同
*
* @param obj
* @return
*/
@Override
public boolean equals(Object obj) {
if (obj instanceof MenuVO) {
Integer targetMenuId = ((MenuVO) obj).getMenuId();
return menuId.equals(targetMenuId);
}
return super.equals(obj);
}
}
package com.elephant.framework.galaxy.aroad.module.system.vo;
import lombok.Data;
/**
* @author wangjian
* @date 2018/8/27
* 前端日志vo
*/
@Data
public class PreLogVO {
private String url;
private String time;
private String user;
private String type;
private String message;
private String stack;
private String info;
}
package com.elephant.framework.galaxy.aroad.module.system.vo;
import com.elephant.framework.galaxy.aroad.module.system.entity.Role;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
/**
* @Description
* @auther wangjian
* @create 2019-02-18 15:19
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVO {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
private Integer userId;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 随机盐
*/
private String salt;
/**
* 微信openid
*/
private String wxOpenid;
/**
* QQ openid
*/
private String qqOpenid;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 0-正常,1-删除
*/
private String delFlag;
/**
* 锁定标记
*/
private String lockFlag;
/**
* 简介
*/
private String phone;
/**
* 头像
*/
private String avatar;
/**
* 部门ID
*/
private Integer deptId;
/**
* 租户ID
*/
private Integer tenantId;
/**
* 部门名称
*/
private String deptName;
/**
* 角色列表
*/
private List<Role> roleList;
}
package com.elephant.framework.galaxy.aroad.module.system.vo.echarts;
//import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.List;
/**
* @Description
* @Author xuzhitu
* @Date 2019/3/11 下午11:53
*/
@Data
public class BarEchartsVo {
private String title;
private String subTitle;
private List<String> legendData;
private List<String> xAxisData;
private List<String> yAxisData;
private List<BarSeriesVo> series;
}
package com.elephant.framework.galaxy.aroad.module.system.vo.echarts;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.List;
/**
* @Description
* @Author xuzhitu
* @Date 2019/3/11 下午11:53
*/
@Data
public class BarSeriesVo {
private String name;
private String type;
private String stack;
private JSONObject label;
private List<Double> data;
}
package com.elephant.framework.galaxy.aroad.module.test.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.test.entity.Car;
import com.elephant.framework.galaxy.aroad.module.test.service.CarService;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* 汽车表
*
* @author xuzhitu
* @date 2019-03-05 17:24:25
*/
@RestController
@AllArgsConstructor
@RequestMapping("/test/car")
public class CarController extends BaseController {
private final CarService carService;
/**
* 分页查询
* @param page 分页对象
* @param car 汽车表
* @return
*/
@GetMapping("/page")
public R getCarPage(Page page, Car car) {
return new R<>(carService.page(page,Wrappers.query(car)));
}
/**
* 通过id查询汽车表
* @param carId id
* @return R
*/
@GetMapping("/{carId}")
public R getById(@PathVariable("carId") Integer carId){
return new R<>(carService.getById(carId));
}
/**
* 新增汽车表
* @param car 汽车表
* @return R
*/
@SysLog("新增汽车表")
@PostMapping
public R save(@RequestBody Car car){
return new R<>(carService.save(car));
}
/**
* 修改汽车表
* @param car 汽车表
* @return R
*/
@SysLog("修改汽车表")
@PutMapping
public R updateById(@RequestBody Car car){
return new R<>(carService.updateById(car));
}
/**
* 通过id删除汽车表
* @param carId id
* @return R
*/
@SysLog("删除汽车表")
@DeleteMapping("/{carId}")
public R removeById(@PathVariable Integer carId){
return new R<>(carService.removeById(carId));
}
}
package com.elephant.framework.galaxy.aroad.module.test.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 汽车表
*
* @author xuzhitu
* @date 2019-03-05 17:24:25
*/
@Data
@TableName("t_car")
@EqualsAndHashCode(callSuper = true)
public class Car extends Model<Car> {
private static final long serialVersionUID = 1L;
/**
* 汽车ID
*/
@TableId
private Integer carId;
/**
* 汽车名称
*/
private String carName;
/**
* 汽车价格
*/
private Integer carPrice;
/**
* 排序值
*/
private Integer sort;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 逻辑删除标记(0--正常 1--删除)
*/
private String delFlag;
/**
* 状态
*/
private String status;
}
package com.elephant.framework.galaxy.aroad.module.test.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.test.entity.Car;
/**
* 汽车表
*
* @author xuzhitu
* @date 2019-03-05 17:24:25
*/
public interface CarMapper extends BaseMapper<Car> {
}
package com.elephant.framework.galaxy.aroad.module.test.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.test.entity.Car;
/**
* 汽车表
*
* @author xuzhitu
* @date 2019-03-05 17:24:25
*/
public interface CarService extends IService<Car> {
}
package com.elephant.framework.galaxy.aroad.module.test.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.test.entity.Car;
import com.elephant.framework.galaxy.aroad.module.test.mapper.CarMapper;
import com.elephant.framework.galaxy.aroad.module.test.service.CarService;
import org.springframework.stereotype.Service;
/**
* 汽车表
*
* @author xuzhitu
* @date 2019-03-05 17:24:25
*/
@Service
public class CarServiceImpl extends ServiceImpl<CarMapper, Car> implements CarService {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlmd;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljbxxGlmdService;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* 公路密度
*
* @author xuzhitu
* @date 2019-03-12 21:59:19
*/
@RestController
@AllArgsConstructor
@RequestMapping("/zhtj/zhtjgljbxxglmd")
public class ZhtjGljbxxGlmdController extends BaseController {
private final ZhtjGljbxxGlmdService zhtjGljbxxGlmdService;
/**
* 分页查询
* @param page 分页对象
* @param zhtjGljbxxGlmd 公路密度
* @return
*/
@GetMapping("/page")
public R getZhtjGljbxxGlmdPage(Page page, ZhtjGljbxxGlmd zhtjGljbxxGlmd) {
return new R<>(zhtjGljbxxGlmdService.page(page,Wrappers.query(zhtjGljbxxGlmd)));
}
/**
* 通过id查询公路密度
* @param id id
* @return R
*/
@GetMapping("/{id}")
public R getById(@PathVariable("id") Integer id){
return new R<>(zhtjGljbxxGlmdService.getById(id));
}
/**
* 新增公路密度
* @param zhtjGljbxxGlmd 公路密度
* @return R
*/
@SysLog("新增公路密度")
@PostMapping
public R save(@RequestBody ZhtjGljbxxGlmd zhtjGljbxxGlmd){
return new R<>(zhtjGljbxxGlmdService.save(zhtjGljbxxGlmd));
}
/**
* 修改公路密度
* @param zhtjGljbxxGlmd 公路密度
* @return R
*/
@SysLog("修改公路密度")
@PutMapping
public R updateById(@RequestBody ZhtjGljbxxGlmd zhtjGljbxxGlmd){
return new R<>(zhtjGljbxxGlmdService.updateById(zhtjGljbxxGlmd));
}
/**
* 通过id删除公路密度
* @param id id
* @return R
*/
@SysLog("删除公路密度")
@DeleteMapping("/{id}")
public R removeById(@PathVariable Integer id){
return new R<>(zhtjGljbxxGlmdService.removeById(id));
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGltclc;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljbxxGltclcService;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
*  公路通车里程表
*
* @author xuzhitu
* @date 2019-03-11 09:50:32
*/
@RestController
@AllArgsConstructor
@RequestMapping("/zhtj/zhtjgljbxxgltclc")
public class ZhtjGljbxxGltclcController extends BaseController {
private final ZhtjGljbxxGltclcService zhtjGljbxxGltclcService;
/**
* 分页查询
* @param page 分页对象
* @param zhtjGljbxxGltclc  公路通车里程表
* @return
*/
@GetMapping("/page")
public R getZhtjGljbxxGltclcPage(Page page, ZhtjGljbxxGltclc zhtjGljbxxGltclc) {
return new R<>(zhtjGljbxxGltclcService.page(page,Wrappers.query(zhtjGljbxxGltclc)));
}
/**
* 通过id查询 公路通车里程表
* @param id id
* @return R
*/
@GetMapping("/{id}")
public R getById(@PathVariable("id") Integer id){
return new R<>(zhtjGljbxxGltclcService.getById(id));
}
/**
* 新增 公路通车里程表
* @param zhtjGljbxxGltclc  公路通车里程表
* @return R
*/
@SysLog("新增 公路通车里程表")
@PostMapping
public R save(@RequestBody ZhtjGljbxxGltclc zhtjGljbxxGltclc){
return new R<>(zhtjGljbxxGltclcService.save(zhtjGljbxxGltclc));
}
/**
* 修改 公路通车里程表
* @param zhtjGljbxxGltclc  公路通车里程表
* @return R
*/
@SysLog("修改 公路通车里程表")
@PutMapping
public R updateById(@RequestBody ZhtjGljbxxGltclc zhtjGljbxxGltclc){
return new R<>(zhtjGljbxxGltclcService.updateById(zhtjGljbxxGltclc));
}
/**
* 通过id删除 公路通车里程表
* @param id id
* @return R
*/
@SysLog("删除 公路通车里程表")
@DeleteMapping("/{id}")
public R removeById(@PathVariable Integer id){
return new R<>(zhtjGljbxxGltclcService.removeById(id));
}
/**
* 公路通车里程Echarts信息
* @param year 年份
* @return
*/
@GetMapping("/chartinfo")
public R getZhtjGljbxxGltclcChartInfo(@RequestParam String year) {
return new R<>(zhtjGljbxxGltclcService.getTclcEchartData(year));
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlzbdb;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljbxxGlzbdbService;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* 公路指标对比表
*
* @author xuzhitu
* @date 2019-03-12 17:08:49
*/
@RestController
@AllArgsConstructor
@RequestMapping("/zhtj/zhtjgljbxxglzbdb")
public class ZhtjGljbxxGlzbdbController extends BaseController {
private final ZhtjGljbxxGlzbdbService zhtjGljbxxGlzbdbService;
/**
* 分页查询
* @param page 分页对象
* @param zhtjGljbxxGlzbdb 公路指标对比表
* @return
*/
@GetMapping("/page")
public R getZhtjGljbxxGlzbdbPage(Page page, ZhtjGljbxxGlzbdb zhtjGljbxxGlzbdb) {
return new R<>(zhtjGljbxxGlzbdbService.page(page,Wrappers.query(zhtjGljbxxGlzbdb)));
}
/**
* 通过id查询公路指标对比表
* @param id id
* @return R
*/
@GetMapping("/{id}")
public R getById(@PathVariable("id") Integer id){
return new R<>(zhtjGljbxxGlzbdbService.getById(id));
}
/**
* 新增公路指标对比表
* @param zhtjGljbxxGlzbdb 公路指标对比表
* @return R
*/
@SysLog("新增公路指标对比表")
@PostMapping
public R save(@RequestBody ZhtjGljbxxGlzbdb zhtjGljbxxGlzbdb){
return new R<>(zhtjGljbxxGlzbdbService.save(zhtjGljbxxGlzbdb));
}
/**
* 修改公路指标对比表
* @param zhtjGljbxxGlzbdb 公路指标对比表
* @return R
*/
@SysLog("修改公路指标对比表")
@PutMapping
public R updateById(@RequestBody ZhtjGljbxxGlzbdb zhtjGljbxxGlzbdb){
return new R<>(zhtjGljbxxGlzbdbService.updateById(zhtjGljbxxGlzbdb));
}
/**
* 通过id删除公路指标对比表
* @param id id
* @return R
*/
@SysLog("删除公路指标对比表")
@DeleteMapping("/{id}")
public R removeById(@PathVariable Integer id){
return new R<>(zhtjGljbxxGlzbdbService.removeById(id));
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxXxctdqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljbxxXxctdqkService;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* 县乡村通达情况
*
* @author xuzhitu
* @date 2019-03-12 21:59:39
*/
@RestController
@AllArgsConstructor
@RequestMapping("/zhtj/zhtjgljbxxxxctdqk")
public class ZhtjGljbxxXxctdqkController extends BaseController {
private final ZhtjGljbxxXxctdqkService zhtjGljbxxXxctdqkService;
/**
* 分页查询
* @param page 分页对象
* @param zhtjGljbxxXxctdqk 县乡村通达情况
* @return
*/
@GetMapping("/page")
public R getZhtjGljbxxXxctdqkPage(Page page, ZhtjGljbxxXxctdqk zhtjGljbxxXxctdqk) {
return new R<>(zhtjGljbxxXxctdqkService.page(page,Wrappers.query(zhtjGljbxxXxctdqk)));
}
/**
* 通过id查询县乡村通达情况
* @param id id
* @return R
*/
@GetMapping("/{id}")
public R getById(@PathVariable("id") Integer id){
return new R<>(zhtjGljbxxXxctdqkService.getById(id));
}
/**
* 新增县乡村通达情况
* @param zhtjGljbxxXxctdqk 县乡村通达情况
* @return R
*/
@SysLog("新增县乡村通达情况")
@PostMapping
public R save(@RequestBody ZhtjGljbxxXxctdqk zhtjGljbxxXxctdqk){
return new R<>(zhtjGljbxxXxctdqkService.save(zhtjGljbxxXxctdqk));
}
/**
* 修改县乡村通达情况
* @param zhtjGljbxxXxctdqk 县乡村通达情况
* @return R
*/
@SysLog("修改县乡村通达情况")
@PutMapping
public R updateById(@RequestBody ZhtjGljbxxXxctdqk zhtjGljbxxXxctdqk){
return new R<>(zhtjGljbxxXxctdqkService.updateById(zhtjGljbxxXxctdqk));
}
/**
* 通过id删除县乡村通达情况
* @param id id
* @return R
*/
@SysLog("删除县乡村通达情况")
@DeleteMapping("/{id}")
public R removeById(@PathVariable Integer id){
return new R<>(zhtjGljbxxXxctdqkService.removeById(id));
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljsdjqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljsdjqkService;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* 综合统计_公路技术等级情况
*
* @author wangjian
* @date 2019-03-11 17:24:55
*/
@RestController
@AllArgsConstructor
@RequestMapping("/zhtj/zhtjgljsdjqk")
public class ZhtjGljsdjqkController extends BaseController {
private final ZhtjGljsdjqkService zhtjGljsdjqkService;
/**
* 分页查询
* @param page 分页对象
* @param zhtjGljsdjqk 综合统计_公路技术等级情况
* @return
*/
@GetMapping("/page")
public R getZhtjGljsdjqkPage(Page page, ZhtjGljsdjqk zhtjGljsdjqk) {
return new R<>(zhtjGljsdjqkService.page(page,Wrappers.query(zhtjGljsdjqk)));
}
/**
* 通过id查询综合统计_公路技术等级情况
* @param id id
* @return R
*/
@GetMapping("/{id}")
public R getById(@PathVariable("id") Integer id){
return new R<>(zhtjGljsdjqkService.getById(id));
}
/**
* 新增综合统计_公路技术等级情况
* @param zhtjGljsdjqk 综合统计_公路技术等级情况
* @return R
*/
@SysLog("新增综合统计_公路技术等级情况")
@PostMapping
public R save(@RequestBody ZhtjGljsdjqk zhtjGljsdjqk){
return new R<>(zhtjGljsdjqkService.save(zhtjGljsdjqk));
}
/**
* 修改综合统计_公路技术等级情况
* @param zhtjGljsdjqk 综合统计_公路技术等级情况
* @return R
*/
@SysLog("修改综合统计_公路技术等级情况")
@PutMapping
public R updateById(@RequestBody ZhtjGljsdjqk zhtjGljsdjqk){
return new R<>(zhtjGljsdjqkService.updateById(zhtjGljsdjqk));
}
/**
* 通过id删除综合统计_公路技术等级情况
* @param id id
* @return R
*/
@SysLog("删除综合统计_公路技术等级情况")
@DeleteMapping("/{id}")
public R removeById(@PathVariable Integer id){
return new R<>(zhtjGljsdjqkService.removeById(id));
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljszkpd;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljszkpdService;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* 综合统计_公路技术状况评定
*
* @author xuyanqi
* @date 2019-03-11 17:58:58
*/
@RestController
@AllArgsConstructor
@RequestMapping("/zhtj/zhtjgljszkpd")
public class ZhtjGljszkpdController extends BaseController {
private final ZhtjGljszkpdService zhtjGljszkpdService;
/**
* 分页查询
* @param page 分页对象
* @param zhtjGljszkpd 综合统计_公路技术状况评定
* @return
*/
@GetMapping("/page")
public R getZhtjGljszkpdPage(Page page, ZhtjGljszkpd zhtjGljszkpd) {
return new R<>(zhtjGljszkpdService.page(page,Wrappers.query(zhtjGljszkpd)));
}
/**
* 通过id查询综合统计_公路技术状况评定
* @param id id
* @return R
*/
@GetMapping("/{id}")
public R getById(@PathVariable("id") Integer id){
return new R<>(zhtjGljszkpdService.getById(id));
}
/**
* 新增综合统计_公路技术状况评定
* @param zhtjGljszkpd 综合统计_公路技术状况评定
* @return R
*/
@SysLog("新增综合统计_公路技术状况评定")
@PostMapping
public R save(@RequestBody ZhtjGljszkpd zhtjGljszkpd){
return new R<>(zhtjGljszkpdService.save(zhtjGljszkpd));
}
/**
* 修改综合统计_公路技术状况评定
* @param zhtjGljszkpd 综合统计_公路技术状况评定
* @return R
*/
@SysLog("修改综合统计_公路技术状况评定")
@PutMapping
public R updateById(@RequestBody ZhtjGljszkpd zhtjGljszkpd){
return new R<>(zhtjGljszkpdService.updateById(zhtjGljszkpd));
}
/**
* 通过id删除综合统计_公路技术状况评定
* @param id id
* @return R
*/
@SysLog("删除综合统计_公路技术状况评定")
@DeleteMapping("/{id}")
public R removeById(@PathVariable Integer id){
return new R<>(zhtjGljszkpdService.removeById(id));
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGllmqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGllmqkService;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* 综合统计_公路路面情况
*
* @author xuyanqi
* @date 2019-03-12 11:04:15
*/
@RestController
@AllArgsConstructor
@RequestMapping("/zhtj/zhtjgllmqk")
public class ZhtjGllmqkController extends BaseController {
private final ZhtjGllmqkService zhtjGllmqkService;
/**
* 分页查询
* @param page 分页对象
* @param zhtjGllmqk 综合统计_公路路面情况
* @return
*/
@GetMapping("/page")
public R getZhtjGllmqkPage(Page page, ZhtjGllmqk zhtjGllmqk) {
return new R<>(zhtjGllmqkService.page(page,Wrappers.query(zhtjGllmqk)));
}
/**
* 通过id查询综合统计_公路路面情况
* @param id id
* @return R
*/
@GetMapping("/{id}")
public R getById(@PathVariable("id") Integer id){
return new R<>(zhtjGllmqkService.getById(id));
}
/**
* 新增综合统计_公路路面情况
* @param zhtjGllmqk 综合统计_公路路面情况
* @return R
*/
@SysLog("新增综合统计_公路路面情况")
@PostMapping
public R save(@RequestBody ZhtjGllmqk zhtjGllmqk){
return new R<>(zhtjGllmqkService.save(zhtjGllmqk));
}
/**
* 修改综合统计_公路路面情况
* @param zhtjGllmqk 综合统计_公路路面情况
* @return R
*/
@SysLog("修改综合统计_公路路面情况")
@PutMapping
public R updateById(@RequestBody ZhtjGllmqk zhtjGllmqk){
return new R<>(zhtjGllmqkService.updateById(zhtjGllmqk));
}
/**
* 通过id删除综合统计_公路路面情况
* @param id id
* @return R
*/
@SysLog("删除综合统计_公路路面情况")
@DeleteMapping("/{id}")
public R removeById(@PathVariable Integer id){
return new R<>(zhtjGllmqkService.removeById(id));
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkQlqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGlqsqkQlqkService;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* 综合统计_公路桥隧情况_桥梁情况
*
* @author xuyanqi
* @date 2019-03-12 08:57:24
*/
@RestController
@AllArgsConstructor
@RequestMapping("/zhtj/zhtjglqsqkqlqk")
public class ZhtjGlqsqkQlqkController extends BaseController {
private final ZhtjGlqsqkQlqkService zhtjGlqsqkQlqkService;
/**
* 分页查询
* @param page 分页对象
* @param zhtjGlqsqkQlqk 综合统计_公路桥隧情况_桥梁情况
* @return
*/
@GetMapping("/page")
public R getZhtjGlqsqkQlqkPage(Page page, ZhtjGlqsqkQlqk zhtjGlqsqkQlqk) {
return new R<>(zhtjGlqsqkQlqkService.page(page,Wrappers.query(zhtjGlqsqkQlqk)));
}
/**
* 通过id查询综合统计_公路桥隧情况_桥梁情况
* @param id id
* @return R
*/
@GetMapping("/{id}")
public R getById(@PathVariable("id") Integer id){
return new R<>(zhtjGlqsqkQlqkService.getById(id));
}
/**
* 新增综合统计_公路桥隧情况_桥梁情况
* @param zhtjGlqsqkQlqk 综合统计_公路桥隧情况_桥梁情况
* @return R
*/
@SysLog("新增综合统计_公路桥隧情况_桥梁情况")
@PostMapping
public R save(@RequestBody ZhtjGlqsqkQlqk zhtjGlqsqkQlqk){
return new R<>(zhtjGlqsqkQlqkService.save(zhtjGlqsqkQlqk));
}
/**
* 修改综合统计_公路桥隧情况_桥梁情况
* @param zhtjGlqsqkQlqk 综合统计_公路桥隧情况_桥梁情况
* @return R
*/
@SysLog("修改综合统计_公路桥隧情况_桥梁情况")
@PutMapping
public R updateById(@RequestBody ZhtjGlqsqkQlqk zhtjGlqsqkQlqk){
return new R<>(zhtjGlqsqkQlqkService.updateById(zhtjGlqsqkQlqk));
}
/**
* 通过id删除综合统计_公路桥隧情况_桥梁情况
* @param id id
* @return R
*/
@SysLog("删除综合统计_公路桥隧情况_桥梁情况")
@DeleteMapping("/{id}")
public R removeById(@PathVariable Integer id){
return new R<>(zhtjGlqsqkQlqkService.removeById(id));
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkSdqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGlqsqkSdqkService;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* 综合统计_公路桥隧情况_隧道情况
*
* @author xuyanqi
* @date 2019-03-11 20:53:25
*/
@RestController
@AllArgsConstructor
@RequestMapping("/zhtj/zhtjglqsqksdqk")
public class ZhtjGlqsqkSdqkController extends BaseController {
private final ZhtjGlqsqkSdqkService zhtjGlqsqkSdqkService;
/**
* 分页查询
* @param page 分页对象
* @param zhtjGlqsqkSdqk 综合统计_公路桥隧情况_隧道情况
* @return
*/
@GetMapping("/page")
public R getZhtjGlqsqkSdqkPage(Page page, ZhtjGlqsqkSdqk zhtjGlqsqkSdqk) {
return new R<>(zhtjGlqsqkSdqkService.page(page,Wrappers.query(zhtjGlqsqkSdqk)));
}
/**
* 通过id查询综合统计_公路桥隧情况_隧道情况
* @param id id
* @return R
*/
@GetMapping("/{id}")
public R getById(@PathVariable("id") Integer id){
return new R<>(zhtjGlqsqkSdqkService.getById(id));
}
/**
* 新增综合统计_公路桥隧情况_隧道情况
* @param zhtjGlqsqkSdqk 综合统计_公路桥隧情况_隧道情况
* @return R
*/
@SysLog("新增综合统计_公路桥隧情况_隧道情况")
@PostMapping
public R save(@RequestBody ZhtjGlqsqkSdqk zhtjGlqsqkSdqk){
return new R<>(zhtjGlqsqkSdqkService.save(zhtjGlqsqkSdqk));
}
/**
* 修改综合统计_公路桥隧情况_隧道情况
* @param zhtjGlqsqkSdqk 综合统计_公路桥隧情况_隧道情况
* @return R
*/
@SysLog("修改综合统计_公路桥隧情况_隧道情况")
@PutMapping
public R updateById(@RequestBody ZhtjGlqsqkSdqk zhtjGlqsqkSdqk){
return new R<>(zhtjGlqsqkSdqkService.updateById(zhtjGlqsqkSdqk));
}
/**
* 通过id删除综合统计_公路桥隧情况_隧道情况
* @param id id
* @return R
*/
@SysLog("删除综合统计_公路桥隧情况_隧道情况")
@DeleteMapping("/{id}")
public R removeById(@PathVariable Integer id){
return new R<>(zhtjGlqsqkSdqkService.removeById(id));
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 公路密度
*
* @author xuzhitu
* @date 2019-03-12 21:59:19
*/
@Data
@TableName("T_ZHTJ_GLJBXX_GLMD")
@EqualsAndHashCode(callSuper = true)
public class ZhtjGljbxxGlmd extends Model<ZhtjGljbxxGlmd> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 统计年份
*/
private String year;
/**
* 地市名称
*/
private String area;
/**
* 土地面积(百平方公里)
*/
private Double tdmj;
/**
* 人口数量(万人)
*/
private Double rksl;
/**
* 公路里程(公里)
*/
private Double gllc;
/**
* 公路密度_按面积计算(公里/百平方公里)
*/
private Double glmdMj;
/**
* 按面积计算_名次
*/
private Integer glmdMjMc;
/**
* 公路密度_按人口计算(公里/万人)
*/
private Double glmdRk;
/**
* 按人口计算_名次
*/
private Integer glmdRkMc;
/**
* 排序
*/
private Integer sort;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人
*/
private String updatePerson;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 状态:根据具体需求定义
*/
private String status;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
/**
* 备注信息
*/
private String remarks;
}
package com.elephant.framework.galaxy.aroad.module.zhtj.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
*  公路通车里程表
*
* @author xuzhitu
* @date 2019-03-11 09:50:32
*/
@Data
@TableName("T_ZHTJ_GLJBXX_GLTCLC")
@EqualsAndHashCode(callSuper = true)
public class ZhtjGljbxxGltclc extends Model<ZhtjGljbxxGltclc> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 年份
*/
private String year;
/**
* 地市名称
*/
private String area;
/**
* 里程合计(单位:公里)
*/
private Double total;
/**
* 国道(单位:公里)
*/
private Double guodao;
/**
* 省道(单位:公里)
*/
private Double shengdao;
/**
* 县道(单位:公里)
*/
private Double xiandao;
/**
* 乡道(单位:公里)
*/
private Double xiangdao;
/**
* 专用公路(单位:公里)
*/
private Double zygl;
/**
* 村道(单位:公里)
*/
private Double cundao;
/**
* 排序
*/
private Integer sort;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人
*/
private String updatePerson;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 状态:根据具体需求定义
*/
private String status;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
/**
* 备注信息
*/
private String remarks;
}
package com.elephant.framework.galaxy.aroad.module.zhtj.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 公路指标对比表
*
* @author xuzhitu
* @date 2019-03-12 17:08:49
*/
@Data
@TableName("T_ZHTJ_GLJBXX_GLZBDB")
@EqualsAndHashCode(callSuper = true)
public class ZhtjGljbxxGlzbdb extends Model<ZhtjGljbxxGlzbdb> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 统计年份
*/
private String year;
/**
* 统计指标
*/
private String tjzb;
/**
* 计算单位
*/
private String comunit;
/**
* 本年年底
*/
private Double thisYear;
/**
* 去年年底
*/
private Double lastYear;
/**
* 比去年增加数
*/
private Double increNum;
/**
* 增加百分比
*/
private Double increPer;
/**
* 排序
*/
private Integer sort;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人
*/
private String updatePerson;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 状态:根据具体需求定义
*/
private String status;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
/**
* 备注信息
*/
private String remarks;
}
package com.elephant.framework.galaxy.aroad.module.zhtj.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 县乡村通达情况
*
* @author xuzhitu
* @date 2019-03-12 21:59:39
*/
@Data
@TableName("T_ZHTJ_GLJBXX_XXCTDQK")
@EqualsAndHashCode(callSuper = true)
public class ZhtjGljbxxXxctdqk extends Model<ZhtjGljbxxXxctdqk> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 统计年份
*/
private String year;
/**
* 地市名称
*/
private String area;
/**
* 县(市、区)合计(单位:个)
*/
private Integer xsqTotal;
/**
* 县(市、区)_其中乡乡(镇镇)晴雨通车的县_数量(单位:个)
*/
private Integer xsqQytcNum;
/**
* 县(市、区)_其中乡乡(镇镇)晴雨通车的县_占比(%)
*/
private Double xsqQytcPer;
/**
* 乡(镇)合计(单位:个)
*/
private Integer xzTotal;
/**
* 乡(镇)_其中通公路的乡镇_数量(单位:个)
*/
private Integer xzTglNum;
/**
* 乡(镇)_其中通公路的乡镇_占比(%)
*/
private Double xzTglPer;
/**
* 乡(镇)_其中晴雨通车的乡镇_数量(单位:个)
*/
private Integer xzQytcNum;
/**
* 乡(镇)_其中晴雨通车的乡镇_占比(%)
*/
private Double xzQytcPer;
/**
* 行政村合计(单位:个)
*/
private Integer xzcTotal;
/**
* 行政村_其中通公路的行政村_数量(单位:个)
*/
private Integer xzcTglNum;
/**
* 行政村_其中通公路的行政村_占比(%)
*/
private Double xzcTglPer;
/**
* 行政村_其中通油(水泥)路行政村_数量(单位:个)
*/
private Integer xzcTylNum;
/**
* 行政村_其中通油(水泥)路行政村_占比(%)
*/
private Double xzcTylPer;
/**
* 排序
*/
private Integer sort;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人
*/
private String updatePerson;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 状态:根据具体需求定义
*/
private String status;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
/**
* 备注信息
*/
private String remarks;
}
package com.elephant.framework.galaxy.aroad.module.zhtj.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 综合统计_公路技术等级情况
*
* @author wangjian
* @date 2019-03-12 08:37:12
*/
@Data
@TableName("T_ZHTJ_GLJSDJQK")
@EqualsAndHashCode(callSuper = true)
public class ZhtjGljsdjqk extends Model<ZhtjGljsdjqk> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 统计年份
*/
private String year;
/**
* 地市名称
*/
private String area;
/**
* 统计类型:总计、国省道合计、农村公路
*/
private String type;
/**
* 行政等级:高速、国道、省道、县道、乡道、专用公路、村道
*/
private String xzdj;
/**
* 全部等级公路合计(单位:公里)
*/
private Double total;
/**
* 各类型小计(单位:公里)
*/
private Double totalSmall;
/**
* 高速公路(单位:公里)
*/
private Double highRoad;
/**
* 一级公路(单位:公里)
*/
private Double firstRoad;
/**
* 二级公路(单位:公里)
*/
private Double secondRoad;
/**
* 三级公路(单位:公里)
*/
private Double threeRoad;
/**
* 四级公路(单位:公里)
*/
private Double fourRoad;
/**
* 等外公路(单位:公里)
*/
private Double otherRoad;
/**
* 排序
*/
private Integer sort;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人
*/
private String updatePerson;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 状态:根据具体需求定义
*/
private String status;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
/**
* 备注信息
*/
private String remarks;
}
package com.elephant.framework.galaxy.aroad.module.zhtj.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 综合统计_公路技术状况评定
*
* @author xuyanqi
* @date 2019-03-11 17:58:58
*/
@Data
@TableName("T_ZHTJ_GLJSZKPD")
@EqualsAndHashCode(callSuper = true)
public class ZhtjGljszkpd extends Model<ZhtjGljszkpd> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 统计年份
*/
private String year;
/**
* 地市名称
*/
private String area;
/**
* 统计类型:高速公路、国省道合计、国道、省道
*/
private String type;
/**
* 评定里程(单位:公里)
*/
private Double pdlc;
/**
* 优(单位:公里)
*/
private Double you;
/**
* 良(单位:公里)
*/
private Double liang;
/**
* 中(单位:公里)
*/
private Double zhong;
/**
* 次(单位:公里)
*/
private Double ci;
/**
* 差(单位:公里)
*/
private Double cha;
/**
* 优良路率(%)
*/
private Double ylPer;
/**
* 排序
*/
private Integer sort;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人
*/
private String updatePerson;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 状态:根据具体需求定义
*/
private String status;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
/**
* 备注信息
*/
private String remarks;
}
package com.elephant.framework.galaxy.aroad.module.zhtj.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 综合统计_公路路面情况
*
* @author xuyanqi
* @date 2019-03-12 11:04:15
*/
@Data
@TableName("T_ZHTJ_GLLMQK")
@EqualsAndHashCode(callSuper = true)
public class ZhtjGllmqk extends Model<ZhtjGllmqk> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 统计年份
*/
private String year;
/**
* 地市名称
*/
private String area;
/**
* 统计类型:总计、国省道合计、农村公路
*/
private String type;
/**
* 行政等级:高速、国道、省道、县道、乡道、专用公路、村道
*/
private String xzdj;
/**
* 公路里程合计(单位:公里)
*/
private Double total;
/**
* 有铺装路面小计(单位:公里)
*/
private Double ypzlmSum;
/**
* 有铺装路面_沥青混凝土路面(单位:公里)
*/
private Double ypzlmLqhnt;
/**
* 有铺装路面_水泥混凝土路面(单位:公里)
*/
private Double ypzlmSnhnt;
/**
* 简易铺装路面(单位:公里)
*/
private Double jypzlm;
/**
* 未铺装路面(单位:公里)
*/
private Double wpzlm;
/**
* 排序
*/
private Integer sort;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人
*/
private String updatePerson;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 状态:根据具体需求定义
*/
private String status;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
/**
* 备注信息
*/
private String remarks;
}
package com.elephant.framework.galaxy.aroad.module.zhtj.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 综合统计_公路桥隧情况_桥梁情况
*
* @author xuyanqi
* @date 2019-03-12 08:57:24
*/
@Data
@TableName("T_ZHTJ_GLQSQK_QLQK")
@EqualsAndHashCode(callSuper = true)
public class ZhtjGlqsqkQlqk extends Model<ZhtjGlqsqkQlqk> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 统计年份
*/
private String year;
/**
* 地市名称
*/
private String area;
/**
* 合计长度(单位:米)
*/
private Double zjCd;
/**
* 合计数量(单位:座)
*/
private Integer zjSl;
/**
* 特大桥(单位:米)
*/
private Double tdqCd;
/**
* 特大桥(单位:座)
*/
private Integer tdqSl;
/**
* 大桥(单位:米)
*/
private Double dqCd;
/**
* 大桥(单位:座)
*/
private Integer dqSl;
/**
* 中桥(单位:米)
*/
private Double zqCd;
/**
* 中桥(单位:座)
*/
private Integer zqSl;
/**
* 小桥(单位:米)
*/
private Double xqCd;
/**
* 小桥(单位:座)
*/
private Integer xqSl;
/**
* 排序
*/
private Integer sort;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人
*/
private String updatePerson;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 状态:根据具体需求定义
*/
private String status;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
/**
* 备注信息
*/
private String remarks;
}
package com.elephant.framework.galaxy.aroad.module.zhtj.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* 综合统计_公路桥隧情况_隧道情况
*
* @author xuyanqi
* @date 2019-03-11 20:53:25
*/
@Data
@TableName("T_ZHTJ_GLQSQK_SDQK")
@EqualsAndHashCode(callSuper = true)
public class ZhtjGlqsqkSdqk extends Model<ZhtjGlqsqkSdqk> {
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId
private Integer id;
/**
* 统计年份
*/
private String year;
/**
* 地市名称
*/
private String area;
/**
* 合计长度(单位:米)
*/
private Double zjCd;
/**
* 合计数量(单位:座)
*/
private Integer zjSl;
/**
* 特长隧道长度(单位:米)
*/
private Double tcsdCd;
/**
* 特长隧道数量(单位:座)
*/
private Integer tcsdSl;
/**
* 长隧道长度(单位:米)
*/
private Double csdCd;
/**
* 长隧道数量(单位:座)
*/
private Integer csdSl;
/**
* 中隧道长度(单位:米)
*/
private Double zsdCd;
/**
* 中隧道数量(单位:座)
*/
private Integer zsdSl;
/**
* 短隧道长度(单位:米)
*/
private Double dsdCd;
/**
* 短隧道数量(单位:座)
*/
private Integer dsdSl;
/**
* 排序
*/
private Integer sort;
/**
* 创建人
*/
private String creator;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新人
*/
private String updatePerson;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 状态:根据具体需求定义
*/
private String status;
/**
* 是否删除 -1:已删除 0:正常
*/
private String delFlag;
/**
* 备注信息
*/
private String remarks;
}
package com.elephant.framework.galaxy.aroad.module.zhtj.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlmd;
/**
* 公路密度
*
* @author xuzhitu
* @date 2019-03-12 21:59:19
*/
public interface ZhtjGljbxxGlmdMapper extends BaseMapper<ZhtjGljbxxGlmd> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGltclc;
/**
*  公路通车里程表
*
* @author xuzhitu
* @date 2019-03-11 09:50:32
*/
public interface ZhtjGljbxxGltclcMapper extends BaseMapper<ZhtjGljbxxGltclc> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlzbdb;
/**
* 公路指标对比表
*
* @author xuzhitu
* @date 2019-03-12 17:08:49
*/
public interface ZhtjGljbxxGlzbdbMapper extends BaseMapper<ZhtjGljbxxGlzbdb> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxXxctdqk;
/**
* 县乡村通达情况
*
* @author xuzhitu
* @date 2019-03-12 21:59:39
*/
public interface ZhtjGljbxxXxctdqkMapper extends BaseMapper<ZhtjGljbxxXxctdqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljsdjqk;
/**
* 综合统计_公路技术等级情况
*
* @author wangjian
* @date 2019-03-11 17:24:55
*/
public interface ZhtjGljsdjqkMapper extends BaseMapper<ZhtjGljsdjqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljszkpd;
/**
* 综合统计_公路技术状况评定
*
* @author xuyanqi
* @date 2019-03-11 17:58:58
*/
public interface ZhtjGljszkpdMapper extends BaseMapper<ZhtjGljszkpd> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGllmqk;
/**
* 综合统计_公路路面情况
*
* @author xuyanqi
* @date 2019-03-12 11:04:15
*/
public interface ZhtjGllmqkMapper extends BaseMapper<ZhtjGllmqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkQlqk;
/**
* 综合统计_公路桥隧情况_桥梁情况
*
* @author xuyanqi
* @date 2019-03-12 08:57:24
*/
public interface ZhtjGlqsqkQlqkMapper extends BaseMapper<ZhtjGlqsqkQlqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkSdqk;
/**
* 综合统计_公路桥隧情况_隧道情况
*
* @author xuyanqi
* @date 2019-03-11 20:53:25
*/
public interface ZhtjGlqsqkSdqkMapper extends BaseMapper<ZhtjGlqsqkSdqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlmd;
/**
* 公路密度
*
* @author xuzhitu
* @date 2019-03-12 21:59:19
*/
public interface ZhtjGljbxxGlmdService extends IService<ZhtjGljbxxGlmd> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGltclc;
import com.elephant.framework.galaxy.aroad.module.system.vo.echarts.BarEchartsVo;
/**
*  公路通车里程表
*
* @author xuzhitu
* @date 2019-03-11 09:50:32
*/
public interface ZhtjGljbxxGltclcService extends IService<ZhtjGljbxxGltclc> {
/**
* 根据年份查询公路通车/养护里程列表
*
* @return Echarts格式数据
*/
BarEchartsVo getTclcEchartData(String year);
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlzbdb;
/**
* 公路指标对比表
*
* @author xuzhitu
* @date 2019-03-12 17:08:49
*/
public interface ZhtjGljbxxGlzbdbService extends IService<ZhtjGljbxxGlzbdb> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxXxctdqk;
/**
* 县乡村通达情况
*
* @author xuzhitu
* @date 2019-03-12 21:59:39
*/
public interface ZhtjGljbxxXxctdqkService extends IService<ZhtjGljbxxXxctdqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljsdjqk;
/**
* 综合统计_公路技术等级情况
*
* @author wangjian
* @date 2019-03-11 17:24:55
*/
public interface ZhtjGljsdjqkService extends IService<ZhtjGljsdjqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljszkpd;
/**
* 综合统计_公路技术状况评定
*
* @author xuyanqi
* @date 2019-03-11 17:58:58
*/
public interface ZhtjGljszkpdService extends IService<ZhtjGljszkpd> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGllmqk;
/**
* 综合统计_公路路面情况
*
* @author xuyanqi
* @date 2019-03-12 11:04:15
*/
public interface ZhtjGllmqkService extends IService<ZhtjGllmqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkQlqk;
/**
* 综合统计_公路桥隧情况_桥梁情况
*
* @author xuyanqi
* @date 2019-03-12 08:57:24
*/
public interface ZhtjGlqsqkQlqkService extends IService<ZhtjGlqsqkQlqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkSdqk;
/**
* 综合统计_公路桥隧情况_隧道情况
*
* @author xuyanqi
* @date 2019-03-11 20:53:25
*/
public interface ZhtjGlqsqkSdqkService extends IService<ZhtjGlqsqkSdqk> {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlmd;
import com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljbxxGlmdMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljbxxGlmdService;
import org.springframework.stereotype.Service;
/**
* 公路密度
*
* @author xuzhitu
* @date 2019-03-12 21:59:19
*/
@Service
public class ZhtjGljbxxGlmdServiceImpl extends ServiceImpl<ZhtjGljbxxGlmdMapper, ZhtjGljbxxGlmd> implements ZhtjGljbxxGlmdService {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGltclc;
import com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljbxxGltclcMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljbxxGltclcService;
import com.elephant.framework.galaxy.aroad.module.system.vo.echarts.BarEchartsVo;
import com.elephant.framework.galaxy.aroad.module.system.vo.echarts.BarSeriesVo;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*  公路通车里程表
*
* @author xuzhitu
* @date 2019-03-11 09:50:32
*/
@Service
@AllArgsConstructor
public class ZhtjGljbxxGltclcServiceImpl extends ServiceImpl<ZhtjGljbxxGltclcMapper, ZhtjGljbxxGltclc> implements ZhtjGljbxxGltclcService {
private final ZhtjGljbxxGltclcMapper zhtjGljbxxGltclcMapper;
/**
* 根据年份查询公路通车/养护里程列表
*
* @return Echarts格式数据
*/
@Override
public BarEchartsVo getTclcEchartData(String year) {
BarEchartsVo echartsVo = new BarEchartsVo();
List<ZhtjGljbxxGltclc> gltclcbList = zhtjGljbxxGltclcMapper.selectList(Wrappers.<ZhtjGljbxxGltclc>query().lambda()
.eq(ZhtjGljbxxGltclc::getYear, year));
echartsVo.setTitle("公路通车/养护里程");
echartsVo.setSubTitle("计量单位:公里");
List<String> legend = new ArrayList<>(Arrays.asList("国道","省道","县道","乡道","村道"));
echartsVo.setLegendData(legend);
List<String> yAxis = new ArrayList<>();
List<BarSeriesVo> series = new ArrayList<>();
for (String leg : legend) {
BarSeriesVo barSeriesVo = new BarSeriesVo();
barSeriesVo.setName(leg);
barSeriesVo.setType("bar");
barSeriesVo.setStack("总里程");
JSONObject json = new JSONObject();
JSONObject json_in = new JSONObject();
json_in.put("show", false);
json_in.put("position", "insideRight");
json.put("normal",json_in);
barSeriesVo.setLabel(json);
List<Double> data = new ArrayList<>();
for (int i = 0; i < gltclcbList.size(); i++) {
ZhtjGljbxxGltclc temp = gltclcbList.get(i);
if("合计".equals(temp.getArea())){
continue;
}
if(yAxis.size()<17){
yAxis.add(temp.getArea());
}
if("国道".equals(leg)){
data.add(temp.getGuodao());
} else if("省道".equals(leg)) {
data.add(temp.getShengdao());
} else if("县道".equals(leg)) {
data.add(temp.getXiandao());
} else if("乡道".equals(leg)) {
data.add(temp.getXiangdao());
} else if("村道".equals(leg)) {
data.add(temp.getCundao());
}
barSeriesVo.setData(data);
}
series.add(barSeriesVo);
}
echartsVo.setYAxisData(yAxis);
echartsVo.setSeries(series);
return echartsVo;
}
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlzbdb;
import com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljbxxGlzbdbMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljbxxGlzbdbService;
import org.springframework.stereotype.Service;
/**
* 公路指标对比表
*
* @author xuzhitu
* @date 2019-03-12 17:08:49
*/
@Service
public class ZhtjGljbxxGlzbdbServiceImpl extends ServiceImpl<ZhtjGljbxxGlzbdbMapper, ZhtjGljbxxGlzbdb> implements ZhtjGljbxxGlzbdbService {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxXxctdqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljbxxXxctdqkMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljbxxXxctdqkService;
import org.springframework.stereotype.Service;
/**
* 县乡村通达情况
*
* @author xuzhitu
* @date 2019-03-12 21:59:39
*/
@Service
public class ZhtjGljbxxXxctdqkServiceImpl extends ServiceImpl<ZhtjGljbxxXxctdqkMapper, ZhtjGljbxxXxctdqk> implements ZhtjGljbxxXxctdqkService {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljsdjqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljsdjqkMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljsdjqkService;
import org.springframework.stereotype.Service;
/**
* 综合统计_公路技术等级情况
*
* @author wangjian
* @date 2019-03-11 17:24:55
*/
@Service
public class ZhtjGljsdjqkServiceImpl extends ServiceImpl<ZhtjGljsdjqkMapper, ZhtjGljsdjqk> implements ZhtjGljsdjqkService {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljszkpd;
import com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljszkpdMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGljszkpdService;
import org.springframework.stereotype.Service;
/**
* 综合统计_公路技术状况评定
*
* @author xuyanqi
* @date 2019-03-11 17:58:58
*/
@Service
public class ZhtjGljszkpdServiceImpl extends ServiceImpl<ZhtjGljszkpdMapper, ZhtjGljszkpd> implements ZhtjGljszkpdService {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGllmqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGllmqkMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGllmqkService;
import org.springframework.stereotype.Service;
/**
* 综合统计_公路路面情况
*
* @author xuyanqi
* @date 2019-03-12 11:04:15
*/
@Service
public class ZhtjGllmqkServiceImpl extends ServiceImpl<ZhtjGllmqkMapper, ZhtjGllmqk> implements ZhtjGllmqkService {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkQlqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGlqsqkQlqkMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGlqsqkQlqkService;
import org.springframework.stereotype.Service;
/**
* 综合统计_公路桥隧情况_桥梁情况
*
* @author xuyanqi
* @date 2019-03-12 08:57:24
*/
@Service
public class ZhtjGlqsqkQlqkServiceImpl extends ServiceImpl<ZhtjGlqsqkQlqkMapper, ZhtjGlqsqkQlqk> implements ZhtjGlqsqkQlqkService {
}
package com.elephant.framework.galaxy.aroad.module.zhtj.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkSdqk;
import com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGlqsqkSdqkMapper;
import com.elephant.framework.galaxy.aroad.module.zhtj.service.ZhtjGlqsqkSdqkService;
import org.springframework.stereotype.Service;
/**
* 综合统计_公路桥隧情况_隧道情况
*
* @author xuyanqi
* @date 2019-03-11 20:53:25
*/
@Service
public class ZhtjGlqsqkSdqkServiceImpl extends ServiceImpl<ZhtjGlqsqkSdqkMapper, ZhtjGlqsqkSdqk> implements ZhtjGlqsqkSdqkService {
}
package com.elephant.framework.galaxy.aroad.response;
import com.elephant.framework.galaxy.aroad.constant.CommonConstants;
import com.elephant.framework.galaxy.aroad.exception.CommonError;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* @Description 全局统一返回对象
* @auther wangjian
* @create 2019-02-18 15:23
*/
@Builder
@ToString
@Accessors(chain = true)
@AllArgsConstructor
public class R<T> implements Serializable {
private static final long serialVersionUID = 1L;
@Getter
@Setter
private int code = CommonConstants.SUCCESS;
// success 返回正常数据json
// fail 返回通用的错误码
@Getter
@Setter
private String msg = "success";
@Getter
@Setter
private T data;
public R() {
super();
}
public R(T data) {
super();
this.data = data;
}
public R(T data, String msg) {
super();
this.data = data;
this.msg = msg;
}
public R(int code, String msg) {
super();
this.code = code;
this.msg = msg;
}
public R(Throwable e) {
super();
this.msg = e.getMessage();
this.code = CommonConstants.FAIL;
}
public R(CommonError e) {
super();
this.msg = e.getErrorMessage();
this.code = e.getErrorCode();
}
}
package com.elephant.framework.galaxy.aroad.security.config;
import com.elephant.framework.galaxy.aroad.constant.SecurityConstants;
import com.elephant.framework.galaxy.aroad.module.common.data.TenantContextHolder;
import com.elephant.framework.galaxy.aroad.security.service.GalaxyClientDetailsService;
import com.elephant.framework.galaxy.aroad.security.service.GalaxyUserDetailsService;
import com.elephant.framework.galaxy.aroad.security.entity.GalaxyUser;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import org.springframework.security.oauth2.provider.token.DefaultAuthenticationKeyGenerator;
import org.springframework.security.oauth2.provider.token.TokenEnhancer;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
/**
* @Description OAuth 授权服务器配置
* @auther wangjian
* @create 2019-02-21 21:25
*/
@Configuration
@AllArgsConstructor
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
private final DataSource dataSource;
private final AuthenticationManager authenticationManagerBean;
private final GalaxyUserDetailsService galaxyUserDetailsService;
private final RedisConnectionFactory redisConnectionFactory;
/**
* 配置客户端详情服务,通过数据库来存储调取详情信息
*
* @param clients
* @throws Exception
*/
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
GalaxyClientDetailsService clientDetailsService = new GalaxyClientDetailsService(dataSource);
clientDetailsService.setSelectClientDetailsSql(SecurityConstants.DEFAULT_SELECT_STATEMENT);
clientDetailsService.setFindClientDetailsSql(SecurityConstants.DEFAULT_FIND_STATEMENT);
clients.withClientDetails(clientDetailsService);
}
/**
* 配置令牌端点(Token Endpoint)的安全约束
*
* @param oauthServer
*/
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) {
oauthServer
.allowFormAuthenticationForClients()
.checkTokenAccess("isAuthenticated()");
}
/**
* 用来配置授权(authorization)以及令牌(token)的访问端点和令牌服务(token services)
*
* @param endpoints
*/
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
endpoints
.allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)
.tokenStore(tokenStore())
.tokenEnhancer(tokenEnhancer())
.authenticationManager(authenticationManagerBean)
.userDetailsService(galaxyUserDetailsService);
}
@Bean
public TokenStore tokenStore() {
RedisTokenStore tokenStore = new RedisTokenStore(redisConnectionFactory);
tokenStore.setPrefix(SecurityConstants.GALAXY_PREFIX + SecurityConstants.OAUTH_PREFIX);
tokenStore.setAuthenticationKeyGenerator(new DefaultAuthenticationKeyGenerator() {
@Override
public String extractKey(OAuth2Authentication authentication) {
return super.extractKey(authentication) + ":" + TenantContextHolder.getTenantId();
}
});
return tokenStore;
}
/**
* token增强,客户端模式不增强。
*
* @return TokenEnhancer
*/
@Bean
public TokenEnhancer tokenEnhancer() {
return (accessToken, authentication) -> {
if (SecurityConstants.CLIENT_CREDENTIALS
.equals(authentication.getOAuth2Request().getGrantType())) {
return accessToken;
}
final Map<String, Object> additionalInfo = new HashMap<>(8);
GalaxyUser galaxyUser = (GalaxyUser) authentication.getUserAuthentication().getPrincipal();
additionalInfo.put("user_id", galaxyUser.getId());
additionalInfo.put("username", galaxyUser.getUsername());
additionalInfo.put("dept_id", galaxyUser.getDeptId());
additionalInfo.put("tenant_id", galaxyUser.getTenantId());
additionalInfo.put("license", SecurityConstants.GALAXY_LICENSE);
((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
return accessToken;
};
}
}
package com.elephant.framework.galaxy.aroad.security.config;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.util.PatternMatchUtils;
import org.springframework.util.StringUtils;
import java.util.Collection;
/**
* @author wangjian
* @date 2018/6/22
* 接口权限判断工具
*/
@Slf4j
@Component("pms")
public class PermissionService {
/**
* 判断接口是否有xxx:xxx权限
*
* @param permission 权限
* @return {boolean}
*/
public boolean hasPermission(String permission) {
if (StrUtil.isBlank(permission)) {
return false;
}
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null) {
return false;
}
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
return authorities.stream()
.map(GrantedAuthority::getAuthority)
.filter(StringUtils::hasText)
.anyMatch(x -> PatternMatchUtils.simpleMatch(permission, x));
}
}
package com.elephant.framework.galaxy.aroad.security.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
/**
* @Description OAuth 资源服务器配置
* @auther wangjian
* @create 2019-02-21 21:23
*/
@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.formLogin()
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.csrf()
.disable();
}
}
package com.elephant.framework.galaxy.aroad.security.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
/**
* @Description 认证配置
* @auther wangjian
* @create 2019-02-21 23:39
*/
@Primary
@Order(90)
@Configuration
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.loginPage("/token/login")
.loginProcessingUrl("/token/form")
.and()
.authorizeRequests()
.antMatchers("/token/**").permitAll()
.anyRequest().authenticated()
.and().csrf().disable();
}
/**
* 不拦截静态资源
*
* @param web
* @throws Exception
*/
@Override
public void configure(WebSecurity web) throws Exception {
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
/**
* https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released#password-storage-updated
* Encoded password does not look like BCrypt
*
* @return PasswordEncoder
*/
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
}
package com.elephant.framework.galaxy.aroad.security.entity;
import lombok.Getter;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.User;
import java.util.Collection;
/**
* @Description 扩展用户信息
* @auther wangjian
* @create 2019-02-21 22:20
*/
public class GalaxyUser extends User {
/**
* 用户ID
*/
@Getter
private Integer id;
/**
* 部门ID
*/
@Getter
private Integer deptId;
/**
* 租户ID
*/
@Getter
private Integer tenantId;
/**
* Construct the <code>User</code> with the details required by
* {@link DaoAuthenticationProvider}.
*
* @param id 用户ID
* @param deptId 部门ID
* @param tenantId 租户ID
* @param username the username presented to the
* <code>DaoAuthenticationProvider</code>
* @param password the password that should be presented to the
* <code>DaoAuthenticationProvider</code>
* @param enabled set to <code>true</code> if the user is enabled
* @param accountNonExpired set to <code>true</code> if the account has not expired
* @param credentialsNonExpired set to <code>true</code> if the credentials have not
* expired
* @param accountNonLocked set to <code>true</code> if the account is not locked
* @param authorities the authorities that should be granted to the caller if they
* presented the correct username and password and the user is enabled. Not null.
* @throws IllegalArgumentException if a <code>null</code> value was passed either as
* a parameter or as an element in the <code>GrantedAuthority</code> collection
*/
public GalaxyUser(Integer id, Integer deptId, Integer tenantId, String username, String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities) {
super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
this.id = id;
this.deptId = deptId;
this.tenantId = tenantId;
}
}
package com.elephant.framework.galaxy.aroad.security.service;
import com.elephant.framework.galaxy.aroad.constant.SecurityConstants;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.security.oauth2.common.exceptions.InvalidClientException;
import org.springframework.security.oauth2.provider.ClientDetails;
import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService;
import javax.sql.DataSource;
/**
* @Description
* @auther wangjian
* @create 2019-02-21 21:36
*/
public class GalaxyClientDetailsService extends JdbcClientDetailsService {
public GalaxyClientDetailsService(DataSource dataSource) {
super(dataSource);
}
/**
* 重写原生方法支持redis缓存
*
* @param clientId
* @return
* @throws InvalidClientException
*/
@Override
@Cacheable(value = SecurityConstants.CLIENT_DETAILS_KEY, key = "#clientId", unless = "#result == null")
public ClientDetails loadClientByClientId(String clientId) throws InvalidClientException {
return super.loadClientByClientId(clientId);
}
}
package com.elephant.framework.galaxy.aroad.security.service;
import org.springframework.security.core.userdetails.UserDetailsService;
/**
* @Description
* @auther wangjian
* @create 2019-02-21 22:08
*/
public interface GalaxyUserDetailsService extends UserDetailsService {
}
package com.elephant.framework.galaxy.aroad.security.service;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.elephant.framework.galaxy.aroad.constant.CommonConstants;
import com.elephant.framework.galaxy.aroad.constant.SecurityConstants;
import com.elephant.framework.galaxy.aroad.module.system.dto.UserInfo;
import com.elephant.framework.galaxy.aroad.module.system.entity.User;
import com.elephant.framework.galaxy.aroad.module.system.service.UserService;
import com.elephant.framework.galaxy.aroad.security.entity.GalaxyUser;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* @Description
* @auther wangjian
* @create 2019-02-21 22:18
*/
@Slf4j
@Service
@AllArgsConstructor
public class GalaxyUserDetailsServiceImpl implements GalaxyUserDetailsService {
private final CacheManager cacheManager;
private final UserService userService;
/**
* 用户密码登录
*
* @param username 用户名
* @return
* @throws UsernameNotFoundException
*/
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Cache cache = cacheManager.getCache("user_details");
if (cache != null && cache.get(username) != null) {
return (GalaxyUser) cache.get(username).get();
}
User user = userService.getOne(Wrappers.<User>query()
.lambda().eq(User::getUsername, username));
if (user == null) {
throw new UsernameNotFoundException("用户名或密码存在");
}
UserInfo userInfo = userService.findUserInfo(user);
UserDetails userDetails = getUserDetails(userInfo);
cache.put(username, userDetails);
return userDetails;
}
/**
* 构建userdetails
*
* @param info 用户信息
* @return
*/
private UserDetails getUserDetails(UserInfo info) {
if (info == null) {
throw new UsernameNotFoundException("用户不存在");
}
Set<String> dbAuthsSet = new HashSet<>();
if (ArrayUtil.isNotEmpty(info.getRoles())) {
// 获取角色
Arrays.stream(info.getRoles()).forEach(roleId -> dbAuthsSet.add(SecurityConstants.ROLE + roleId));
// 获取资源
dbAuthsSet.addAll(Arrays.asList(info.getPermissions()));
}
Collection<? extends GrantedAuthority> authorities
= AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0]));
User user = info.getUser();
boolean enabled = StrUtil.equals(user.getLockFlag(), CommonConstants.STATUS_NORMAL);
// 构造security用户
return new GalaxyUser(user.getUserId(), user.getDeptId(), user.getTenantId(), user.getUsername(), SecurityConstants.BCRYPT + user.getPassword(), enabled,
true, true, !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities);
}
}
package com.elephant.framework.galaxy.aroad.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
import lombok.SneakyThrows;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
/**
* @Description
* @auther wangjian
* @create 2019-02-23 23:21
*/
public class PasswordDecoderUtil {
private static final String KEY_ALGORITHM = "AES";
@SneakyThrows
public static String decryptAES(String data, String pass) {
AES aes = new AES(Mode.CBC, Padding.NoPadding,
new SecretKeySpec(pass.getBytes(), KEY_ALGORITHM),
new IvParameterSpec(pass.getBytes()));
byte[] result = aes.decrypt(Base64.decode(data.getBytes(StandardCharsets.UTF_8)));
return new String(result, StandardCharsets.UTF_8);
}
}
package com.elephant.framework.galaxy.aroad.util;
import cn.hutool.core.util.StrUtil;
import com.elephant.framework.galaxy.aroad.constant.SecurityConstants;
import com.elephant.framework.galaxy.aroad.security.entity.GalaxyUser;
import lombok.experimental.UtilityClass;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.provider.OAuth2Authentication;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* 安全工具类
*
* @author wangjian
*/
@UtilityClass
public class SecurityUtils {
/**
* 获取Authentication
*/
public Authentication getAuthentication() {
return SecurityContextHolder.getContext().getAuthentication();
}
/**
* 获取用户
*
* @param authentication
* @return GalaxyUser
* <p>
* 获取当前用户的全部信息 EnableGalaxyResourceServer true
* 获取当前用户的用户名 EnableGalaxyResourceServer false
*/
public GalaxyUser getUser(Authentication authentication) {
Object principal = authentication.getPrincipal();
if (principal instanceof GalaxyUser) {
return (GalaxyUser) principal;
}
return null;
}
/**
* 获取当前用名
*
* @return String
*/
public String getUsername() {
Object principal = getAuthentication().getPrincipal();
if (principal instanceof String) {
return principal.toString();
}
return null;
}
public String getClientId() {
Authentication authentication = getAuthentication();
if (authentication instanceof OAuth2Authentication) {
OAuth2Authentication auth2Authentication = (OAuth2Authentication) authentication;
return auth2Authentication.getOAuth2Request().getClientId();
}
return null;
}
/**
* 获取用户
*/
public GalaxyUser getUser() {
Authentication authentication = getAuthentication();
if (authentication == null) {
return null;
}
return getUser(authentication);
}
/**
* 获取用户角色信息
*
* @return 角色集合
*/
public List<Integer> getRoles() {
Authentication authentication = getAuthentication();
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
List<Integer> roleIds = new ArrayList<>();
authorities.stream()
.filter(granted -> StrUtil.startWith(granted.getAuthority(), SecurityConstants.ROLE))
.forEach(granted -> {
String id = StrUtil.removePrefix(granted.getAuthority(), SecurityConstants.ROLE);
roleIds.add(Integer.parseInt(id));
});
return roleIds;
}
}
package com.elephant.framework.galaxy.aroad.util;
import com.elephant.framework.galaxy.aroad.module.system.dto.MenuTree;
import com.elephant.framework.galaxy.aroad.module.system.dto.TreeNode;
import com.elephant.framework.galaxy.aroad.module.system.entity.Menu;
import lombok.experimental.UtilityClass;
import java.util.ArrayList;
import java.util.List;
/**
* @author wangjian
* @date 2017年11月9日23:34:11
*/
@UtilityClass
public class TreeUtil {
/**
* 两层循环实现建树
*
* @param treeNodes 传入的树节点列表
* @return
*/
public <T extends TreeNode> List<T> bulid(List<T> treeNodes, Object root) {
List<T> trees = new ArrayList<>();
for (T treeNode : treeNodes) {
if (root.equals(treeNode.getParentId())) {
trees.add(treeNode);
}
for (T it : treeNodes) {
if (it.getParentId() == treeNode.getId()) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<>());
}
treeNode.add(it);
}
}
}
return trees;
}
/**
* 使用递归方法建树
*
* @param treeNodes
* @return
*/
public <T extends TreeNode> List<T> buildByRecursive(List<T> treeNodes, Object root) {
List<T> trees = new ArrayList<T>();
for (T treeNode : treeNodes) {
if (root.equals(treeNode.getParentId())) {
trees.add(findChildren(treeNode, treeNodes));
}
}
return trees;
}
/**
* 递归查找子节点
*
* @param treeNodes
* @return
*/
public <T extends TreeNode> T findChildren(T treeNode, List<T> treeNodes) {
for (T it : treeNodes) {
if (treeNode.getId() == it.getParentId()) {
if (treeNode.getChildren() == null) {
treeNode.setChildren(new ArrayList<>());
}
treeNode.add(findChildren(it, treeNodes));
}
}
return treeNode;
}
/**
* 通过sysMenu创建树形节点
*
* @param menus
* @param root
* @return
*/
public List<MenuTree> bulidTree(List<Menu> menus, int root) {
List<MenuTree> trees = new ArrayList<>();
MenuTree node;
for (Menu menu : menus) {
node = new MenuTree();
node.setId(menu.getMenuId());
node.setParentId(menu.getParentId());
node.setName(menu.getName());
node.setPath(menu.getPath());
node.setCode(menu.getPermission());
node.setLabel(menu.getName());
node.setComponent(menu.getComponent());
node.setIcon(menu.getIcon());
node.setKeepAlive(menu.getKeepAlive());
trees.add(node);
}
return TreeUtil.bulid(trees, root);
}
}
server:
port: 9999
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/aroad?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
cache:
type: redis
redis:
host: 127.0.0.1
port: 6379
password:
timeout: 30000
jedis:
pool:
max-active: 8
max-wait: -1ms
min-idle: 0
max-idle: 8
lettuce:
pool:
min-idle: 0
max-idle: 8
max-wait: -1ms
max-active: 8
shutdown-timeout: 100ms
mybatis-plus:
mapper-locations: classpath:/mapper/*/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://galaxy-aroad:3306/aroad?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
mybatis-plus:
mapper-locations: classpath:/mapper/*/*.xml
# --spring.profiles.active=prod
spring:
profiles:
active: dev
#\u4EE3\u7801\u751F\u6210\u5668\uFF0C\u914D\u7F6E\u4FE1\u606F
mainPath=com.elephant.framework.galaxy.aroad.module
#\u5305\u540D
package=com.elephant.framework.galaxy.aroad.module
moduleName=generator
#\u4F5C\u8005
author=wangjian
#\u8868\u524D\u7F00(\u7C7B\u540D\u4E0D\u4F1A\u5305\u542B\u8868\u524D\u7F00)
tablePrefix=t_
#\u7C7B\u578B\u8F6C\u6362\uFF0C\u914D\u7F6E\u4FE1\u606F
tinyint=Integer
smallint=Integer
mediumint=Integer
int=Integer
integer=Integer
bigint=Long
float=Float
double=Double
decimal=BigDecimal
bit=Boolean
char=String
varchar=String
tinytext=String
text=String
mediumtext=String
longtext=String
date=LocalDateTime
datetime=LocalDateTime
timestamp=LocalDateTime
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.codegen.mapper.SysGeneratorMapper">
<select id="queryList" resultType="map">
select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables
where table_schema = (select database())
<if test="tableName != null and tableName.trim() != ''">
and table_name like concat('%', #{tableName}, '%')
</if>
order by create_time desc
</select>
<select id="queryTable" resultType="map">
select table_name tableName, engine, table_comment tableComment, create_time createTime from information_schema.tables
where table_schema = (select database()) and table_name = #{tableName}
</select>
<select id="queryColumns" resultType="map">
select column_name columnName, data_type dataType, column_comment columnComment, column_key columnKey, extra from information_schema.columns
where table_name = #{tableName} and table_schema = (select database()) order by ordinal_position
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.DeptMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.Dept">
<id column="dept_id" property="deptId" />
<result column="name" property="name" />
<result column="sort" property="sort" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="del_flag" property="delFlag" />
<result column="parent_id" property="parentId" />
<result column="tenant_id" property="tenantId" />
</resultMap>
<!--关联查询部门列表-->
<select id="listDepts" resultType="com.elephant.framework.galaxy.aroad.module.system.entity.Dept">
SELECT
t.*
FROM
sys_dept t
LEFT JOIN sys_dept_relation dr ON t.dept_id = dr.descendant
WHERE dr.ancestor = 0
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.DeptRelationMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.DeptRelation">
<id column="ancestor" property="ancestor" />
<result column="descendant" property="descendant" />
</resultMap>
<!-- 更新部门关系(报错) -->
<delete id="deleteDeptRelations">
DELETE FROM sys_dept_relation
WHERE
descendant IN ( SELECT temp.descendant FROM
( SELECT descendant FROM sys_dept_relation WHERE ancestor = #{descendant} ) temp )
AND ancestor IN ( SELECT temp.ancestor FROM ( SELECT ancestor FROM
sys_dept_relation WHERE descendant = #{descendant} AND ancestor != descendant ) temp );
</delete>
<insert id="insertDeptRelations">
INSERT INTO sys_dept_relation (ancestor, descendant) SELECT a.ancestor, b.descendant
FROM sys_dept_relation a
CROSS JOIN sys_dept_relation b
WHERE a.descendant = #{ancestor}
AND b.ancestor = #{descendant};
</insert>
<!--删除部门-->
<delete id="deleteDeptRelationsById">
DELETE
FROM
sys_dept_relation
WHERE
descendant IN (
SELECT
temp.descendant
FROM
(
SELECT
descendant
FROM
sys_dept_relation
WHERE
ancestor = #{id}
) temp
)
</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.DictMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.Dict">
<id column="id" property="id" />
<result column="value" property="value" />
<result column="label" property="label" />
<result column="type" property="type" />
<result column="description" property="description" />
<result column="sort" property="sort" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="remarks" property="remarks" />
<result column="del_flag" property="delFlag" />
<result column="tenant_id" property="tenantId" />
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.LogMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.Log">
<id column="id" property="id" />
<result column="type" property="type" />
<result column="title" property="title" />
<result column="service_id" property="serviceId" />
<result column="create_by" property="createBy" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="remote_addr" property="remoteAddr" />
<result column="user_agent" property="userAgent" />
<result column="request_uri" property="requestUri" />
<result column="method" property="method" />
<result column="params" property="params" />
<result column="time" property="time" />
<result column="del_flag" property="delFlag" />
<result column="exception" property="exception" />
<result column="tenant_id" property="tenantId" />
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.MenuMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.Menu">
<id column="menu_id" property="menuId" />
<result column="name" property="name" />
<result column="permission" property="permission" />
<result column="path" property="path" />
<result column="parent_id" property="parentId" />
<result column="icon" property="icon" />
<result column="component" property="component" />
<result column="sort" property="sort" />
<result column="keep_alive" property="keepAlive" />
<result column="type" property="type" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="del_flag" property="delFlag" />
</resultMap>
<resultMap id="MenuVoResultMap" type="com.elephant.framework.galaxy.aroad.module.system.vo.MenuVO">
<id column="menu_id" property="menuId"/>
<result column="name" property="name"/>
<result column="permission" property="permission"/>
<result column="parent_id" property="parentId"/>
<result column="icon" property="icon"/>
<result column="path" property="path"/>
<result column="component" property="component"/>
<result column="sort" property="sort"/>
<result column="keep_alive" property="keepAlive"/>
<result column="type" property="type"/>
<result column="create_time" property="createTime"/>
<result column="update_time" property="updateTime"/>
<result column="del_flag" property="delFlag"/>
</resultMap>
<!--通过角色查询菜单信息-->
<select id="listMenusByRoleId" resultMap="MenuVoResultMap">
SELECT
sys_menu.*
FROM
sys_menu
LEFT JOIN sys_role_menu ON sys_menu.menu_id = sys_role_menu.menu_id
WHERE
sys_menu.del_flag = 0
AND sys_role_menu.role_id = #{roleId}
ORDER BY
sys_menu.sort DESC
</select>
<!--通过角色ID 查询权限-->
<select id="listPermissionsByRoleIds" resultType="java.lang.String">
SELECT
m.permission
FROM
sys_menu m, sys_role_menu rm WHERE m.menu_id = rm.menu_id AND m.del_flag = 0 AND rm.role_id IN (#{roleIds})
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.OauthClientDetailsMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.OauthClientDetails">
<id column="client_id" property="clientId" />
<result column="resource_ids" property="resourceIds" />
<result column="client_secret" property="clientSecret" />
<result column="scope" property="scope" />
<result column="authorized_grant_types" property="authorizedGrantTypes" />
<result column="web_server_redirect_uri" property="webServerRedirectUri" />
<result column="authorities" property="authorities" />
<result column="access_token_validity" property="accessTokenValidity" />
<result column="refresh_token_validity" property="refreshTokenValidity" />
<result column="additional_information" property="additionalInformation" />
<result column="autoapprove" property="autoapprove" />
<result column="tenant_id" property="tenantId" />
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.RoleMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.Role">
<id column="role_id" property="roleId" />
<result column="role_name" property="roleName" />
<result column="role_code" property="roleCode" />
<result column="role_desc" property="roleDesc" />
<result column="ds_type" property="dsType" />
<result column="ds_scope" property="dsScope" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="del_flag" property="delFlag" />
<result column="tenant_id" property="tenantId" />
</resultMap>
<!-- 通过用户ID,查询角色信息-->
<select id="listRolesByUserId" resultMap="BaseResultMap">
SELECT
r.*
FROM
sys_role r, sys_user_role ur WHERE r.role_id = ur.role_id AND r.del_flag = 0 and ur.user_id IN (#{userId})
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.RoleMenuMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.RoleMenu">
<id column="role_id" property="roleId" />
<result column="menu_id" property="menuId" />
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.SocialDetailsMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.SocialDetails">
<id column="id" property="id" />
<result column="type" property="type" />
<result column="remark" property="remark" />
<result column="app_id" property="appId" />
<result column="app_secret" property="appSecret" />
<result column="redirect_url" property="redirectUrl" />
<result column="create_time" property="createTime" />
<result column="update_time" property="updateTime" />
<result column="del_flag" property="delFlag" />
<result column="tenant_id" property="tenantId" />
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.UserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.vo.UserVO">
<id column="user_id" property="userId"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="salt" property="salt"/>
<result column="phone" property="phone"/>
<result column="avatar" property="avatar"/>
<result column="wx_openid" property="wxOpenid"/>
<result column="qq_openid" property="qqOpenid"/>
<result column="ucreate_time" property="createTime"/>
<result column="uupdate_time" property="updateTime"/>
<result column="lock_flag" property="lockFlag"/>
<result column="udel_flag" property="delFlag"/>
<result column="deptId" property="deptId"/>
<result column="tenantId" property="tenantId"/>
<result column="deptName" property="deptName"/>
<collection property="roleList" ofType="com.elephant.framework.galaxy.aroad.module.system.entity.Role"
select="com.elephant.framework.galaxy.aroad.module.system.mapper.RoleMapper.listRolesByUserId" column="user_id">
</collection>
</resultMap>
<!-- userVo结果集 -->
<resultMap id="userVoResultMap" type="com.elephant.framework.galaxy.aroad.module.system.vo.UserVO">
<id column="user_id" property="userId"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="salt" property="salt"/>
<result column="phone" property="phone"/>
<result column="avatar" property="avatar"/>
<result column="wx_openid" property="wxOpenid"/>
<result column="qq_openid" property="qqOpenid"/>
<result column="ucreate_time" property="createTime"/>
<result column="uupdate_time" property="updateTime"/>
<result column="lock_flag" property="lockFlag"/>
<result column="udel_flag" property="delFlag"/>
<result column="deptId" property="deptId"/>
<result column="tenantId" property="tenantId"/>
<result column="deptName" property="deptName"/>
<collection property="roleList" ofType="com.elephant.framework.galaxy.aroad.module.system.entity.Role">
<id column="role_id" property="roleId"/>
<result column="role_name" property="roleName"/>
<result column="role_code" property="roleCode"/>
<result column="role_desc" property="roleDesc"/>
<result column="rcreate_time" property="createTime"/>
<result column="rupdate_time" property="updateTime"/>
</collection>
</resultMap>
<sql id="userRoleSql">
`user`.user_id,
`user`.username,
`user`.`password`,
`user`.salt,
`user`.phone,
`user`.avatar,
`user`.wx_openid,
`user`.qq_openid,
`user`.dept_id,
`user`.create_time AS ucreate_time,
`user`.update_time AS uupdate_time,
`user`.del_flag AS udel_flag,
`user`.lock_flag AS lock_flag,
`user`.dept_id AS deptId,
`user`.tenant_id AS tenantId,
r.role_id,
r.role_name,
r.role_code,
r.role_desc,
r.create_time AS rcreate_time,
r.update_time AS rupdate_time
</sql>
<sql id="userRoleDeptSql">
`user`.user_id,
`user`.username,
`user`.`password`,
`user`.salt,
`user`.phone,
`user`.avatar,
`user`.wx_openid,
`user`.qq_openid,
`user`.create_time AS ucreate_time,
`user`.update_time AS uupdate_time,
`user`.del_flag AS udel_flag,
`user`.lock_flag AS lock_flag,
`user`.tenant_id AS tenantId,
r.role_id,
r.role_name,
r.role_code,
r.role_desc,
r.create_time AS rcreate_time,
r.update_time AS rupdate_time,
d.name AS deptName,
d.dept_id AS deptId
</sql>
<select id="getUserVoByUsername" resultMap="userVoResultMap">
SELECT
<include refid="userRoleSql"/>
FROM
sys_user AS `user`
LEFT JOIN sys_user_role AS ur ON ur.user_id = `user`.user_id
LEFT JOIN sys_role AS r ON r.role_id = ur.role_id
WHERE `user`.username = #{username}
</select>
<select id="getUserVoById" resultMap="userVoResultMap">
SELECT
<include refid="userRoleDeptSql"/>
FROM
sys_user AS `user`
LEFT JOIN sys_user_role AS ur ON ur.user_id = `user`.user_id
LEFT JOIN sys_role AS r ON r.role_id = ur.role_id
LEFT JOIN sys_dept AS d ON d.dept_id = `user`.dept_id
WHERE
`user`.user_id = #{id}
</select>
<select id="getUserVosPage" resultMap="BaseResultMap">
SELECT
`user`.user_id,
`user`.username,
`user`.`password`,
`user`.salt,
`user`.phone,
`user`.avatar,
`user`.wx_openid,
`user`.qq_openid,
`user`.dept_id,
`user`.create_time AS ucreate_time,
`user`.update_time AS uupdate_time,
`user`.del_flag AS udel_flag,
`user`.lock_flag AS lock_flag,
`user`.dept_id AS deptId,
`user`.tenant_id AS tenantId
FROM
sys_user AS `user`
LEFT JOIN sys_dept AS d ON d.dept_id = `user`.dept_id
<where>
<if test="query.username != null and query.username != ''">
and `user`.username LIKE CONCAT('%',#{query.username},'%')
</if>
<if test="query.deptId != null and query.deptId != ''">
and `user`.dept_id = #{query.deptId}
</if>
</where>
ORDER BY `user`.create_time DESC
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.system.mapper.UserRoleMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.elephant.framework.galaxy.aroad.module.system.entity.UserRole">
<id column="user_id" property="userId" />
<result column="role_id" property="roleId" />
</resultMap>
<!--根据用户Id删除该用户的角色关系-->
<delete id="deleteByUserId">
DELETE FROM sys_user_role WHERE user_id = #{userId}
</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.test.mapper.CarMapper">
<resultMap id="carMap" type="com.elephant.framework.galaxy.aroad.module.test.entity.Car">
<id property="carId" column="car_id"/>
<result property="carName" column="car_name"/>
<result property="carPrice" column="car_price"/>
<result property="sort" column="sort"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="status" column="status"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljbxxGlmdMapper">
<resultMap id="zhtjGljbxxGlmdMap" type="com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlmd">
<id property="id" column="id"/>
<result property="year" column="year"/>
<result property="area" column="area"/>
<result property="tdmj" column="tdmj"/>
<result property="rksl" column="rksl"/>
<result property="gllc" column="gllc"/>
<result property="glmdMj" column="glmd_mj"/>
<result property="glmdMjMc" column="glmd_mj_mc"/>
<result property="glmdRk" column="glmd_rk"/>
<result property="glmdRkMc" column="glmd_rk_mc"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updatePerson" column="update_person"/>
<result property="updateTime" column="update_time"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remarks" column="remarks"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljbxxGltclcMapper">
<resultMap id="zhtjGljbxxGltclcMap" type="com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGltclc">
<id property="id" column="id"/>
<result property="year" column="year"/>
<result property="area" column="area"/>
<result property="total" column="total"/>
<result property="guodao" column="guodao"/>
<result property="shengdao" column="shengdao"/>
<result property="xiandao" column="xiandao"/>
<result property="xiangdao" column="xiangdao"/>
<result property="zygl" column="zygl"/>
<result property="cundao" column="cundao"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updatePerson" column="update_person"/>
<result property="updateTime" column="update_time"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remarks" column="remarks"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljbxxGlzbdbMapper">
<resultMap id="zhtjGljbxxGlzbdbMap" type="com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxGlzbdb">
<id property="id" column="id"/>
<result property="year" column="year"/>
<result property="tjzb" column="tjzb"/>
<result property="comunit" column="comunit"/>
<result property="thisYear" column="this_year"/>
<result property="lastYear" column="last_year"/>
<result property="increNum" column="incre_num"/>
<result property="increPer" column="incre_per"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updatePerson" column="update_person"/>
<result property="updateTime" column="update_time"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remarks" column="remarks"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljbxxXxctdqkMapper">
<resultMap id="zhtjGljbxxXxctdqkMap" type="com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljbxxXxctdqk">
<id property="id" column="id"/>
<result property="year" column="year"/>
<result property="area" column="area"/>
<result property="xsqTotal" column="xsq_total"/>
<result property="xsqQytcNum" column="xsq_qytc_num"/>
<result property="xsqQytcPer" column="xsq_qytc_per"/>
<result property="xzTotal" column="xz_total"/>
<result property="xzTglNum" column="xz_tgl_num"/>
<result property="xzTglPer" column="xz_tgl_per"/>
<result property="xzQytcNum" column="xz_qytc_num"/>
<result property="xzQytcPer" column="xz_qytc_per"/>
<result property="xzcTotal" column="xzc_total"/>
<result property="xzcTglNum" column="xzc_tgl_num"/>
<result property="xzcTglPer" column="xzc_tgl_per"/>
<result property="xzcTylNum" column="xzc_tyl_num"/>
<result property="xzcTylPer" column="xzc_tyl_per"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updatePerson" column="update_person"/>
<result property="updateTime" column="update_time"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remarks" column="remarks"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljsdjqkMapper">
<resultMap id="zhtjGljsdjqkMap" type="com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljsdjqk">
<id property="id" column="id"/>
<result property="year" column="year"/>
<result property="area" column="area"/>
<result property="type" column="type"/>
<result property="xzdj" column="xzdj"/>
<result property="total" column="total"/>
<result property="totalSmall" column="total_small"/>
<result property="highRoad" column="high_road"/>
<result property="firstRoad" column="first_road"/>
<result property="secondRoad" column="second_road"/>
<result property="threeRoad" column="three_road"/>
<result property="fourRoad" column="four_road"/>
<result property="otherRoad" column="other_road"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updatePerson" column="update_person"/>
<result property="updateTime" column="update_time"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remarks" column="remarks"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGljszkpdMapper">
<resultMap id="zhtjGljszkpdMap" type="com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGljszkpd">
<id property="id" column="id"/>
<result property="year" column="year"/>
<result property="area" column="area"/>
<result property="type" column="type"/>
<result property="pdlc" column="pdlc"/>
<result property="you" column="you"/>
<result property="liang" column="liang"/>
<result property="zhong" column="zhong"/>
<result property="ci" column="ci"/>
<result property="cha" column="cha"/>
<result property="ylPer" column="yl_per"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updatePerson" column="update_person"/>
<result property="updateTime" column="update_time"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remarks" column="remarks"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGllmqkMapper">
<resultMap id="zhtjGllmqkMap" type="com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGllmqk">
<id property="id" column="id"/>
<result property="year" column="year"/>
<result property="area" column="area"/>
<result property="type" column="type"/>
<result property="xzdj" column="xzdj"/>
<result property="total" column="total"/>
<result property="ypzlmSum" column="ypzlm_sum"/>
<result property="ypzlmLqhnt" column="ypzlm_lqhnt"/>
<result property="ypzlmSnhnt" column="ypzlm_snhnt"/>
<result property="jypzlm" column="jypzlm"/>
<result property="wpzlm" column="wpzlm"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updatePerson" column="update_person"/>
<result property="updateTime" column="update_time"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remarks" column="remarks"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGlqsqkQlqkMapper">
<resultMap id="zhtjGlqsqkQlqkMap" type="com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkQlqk">
<id property="id" column="id"/>
<result property="year" column="year"/>
<result property="area" column="area"/>
<result property="zjCd" column="zj_cd"/>
<result property="zjSl" column="zj_sl"/>
<result property="tdqCd" column="tdq_cd"/>
<result property="tdqSl" column="tdq_sl"/>
<result property="dqCd" column="dq_cd"/>
<result property="dqSl" column="dq_sl"/>
<result property="zqCd" column="zq_cd"/>
<result property="zqSl" column="zq_sl"/>
<result property="xqCd" column="xq_cd"/>
<result property="xqSl" column="xq_sl"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updatePerson" column="update_person"/>
<result property="updateTime" column="update_time"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remarks" column="remarks"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.elephant.framework.galaxy.aroad.module.zhtj.mapper.ZhtjGlqsqkSdqkMapper">
<resultMap id="zhtjGlqsqkSdqkMap" type="com.elephant.framework.galaxy.aroad.module.zhtj.entity.ZhtjGlqsqkSdqk">
<id property="id" column="id"/>
<result property="year" column="year"/>
<result property="area" column="area"/>
<result property="zjCd" column="zj_cd"/>
<result property="zjSl" column="zj_sl"/>
<result property="tcsdCd" column="tcsd_cd"/>
<result property="tcsdSl" column="tcsd_sl"/>
<result property="csdCd" column="csd_cd"/>
<result property="csdSl" column="csd_sl"/>
<result property="zsdCd" column="zsd_cd"/>
<result property="zsdSl" column="zsd_sl"/>
<result property="dsdCd" column="dsd_cd"/>
<result property="dsdSl" column="dsd_sl"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createTime" column="create_time"/>
<result property="updatePerson" column="update_person"/>
<result property="updateTime" column="update_time"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remarks" column="remarks"/>
</resultMap>
</mapper>
package ${package}.${moduleName}.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.elephant.framework.galaxy.aroad.response.R;
import com.elephant.framework.galaxy.aroad.module.common.annotation.SysLog;
import ${package}.${moduleName}.entity.${className};
import ${package}.${moduleName}.service.${className}Service;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import com.elephant.framework.galaxy.aroad.module.common.controller.BaseController;
/**
* ${comments}
*
* @author ${author}
* @date ${datetime}
*/
@RestController
@AllArgsConstructor
@RequestMapping("/${pathName}")
public class ${className}Controller extends BaseController {
private final ${className}Service ${classname}Service;
/**
* 分页查询
* @param page 分页对象
* @param ${classname} ${comments}
* @return
*/
@GetMapping("/page")
public R get${className}Page(Page page, ${className} ${classname}) {
return new R<>(${classname}Service.page(page,Wrappers.query(${classname})));
}
/**
* 通过id查询${comments}
* @param ${pk.lowerAttrName} id
* @return R
*/
@GetMapping("/{${pk.lowerAttrName}}")
public R getById(@PathVariable("${pk.lowerAttrName}") ${pk.attrType} ${pk.lowerAttrName}){
return new R<>(${classname}Service.getById(${pk.lowerAttrName}));
}
/**
* 新增${comments}
* @param ${classname} ${comments}
* @return R
*/
@SysLog("新增${comments}")
@PostMapping
public R save(@RequestBody ${className} ${classname}){
return new R<>(${classname}Service.save(${classname}));
}
/**
* 修改${comments}
* @param ${classname} ${comments}
* @return R
*/
@SysLog("修改${comments}")
@PutMapping
public R updateById(@RequestBody ${className} ${classname}){
return new R<>(${classname}Service.updateById(${classname}));
}
/**
* 通过id删除${comments}
* @param ${pk.lowerAttrName} id
* @return R
*/
@SysLog("删除${comments}")
@DeleteMapping("/{${pk.lowerAttrName}}")
public R removeById(@PathVariable ${pk.attrType} ${pk.lowerAttrName}){
return new R<>(${classname}Service.removeById(${pk.lowerAttrName}));
}
}
package ${package}.${moduleName}.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
#if(${hasBigDecimal})
import java.math.BigDecimal;
#end
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* ${comments}
*
* @author ${author}
* @date ${datetime}
*/
@Data
@TableName("${tableName}")
@EqualsAndHashCode(callSuper = true)
public class ${className} extends Model<${className}> {
private static final long serialVersionUID = 1L;
#foreach ($column in $columns)
/**
* $column.comments
*/
#if($column.columnName == $pk.columnName)
@TableId
#end
private $column.attrType $column.lowerAttrName;
#end
}
package ${package}.${moduleName}.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import ${package}.${moduleName}.entity.${className};
/**
* ${comments}
*
* @author ${author}
* @date ${datetime}
*/
public interface ${className}Mapper extends BaseMapper<${className}> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package}.${moduleName}.mapper.${className}Mapper">
<resultMap id="${classname}Map" type="${package}.${moduleName}.entity.${className}">
#foreach($column in $columns)
#if($column.lowerAttrName==$pk.lowerAttrName)
<id property="${pk.lowerAttrName}" column="${pk.columnName}"/>
#else
<result property="${column.lowerAttrName}" column="${column.columnName}"/>
#end
#end
</resultMap>
</mapper>
package ${package}.${moduleName}.service;
import com.baomidou.mybatisplus.extension.service.IService;
import ${package}.${moduleName}.entity.${className};
/**
* ${comments}
*
* @author ${author}
* @date ${datetime}
*/
public interface ${className}Service extends IService<${className}> {
}
package ${package}.${moduleName}.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import ${package}.${moduleName}.entity.${className};
import ${package}.${moduleName}.mapper.${className}Mapper;
import ${package}.${moduleName}.service.${className}Service;
import org.springframework.stereotype.Service;
/**
* ${comments}
*
* @author ${author}
* @date ${datetime}
*/
@Service
public class ${className}ServiceImpl extends ServiceImpl<${className}Mapper, ${className}> implements ${className}Service {
}
import request from '@/router/axios'
export function fetchList(query) {
return request({
url: '/${moduleName}/${pathName}/page',
method: 'get',
params: query
})
}
export function addObj(obj) {
return request({
url: '/${moduleName}/${pathName}',
method: 'post',
data: obj
})
}
export function getObj(id) {
return request({
url: '/${moduleName}/${pathName}/' + id,
method: 'get'
})
}
export function delObj(id) {
return request({
url: '/${moduleName}/${pathName}/' + id,
method: 'delete'
})
}
export function putObj(obj) {
return request({
url: '/${moduleName}/${pathName}',
method: 'put',
data: obj
})
}
export const tableOption = {
border: true,
index: true,
indexLabel: '序号',
stripe: true,
menuAlign: 'center',
align: 'center',
editBtn: false,
delBtn: false,
addBtn: false,
column: [
#foreach ($column in $columns)
{
label: '$column.comments',
prop: '$column.lowerAttrName'
},
#end
]
}
<template>
<div class="execution">
<basic-container>
<avue-crud ref="crud"
:page="page"
:data="tableData"
:table-loading="tableLoading"
:option="tableOption"
@on-load="getList"
@refresh-change="refreshChange"
@row-update="handleUpdate"
@row-save="handleSave"
@row-del="rowDel">
<template slot="menuLeft">
<el-button type="primary"
@click="handleAdd"
size="small"
v-if="permissions.${moduleName}_${pathName}_add">新 增</el-button>
<br /><br />
</template>
<template slot-scope="scope"
slot="menu">
<el-button type="text"
v-if="permissions.${moduleName}_${pathName}_edit"
icon="el-icon-check"
size="small"
plain
@click="handleEdit(scope.row,scope.index)">编辑</el-button>
<el-button type="text"
v-if="permissions.${moduleName}_${pathName}_del"
icon="el-icon-delete"
size="small"
plain
@click="handleDel(scope.row,scope.index)">删除</el-button>
</template>
</avue-crud>
</basic-container>
</div>
</template>
<script>
import { fetchList, getObj, addObj, putObj, delObj } from '@/api/${pathName}'
import { tableOption } from '@/const/crud/${pathName}'
import { mapGetters } from 'vuex'
export default {
name: '${pathName}',
data() {
return {
tableData: [],
page: {
total: 0, // 总页数
currentPage: 1, // 当前页数
pageSize: 20 // 每页显示多少条
},
tableLoading: false,
tableOption: tableOption
}
},
created() {
},
mounted: function() { },
computed: {
...mapGetters(['permissions'])
},
methods: {
getList(page, params) {
this.tableLoading = true
fetchList(Object.assign({
current: page.currentPage,
size: page.pageSize
}, params)).then(response => {
this.tableData = response.data.data.records
this.page.total = response.data.data.total
this.tableLoading = false
})
},
/**
* @title 打开新增窗口
* @detail 调用crud的handleadd方法即可
*
**/
handleAdd: function() {
this.$refs.crud.rowAdd()
},
handleEdit(row, index) {
this.$refs.crud.rowEdit(row, index)
},
handleDel(row, index) {
this.$refs.crud.rowDel(row, index)
},
rowDel: function(row, index) {
var _this = this
this.$confirm('是否确认删除ID为' + row.$pk.lowerAttrName, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function() {
return delObj(row.$pk.lowerAttrName)
}).then(data => {
_this.tableData.splice(index, 1)
_this.$message({
showClose: true,
message: '删除成功',
type: 'success'
})
this.getList(this.page)
}).catch(function(err) { })
},
/**
* @title 数据更新
* @param row 为当前的数据
* @param index 为当前更新数据的行数
* @param done 为表单关闭函数
*
**/
handleUpdate: function(row, index, done) {
putObj(row).then(data => {
this.tableData.splice(index, 1, Object.assign({}, row))
this.$message({
showClose: true,
message: '修改成功',
type: 'success'
})
done()
this.getList(this.page)
})
},
/**
* @title 数据添加
* @param row 为当前的数据
* @param done 为表单关闭函数
*
**/
handleSave: function(row, done) {
addObj(row).then(data => {
this.tableData.push(Object.assign({}, row))
this.$message({
showClose: true,
message: '添加成功',
type: 'success'
})
done()
this.getList(this.page)
})
},
/**
* 刷新回调
*/
refreshChange() {
this.getList(this.page)
}
}
}
</script>
<style lang="scss" scoped>
</style>
-- 该脚本不要执行,请完善 ID 对应关系,注意层级关系 !!!!
-- 菜单SQL
insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`)
values ( '父菜单ID', 'views/${moduleName}/${pathName}/index', '', '0', '${pathName}', 'icon-bangzhushouji', '菜单ID', '0', '2018-01-20 13:17:19', '8', '2018-07-29 13:38:19', '${comments}管理');
-- 菜单对应按钮SQL
insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`)
values ( '菜单ID', null, '${moduleName}_${pathName}_add', '1', null, '1', '子按钮ID1', '0', '2018-05-15 21:35:18', '0', '2018-07-29 13:38:59', '${comments}新增');
insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`)
values ( '菜单ID', null, '${moduleName}_${pathName}_edit', '1', null, '1', '子按钮ID2', '0', '2018-05-15 21:35:18', '1', '2018-07-29 13:38:59', '${comments}修改');
insert into `sys_menu` ( `parent_id`, `component`, `permission`, `type`, `path`, `icon`, `menu_id`, `del_flag`, `create_time`, `sort`, `update_time`, `name`)
values ( '菜单ID', null, '${moduleName}_${pathName}_del', '1', null, '1', '子按钮ID3', '0', '2018-05-15 21:35:18', '2', '2018-07-29 13:38:59', '${comments}删除');
//package com.elephant.framework.galaxy.travel.mapper;
//
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.elephant.framework.galaxy.travel.module.system.mapper.DepartmentMapper;
//import com.elephant.framework.galaxy.travel.module.system.entity.Department;
//import org.junit.Test;
//import org.junit.runner.RunWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.test.context.junit4.SpringRunner;
//
//import java.util.Date;
//import java.util.List;
//
//@RunWith(SpringRunner.class)
//@SpringBootTest
//public class DepartmentMapperTests {
//
// @Autowired
// private DepartmentMapper departmentMapper;
//
// @Test
// public void testSelect() {
// // 查询全部
//// List<Department> departments = deptMapper.selectList(null);
//// departments.forEach(System.out::println);
// //id 查询要有@TableId标识主键
//// Department department = deptMapper.selectById(1);
//// System.out.println(department);
// //多条件查询
//// Department department = new Department();
//// department.setDelFlag(Byte.valueOf("1"));
//// department.setName("租户2");
//// Department result = deptMapper.selectOne(new QueryWrapper<>(department));
//// System.out.println(result);
// Page<Department> page = new Page<>(2, 2);
// IPage<Department> departmentIPage = departmentMapper.selectPage(page, null);
// List<Department> records = departmentIPage.getRecords();
// System.out.println(records);
// }
//
// @Test
// public void testInsert() {
// Department department = new Department();
// department.setName("品象软件");
// department.setSort(1);
// department.setCreateTime(new Date());
// department.setDelFlag(Byte.parseByte("0"));
// department.setParentId(1);
// department.setTenantId(1);
// departmentMapper.insert(department);
// }
//
//}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论