Commit 11bc26d3 by 杨伟程

老人模块更新

parents 7253b0f5 5c43ec9b
Showing with 2477 additions and 4293 deletions
CREATE TABLE `sys_file` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' id ',
`file_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 文件名称 ',
`url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 文件地址 ',
`mime` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 文件格式 ',
`create_date` datetime NOT NULL COMMENT ' 创建时间 ',
`update_date` datetime NOT NULL COMMENT ' 更新时间 ',
`del_flag` char(1) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 删除标志 0否 1是 ',
`create_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人名称',
`update_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人名称',
`pdf_url` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'pdf格式地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT=' 系统文件表 ';
CREATE TABLE `sys_config` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' id ',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 租户id ',
`code` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 编码 例如 user.type.personal 类名.字段.业务 ',
`name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 名称 例如 冻结 ',
`value` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 值 例如 1 2 3',
`sort` int DEFAULT '0' COMMENT '排序 ',
`description` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT ' 描述 ',
`category_id` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 分类FK ',
`create_date` datetime NOT NULL COMMENT ' 创建时间 ',
`update_date` datetime NOT NULL COMMENT ' 更新时间 ',
`del_flag` char(1) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 删除标志 0否 1是 ',
`create_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人名称',
`update_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人名称',
`eng_name` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '英文名称',
PRIMARY KEY (`id`),
KEY `sys_config_category_id_index` (`category_id`),
KEY `sys_config_code_index` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT=' 配置 ';
CREATE TABLE `sys_config_category` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' PK ',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 租户id ',
`code` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 编码 例如 user.type,类名.字段名 ',
`name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 类型名称 ',
`create_date` datetime NOT NULL COMMENT ' 创建时间 ',
`update_date` datetime NOT NULL COMMENT ' 更新时间 ',
`del_flag` char(1) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 删除标志 0否 1是 ',
`create_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人名称',
`update_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人名称',
`eng_name` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类型英文名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT=' 配置类型 ';
CREATE TABLE `sys_dictionary` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id',
`code` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据字典编码 例如 user.type.personal 类名.字段.业务',
`name` varchar(200) COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据字典名称 例如 冻结',
`value` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据字典值 例如 1 2 3',
`sort` int NOT NULL DEFAULT '0' COMMENT '排序',
`description` varchar(255) COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '数据字典值描述',
`category_id` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据字典分类FK',
`create_date` datetime DEFAULT NULL COMMENT '创建时间',
`update_date` datetime DEFAULT NULL COMMENT '更新时间',
`del_flag` char(1) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 删除标志 0否 1是 ',
`create_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人名称',
`update_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人名称',
`eng_name` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据字典英文名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='数据字典';
CREATE TABLE `sys_dictionary_category` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'PK',
`code` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据字典编码 例如 user.type,类名.字段名',
`name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据字典类型名称',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` char(1) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' 删除标志 0否 1是 ',
`create_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人名称',
`update_by` varchar(128) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人名称',
`eng_name` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据字典类型名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='数据字典类型';
...@@ -57,7 +57,7 @@ CREATE TABLE `plat_elder` ...@@ -57,7 +57,7 @@ CREATE TABLE `plat_elder`
DEFAULT CHARSET = utf8mb4 COMMENT ='长者基本信息'; DEFAULT CHARSET = utf8mb4 COMMENT ='长者基本信息';
CREATE TABLE `elder_social_relation` CREATE TABLE `plat_elder_social_relation`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NOT NULL COMMENT '长者id', `elder_id` varchar(64) NOT NULL COMMENT '长者id',
...@@ -78,7 +78,7 @@ CREATE TABLE `elder_social_relation` ...@@ -78,7 +78,7 @@ CREATE TABLE `elder_social_relation`
) ENGINE = InnoDB ) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='长者社会关系'; DEFAULT CHARSET = utf8mb4 COMMENT ='长者社会关系';
CREATE TABLE `elder_health_info` CREATE TABLE `plat_elder_health_info`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`elder_id` VARCHAR(64) NOT NULL COMMENT '长者id', `elder_id` VARCHAR(64) NOT NULL COMMENT '长者id',
...@@ -104,7 +104,7 @@ CREATE TABLE `elder_health_info` ...@@ -104,7 +104,7 @@ CREATE TABLE `elder_health_info`
DEFAULT CHARSET = utf8mb4 COMMENT = '长者健康状态'; DEFAULT CHARSET = utf8mb4 COMMENT = '长者健康状态';
CREATE TABLE `elder_other_info` CREATE TABLE `plat_elder_other_info`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`elder_id` VARCHAR(64) NOT NULL COMMENT '长者id', `elder_id` VARCHAR(64) NOT NULL COMMENT '长者id',
...@@ -130,7 +130,7 @@ CREATE TABLE `elder_other_info` ...@@ -130,7 +130,7 @@ CREATE TABLE `elder_other_info`
DEFAULT CHARSET = utf8mb4 COMMENT = '长者其他信息'; DEFAULT CHARSET = utf8mb4 COMMENT = '长者其他信息';
CREATE TABLE `elder_medical_examination_info` CREATE TABLE `plat_elder_medical_examination_info`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NOT NULL COMMENT '长者id', `elder_id` varchar(64) NOT NULL COMMENT '长者id',
...@@ -147,7 +147,7 @@ CREATE TABLE `elder_medical_examination_info` ...@@ -147,7 +147,7 @@ CREATE TABLE `elder_medical_examination_info`
DEFAULT CHARSET = utf8mb4 COMMENT ='长者体检报告信息'; DEFAULT CHARSET = utf8mb4 COMMENT ='长者体检报告信息';
CREATE TABLE `elder_children_info` CREATE TABLE `plat_elder_children_info`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`elder_id` varchar(64) NOT NULL COMMENT '长者id', `elder_id` varchar(64) NOT NULL COMMENT '长者id',
...@@ -168,7 +168,7 @@ CREATE TABLE `elder_children_info` ...@@ -168,7 +168,7 @@ CREATE TABLE `elder_children_info`
CREATE TABLE `dict_type` CREATE TABLE `plat_dict_type`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`code` varchar(64) DEFAULT NULL '类型编码', `code` varchar(64) DEFAULT NULL '类型编码',
...@@ -183,7 +183,7 @@ CREATE TABLE `dict_type` ...@@ -183,7 +183,7 @@ CREATE TABLE `dict_type`
) ENGINE = InnoDB ) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='字典类型'; DEFAULT CHARSET = utf8mb4 COMMENT ='字典类型';
CREATE TABLE `dict_info` CREATE TABLE `plat_dict_info`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`dict_type_id` varchar(64) NOT NULL COMMENT '字典类型id', `dict_type_id` varchar(64) NOT NULL COMMENT '字典类型id',
...@@ -220,7 +220,7 @@ CREATE TABLE `sys_file` ...@@ -220,7 +220,7 @@ CREATE TABLE `sys_file`
ROW_FORMAT = DYNAMIC COMMENT ='文件管理'; ROW_FORMAT = DYNAMIC COMMENT ='文件管理';
CREATE TABLE `sys_user` CREATE TABLE `plat_user`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`name` varchar(128) NOT NULL COMMENT '姓名', `name` varchar(128) NOT NULL COMMENT '姓名',
...@@ -240,7 +240,7 @@ CREATE TABLE `sys_user` ...@@ -240,7 +240,7 @@ CREATE TABLE `sys_user`
CREATE TABLE `sys_role` CREATE TABLE `plat_role`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`name` VARCHAR(128) NOT NULL COMMENT '名称', `name` VARCHAR(128) NOT NULL COMMENT '名称',
...@@ -255,7 +255,7 @@ CREATE TABLE `sys_role` ...@@ -255,7 +255,7 @@ CREATE TABLE `sys_role`
) ENGINE = INNODB ) ENGINE = INNODB
DEFAULT CHARSET = utf8mb4 COMMENT = '角色管理'; DEFAULT CHARSET = utf8mb4 COMMENT = '角色管理';
CREATE TABLE `sys_user_role` CREATE TABLE `plat_user_role`
( (
`id` char(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' id ', `id` char(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT ' id ',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 租户id ', `tenant_id` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ' 租户id ',
...@@ -275,7 +275,7 @@ CREATE TABLE `sys_user_role` ...@@ -275,7 +275,7 @@ CREATE TABLE `sys_user_role`
COLLATE = utf8mb4_general_ci COMMENT =' 用户角色关联表 '; COLLATE = utf8mb4_general_ci COMMENT =' 用户角色关联表 ';
CREATE TABLE `sys_org` CREATE TABLE `plat_org`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`name` VARCHAR(128) NOT NULL COMMENT '名称', `name` VARCHAR(128) NOT NULL COMMENT '名称',
...@@ -294,7 +294,7 @@ CREATE TABLE `sys_org` ...@@ -294,7 +294,7 @@ CREATE TABLE `sys_org`
DEFAULT CHARSET = utf8mb4 COMMENT = '组织管理'; DEFAULT CHARSET = utf8mb4 COMMENT = '组织管理';
CREATE TABLE `sys_role_org` CREATE TABLE `plat_role_org`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`role_id` VARCHAR(64) NOT NULL COMMENT '角色id', `role_id` VARCHAR(64) NOT NULL COMMENT '角色id',
...@@ -312,7 +312,7 @@ CREATE TABLE `sys_role_org` ...@@ -312,7 +312,7 @@ CREATE TABLE `sys_role_org`
CREATE TABLE `sys_menu` CREATE TABLE `plat_menu`
( (
`id` varchar(64) NOT NULL COMMENT '编号', `id` varchar(64) NOT NULL COMMENT '编号',
`parent_id` varchar(64) DEFAULT NULL COMMENT '父级编号', `parent_id` varchar(64) DEFAULT NULL COMMENT '父级编号',
...@@ -338,7 +338,7 @@ CREATE TABLE `sys_menu` ...@@ -338,7 +338,7 @@ CREATE TABLE `sys_menu`
DEFAULT CHARSET = utf8 DEFAULT CHARSET = utf8
ROW_FORMAT = DYNAMIC COMMENT ='菜单表'; ROW_FORMAT = DYNAMIC COMMENT ='菜单表';
CREATE TABLE `sys_role_menus` CREATE TABLE `plat_role_menus`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`role_id` varchar(64) NOT NULL COMMENT '角色id', `role_id` varchar(64) NOT NULL COMMENT '角色id',
...@@ -357,7 +357,7 @@ CREATE TABLE `sys_role_menus` ...@@ -357,7 +357,7 @@ CREATE TABLE `sys_role_menus`
CREATE TABLE `space` CREATE TABLE `plat_space`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`name` VARCHAR(128) NOT NULL COMMENT '名称', `name` VARCHAR(128) NOT NULL COMMENT '名称',
...@@ -374,7 +374,7 @@ CREATE TABLE `space` ...@@ -374,7 +374,7 @@ CREATE TABLE `space`
) ENGINE = INNODB ) ENGINE = INNODB
DEFAULT CHARSET = utf8mb4 COMMENT = '空间管理'; DEFAULT CHARSET = utf8mb4 COMMENT = '空间管理';
CREATE TABLE `room` CREATE TABLE `plat_room`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`name` VARCHAR(128) NOT NULL COMMENT '名称', `name` VARCHAR(128) NOT NULL COMMENT '名称',
...@@ -392,7 +392,7 @@ CREATE TABLE `room` ...@@ -392,7 +392,7 @@ CREATE TABLE `room`
DEFAULT CHARSET = utf8mb4 COMMENT = '房间管理'; DEFAULT CHARSET = utf8mb4 COMMENT = '房间管理';
-- 待完善 区域设置表 -- 待完善 区域设置表
CREATE TABLE `region_setting` CREATE TABLE `plat_region_setting`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`room_id` VARCHAR(64) NOT NULL COMMENT '房间id', `room_id` VARCHAR(64) NOT NULL COMMENT '房间id',
...@@ -408,7 +408,7 @@ CREATE TABLE `region_setting` ...@@ -408,7 +408,7 @@ CREATE TABLE `region_setting`
DEFAULT CHARSET = utf8mb4 COMMENT = '区域管理'; DEFAULT CHARSET = utf8mb4 COMMENT = '区域管理';
CREATE TABLE `bed` CREATE TABLE `plat_bed`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`name` varchar(128) NOT NULL COMMENT '床位名称 床位1,床位2', `name` varchar(128) NOT NULL COMMENT '床位名称 床位1,床位2',
...@@ -425,7 +425,7 @@ CREATE TABLE `bed` ...@@ -425,7 +425,7 @@ CREATE TABLE `bed`
) ENGINE = InnoDB ) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4 COMMENT ='床位管理'; DEFAULT CHARSET = utf8mb4 COMMENT ='床位管理';
CREATE TABLE `region_setting` CREATE TABLE `plat_region_setting`
( (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`name` varchar(128) NOT NULL COMMENT '床位名称 床位1,床位2', `name` varchar(128) NOT NULL COMMENT '床位名称 床位1,床位2',
...@@ -441,7 +441,7 @@ CREATE TABLE `region_setting` ...@@ -441,7 +441,7 @@ CREATE TABLE `region_setting`
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='区域设置'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='区域设置';
CREATE TABLE `equipment` CREATE TABLE `plat_equipment`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`equipment_id` VARCHAR(64) NOT NULL COMMENT '设备id', `equipment_id` VARCHAR(64) NOT NULL COMMENT '设备id',
...@@ -465,7 +465,7 @@ CREATE TABLE `equipment` ...@@ -465,7 +465,7 @@ CREATE TABLE `equipment`
DEFAULT CHARSET = utf8mb4 COMMENT = '设备管理'; DEFAULT CHARSET = utf8mb4 COMMENT = '设备管理';
CREATE TABLE `alarm_config` CREATE TABLE `plat_alarm_config`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`alarm_type` VARCHAR(4) DEFAULT NULL COMMENT '告警类型 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常', `alarm_type` VARCHAR(4) DEFAULT NULL COMMENT '告警类型 1 长者跌倒 2 呼吸异常 3 心率异常 4 行为异常',
...@@ -489,7 +489,7 @@ CREATE TABLE `alarm_config` ...@@ -489,7 +489,7 @@ CREATE TABLE `alarm_config`
DEFAULT CHARSET = utf8mb4 COMMENT = '告警配置'; DEFAULT CHARSET = utf8mb4 COMMENT = '告警配置';
CREATE TABLE `alarm_record` CREATE TABLE `plat_alarm_record`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`alarm_id` VARCHAR(64) DEFAULT NULL COMMENT '关联告警配置', `alarm_id` VARCHAR(64) DEFAULT NULL COMMENT '关联告警配置',
...@@ -508,7 +508,7 @@ CREATE TABLE `alarm_record` ...@@ -508,7 +508,7 @@ CREATE TABLE `alarm_record`
DEFAULT CHARSET = utf8mb4 COMMENT = '告警配置'; DEFAULT CHARSET = utf8mb4 COMMENT = '告警配置';
CREATE TABLE `plafform_setting` CREATE TABLE `plat_plafform_setting`
( (
`id` VARCHAR(64) NOT NULL COMMENT 'id', `id` VARCHAR(64) NOT NULL COMMENT 'id',
`name` VARCHAR(64) NOT NULL COMMENT '名称', `name` VARCHAR(64) NOT NULL COMMENT '名称',
......
-- 长者管理 -- 长者管理
CREATE TABLE `platElder` ( CREATE TABLE `elder` (
`id` varchar(64) NOT NULL COMMENT 'id', `id` varchar(64) NOT NULL COMMENT 'id',
`name` varchar(128) NOT NULL COMMENT '姓名', `name` varchar(128) NOT NULL COMMENT '姓名',
`age` int(4) DEFAULT NULL COMMENT '年龄', `age` int(4) DEFAULT NULL COMMENT '年龄',
......
-- 租户端表
CREATE TABLE `plat_user` (
`id` varchar(64) NOT NULL COMMENT 'id',
`tenant_id` varchar(64) DEFAULT NULL COMMENT '租户id',
`username` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名',
`account` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账户',
`password` varchar(64) NOT NULL COMMENT '密码',
`mobile` varchar(11) NOT NULL COMMENT '手机号',
`email` varchar(64) NOT NULL COMMENT '邮箱',
`status` char(1) NOT NULL COMMENT '状态 0禁用 1启用',
`avatar` varchar(256) DEFAULT NULL COMMENT '头像',
`is_tenant` char(1) DEFAULT NULL COMMENT '是否租户账户/租户管理员 0否 1是',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`created_by` varchar(64) NOT NULL COMMENT '创建人',
`update_by` varchar(64) NOT NULL COMMENT '更新人',
`org_id` varchar(64) DEFAULT NULL COMMENT '部门树id',
`org_path` varchar(512) DEFAULT NULL COMMENT '部门树冗余id',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `plat_user_account_index` (`account`),
KEY `plat_user_org_id_index` (`org_id`),
KEY `plat_user_mobile_index` (`mobile`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='租户账号管理';
CREATE TABLE `plat_role` (
`id` varchar(64) NOT NULL COLLATE utf8mb4_general_ci COMMENT 'id',
`tenant_id` varchar(64) NOT NULL COMMENT '租户id',
`role_name` varchar(100) NOT NULL COMMENT '名称',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`data_scope` varchar(600) DEFAULT NULL COMMENT '数据权限 子公司id 上级可看到下级',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`updated_by` varchar(64) DEFAULT NULL COMMENT '更新人',
`created_by` varchar(64) DEFAULT NULL COMMENT '创建人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='租户端角色';
CREATE TABLE `plat_user_role` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户id',
`user_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户id',
`role_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色id',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`created_by` varchar(64) NOT NULL COMMENT '创建人',
`update_by` varchar(64) NOT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
KEY `plat_user_role_role_id_index` (`role_id`),
KEY `plat_user_role_user_id_index` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='租户端用户角色关联表';
CREATE TABLE `plat_role_menu` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户id',
`role_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色id',
`menu_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '菜单id',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`created_by` varchar(64) NOT NULL COMMENT '创建人',
`update_by` varchar(64) NOT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
KEY `plat_role_menu_menu_id_index` (`menu_id`),
KEY `plat_role_menu_role_id_index` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='租户端角色菜单关联表';
CREATE TABLE `plat_org` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户id',
`parent_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '父级id',
`name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT '组织名称',
`sort` int DEFAULT NULL COMMENT '排序',
`status` char(1) COLLATE utf8mb4_general_ci NOT NULL COMMENT '状态 0禁用 1启用',
`type` char(1) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类型 1-居家 2-机构',
`region` varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '管辖区域id',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`created_by` varchar(64) NOT NULL COMMENT '创建人',
`update_by` varchar(64) NOT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
KEY `plat_org_parent_id_index` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='租户端部门';
CREATE TABLE `plat_role_org` (
`id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT 'id',
`tenant_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '租户id',
`role_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色id',
`org_id` varchar(64) COLLATE utf8mb4_general_ci NOT NULL COMMENT '部门树id',
`create_date` datetime NOT NULL COMMENT '创建时间',
`update_date` datetime NOT NULL COMMENT '更新时间',
`del_flag` CHAR(1) DEFAULT NULL COMMENT '删除标识',
`created_by` varchar(64) NOT NULL COMMENT '创建人',
`update_by` varchar(64) NOT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
KEY `plat_role_iorg_id_index` (`org_id`),
KEY `plat_role_role_id_index` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='租户端角色部门关联表';
\ No newline at end of file
...@@ -84,7 +84,7 @@ CREATE TABLE `saas_menu` ( ...@@ -84,7 +84,7 @@ CREATE TABLE `saas_menu` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='saas端菜单'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='saas端菜单';
CREATE TABLE `tnt_auth_menu` ( CREATE TABLE `plat_auth_menu` (
`id` varchar(64) NOT NULL COLLATE utf8mb4_general_ci COMMENT '主键id', `id` varchar(64) NOT NULL COLLATE utf8mb4_general_ci COMMENT '主键id',
`parent_id` varchar(64) NOT NULL COMMENT '父级id', `parent_id` varchar(64) NOT NULL COMMENT '父级id',
`name` varchar(100) NOT NULL COMMENT '资源名称', `name` varchar(100) NOT NULL COMMENT '资源名称',
...@@ -132,7 +132,7 @@ CREATE TABLE `saas_operation_log` ( ...@@ -132,7 +132,7 @@ CREATE TABLE `saas_operation_log` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='saas端操作日志'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='saas端操作日志';
CREATE TABLE `tnt_tenant` ( CREATE TABLE `plat_tenant` (
`id` varchar(64) NOT NULL COLLATE utf8mb4_general_ci COMMENT 'id', `id` varchar(64) NOT NULL COLLATE utf8mb4_general_ci COMMENT 'id',
`name` varchar(128) DEFAULT NULL COMMENT '名称', `name` varchar(128) DEFAULT NULL COMMENT '名称',
`status` varchar(10) NOT NULL COMMENT '状态 0停用 1启用', `status` varchar(10) NOT NULL COMMENT '状态 0停用 1启用',
...@@ -150,3 +150,5 @@ CREATE TABLE `tnt_tenant` ( ...@@ -150,3 +150,5 @@ CREATE TABLE `tnt_tenant` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 STATS_AUTO_RECALC=0 ROW_FORMAT=COMPACT COMMENT='租户管理'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 STATS_AUTO_RECALC=0 ROW_FORMAT=COMPACT COMMENT='租户管理';
...@@ -22,10 +22,10 @@ import java.util.Arrays; ...@@ -22,10 +22,10 @@ import java.util.Arrays;
*/ */
@Configuration @Configuration
@Conditional(BizCondition.class) @Conditional(BizCondition.class)
public class SwaggerFixtureConfig { public class SwaggerSaasConfig {
@Bean @Bean
public SwaggerModuleConfig fixtureModule() { public SwaggerModuleConfig saasModule() {
SwaggerModuleConfig config = new SwaggerModuleConfig(); SwaggerModuleConfig config = new SwaggerModuleConfig();
config.setPackageList(Arrays.asList("com.makeit.controller")); config.setPackageList(Arrays.asList("com.makeit.controller"));
config.setModuleName("saas管理"); config.setModuleName("saas管理");
...@@ -34,7 +34,7 @@ public class SwaggerFixtureConfig { ...@@ -34,7 +34,7 @@ public class SwaggerFixtureConfig {
@Bean @Bean
public Docket fixtureApi() { public Docket saasApi() {
Docket docket = new Docket(DocumentationType.SWAGGER_2) Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()) .apiInfo(apiInfo())
......
...@@ -4,7 +4,7 @@ import com.makeit.common.dto.LoginDTO; ...@@ -4,7 +4,7 @@ import com.makeit.common.dto.LoginDTO;
import com.makeit.common.response.ApiResponseEntity; import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.service.saas.SaasUserService; import com.makeit.service.saas.SaasUserService;
import com.makeit.utils.user.SaasUserLoginVO; import com.makeit.utils.user.saas.SaasUserLoginVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
......
...@@ -7,8 +7,8 @@ import com.makeit.common.response.ApiResponseEntity; ...@@ -7,8 +7,8 @@ import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.saas.SaasRoleDTOVO;
import com.makeit.module.admin.saas.PlatRoleMenuDTO; import com.makeit.module.admin.saas.SaasRoleMenuDTO;
import com.makeit.module.admin.saas.PlatUserRoleDTO; import com.makeit.module.admin.saas.SaasUserRoleDTO;
import com.makeit.service.saas.SaasRoleService; import com.makeit.service.saas.SaasRoleService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -93,7 +93,7 @@ public class SaasRoleController { ...@@ -93,7 +93,7 @@ public class SaasRoleController {
@Action(module = "saas端-角色", name = "分配用户", code = "saas:role:assignUserList") @Action(module = "saas端-角色", name = "分配用户", code = "saas:role:assignUserList")
@ApiOperation("分配用户") @ApiOperation("分配用户")
@PostMapping("assignUserList") @PostMapping("assignUserList")
public ApiResponseEntity<?> assignUserList(@RequestBody List<PlatUserRoleDTO> userRoleDTOList){//参数要不要是一个对象里 有一个数组 public ApiResponseEntity<?> assignUserList(@RequestBody List<SaasUserRoleDTO> userRoleDTOList){//参数要不要是一个对象里 有一个数组
saasRoleService.assignUserList(userRoleDTOList); saasRoleService.assignUserList(userRoleDTOList);
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
...@@ -101,7 +101,7 @@ public class SaasRoleController { ...@@ -101,7 +101,7 @@ public class SaasRoleController {
@Action(module = "saas端-角色", name = "删除分配用户", code = "saas:role:removeAssignUserList") @Action(module = "saas端-角色", name = "删除分配用户", code = "saas:role:removeAssignUserList")
@ApiOperation("删除分配用户") @ApiOperation("删除分配用户")
@PostMapping("removeAssignUserList") @PostMapping("removeAssignUserList")
public ApiResponseEntity<?> removeAssignUserList(@RequestBody List<PlatUserRoleDTO> userRoleDTOList){ public ApiResponseEntity<?> removeAssignUserList(@RequestBody List<SaasUserRoleDTO> userRoleDTOList){
saasRoleService.removeAssignUserList(userRoleDTOList); saasRoleService.removeAssignUserList(userRoleDTOList);
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
...@@ -109,7 +109,7 @@ public class SaasRoleController { ...@@ -109,7 +109,7 @@ public class SaasRoleController {
@Action(module = "saas端-角色", name = "分配菜单", code = "saas:role:assignMenuList") @Action(module = "saas端-角色", name = "分配菜单", code = "saas:role:assignMenuList")
@ApiOperation("分配菜单") @ApiOperation("分配菜单")
@PostMapping("assignMenuList") @PostMapping("assignMenuList")
public ApiResponseEntity<?> assignMenuList(@RequestBody PlatRoleMenuDTO roleMenuDTO){ public ApiResponseEntity<?> assignMenuList(@RequestBody SaasRoleMenuDTO roleMenuDTO){
saasRoleService.assignMenuList(roleMenuDTO); saasRoleService.assignMenuList(roleMenuDTO);
return ApiResponseUtils.success(); return ApiResponseUtils.success();
} }
......
...@@ -9,9 +9,9 @@ import com.makeit.common.response.ApiResponseEntity; ...@@ -9,9 +9,9 @@ import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils; import com.makeit.common.response.ApiResponseUtils;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.module.admin.saas.SaasUserDTOVO; import com.makeit.module.admin.saas.SaasUserDTOVO;
import com.makeit.module.admin.saas.PlatUserQueryDTO; import com.makeit.module.admin.saas.SaasUserQueryDTO;
import com.makeit.service.saas.SaasUserService; import com.makeit.service.saas.SaasUserService;
import com.makeit.utils.user.SaasUserLoginVO; import com.makeit.utils.user.saas.SaasUserLoginVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -42,32 +42,33 @@ public class SaasUserController { ...@@ -42,32 +42,33 @@ public class SaasUserController {
@Action(module = "SAAS端-用户", name = "分页列表", code = "saas:user:page") @Action(module = "SAAS端-用户", name = "分页列表", code = "saas:user:page")
@ApiOperation("分页列表") @ApiOperation("分页列表")
@PostMapping("page") @PostMapping("page")
public ApiResponseEntity<PageVO<SaasUserDTOVO>> page(@RequestBody PageReqDTO<PlatUserQueryDTO> page){ public ApiResponseEntity<PageVO<SaasUserDTOVO>> page(@RequestBody PageReqDTO<SaasUserQueryDTO> page){
return ApiResponseUtils.success(saasUserService.page(page)); //return ApiResponseUtils.success(saasUserService.page(page));
return ApiResponseUtils.success(null);
} }
@ApiOperation("分页列表") @ApiOperation("分页列表")
@PostMapping("pageAuthIgnore") @PostMapping("pageAuthIgnore")
public ApiResponseEntity<PageVO<SaasUserDTOVO>> pageAuthIgnore(@RequestBody PageReqDTO<PlatUserQueryDTO> page){ public ApiResponseEntity<PageVO<SaasUserDTOVO>> pageAuthIgnore(@RequestBody PageReqDTO<SaasUserQueryDTO> page){
return ApiResponseUtils.success(saasUserService.page(page)); return ApiResponseUtils.success(saasUserService.page(page));
} }
//@Action(module = "SAAS端-用户", name = "分页列表-排除超级管理员", code = "plat:user:pageNotSuperAdmin") //@Action(module = "SAAS端-用户", name = "分页列表-排除超级管理员", code = "plat:user:pageNotSuperAdmin")
@ApiOperation("分页列表-排除超级管理员") @ApiOperation("分页列表-排除超级管理员")
@PostMapping("pageNotSuperAdmin") @PostMapping("pageNotSuperAdmin")
public ApiResponseEntity<PageVO<SaasUserDTOVO>> pageNotSuperAdmin(@RequestBody PageReqDTO<PlatUserQueryDTO> page){ public ApiResponseEntity<PageVO<SaasUserDTOVO>> pageNotSuperAdmin(@RequestBody PageReqDTO<SaasUserQueryDTO> page){
return ApiResponseUtils.success(saasUserService.pageNoSuperAdmin(page)); return ApiResponseUtils.success(saasUserService.pageNoSuperAdmin(page));
} }
@ApiOperation("分页列表(AuthIgnore)") @ApiOperation("分页列表(AuthIgnore)")
@PostMapping("listAuthIgnore") @PostMapping("listAuthIgnore")
public ApiResponseEntity<List<SaasUserDTOVO>> listAuthIgnore(@RequestBody PlatUserQueryDTO dto){ public ApiResponseEntity<List<SaasUserDTOVO>> listAuthIgnore(@RequestBody SaasUserQueryDTO dto){
return ApiResponseUtils.success(saasUserService.list(dto)); return ApiResponseUtils.success(saasUserService.list(dto));
} }
@ApiOperation("分页列表-排除超级管理员(AuthIgnore)") @ApiOperation("分页列表-排除超级管理员(AuthIgnore)")
@PostMapping("listNotSuperAdminAuthIgnore") @PostMapping("listNotSuperAdminAuthIgnore")
public ApiResponseEntity<List<SaasUserDTOVO>> listNotSuperAdminAuthIgnore(@RequestBody PlatUserQueryDTO dto){ public ApiResponseEntity<List<SaasUserDTOVO>> listNotSuperAdminAuthIgnore(@RequestBody SaasUserQueryDTO dto){
return ApiResponseUtils.success(saasUserService.listNoSuperAdmin(dto)); return ApiResponseUtils.success(saasUserService.listNoSuperAdmin(dto));
} }
......
package com.makeit.controller.sys;
import com.makeit.utils.old.DateUtils;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.storage.AccessoryRepository;
import com.makeit.utils.storage.LocalRepository;
import com.makeit.utils.storage.StorageProperty;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* @author liuhb
* @date 2021/12/14
*/
@SuppressWarnings("ALL")
public abstract class BaseController {
private static String HOST = null;
public static final String OSS = "1";
@Autowired
StorageProperty storageProperty;
@Autowired
protected HttpServletRequest req;
@Autowired
public AccessoryRepository accessoryRepository;
// @Autowired
public LocalRepository localRepository;
public static final String FILE_PATH = "${basePath}/${yyyyMM}/${day}/${fileName}.${type}";
/**
* 获取存储类型
*
* @param type 0 本地 1 oss
* @return
*/
public AccessoryRepository storageRepository(String type) {
// if (StringUtils.equals(OSS, type) && accessoryRepository.isValid()) {
// return accessoryRepository;
// }
// return localRepository;
if (StringUtils.equals(OSS, type)) {
return accessoryRepository;
}
return localRepository;
}
/**
* 获取实际ip地址
*
* @param req
* @return
*/
public String getIp(HttpServletRequest req) {
try {
String ip = req.getHeader("X-Forwarded-For");
if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
//多次反向代理后会有多个ip值,第一个ip才是真实ip
int index = ip.indexOf(",");
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
}
ip = req.getHeader("X-Real-IP");
if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
return ip;
}
return req.getRemoteAddr();
} catch (Exception e) {
}
return null;
}
/**
* 获取全路径
*
* @param url
* @return
*/
public String getUri(String url) {
// if (url == null) {
// return null;
// }
// if (url.toLowerCase().contains("http")) {
// return url;
// }
// if (StringUtils.isEmpty(HOST)) {
// HOST = getHost();
// }
// return HOST + url;
return url;
}
/**
* 获取主机地址
*
* @return
*/
private String getHost() {
String host = req.getHeader("x-forwarded-host");
String prefix = StringUtils.defaultString(req.getHeader("x-forwarded-prefix"), "");
String proto = StringUtils.defaultString(req.getHeader("x-forwarded-proto"), "");
String origin = req.getHeader("origin");
if (StringUtils.isEmpty(host) && StringUtils.isNotEmpty(req.getHeader("host"))) {
host = req.getHeader("host");
} else if (StringUtils.isNotEmpty(origin)) {
host = StringUtils.substringAfter(origin, "://");
}
if (StringUtils.isEmpty(proto)) {
proto = StringUtils.defaultString(StringUtils.substringBefore(origin, ":"), "http");
}
if (StringUtils.isEmpty(host)) {
return "";
}
Map<String, String> param = new HashMap<>(0);
param.put("proto", proto);
param.put("host", host);
param.put("prefix", prefix);
//return StringUtils.fillTemplateByEl("${proto}://${host}${prefix}/", param);
return StringUtils.fillTemplateByEl("${proto}://${host}${prefix}", param);
}
protected String getFullPath(String basePath, String originalFilename) {
basePath = StringUtils.defaultString(basePath, "");
String[] type = originalFilename.split("\\.");
Map<String, String> param = new HashMap<>();
param.put("basePath", basePath);
param.put("yyyyMM", DateUtils.formatDate(new Date(), "yyyyMM"));
param.put("day", DateUtils.formatDate(new Date(), "dd"));
param.put("fileName", UUID.randomUUID().toString().replaceAll("-", ""));
param.put("type", type[type.length - 1]);
return StringUtils.fillTemplateByEl(FILE_PATH, param);
}
}
package com.makeit.controller.sys;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.module.system.dto.SysConfigCategoryDTOVO;
import com.makeit.module.system.service.SysConfigCategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "配置分类")
@RestController
@RequestMapping("/sys/configCategory")
public class SysConfigCategoryController {
@Autowired
private SysConfigCategoryService sysConfigCategoryService;
@ApiOperation(value = "列表", notes = "")
@PostMapping("/list")
public ApiResponseEntity<List<SysConfigCategoryDTOVO>> list(@RequestBody SysConfigCategoryDTOVO sysConfigCategory) {
return ApiResponseUtils.success(sysConfigCategoryService.list(sysConfigCategory));
}
@ApiOperation(value = "列表(AuthIgnore)", notes = "")
@PostMapping("/listAuthIgnore")
public ApiResponseEntity<List<SysConfigCategoryDTOVO>> listAuthIgnore(@RequestBody SysConfigCategoryDTOVO sysConfigCategory) {
return ApiResponseUtils.success(sysConfigCategoryService.list(sysConfigCategory));
}
@ApiOperation(value = "新增", notes = "")
@PostMapping("/add")
public ApiResponseEntity<?> add(@Validated @RequestBody SysConfigCategoryDTOVO sysConfigCategory) {
sysConfigCategoryService.add(sysConfigCategory);
return ApiResponseUtils.success();
}
@ApiOperation(value = "编辑", notes = "")
@PostMapping("/edit")
public ApiResponseEntity<?> edit(@Validated @RequestBody SysConfigCategoryDTOVO sysConfigCategory) {
sysConfigCategoryService.edit(sysConfigCategory);
return ApiResponseUtils.success();
}
@ApiOperation(value = "详情", notes = "")
@PostMapping("/view")
public ApiResponseEntity<SysConfigCategoryDTOVO> view(@RequestBody BaseIdDTO baseIdDTO) {
return ApiResponseUtils.success(sysConfigCategoryService.view(baseIdDTO.getId()));
}
@ApiOperation(value = "删除", notes = "")
@PostMapping("/del")
public ApiResponseEntity<?> del(@RequestBody BaseIdDTO baseIdDTO) {
sysConfigCategoryService.del(baseIdDTO.getId());
return ApiResponseUtils.success();
}
}
package com.makeit.controller.sys;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.module.system.entity.SysConfig;
import com.makeit.module.system.entity.SysConfigCategory;
import com.makeit.module.system.service.SysConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "配置")
@RestController
@RequestMapping("/sys/config")
public class SysConfigController {
@Autowired
private SysConfigService sysConfigService;
@ApiOperation(value = "列表", notes = "")
@PostMapping("/list")
public ApiResponseEntity<List<SysConfig>> list(@RequestBody SysConfig sysConfig) {
return ApiResponseUtils.success(sysConfigService.list(sysConfig));
}
@ApiOperation(value = "分页列表", notes = "")
@PostMapping("/page")
public ApiResponseEntity<PageVO<SysConfig>> page(@RequestBody PageReqDTO<SysConfig> page) {
return ApiResponseUtils.success(sysConfigService.page(page));
}
@ApiOperation(value = "列表(AuthIgnore)", notes = "")
@PostMapping("/listAuthIgnore")
public ApiResponseEntity<List<SysConfig>> listAuthIgnore(@RequestBody SysConfig sysConfig) {
return ApiResponseUtils.success(sysConfigService.list(sysConfig));
}
@ApiOperation(value = "分页列表(AuthIgnore)", notes = "")
@PostMapping("/pageAuthIgnore")
public ApiResponseEntity<PageVO<SysConfig>> pageAuthIgnore(@RequestBody PageReqDTO<SysConfig> page) {
return ApiResponseUtils.success(sysConfigService.page(page));
}
@ApiOperation(value = "新增", notes = "")
@PostMapping("/add")
public ApiResponseEntity<?> add(@Validated @RequestBody SysConfig sysConfig) {
sysConfigService.add(sysConfig);
return ApiResponseUtils.success();
}
@ApiOperation(value = "编辑", notes = "")
@PostMapping("/edit")
public ApiResponseEntity<?> edit(@Validated @RequestBody SysConfig sysConfig) {
sysConfigService.edit(sysConfig);
return ApiResponseUtils.success();
}
@ApiOperation(value = "详情", notes = "")
@PostMapping("/view")
public ApiResponseEntity<SysConfig> view(@RequestBody BaseIdDTO baseIdDTO) {
return ApiResponseUtils.success(sysConfigService.view(baseIdDTO.getId()));
}
@ApiOperation(value = "根据分类code获取详情", notes = "")
@PostMapping("/viewByCategoryCode")
public ApiResponseEntity<SysConfigCategory> viewByCategoryCode(@RequestBody SysConfigCategory sysConfigCategory) {
return ApiResponseUtils.success(sysConfigService.viewByCategoryCode(sysConfigCategory.getCode()));
}
@ApiOperation(value = "删除", notes = "")
@PostMapping("/del")
public ApiResponseEntity<?> del(@RequestBody BaseIdDTO baseIdDTO) {
sysConfigService.del(baseIdDTO.getId());
return ApiResponseUtils.success();
}
}
package com.makeit.controller.sys;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.module.system.entity.SysDictionaryCategory;
import com.makeit.module.system.service.SysDictionaryCategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 数据字典类型
*
*/
@Api(tags = "数据字典分类(用户不可见)")
@RestController
@RequestMapping("/sys/dictionaryCategory")
public class SysDictionaryCategoryController {
@Autowired
private SysDictionaryCategoryService dictionaryCategoryService;
@ApiOperation(value = "列表-带字典", notes = "")
@PostMapping("/getDictionaryCategoryByList")
public ApiResponseEntity<List<SysDictionaryCategory>> getDictionaryCategoryByList() {
List<SysDictionaryCategory> dictionaryCategoryList = dictionaryCategoryService.getEpDictionaryCategoryByList();
return ApiResponseUtils.success(dictionaryCategoryList);
}
@ApiOperation(value = "列表", notes = "")
@PostMapping("/list")
public ApiResponseEntity<List<SysDictionaryCategory>> list(@RequestBody SysDictionaryCategory platConfigCategory) {
return ApiResponseUtils.success(dictionaryCategoryService.list(platConfigCategory));
}
@ApiOperation(value = "新增", notes = "")
@PostMapping("/add")
public ApiResponseEntity<?> add(@Validated @RequestBody SysDictionaryCategory sysDictionaryCategory) {
return ApiResponseUtils.success(dictionaryCategoryService.add(sysDictionaryCategory));
}
@ApiOperation(value = "编辑", notes = "")
@PostMapping("/edit")
public ApiResponseEntity<?> edit(@Validated @RequestBody SysDictionaryCategory sysDictionaryCategory) {
dictionaryCategoryService.edit(sysDictionaryCategory);
return ApiResponseUtils.success();
}
@ApiOperation(value = "删除", notes = "")
@PostMapping("/del")
public ApiResponseEntity<?> del(@RequestBody BaseIdDTO baseIdDTO) {
dictionaryCategoryService.del(baseIdDTO.getId());
return ApiResponseUtils.success();
}
}
package com.makeit.controller.sys;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.module.system.entity.SysDictionary;
import com.makeit.module.system.service.SysDictionaryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Api(tags = "数据字典(用户不可见)")
@RestController
@RequestMapping("/sys/dictionary")
public class SysDictionaryController {
@Autowired
private SysDictionaryService sysDictionaryService;
@ApiOperation(value = "重新加载", notes = "")
@PostMapping("/reload")
public ApiResponseEntity<?> reload() {
sysDictionaryService.load();
return ApiResponseUtils.success();
}
@ApiOperation(value = "列表", notes = "")
@PostMapping("/list")
public ApiResponseEntity<List<SysDictionary>> list(@RequestBody SysDictionary sysDictionary) {
return ApiResponseUtils.success(sysDictionaryService.list(sysDictionary));
}
@ApiOperation(value = "新增", notes = "")
@PostMapping("/add")
public ApiResponseEntity<?> add(@Validated @RequestBody SysDictionary sysDictionary) {
sysDictionaryService.add(sysDictionary);
return ApiResponseUtils.success();
}
@ApiOperation(value = "编辑", notes = "")
@PostMapping("/edit")
public ApiResponseEntity<?> edit(@Validated @RequestBody SysDictionary sysDictionary) {
sysDictionaryService.edit(sysDictionary);
return ApiResponseUtils.success();
}
@ApiOperation(value = "删除", notes = "")
@PostMapping("/del")
public ApiResponseEntity<?> del(@RequestBody BaseIdDTO baseIdDTO) {
sysDictionaryService.del(baseIdDTO.getId());
return ApiResponseUtils.success();
}
}
package com.makeit.controller.sys;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.module.system.dto.SysFileDTOVO;
import com.makeit.module.system.entity.SysFile;
import com.makeit.module.system.service.SysFileService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.storage.AccessoryRepository;
import com.makeit.utils.storage.DataWithMeta;
import com.makeit.utils.sys.FileUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;
@Api(tags = "前台-系统-文件路径")
@RestController
@RequestMapping("sys/file")
public class SysFileController {
@Autowired
public AccessoryRepository accessoryRepository;
@Autowired
private SysFileService sysFileService;
@ApiOperation("获取文件临时路径路径")
@PostMapping("getFileTmp")
public ApiResponseEntity<SysFileDTOVO> getFileTmp(@RequestBody BaseIdDTO baseIdDTO) {
SysFileDTOVO sysFileDTOVO = BeanDtoVoUtils.convert(sysFileService.getById(baseIdDTO.getId()), SysFileDTOVO.class);
sysFileDTOVO.setFullUrl(accessoryRepository.getTmpURL(sysFileDTOVO.getUrl()));
return ApiResponseUtils.success(sysFileDTOVO);
}
@ApiOperation("获取文件路径")
@PostMapping("getFile")
public ApiResponseEntity<List<SysFileDTOVO>> getFile(@RequestBody BaseIdDTO baseIdDTO) {
return ApiResponseUtils.success(FileUtil.convertMultiply(Arrays.asList(baseIdDTO.getId())).get(0));
}
@ApiOperation("获取文件路径集合")
@PostMapping("getFileList")
public ApiResponseEntity<List<List<SysFileDTOVO>>> getFile(@RequestBody List<String> list) {
return ApiResponseUtils.success(FileUtil.convertMultiply(list));
}
//这种方式可以 只是不能设置下载文件名
// @ApiOperation("下载文件")
// @PostMapping("downloadFile")
// public byte[] downloadFile(@RequestBody BaseIdDTO baseIdDTO) {
// return aliyunOSSRepository.getBytes(UriUtils.decode(StringUtils.substringAfter(sysFileService.getById(baseIdDTO.getId()).getUrl(), "oss/"), "UTF-8"));
// }
void downloadFile(HttpServletResponse response, String id) throws IOException {
SysFile sysFile = sysFileService.getById(id);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream");
// 设置文件头:最后一个参数是设置下载文件名
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(sysFile.getFileName(), "UTF-8"));
OutputStream outputStream = response.getOutputStream();
outputStream.write(accessoryRepository.getBytes(UriUtils.decode(StringUtils.substringAfter(sysFile.getUrl(), "oss/"), "UTF-8")));
}
//这样是可以
// private void previewFile(HttpServletResponse response, String id) throws IOException {
//
// SysFile sysFile = sysFileService.getById(id);
//
// response.setCharacterEncoding("UTF-8");
// response.setContentType("application/octet-stream");
// // 设置文件头:最后一个参数是设置下载文件名
// response.setHeader("Content-disposition", "inline;filename=" + URLEncoder.encode(sysFile.getFileName(), "UTF-8"));
//
// String suffix = sysFile.getUrl().substring(sysFile.getUrl().lastIndexOf("."));
//
// Map<String, String> map = new HashMap<>(16);
// map.put(".pdf", "application/pdf");
// map.put(".png", "image/png");
// map.put(".jpg", "image/jpg");
// map.put(".jpeg", "image/jpeg");
//
// String contentType = map.get(suffix);
// if (StringUtils.isNotBlank(contentType)) {
// response.setContentType(contentType);
// }
//
// OutputStream outputStream = response.getOutputStream();
// outputStream.write(aliyunOSSRepository.getBytes(UriUtils.decode(StringUtils.substringAfter(sysFile.getUrl(), "oss/"), "UTF-8")));
// outputStream.close();
// }
private void previewFile(HttpServletResponse response, String id) throws IOException {
SysFile sysFile = sysFileService.getById(id);
response.setCharacterEncoding("UTF-8");
// 设置文件头:最后一个参数是设置下载文件名
response.setHeader("Content-disposition", "inline;filename=" + URLEncoder.encode(sysFile.getFileName(), "UTF-8"));
DataWithMeta dataWithMeta = accessoryRepository.getDataWithMeta(UriUtils.decode(StringUtils.substringAfter(sysFile.getUrl(), "oss/"), "UTF-8"));
response.setContentType(dataWithMeta.getContentType());
OutputStream outputStream = response.getOutputStream();
outputStream.write(dataWithMeta.getBytes());
outputStream.close();
}
@ApiOperation("下载文件(json id)")
@RequestMapping(value = "downloadFile", method = {RequestMethod.GET, RequestMethod.POST})
public void downloadFile(HttpServletResponse response, @RequestBody BaseIdDTO baseIdDTO) throws IOException {
downloadFile(response, baseIdDTO.getId());
}
@ApiOperation("预览文件(json id)")
@RequestMapping(value = "previewFile", method = {RequestMethod.GET, RequestMethod.POST})
public void previewFile(HttpServletResponse response, @RequestBody BaseIdDTO baseIdDTO) throws IOException {
previewFile(response, baseIdDTO.getId());
}
@ApiOperation("下载文件")
@RequestMapping(value = "downloadFileParam", method = {RequestMethod.GET, RequestMethod.POST})
public void downloadFileParam(HttpServletResponse response, String id) throws IOException {
downloadFile(response, id);
}
@ApiOperation("预览文件")
@RequestMapping(value = "previewFileParam", method = {RequestMethod.GET, RequestMethod.POST})
public void previewFileParam(HttpServletResponse response, String id) throws IOException {
previewFile(response, id);
}
@ApiOperation("批量保存")
@PostMapping("addList")
public ApiResponseEntity<?> addList(@RequestBody List<SysFileDTOVO> list) {
List<SysFile> fileList = BeanDtoVoUtils.listVo(list, SysFile.class);
sysFileService.saveBatch(fileList);
return ApiResponseUtils.success(StreamUtil.map(fileList, SysFile::getId));
}
}
package com.makeit.controller.sys;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.module.system.dto.SysFileDTOVO;
import com.makeit.module.system.dto.UploadKeyDTO;
import com.makeit.module.system.entity.SysFile;
import com.makeit.module.system.service.SysFileService;
import com.makeit.utils.contract.word.WordConverterUtil;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.storage.HwObsRepository;
import com.makeit.utils.storage.PostSignature;
import com.makeit.utils.sys.FileUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StopWatch;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author liuhb
* @date 2021/12/14
*/
@Api(tags = "系统-文件上传")
@RestController
@RequestMapping("storage")
public class UploadController extends BaseController {
@Autowired
private SysFileService sysFileService;
private static final Logger logger = LoggerFactory.getLogger(UploadController.class);
// @ApiOperation(value = "获取key")
// @PostMapping("getKey")
// public String getKey(@ApiParam(value = "originalFilename") String originalFilename) {
// String fullPath = getFullPath(null, originalFilename);
// return getUri(accessoryRepository.getKey(fullPath));
// }
@ApiOperation(value = "获取key")
@PostMapping("getKey")
public SysFileDTOVO getKey(@RequestBody UploadKeyDTO dto) {
SysFileDTOVO sysFile = new SysFileDTOVO();
sysFile.setFileName(dto.getOriginalFilename());
String fullPath = getFullPath(null, dto.getOriginalFilename());
sysFile.setUrl(getUri(HwObsRepository.APIURI + accessoryRepository.getKey(fullPath)));
sysFile.setKey(accessoryRepository.getKey(fullPath));
return sysFile;
}
@ApiOperation(value = "获取签名")
@PostMapping("getSignature")
public PostSignature getPostSignature() {
return accessoryRepository.getPostSignature();
}
private String replaceSuffix(String name) {
int index = name.lastIndexOf(".");
return name.substring(0, index) + ".pdf";
}
private List<SysFile> uploadInternal(List<MultipartFile> files, String convertToPdf) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
List<SysFile> sysFileList = StreamUtil.map(files, e -> {
try {
SysFile sysFile = new SysFile();
sysFile.setFileName(e.getOriginalFilename());
String fullPath = getFullPath(null, e.getOriginalFilename());
sysFile.setUrl(getUri(storageRepository("1").save(e.getBytes(), fullPath)));
if ("1".equals(convertToPdf)) {
fullPath = getFullPath(null, replaceSuffix(e.getOriginalFilename()));
sysFile.setPdfUrl(getUri(storageRepository("1").save(WordConverterUtil.convert(e.getInputStream()), fullPath)));
}
sysFile.setMime(e.getContentType());
return sysFile;
} catch (IOException ex) {
throw new RuntimeException(ex);
}
});
sysFileService.saveBatch(sysFileList);
stopWatch.stop();
logger.info("文件上传耗时:{} ms", stopWatch.getLastTaskTimeMillis());
return sysFileList;
}
private List<SysFile> convertAndUploadInternal(List<MultipartFile> files) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
List<SysFile> sysFileList = StreamUtil.map(files, e -> {
try {
SysFile sysFile = new SysFile();
sysFile.setFileName(replaceSuffix(e.getOriginalFilename()));
String fullPath = getFullPath(null, replaceSuffix(e.getOriginalFilename()));
sysFile.setUrl(getUri(storageRepository("1").save(WordConverterUtil.convert(e.getInputStream()), fullPath)));
sysFile.setMime(e.getContentType());
return sysFile;
} catch (IOException ex) {
throw new RuntimeException(ex);
}
});
sysFileService.saveBatch(sysFileList);
stopWatch.stop();
logger.info("文件上传耗时:{} ms", stopWatch.getLastTaskTimeMillis());
return sysFileList;
}
@ApiOperation(value = "统一文件上传")
@PostMapping("uploadFile")
public ApiResponseEntity<List<String>> uploadFile(
@ApiParam(value = "convertToPdf") @RequestParam(defaultValue = "0") String convertToPdf,
@ApiParam(value = "files") List<MultipartFile> files) {
List<SysFile> sysFileList = uploadInternal(files, convertToPdf);
return ApiResponseUtils.success(StreamUtil.map(sysFileList, SysFile::getId));
}
@ApiOperation(value = "统一文件上传返回路径")
@PostMapping("uploadFileUrl")
public ApiResponseEntity<List<SysFileDTOVO>> uploadFileUrl(
@ApiParam(value = "convertToPdf") @RequestParam(defaultValue = "0") String convertToPdf,
@ApiParam(value = "files") List<MultipartFile> files) {
List<SysFile> sysFileList = uploadInternal(files, convertToPdf);
List<SysFileDTOVO> voList = BeanDtoVoUtils.listVo(sysFileList, SysFileDTOVO.class);
FileUtil.fillFullUrl(voList);
FileUtil.fillPdfFullUrl(voList);
return ApiResponseUtils.success(voList);
}
@ApiOperation(value = "统一转换为pdf后上传")
@PostMapping("convertAndUploadFile")
public ApiResponseEntity<List<String>> convertAndUploadFile(
@ApiParam(value = "files") List<MultipartFile> files) {
List<SysFile> sysFileList = convertAndUploadInternal(files);
return ApiResponseUtils.success(StreamUtil.map(sysFileList, SysFile::getId));
}
@ApiOperation(value = "统一转换为pdf后上传返回路径")
@PostMapping("convertAndUploadFileUrl")
public ApiResponseEntity<List<SysFileDTOVO>> convertAndUploadFileUrl(
@ApiParam(value = "files") List<MultipartFile> files) {
List<SysFile> sysFileList = convertAndUploadInternal(files);
List<SysFileDTOVO> voList = BeanDtoVoUtils.listVo(sysFileList, SysFileDTOVO.class);
FileUtil.fillFullUrl(voList);
//FileUtil.fillPdfFullUrl(voList);
return ApiResponseUtils.success(voList);
}
//下面两个的作用
//返回给前端的路径 要基于下面两个转发
@ApiOperation("获取oss文件")
@RequestMapping(value = "oss/**", method = RequestMethod.GET)
public void getOssFile(HttpServletRequest req, HttpServletResponse resp) throws Exception {
// String filepath = req.getRequestURI();
// filepath = UriUtils.decode(StringUtils.substringAfter(filepath, "oss"), "UTF-8");
// //.toString().split("\\?")[0];
// resp.sendRedirect(accessoryRepository.getPermanentURL(filepath));
resp.sendRedirect(accessoryRepository.getPermanentURL(req.getRequestURI()));
}
@ApiOperation("获取oss文件(临时路径)")
@RequestMapping(value = "tmp/oss/**", method = RequestMethod.GET)
public void getOssFileTmpPath(HttpServletRequest req, HttpServletResponse resp) throws Exception {
// String filepath = req.getRequestURI();
// filepath = UriUtils.decode(StringUtils.substringAfter(filepath, "tmp/oss"), "UTF-8");
// //.toString().split("\\?")[0];
// resp.sendRedirect(accessoryRepository.getTmpURL(filepath));
resp.sendRedirect(accessoryRepository.getTmpURL(req.getRequestURI()));
}
//private String name;
// private String nameOrigin;
// private String extName;
// private Long fileSize;
// private String storeType;//video audio img pdf等
// private String relativePath;
}
package com.makeit.common.controller.test;
import com.makeit.common.response.ApiResponseEntity;
import com.makeit.common.response.ApiResponseUtils;
import com.makeit.startup.Runner;
import com.makeit.utils.event.BizEvent;
import com.makeit.utils.event.EventUtil;
import com.makeit.utils.user.tenant.SysUserVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "测试-事件")
@RestController
@RequestMapping("/test/event")
public class TestEventController {
private static final Logger logger = LoggerFactory.getLogger(TestEventController.class);
@ApiOperation("test")
@PostMapping("test")
public ApiResponseEntity<?> test() {
EventUtil.publish(new TestEvent("123"));
return ApiResponseUtils.success();
}
@ApiOperation("test2")
@PostMapping("test2")
public ApiResponseEntity<?> test2() {
EventUtil.publish(new BizEvent<>(new SysUserVO()));
//EventUtil.publish(new BizEvent<>(new SubmitOrderDTO()));
return ApiResponseUtils.success();
}
@EventListener
public void onApplicationEvent(TestEvent event) {
logger.info("test event{}", event.getSource());
}
@EventListener
public void onApplicationEvent(BizEvent<SysUserVO> event) {
logger.info("biz event 1 {}", event.getSource());
}
// @EventListener
// public void onApplicationEvent2(BizEvent<SubmitOrderDTO> event) {
// logger.info("biz event 2 {}", event.getSource());
// }
@Order(2)
@Runner
public void run() throws Exception {
logger.info("TestRunner run 1");
}
private static class TestEvent extends ApplicationEvent {
public TestEvent(Object source) {
super(source);
}
}
}
...@@ -3,8 +3,8 @@ package com.makeit.config; ...@@ -3,8 +3,8 @@ package com.makeit.config;
import com.makeit.global.inteceptor.RequestIdInterceptor; import com.makeit.global.inteceptor.RequestIdInterceptor;
import com.makeit.global.inteceptor.SaasAuthenticationInterceptor; import com.makeit.global.inteceptor.SaasAuthenticationInterceptor;
import com.makeit.global.inteceptor.SaasAuthorizationInterceptor; import com.makeit.global.inteceptor.SaasAuthorizationInterceptor;
import com.makeit.global.inteceptor.TntAuthenticationInterceptor; import com.makeit.global.inteceptor.PlatAuthenticationInterceptor;
import com.makeit.global.inteceptor.TntAuthorizationInterceptor; import com.makeit.global.inteceptor.PlatAuthorizationInterceptor;
import com.makeit.utils.old.StringUtils; import com.makeit.utils.old.StringUtils;
import lombok.Data; import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -25,9 +25,9 @@ public class WebInterceptorConfig implements WebMvcConfigurer { ...@@ -25,9 +25,9 @@ public class WebInterceptorConfig implements WebMvcConfigurer {
private RequestIdInterceptor requestIdInterceptor; private RequestIdInterceptor requestIdInterceptor;
@Autowired @Autowired
private TntAuthenticationInterceptor tntAuthenticationInterceptor; private PlatAuthenticationInterceptor tntAuthenticationInterceptor;
@Autowired @Autowired
private TntAuthorizationInterceptor tntAuthorizationInterceptor; private PlatAuthorizationInterceptor tntAuthorizationInterceptor;
@Autowired @Autowired
private SaasAuthenticationInterceptor saasAuthenticationInterceptor; private SaasAuthenticationInterceptor saasAuthenticationInterceptor;
......
package com.makeit.config.global.thread.wrapper; package com.makeit.config.global.thread.wrapper;
import com.makeit.utils.user.tenant.SysUserUtil; import com.makeit.utils.user.plat.PlatUserUtil;
import com.makeit.utils.user.tenant.SysUserVO; import com.makeit.utils.user.plat.PlatUserVO;
//TODO ywc 要不要用阿里的 TransmittableThreadLocal(TTL) //TODO ywc 要不要用阿里的 TransmittableThreadLocal(TTL)
public class UserRunnerWrapper implements BizRunnable { public class UserRunnerWrapper implements BizRunnable {
private Runnable task; private Runnable task;
private SysUserVO userVO; private PlatUserVO userVO;
public UserRunnerWrapper(Runnable task) { public UserRunnerWrapper(Runnable task) {
super(); super();
this.task = task; this.task = task;
userVO = SysUserUtil.getUserVOCanNull(); userVO = PlatUserUtil.getUserVOCanNull();
} }
@Override @Override
public void run() { public void run() {
SysUserUtil.execute(userVO, task); PlatUserUtil.execute(userVO, task);
} }
......
package com.makeit.global.aspect.tenant; package com.makeit.global.aspect.tenant;
import com.makeit.module.admin.dto.SysFactoryDTOVO;
import com.makeit.module.admin.entity.SysDept;
import com.makeit.module.admin.service.SysDeptService;
import com.makeit.module.admin.service.SysFactoryService;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.function.CallableThrowable; import com.makeit.utils.function.CallableThrowable;
import com.makeit.utils.old.StringUtils; import com.makeit.utils.old.StringUtils;
import com.makeit.utils.request.RequestUtil; import com.makeit.utils.request.RequestUtil;
import com.makeit.utils.request.Scope; import com.makeit.utils.request.Scope;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Collectors;
@Component @Component
public class TenantIdUtil { public class TenantIdUtil {
private static SysFactoryService sysFactoryService;
private static SysDeptService sysDeptService;
private static final Scope<String> THREAD_LOCAL_FACTORY_ID = new Scope<>(); private static final Scope<String> THREAD_LOCAL_FACTORY_ID = new Scope<>();
public static String getFromThreadLocal() { public static String getFromThreadLocal() {
...@@ -59,18 +48,6 @@ public class TenantIdUtil { ...@@ -59,18 +48,6 @@ public class TenantIdUtil {
return null; return null;
} }
public static List<String> deptIdList() {
return deptIdList(getTenantId());
}
public static List<String> deptIdList(String factoryId) {
List<String> deptIdList = Arrays.stream(sysFactoryService.getById(factoryId).getDeptIdList().split(",")).filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
deptIdList.add(-1 + "");
return StreamUtil.map(sysDeptService.listByIds(deptIdList), SysDept::getId);
}
public static void execute(String tenantId, Runnable runnable) { public static void execute(String tenantId, Runnable runnable) {
THREAD_LOCAL_FACTORY_ID.execute(tenantId, runnable); THREAD_LOCAL_FACTORY_ID.execute(tenantId, runnable);
...@@ -84,20 +61,4 @@ public class TenantIdUtil { ...@@ -84,20 +61,4 @@ public class TenantIdUtil {
return THREAD_LOCAL_FACTORY_ID.execute(tenantId, callable); return THREAD_LOCAL_FACTORY_ID.execute(tenantId, callable);
} }
public static void executeTenantList(Runnable runnable) {
List<SysFactoryDTOVO> tntTenantList = sysFactoryService.enableList();
tntTenantList.forEach(e -> {
execute(e.getId(), runnable);
});
}
@Autowired
public void setSysDeptService(SysDeptService sysDeptService) {
TenantIdUtil.sysDeptService = sysDeptService;
}
@Autowired
public void setSysFactoryService(SysFactoryService sysFactoryService) {
TenantIdUtil.sysFactoryService = sysFactoryService;
}
} }
...@@ -14,7 +14,7 @@ import javax.servlet.http.HttpServletResponse; ...@@ -14,7 +14,7 @@ import javax.servlet.http.HttpServletResponse;
@Order(InterceptorOrderConst.TNT_AUTHENTICATION_INTERCEPTOR) @Order(InterceptorOrderConst.TNT_AUTHENTICATION_INTERCEPTOR)
@Component @Component
public class TntAuthenticationInterceptor implements HandlerInterceptor { public class PlatAuthenticationInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
......
...@@ -5,8 +5,8 @@ import com.makeit.enums.CodeMessageEnum; ...@@ -5,8 +5,8 @@ import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.order.InterceptorOrderConst; import com.makeit.enums.order.InterceptorOrderConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.utils.user.tenant.SysUserRoleMenuRedisVO; import com.makeit.module.admin.plat.PlatUserRoleMenuRedisVO;
import com.makeit.utils.user.tenant.SysUserUtil; import com.makeit.utils.user.plat.PlatUserUtil;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
...@@ -20,7 +20,7 @@ import java.util.Set; ...@@ -20,7 +20,7 @@ import java.util.Set;
@Order(InterceptorOrderConst.TNT_AUTHORIZATION_INTERCEPTOR) @Order(InterceptorOrderConst.TNT_AUTHORIZATION_INTERCEPTOR)
@Component @Component
public class TntAuthorizationInterceptor implements HandlerInterceptor { public class PlatAuthorizationInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
...@@ -37,13 +37,13 @@ public class TntAuthorizationInterceptor implements HandlerInterceptor { ...@@ -37,13 +37,13 @@ public class TntAuthorizationInterceptor implements HandlerInterceptor {
return true; return true;
} }
SysUserRoleMenuRedisVO userLoginVO = SysUserUtil.getTntUserRoleMenu(); PlatUserRoleMenuRedisVO userLoginVO = PlatUserUtil.getTntUserRoleMenu();
// if (IsFactoryAccountEnum.YES.getValue().equals(userLoginVO.getIsFactory())) { // if (IsFactoryAccountEnum.YES.getValue().equals(userLoginVO.getIsFactory())) {
// return true; // return true;
// } // }
if (SysUserUtil.isSuper()) { if (PlatUserUtil.isSuper()) {
return true; return true;
} }
......
...@@ -6,7 +6,7 @@ import com.makeit.enums.order.InterceptorOrderConst; ...@@ -6,7 +6,7 @@ import com.makeit.enums.order.InterceptorOrderConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO; import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO;
import com.makeit.utils.user.PlatUserUtil; import com.makeit.utils.user.saas.SaasUserUtil;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
...@@ -35,7 +35,7 @@ public class SaasAuthorizationInterceptor implements HandlerInterceptor { ...@@ -35,7 +35,7 @@ public class SaasAuthorizationInterceptor implements HandlerInterceptor {
return true; return true;
} }
SaasUserRoleMenuRedisVO userLoginVO = PlatUserUtil.getPlatUserRoleMenu(); SaasUserRoleMenuRedisVO userLoginVO = SaasUserUtil.getPlatUserRoleMenu();
if (userLoginVO == null) { if (userLoginVO == null) {
return true; return true;
} }
......
package com.makeit.module.admin.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.entity.BaseEntity;
import groovy.transform.EqualsAndHashCode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
* 部门
* </p>
*
* @author eugene young
* @since 2022-05-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysAuthDept对象", description = "部门")
@TableName("sys_auth_dept")
public class SysDept extends BaseEntity {
private static final long serialVersionUID = 1L;
//@NotBlank(message = "上级部门不能为空")
@ApiModelProperty(value = "父级id")
private String parentId;
@ApiModelProperty(value = " 父级路径 ")
private String parentPath;
@Size(max = 50,message = "名称最长50个字符")
@NotBlank(message = "名称不能为空")
@ApiModelProperty(value = "名称")
private String name;
@Size(max = 50,message = "全名最长50个字符")
@NotBlank(message = "全名不能为空")
@ApiModelProperty(value = "全名")
private String fullName;
@ApiModelProperty(value = "原始部门ID")
private String oriId;
@NotBlank(message = "状态不能为空")
@Pattern(regexp = "0|1", message = "状态可选值为 0禁用 1启用")
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
//@NotBlank(message = "标签不能为空")
//@Pattern(regexp = "1|2|3|4", message = "标签可选值 1集团 2子公司 3部门")
@ApiModelProperty(value = "标签/类型 1部门 2岗位")
private String tag;
@ApiModelProperty(value = "同步时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime syncTime;
@Size(max = 500,message = "描述最长500个字符")
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "子集")
@TableField(exist = false)
private List<SysDept> children;
@ApiModelProperty(value = "父亲")
@TableField(exist = false)
private SysDept parent;
}
package com.makeit.module.admin.entity;
import com.makeit.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 厂别
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysTenant对象", description = "厂别")
public class SysFactory extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "部门id集合")
private String deptIdList;
}
package com.makeit.module.admin.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 角色
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysRole对象", description = "角色")
@TableName("sys_auth_role")
public class SysRole extends BaseBusEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "编码")
private String code;
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "备注")
private String remark;
}
package com.makeit.module.admin.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 角色菜单关联表
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="SysRoleFactory对象", description="角色工厂关联表")
@TableName("sys_auth_role_factory")
public class SysRoleFactory extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "角色id")
private String roleId;
@ApiModelProperty(value = "工厂id")
private String factoryId;
}
package com.makeit.module.admin.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 角色菜单关联表
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="SysRoleMenu对象", description="角色菜单关联表")
@TableName("sys_auth_role_menu")
public class SysRoleMenu extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "角色id")
private String roleId;
@ApiModelProperty(value = "菜单id")
private String menuId;
@TableField(exist = false)
@ApiModelProperty(value = "菜单名称")
private String menuName;
}
package com.makeit.module.admin.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 角色菜单关联表
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="SysRoleMenu对象", description="角色菜单关联表")
@TableName("sys_auth_role_wechat_menu")
public class SysRoleWechatMenu extends BaseBusEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "角色id")
private String roleId;
@ApiModelProperty(value = "菜单id")
private String menuId;
}
package com.makeit.module.admin.entity;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.FieldNameConstants;
import java.time.LocalDateTime;
/**
* <p>
* 用户
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@FieldNameConstants
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "SysUser对象", description = "用户")
@TableName("sys_auth_user")
public class SysUser extends BaseBusEntity {//要不要继承 BaseCompanyEntity
private static final long serialVersionUID = 1L;
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "账户")
private String account;
@ApiModelProperty(value = "密码")
private String password;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "性別 数据字典 1男 2女")
private String sex;
@ApiModelProperty(value = "手机号")
private String mobile;
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "邮箱")
private String mail;
@ApiModelProperty(value = "状态 1启用 0禁用")
private String status;
@ApiModelProperty(value = "在职状态 1在职 0离职")
private String empStatus;
@ApiModelProperty(value = "部门id")
private String deptId;
@ApiModelProperty(value = "部门id路径")
private String deptIdPath;
//TODO ywc
//要不要记录所有部门id 路径
@ApiModelProperty(value = "主管")
private String superior;
@ApiModelProperty(value = "AD账号")
private String empNo;
@ApiModelProperty(value = "是否系统账号 0否 1是")
private String systemStatus;
@ApiModelProperty(value = "是否公共账号 0否 1是")
private String publicStatus;
@ApiModelProperty(value = "是否主账号 0否 1是")
private String masterStatus;
@ApiModelProperty(value = "是否自建账号 0否 1是")
private String selfStatus;
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "是否厂别账户 0否 1是")
private String isFactory;
@ApiModelProperty(value = "同步时间")
private LocalDateTime syncTime;
}
package com.makeit.module.admin.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 用户角色关联表
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="SysUserRole对象", description="用户角色关联表")
@TableName("sys_auth_user_role")
public class SysUserRole extends BaseBusEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "用户id")
private String userId;
@ApiModelProperty(value = "角色id")
private String roleId;
}
package com.makeit.module.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.admin.entity.SysDept;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 部门 Mapper 接口
* </p>
*
* @author eugene young
* @since 2022-05-17
*/
@Mapper
public interface SysDeptMapper extends BaseMapper<SysDept> {
}
package com.makeit.module.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.admin.entity.SysFactory;
/**
* <p>
* 厂别 Mapper 接口
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysFactoryMapper extends BaseMapper<SysFactory> {
}
package com.makeit.module.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.admin.entity.SysMenu;
/**
* <p>
* 菜单 Mapper 接口
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysMenuMapper extends BaseMapper<SysMenu> {
}
package com.makeit.module.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.admin.entity.SysRoleFactory;
/**
* <p>
* 角色菜单关联表 Mapper 接口
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysRoleFactoryMapper extends BaseMapper<SysRoleFactory> {
}
package com.makeit.module.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.admin.entity.SysRole;
/**
* <p>
* 角色 Mapper 接口
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysRoleMapper extends BaseMapper<SysRole> {
}
package com.makeit.module.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.admin.entity.SysRoleMenu;
/**
* <p>
* 角色菜单关联表 Mapper 接口
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
}
package com.makeit.module.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.admin.entity.SysRoleWechatMenu;
/**
* <p>
* 角色菜单关联表 Mapper 接口
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysRoleWechatMenuMapper extends BaseMapper<SysRoleWechatMenu> {
}
package com.makeit.module.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.admin.entity.SysUser;
/**
* <p>
* 用户 Mapper 接口
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysUserMapper extends BaseMapper<SysUser> {
}
package com.makeit.module.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.module.admin.entity.SysUserRole;
/**
* <p>
* 用户角色关联表 Mapper 接口
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
}
package com.makeit.module.admin.plat;
import com.makeit.common.dto.BaseTenantDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.FieldNameConstants;
import java.io.Serializable;
@FieldNameConstants
@Data
@ApiModel("部门BASE")
public class BaseOrgDTO extends BaseTenantDTO implements Serializable {
@ApiModelProperty(value = "部门树 id",required=true)
private String deptId;
@ApiModelProperty(value = "部门树冗余 id")
private String path;
}
package com.makeit.module.admin.plat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(value = "修改密码")
@Data
public class ChangePasswordDTO {
@ApiModelProperty("新密码")
private String newPassword;
}
package com.makeit.module.admin.plat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@ApiModel("租户端资源(菜单)详情")
@Data
public class PlatButtonVO {
// @NotBlank(message = "名称不能为空")
// @ApiModelProperty(value = "名称")
// private String name;
@ApiModelProperty(value = "模块+类名+方法")
private String code;
@NotBlank(message = "类型不能为空")
@Pattern(regexp = "1|2|3", message = "类型可选值 1目录 2菜单 3按钮")
@ApiModelProperty(value = "类型 1目录 2菜单 3按钮")
private String category;
}
package com.makeit.module.admin.entity; package com.makeit.module.admin.plat;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.entity.BaseEntity; import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Objects;
/**
* <p>
* 菜单
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="SysMenu对象", description="菜单")
@TableName("sys_auth_menu")
public class SysMenu extends BaseEntity {
private static final long serialVersionUID = 1L; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel("租户端资源(菜单) 新增 编辑 详情")
@Data
public class PlatMenuDTOVO extends BaseIdDTO {
@NotBlank(message = "上级菜单不能为空")
@ApiModelProperty(value = "父级id") @ApiModelProperty(value = "父级id")
private String parentId; private String parentId;
@NotBlank(message = "名称不能为空")
@ApiModelProperty(value = "名称") @ApiModelProperty(value = "名称")
private String name; private String name;
@ApiModelProperty(value = "名称-英文")
private String nameEng;
@ApiModelProperty(value = "模块+类名+方法") @ApiModelProperty(value = "模块+类名+方法")
private String code; private String code;
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "图标") @ApiModelProperty(value = "图标")
private String icon; private String icon;
@ApiModelProperty(value = "排序") @ApiModelProperty(value = "排序")
private Integer sort; private Integer sort;
@NotBlank(message = "状态不能为空")
@Pattern(regexp = "0|1", message = "状态可选值 0禁用 1启用")
@ApiModelProperty(value = "状态 0禁用 1启用") @ApiModelProperty(value = "状态 0禁用 1启用")
private String status; private String status;
@ApiModelProperty(value = "1目录 2菜单 4按钮") @NotBlank(message = "类型不能为空")
@Pattern(regexp = "1|2|3", message = "类型可选值 1目录 2菜单 3按钮")
@ApiModelProperty(value = "类型 1目录 2菜单 3按钮")
private String category; private String category;
@ApiModelProperty(value = "前端路径") @ApiModelProperty(value = "前端路径")
...@@ -61,33 +52,23 @@ public class SysMenu extends BaseEntity { ...@@ -61,33 +52,23 @@ public class SysMenu extends BaseEntity {
@ApiModelProperty(value = "组件名称") @ApiModelProperty(value = "组件名称")
private String componentName; private String componentName;
@TableField(updateStrategy = FieldStrategy.IGNORED)
@ApiModelProperty(value = "备注") @ApiModelProperty(value = "备注")
private String remark; private String remark;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", required = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
@TableField(exist = false)
@ApiModelProperty(value = "子集")
private List<PlatMenuDTOVO> children;
@ApiModelProperty(value = "隐藏状态 0不隐藏 1隐藏") @ApiModelProperty(value = "隐藏状态 0不隐藏 1隐藏")
private String hiddenStatus; private String hiddenStatus;
@ApiModelProperty(value = "缓存状态 0不缓存 1缓存") @ApiModelProperty(value = "缓存状态 0不缓存 1缓存")
private String cacheStatus; private String cacheStatus;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof SysMenu)) {
return false;
}
SysMenu that = (SysMenu) o;
return getId().equals(that.getId());
}
@Override
public int hashCode() {
return Objects.hash(getId());
}
} }
package com.makeit.module.admin.plat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("租户端资源(菜单) 查询")
@Data
public class PlatMenuQueryDTO {
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
@ApiModelProperty(value = "租户id")
private String tenantId;
}
package com.makeit.module.admin.plat;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDate;
@ApiModel("租户 新增 编辑 详情")
@Data
public class PlatTenantDTOVO extends BaseIdDTO {
@Size(max = 64, message = "名称最长为64字符")
@NotBlank(message = "名称不能为空")
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "状态 0停用 1启用")
private String status;
// @NotNull(message = "开始时间不能为空")
// @ApiModelProperty(value = "开始时间")
// private LocalDateTime startTime;
//
// @NotNull(message = "结束时间不能为空")
// @ApiModelProperty(value = "结束时间")
// private LocalDateTime endTime;
@JsonFormat(pattern="yyyy-MM-dd")
@NotNull(message = "开始时间不能为空")
@ApiModelProperty(value = "开始时间")
private LocalDate startTime;
@JsonFormat(pattern="yyyy-MM-dd")
@NotNull(message = "结束时间不能为空")
@ApiModelProperty(value = "结束时间")
private LocalDate endTime;
@NotBlank(message = "租户管理员不能为空")
@ApiModelProperty(value = "租户管理员id")
private String tntUserId;
//todo dto
// @ApiModelProperty(value = "租户账号 详情用")
// private PlatUser tntUser;
// @ApiModelProperty(value = "菜单id列表 以逗号分隔")
// private String menuList;
// @TableField(exist = false)
// @ApiModelProperty(value = "菜单")
// private List<TntMenu> tntMenuList;
@ApiModelProperty(value = "租户管理员用户名")
private String userName;
}
package com.makeit.module.admin.plat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@ApiModel("租户端租户分配菜单")
@Data
public class PlatTenantMenuDTO {
// @ApiModelProperty(value = "菜单id")
// private String menuId;
@ApiModelProperty(value = "租户id")
private String tenantId;
@ApiModelProperty(value = "菜单id集合")
private List<String> menuIdList;
}
package com.makeit.module.admin.plat;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("改变状态")
@Data
public class PlatTenantStatusDTO extends BaseIdDTO {
// @ApiModelProperty(value = "开始时间")
// private LocalDateTime startTime;
//
// @ApiModelProperty(value = "结束时间")
// private LocalDateTime endTime;
// @ApiModelProperty(value = "开始时间")
// private LocalDate startTime;
//
// @ApiModelProperty(value = "结束时间")
// private LocalDate endTime;
@ApiModelProperty("状态 0禁用 1启用")
private String status;
}
package com.makeit.module.admin.plat;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.makeit.common.dto.BaseIdDTO;
import com.makeit.module.admin.vo.plat.PlatRoleDTOVO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel("租户账号 新增 编辑 详情")
@Data
public class PlatUserDTOVO extends BaseIdDTO {
// @NotBlank(message = "用户名不能为空")
// @Size(max = 64, message = "用户名最长为64字符")
// @ApiModelProperty(value = "用户名")
// private String username;
@NotBlank(message = "名称不能为空")
@Size(max = 64, message = "名称最长为64字符")
@Pattern(regexp = "[a-zA-Z0-9]{0,64}", message = "账户只能为大小写英文字符和数字")
@ApiModelProperty(value = "账户")
private String account;
//@NotBlank(message = "密码不能为空")
@Size(max = 32, message = "密码最长为64字符")
@ApiModelProperty(value = "密码")
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
// @ApiModelProperty(value = "姓名")
// private String name;
@NotBlank(message = "姓名不能为空")
@Size(max = 64, message = "用户名最长为64字符")
@ApiModelProperty(value = "姓名")
private String name;
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = "1[0-9]{10}", message = "手机号格式不对")
//@Size(max = 11, message = "手机号最长为64字符")
@ApiModelProperty(value = "手机号")
private String mobile;
@NotBlank(message = "状态不能为空")
@Pattern(regexp = "0|1", message = "状态可选值为 0禁用 1启用")
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
@Size(max = 512, message = "备注最长512字符")
@ApiModelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", required = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
@TableField(exist = false)
@ApiModelProperty(value = "角色集合")
private List<PlatRoleDTOVO> roleList;
@ApiModelProperty(value = "租户名称集合")
private String tenantNameList;
}
package com.makeit.module.admin.plat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@ApiModel("租户账号 查询")
@Data
public class PlatUserQueryDTO extends BaseOrgDTO {
// @ApiModelProperty("部门树id")
// private String deptId;
@ApiModelProperty(value = "账户")
private String account;
@ApiModelProperty(value = "姓名")
private String name;
// @ApiModelProperty(value = "姓名")
// private String username;
@ApiModelProperty(value = "手机号")
private String mobile;
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
@ApiModelProperty(value = "角色id roleId和notRoleId只能用一个")
private String roleId;
@ApiModelProperty(value = "要排除的角色id roleId和notRoleId只能用一个")
private String notRoleId;
@ApiModelProperty(value = "关键词 用来搜姓名或者工号")
private String keyword;
@ApiModelProperty(value = "职级")
private Integer postLevel;
@ApiModelProperty(value = "是否从酒店开始 0否 1是")
private String fromHotel;
@ApiModelProperty(value = "是否常用人员 0否 1是")
private String isFrequent;
@ApiModelProperty(value = "标签id")
private String labelId;
@ApiModelProperty(value = "用户工号集合")
private List<String> accountList;
@ApiModelProperty(value = "用户姓名集合")
private List<String> nameList;
@ApiModelProperty(value = "用户id集合")
private List<String> userIdList;
@ApiModelProperty(value = "角色id集合")
private List<String> roleIdList;
@ApiModelProperty(value = "部门id集合")
private List<String> deptIdList;
@ApiModelProperty("分管部门树id")
private String chargeDeptId;
}
package com.makeit.utils.user.tenant; package com.makeit.module.admin.plat;
import com.makeit.module.admin.dto.SysFactoryDTOVO;
import com.makeit.module.admin.dto.SysRoleDTOVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -9,23 +7,18 @@ import java.io.Serializable; ...@@ -9,23 +7,18 @@ import java.io.Serializable;
import java.util.List; import java.util.List;
@Data @Data
public class SysUserRoleMenuRedisVO implements Serializable { public class PlatUserRoleMenuRedisVO implements Serializable {
@ApiModelProperty("id") @ApiModelProperty("id")
private String id; private String id;
@ApiModelProperty("是否厂别账号") @ApiModelProperty("是否租户账号")
private String isFactory; private String isTenant;
// @ApiModelProperty("角色列表")
// private List<String> roleCodeList;
@ApiModelProperty("角色列表") @ApiModelProperty("角色列表")
private List<SysRoleDTOVO> roleList; private List<String> roleCodeList;
@ApiModelProperty("按钮列表") @ApiModelProperty("按钮列表")
private List<String> buttonCodeList; private List<String> buttonCodeList;
@ApiModelProperty("工厂列表")
private List<SysFactoryDTOVO> factoryList;
} }
...@@ -15,7 +15,7 @@ import java.util.List; ...@@ -15,7 +15,7 @@ import java.util.List;
@ApiModel("平台端菜单 新增 编辑 详情") @ApiModel("平台端菜单 新增 编辑 详情")
@Data @Data
public class PlatMenuDTOVO extends BaseIdDTO implements Serializable { public class SaasMenuDTOVO extends BaseIdDTO implements Serializable {
@NotBlank(message = "上级菜单不能为空") @NotBlank(message = "上级菜单不能为空")
@ApiModelProperty(value = "父级id") @ApiModelProperty(value = "父级id")
...@@ -71,5 +71,5 @@ public class PlatMenuDTOVO extends BaseIdDTO implements Serializable { ...@@ -71,5 +71,5 @@ public class PlatMenuDTOVO extends BaseIdDTO implements Serializable {
@TableField(exist = false) @TableField(exist = false)
@ApiModelProperty(value = "子集") @ApiModelProperty(value = "子集")
private List<PlatMenuDTOVO> children; private List<SaasMenuDTOVO> children;
} }
...@@ -8,7 +8,7 @@ import java.io.Serializable; ...@@ -8,7 +8,7 @@ import java.io.Serializable;
@ApiModel("平台端菜单查询") @ApiModel("平台端菜单查询")
@Data @Data
public class PlatMenuQueryDTO implements Serializable { public class SaasMenuQueryDTO implements Serializable {
@ApiModelProperty(value = "名称") @ApiModelProperty(value = "名称")
......
...@@ -9,7 +9,7 @@ import java.util.List; ...@@ -9,7 +9,7 @@ import java.util.List;
@ApiModel("平台端角色分配菜单") @ApiModel("平台端角色分配菜单")
@Data @Data
public class PlatRoleMenuDTO implements Serializable { public class SaasRoleMenuDTO implements Serializable {
@ApiModelProperty(value = "角色id") @ApiModelProperty(value = "角色id")
private String roleId; private String roleId;
......
...@@ -8,7 +8,7 @@ import java.io.Serializable; ...@@ -8,7 +8,7 @@ import java.io.Serializable;
@ApiModel("平台端用户 查询") @ApiModel("平台端用户 查询")
@Data @Data
public class PlatUserQueryDTO implements Serializable { public class SaasUserQueryDTO implements Serializable {
@ApiModelProperty(value = "账户") @ApiModelProperty(value = "账户")
......
...@@ -8,7 +8,7 @@ import java.io.Serializable; ...@@ -8,7 +8,7 @@ import java.io.Serializable;
@ApiModel("平台端角色分配用户") @ApiModel("平台端角色分配用户")
@Data @Data
public class PlatUserRoleDTO implements Serializable { public class SaasUserRoleDTO implements Serializable {
@ApiModelProperty(value = "用户id") @ApiModelProperty(value = "用户id")
private String userId; private String userId;
......
package com.makeit.module.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.StatusDTO;
import com.makeit.module.admin.dto.SysDeptQueryDTO;
import com.makeit.module.admin.entity.SysDept;
import java.util.List;
/**
* <p>
* 部门 服务类
* </p>
*
* @author eugene young
* @since 2022-05-17
*/
public interface SysDeptService extends IService<SysDept> {
void changeStatus(StatusDTO dto);
List<SysDept> list(SysDeptQueryDTO dto);
List<SysDept> tree(SysDeptQueryDTO dto);
List<SysDept> listNotFactory(SysDeptQueryDTO dto);
List<SysDept> treeNotFactory(SysDeptQueryDTO dto);
List<SysDept> selfAndChildren(String deptId);
List<String> selfAndChildrenIdList(String deptId);
List<SysDept> selfAndChildren(List<String> deptIdList);
List<String> selfAndChildrenIdList(List<String> deptIdList);
void add(SysDept dto);
void edit(SysDept dto);
SysDept view(String id);
void del(String id);
}
package com.makeit.module.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.module.admin.dto.SysFactoryDTOVO;
import com.makeit.module.admin.entity.SysFactory;
import java.util.List;
/**
* <p>
* 厂别 服务类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysFactoryService extends IService<SysFactory> {
PageVO<SysFactoryDTOVO> page(PageReqDTO<SysFactoryDTOVO> page);
List<SysFactoryDTOVO> list(SysFactoryDTOVO dto);
String add(SysFactoryDTOVO dto);
void edit(SysFactoryDTOVO dto);
SysFactoryDTOVO view(String id);
void del(String id);
List<SysFactory> userFactoryListList();
List<SysFactory> userFactoryListRefresh();
List<SysFactoryDTOVO> enableList();
List<SysFactoryDTOVO> listByUserIdList(List<String> userIdList);
}
package com.makeit.module.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.module.admin.dto.SysMenuDTOVO;
import com.makeit.module.admin.dto.SysMenuQueryDTO;
import com.makeit.module.admin.entity.SysMenu;
import java.util.List;
/**
* <p>
* 菜单 服务类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysMenuService extends IService<SysMenu> {
List<SysMenuDTOVO> list(SysMenuQueryDTO dto);
List<SysMenuDTOVO> tree(List<SysMenuDTOVO> tntMenuList);
List<SysMenuDTOVO> tree(SysMenuQueryDTO dto);
void add(SysMenuDTOVO dto);
void edit(SysMenuDTOVO dto);
SysMenuDTOVO view(String id);
void del(String id);
void sync();
List<SysMenu> loadMenuCodeList();
}
package com.makeit.module.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.module.admin.entity.SysRoleFactory;
/**
* <p>
* 角色菜单关联表 服务类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysRoleFactoryService extends IService<SysRoleFactory> {
}
package com.makeit.module.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.module.admin.entity.SysRoleMenu;
/**
* <p>
* 角色菜单关联表 服务类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysRoleMenuService extends IService<SysRoleMenu> {
}
package com.makeit.module.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.module.admin.dto.SysRoleDTOVO;
import com.makeit.module.admin.dto.SysRoleFactoryDTO;
import com.makeit.module.admin.dto.SysRoleMenuDTO;
import com.makeit.module.admin.dto.SysUserRoleDTO;
import com.makeit.module.admin.entity.SysRole;
import com.makeit.module.admin.entity.SysRoleFactory;
import com.makeit.module.admin.entity.SysRoleMenu;
import com.makeit.module.admin.entity.SysRoleWechatMenu;
import java.util.List;
/**
* <p>
* 角色 服务类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysRoleService extends IService<SysRole> {
List<SysRoleDTOVO> list(SysRoleDTOVO dto);
PageVO<SysRoleDTOVO> page(PageReqDTO<SysRoleDTOVO> page);
void add(SysRoleDTOVO dto);
void edit(SysRoleDTOVO dto);
SysRoleDTOVO view(String id);
void del(String id);
void changeStatus(StatusDTO dto);
void assignUserList(List<SysUserRoleDTO> userRoleDTOList);
void removeAssignUserList(List<SysUserRoleDTO> userRoleDTOList);
void assignMenuList(SysRoleMenuDTO roleMenuDTO);
List<SysRoleMenu> getAssignMenuList(String id);
void assignWechatMenuList(SysRoleMenuDTO roleMenuDTO);
List<SysRoleWechatMenu> getWechatMenuList(String roleId);
void assignFactoryList(SysRoleFactoryDTO roleFactoryDTO);
List<SysRoleFactory> getFactoryList(String roleId);
String factoryInit(String factoryId);
void copyRole(String roleId);
}
package com.makeit.module.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.module.admin.entity.SysRoleWechatMenu;
/**
* <p>
* 角色菜单关联表 服务类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysRoleWechatMenuService extends IService<SysRoleWechatMenu> {
}
package com.makeit.module.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.module.admin.entity.SysUserRole;
/**
* <p>
* 用户角色关联表 服务类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysUserRoleService extends IService<SysUserRole> {
}
package com.makeit.module.admin.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.LoginDTO;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.module.admin.dto.*;
import com.makeit.module.admin.entity.SysMenu;
import com.makeit.module.admin.entity.SysRole;
import com.makeit.module.admin.entity.SysUser;
import com.makeit.module.admin.vo.SysPersonSimpleVO;
import com.makeit.utils.user.tenant.SysUserLoginVO;
import com.makeit.utils.user.tenant.SysUserVO;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* <p>
* 用户 服务类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
public interface SysUserService extends IService<SysUser> {
void setDefaultPassword(SysUser user);
void setPassword(SysUser user);
void changePassword(SysUserDTOVO dto);
SysUserDTOVO view(String id);
void del(String id);
void changeStatus(StatusDTO dto);
SysUserLoginVO login(LoginDTO loginDTO);
void logout();
List<SysMenu> getMenuListByFactoryId();
SysUserLoginVO getRoleAndMenuList();
SysUserLoginVO getWechatMenuList();
SysUserLoginVO getUserVO();
SysPersonDTOVO getUserDetail();
List<SysRole> getRoleList(String userId);
void editSelf(SysPersonSimpleDTO dto);
/*人员*/
PageVO<SysPersonDTOVO> page(PageReqDTO<SysUserQueryDTO> page);
List<SysPersonDTOVO> list(SysUserQueryDTO dto);
void exportExcel(HttpServletResponse response, SysUserQueryDTO dto);
List<SysPersonSimpleVO> listSimple(SysUserQueryDTO dto);
SysUser checkUserSuperException(String id);
List<SysUser> checkUserSuperException(List<String> idList);
boolean checkUserSuper(SysUser user);
void addPerson(SysPersonDTOVO dto);
void editPerson(SysPersonDTOVO dto);
SysPersonDTOVO viewPerson(String id);
void delPerson(String id);
void factoryInit(String factoryId);
/*feign*/
List<SysUserVO> listByIdList(List<String> idList);
List<SysUserVO> listByRoleAndMenuCode(SysRoleAndMenuCodeDTO codeDTO);
List<String> listIdByName(String name);
/*feign*/
}
package com.makeit.module.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.dto.StatusDTO;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.biz.auth.DeptEnum;
import com.makeit.exception.BusinessException;
import com.makeit.module.admin.dto.SysDeptQueryDTO;
import com.makeit.module.admin.entity.SysDept;
import com.makeit.module.admin.entity.SysUser;
import com.makeit.module.admin.mapper.SysDeptMapper;
import com.makeit.module.admin.service.SysDeptService;
import com.makeit.module.admin.service.SysUserService;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.user.tenant.SysUserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* <p>
* 部门 服务实现类
* </p>
*
* @author eugene young
* @since 2022-05-17
*/
@Service
public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements SysDeptService {
@Autowired
private SysUserService sysUserService;
//TODO ywc 路径枚举 要不要把自己也记录下来
private void orFindInSet(List<String> deptIdList, LambdaQueryWrapper<SysDept> lambdaQueryWrapper) {
lambdaQueryWrapper.and(qw -> {
for (int i = 0; i < deptIdList.size(); i++) {
String e = deptIdList.get(i);
qw.apply("find_in_set('" + e + "',parent_path)")
.or()
.eq(SysDept::getId, e);
if (i < deptIdList.size() - 1) {
qw.or();
}
}
});
}
private LambdaQueryWrapper<SysDept> lambdaQueryWrapper(SysDeptQueryDTO dto) {
LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new QueryWrapper<SysDept>().lambda()
.like(StringUtils.isNotBlank(dto.getName()), SysDept::getName, dto.getName())
.eq(StringUtils.isNotBlank(dto.getStatus()), SysDept::getStatus, dto.getStatus())
.eq(StringUtils.isNotBlank(dto.getTag()), SysDept::getTag, dto.getTag())
.orderByAsc(SysDept::getTag)
.orderByAsc(SysDept::getCreateDate);
return lambdaQueryWrapper;
}
private LambdaQueryWrapper<SysDept> lambdaQueryWrapperFactory(SysDeptQueryDTO dto) {
List<String> deptIdList = SysUserUtil.deptIdList();
boolean flag = SysUserUtil.isSuper() && deptIdList.isEmpty();
LambdaQueryWrapper<SysDept> lambdaQueryWrapper = lambdaQueryWrapper(dto);
//TODO ywc 要不要改成全查出来 内存过滤
if (!flag) {
orFindInSet(deptIdList, lambdaQueryWrapper);
}
return lambdaQueryWrapper;
}
@Transactional
@Override
public void changeStatus(StatusDTO dto) {
if (Arrays.stream(CommonEnum.values()).noneMatch(e -> e.getValue().equals(dto.getStatus()))) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
SysDept dept = getById(dto.getId());
if (dept.getStatus().equals(dto.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
dept.setStatus(dto.getStatus());
updateById(dept);
}
@Override
public List<SysDept> list(SysDeptQueryDTO dto) {//parent_path find_in_set ?
List<SysDept> sysDeptList = list(lambdaQueryWrapperFactory(dto));
return sysDeptList;
}
@Override
public List<SysDept> tree(SysDeptQueryDTO dto) {
List<SysDept> list = list(dto);
return tree(list);
}
@Override
public List<SysDept> listNotFactory(SysDeptQueryDTO dto) {
List<SysDept> sysDeptList = list(lambdaQueryWrapper(dto));
return sysDeptList;
}
@Override
public List<SysDept> treeNotFactory(SysDeptQueryDTO dto) {
List<SysDept> list = listNotFactory(dto);
return tree(list);
}
@Override
public List<SysDept> selfAndChildren(String deptId) {
List<SysDept> deptList = list(new QueryWrapper<SysDept>().lambda().apply("find_in_set('" + deptId + "',parent_path)"));
return deptList;
}
@Override
public List<String> selfAndChildrenIdList(String deptId) {
return StreamUtil.map(selfAndChildren(deptId), SysDept::getId);
}
@Override
public List<SysDept> selfAndChildren(List<String> deptIdList) {
LambdaQueryWrapper<SysDept> lambdaQueryWrapper = new QueryWrapper<SysDept>().lambda();
orFindInSet(deptIdList, lambdaQueryWrapper);
return list(lambdaQueryWrapper);
}
@Override
public List<String> selfAndChildrenIdList(List<String> deptIdList) {
return StreamUtil.map(selfAndChildren(deptIdList), SysDept::getId);
}
private List<SysDept> tree(List<SysDept> sysDeptList) {
Map<String, SysDept> map = StreamUtil.toMap(sysDeptList, SysDept::getId);
//List<TntDept> topList = StreamUtil.filter(tntDeptList, e -> TreeConst.TOP_LEVEL.equals(e.getParentId()));
List<SysDept> topList = new ArrayList<>(10);
sysDeptList.forEach(e -> {
SysDept parent = map.get(e.getParentId());
if (parent != null) {
List<SysDept> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>(10);
parent.setChildren(children);
}
children.add(e);
} else {
topList.add(e);
}
});
return topList;
}
@Transactional
@Override
public void add(SysDept dto) {
dto.setTag(DeptEnum.DeptTagEnum.DEPT.getValue());
//dto.setFactoryId(FactoryIdUtil.getFactoryId());
save(dto);
}
@Transactional
@Override
public void edit(SysDept dto) {
dto.setTag(DeptEnum.DeptTagEnum.DEPT.getValue());
//dto.setFactoryId(FactoryIdUtil.getFactoryId());
updateById(dto);
}
@Override
public SysDept view(String id) {
SysDept sysDept = getById(id);
return sysDept;
}
@Transactional
@Override
public void del(String id) {
List<SysDept> list = new ArrayList<>(10);
List<SysDept> children = list(new QueryWrapper<SysDept>().lambda()
.eq(SysDept::getParentId, id));
if (!children.isEmpty()) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_DEPT_DELETE);
}
long count = sysUserService.count(new QueryWrapper<SysUser>().lambda()
.eq(SysUser::getDeptId, id));
if (count > 0) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_DEPT_DELETE);
}
// while (!children.isEmpty()) {
// list.addAll(children);
//
// List<String> idList = StreamUtil.map(children, TntDept::getId);
// idList.add(-1 + "");
//
// children = list(new QueryWrapper<TntDept>().lambda()
// .in(TntDept::getParentId, idList));
// }
//
List<String> idList = StreamUtil.map(list, SysDept::getId);
idList.add(id);
remove(new QueryWrapper<SysDept>().lambda()
.in(SysDept::getId, idList));
}
}
package com.makeit.module.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.exception.BusinessException;
import com.makeit.module.admin.dto.SysFactoryDTOVO;
import com.makeit.module.admin.dto.SysRoleDTOVO;
import com.makeit.module.admin.entity.SysDept;
import com.makeit.module.admin.entity.SysFactory;
import com.makeit.module.admin.entity.SysRoleFactory;
import com.makeit.module.admin.mapper.SysFactoryMapper;
import com.makeit.module.admin.service.SysDeptService;
import com.makeit.module.admin.service.SysFactoryService;
import com.makeit.module.admin.service.SysRoleFactoryService;
import com.makeit.module.admin.service.SysUserService;
import com.makeit.module.system.service.SysConfigService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.utils.user.TokenUtil;
import com.makeit.utils.user.tenant.SysUserRoleMenuRedisVO;
import com.makeit.utils.user.tenant.SysUserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 厂别 服务实现类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Service
public class SysFactoryServiceImpl extends ServiceImpl<SysFactoryMapper, SysFactory> implements SysFactoryService {
@Autowired
private SysConfigService sysConfigService;
@Autowired
private SysDeptService sysDeptService;
@Autowired
private SysUserService sysUserService;
@Autowired
private SysRoleFactoryService sysRoleFactoryService;
private void fill(List<SysFactoryDTOVO> voList) {
JoinUtil.joinSplit(voList, sysDeptService, SysFactoryDTOVO::getDeptIdList, SysDept::getId, (f, d) -> {
f.setDeptOriIdList(StreamUtil.join(d, SysDept::getOriId));
f.setDeptNameList(StreamUtil.join(d, SysDept::getName));
});
}
private LambdaQueryWrapper<SysFactory> listLambdaQueryWrapper(SysFactoryDTOVO dto) {
LambdaQueryWrapper<SysFactory> lambdaQueryWrapper = new QueryWrapper<SysFactory>().lambda()
.like(StringUtils.isNotBlank(dto.getName()), SysFactory::getName, dto.getName());
lambdaQueryWrapper.orderByDesc(SysFactory::getCreateDate);
return lambdaQueryWrapper;
}
@Override
public List<SysFactoryDTOVO> list(SysFactoryDTOVO dto) {
LambdaQueryWrapper<SysFactory> lambdaQueryWrapper = listLambdaQueryWrapper(dto);
List<SysFactory> sysFactoryList = list(lambdaQueryWrapper);
List<SysFactoryDTOVO> voList = BeanDtoVoUtils.listVo(sysFactoryList, SysFactoryDTOVO.class);
fill(voList);
return voList;
}
@Override
public PageVO<SysFactoryDTOVO> page(PageReqDTO<SysFactoryDTOVO> page) {
SysFactoryDTOVO dto = page.getData();
Page<SysFactory> p = PageUtil.toMpPage(page);
LambdaQueryWrapper<SysFactory> lambdaQueryWrapper = listLambdaQueryWrapper(dto);
Page<SysFactory> pageList = page(p, lambdaQueryWrapper);
List<SysFactoryDTOVO> voList = BeanDtoVoUtils.listVo(pageList.getRecords(), SysFactoryDTOVO.class);
fill(voList);
return PageUtil.toPageVO(voList, pageList);
}
private void checkName(SysFactoryDTOVO dto) {
SysFactory sysFactory = getOne(
new QueryWrapper<SysFactory>().lambda()
.eq(SysFactory::getName, dto.getName())
);
if (sysFactory != null && !sysFactory.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_NAME_DUPLICATE);
}
}
@Transactional
@Override
public String add(SysFactoryDTOVO dto) {
checkName(dto);
SysFactory sysFactory = BeanDtoVoUtils.convert(dto, SysFactory.class);
save(sysFactory);
dto.setId(sysFactory.getId());
sysConfigService.copyForFactory(BeanDtoVoUtils.convert(sysFactory, SysFactoryDTOVO.class));
sysUserService.factoryInit(sysFactory.getId());
return sysFactory.getId();
}
@Transactional
@Override
public void edit(SysFactoryDTOVO dto) {
checkName(dto);
SysFactory sysFactory = BeanDtoVoUtils.convert(dto, SysFactory.class);
updateById(sysFactory);
}
@Override
public SysFactoryDTOVO view(String id) {
SysFactoryDTOVO userVO = BeanDtoVoUtils.convert(getById(id), SysFactoryDTOVO.class);
return userVO;
}
@Transactional
@Override
public void del(String id) {
removeById(id);
}
@Override
public List<SysFactory> userFactoryListList() {
if (SysUserUtil.isSuper()) {
List<SysFactory> factoryList = list(new QueryWrapper<SysFactory>().lambda()
.orderByAsc(SysFactory::getCreateDate)
);
return factoryList;
}
SysUserRoleMenuRedisVO sysUserRoleMenuRedisVO = TokenUtil.getTntUserRoleMenu();
List<String> roleIdList = StreamUtil.mapId(sysUserRoleMenuRedisVO.getRoleList(), SysRoleDTOVO::getId);
List<SysRoleFactory> sysRoleFactoryList = sysRoleFactoryService.list(new QueryWrapper<SysRoleFactory>().lambda().in(SysRoleFactory::getRoleId, roleIdList));
List<String> factoryIdList = StreamUtil.mapId(sysRoleFactoryList, SysRoleFactory::getFactoryId);
List<SysFactory> factoryList = list(new QueryWrapper<SysFactory>().lambda()
.in(SysFactory::getId, factoryIdList)
.orderByAsc(SysFactory::getCreateDate)
);
return factoryList;
}
@Override
public List<SysFactory> userFactoryListRefresh() {
List<SysFactory> companyList = userFactoryListList();
// if (companyList == null || companyList.isEmpty()) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_COMPANY_NOT_EXIST);
// }
//sysUserService.refreshFactoryList(companyList);
return companyList;
}
@Override
public List<SysFactoryDTOVO> enableList() {
List<SysFactory> sysFactoryList = list(new QueryWrapper<SysFactory>().lambda());
return BeanDtoVoUtils.listVo(sysFactoryList, SysFactoryDTOVO.class);
}
@Override
public List<SysFactoryDTOVO> listByUserIdList(List<String> userIdList) {
userIdList = new ArrayList<>(userIdList);
userIdList.add(-1 + "");
List<SysFactory> tenantList = list(new QueryWrapper<SysFactory>().lambda()
.orderByAsc(SysFactory::getCreateDate)
);
return BeanDtoVoUtils.listVo(tenantList, SysFactoryDTOVO.class);
}
}
package com.makeit.module.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.biz.auth.SysEnum;
import com.makeit.enums.id.TreeConst;
import com.makeit.exception.BusinessException;
import com.makeit.global.annotation.Action;
import com.makeit.module.admin.dto.SysMenuDTOVO;
import com.makeit.module.admin.dto.SysMenuQueryDTO;
import com.makeit.module.admin.entity.SysMenu;
import com.makeit.module.admin.entity.SysRoleMenu;
import com.makeit.module.admin.mapper.SysMenuMapper;
import com.makeit.module.admin.service.SysMenuService;
import com.makeit.module.admin.service.SysRoleMenuService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils;
import io.swagger.annotations.Api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.RegexPatternTypeFilter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.lang.reflect.Method;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* <p>
* 菜单 服务实现类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Service
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
@Autowired
private SysRoleMenuService sysRoleMenuService;
private static final Logger logger = LoggerFactory.getLogger(SysMenuServiceImpl.class);
@Override
public List<SysMenuDTOVO> list(SysMenuQueryDTO dto) {
List<String> menuIdList = new ArrayList<>(10);
menuIdList.add(-1 + "");
if (StringUtils.isNotBlank(dto.getRoleId())) {
List<SysRoleMenu> sysRoleMenuList = sysRoleMenuService.list(new QueryWrapper<SysRoleMenu>().lambda()
.eq(SysRoleMenu::getRoleId, dto.getRoleId()));
menuIdList.addAll(StreamUtil.map(sysRoleMenuList, SysRoleMenu::getMenuId));
}
List<SysMenu> sysMenuList = list(new QueryWrapper<SysMenu>().lambda()
.like(StringUtils.isNotBlank(dto.getName()), SysMenu::getName, dto.getName())
.eq(StringUtils.isNotBlank(dto.getStatus()), SysMenu::getStatus, dto.getStatus())
.in(StringUtils.isNotBlank(dto.getRoleId()), SysMenu::getId, menuIdList)
//.orderByAsc(TntMenu::getParentId)
.orderByAsc(SysMenu::getSort)
.orderByAsc(SysMenu::getCreateBy)
);
return BeanDtoVoUtils.listVo(sysMenuList, SysMenuDTOVO.class);
}
@Override
public List<SysMenuDTOVO> tree(List<SysMenuDTOVO> tntMenuList) {
Map<String, SysMenuDTOVO> map = StreamUtil.toMap(tntMenuList, SysMenuDTOVO::getId);
List<SysMenuDTOVO> topList = StreamUtil.filter(tntMenuList, e -> TreeConst.TOP_LEVEL.equals(e.getParentId()));
tntMenuList.forEach(e -> {
SysMenuDTOVO parent = map.get(e.getParentId());
if (parent != null) {
List<SysMenuDTOVO> children = parent.getChildren();
if (children == null) {
children = new ArrayList<>(10);
parent.setChildren(children);
}
children.add(e);
}
});
return topList;
}
@Override
public List<SysMenuDTOVO> tree(SysMenuQueryDTO dto) {
List<SysMenuDTOVO> tntMenuList = list(dto);
return tree(tntMenuList);
}
private void checkCode(SysMenuDTOVO dto) {
SysMenu old = getOne(new QueryWrapper<SysMenu>().lambda()
.eq(SysMenu::getCode, dto.getCode()));
if (old != null && !old.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_CODE_DUPLICATE);
}
}
@Transactional
@Override
public void add(SysMenuDTOVO dto) {
checkCode(dto);
save(BeanDtoVoUtils.convert(dto, SysMenu.class));
}
@Transactional
@Override
public void edit(SysMenuDTOVO dto) {
checkCode(dto);
updateById(BeanDtoVoUtils.convert(dto, SysMenu.class));
}
@Override
public SysMenuDTOVO view(String id) {
return BeanDtoVoUtils.convert(getById(id), SysMenuDTOVO.class);
}
@Transactional
@Override
public void del(String id) {
List<SysMenu> list = new ArrayList<>(10);
List<SysMenu> children = list(new QueryWrapper<SysMenu>().lambda()
.eq(SysMenu::getParentId, id));
while (!children.isEmpty()) {
list.addAll(children);
List<String> idList = StreamUtil.mapId(children, SysMenu::getId);
children = list(new QueryWrapper<SysMenu>().lambda()
.in(SysMenu::getParentId, idList));
}
List<String> idList = StreamUtil.map(list, SysMenu::getId);
idList.add(id);
remove(new QueryWrapper<SysMenu>().lambda()
.in(SysMenu::getId, idList));
}
@Override
@Transactional
public void sync() {
List<SysMenu> exitList = list(new QueryWrapper<SysMenu>().lambda()
.isNotNull(SysMenu::getCode)
.in(SysMenu::getCategory, SysEnum.MenuTypeEnum.MENU.getValue(), SysEnum.MenuTypeEnum.BUTTON.getValue())
);
Map<String, SysMenu> exitCodeMap = StreamUtil.toMapDep(exitList, SysMenu::getCode);
//查询数据库中已存在的权限
List<SysMenu> exitButtonList = StreamUtil.filter(exitList, e -> SysEnum.MenuTypeEnum.BUTTON.getValue().equals(e.getCategory()));
Map<String, SysMenu> exitButtonCodeMap = StreamUtil.toMap(exitButtonList, SysMenu::getCode);
//加载项目中的权限
List<SysMenu> loadActionList = StreamUtil.filter(this.load(), e -> !TreeConst.TOP_LEVEL.equals(e.getParentId()));
Set<String> loadActionCodeList = loadActionList.stream().map(SysMenu::getCode).collect(Collectors.toSet());
//新增加的权限
List<SysMenu> addActionList = loadActionList.stream().filter(item ->
!exitButtonCodeMap.containsKey(item.getCode())).collect(Collectors.toList());
//删除的权限
List<SysMenu> deleteActionList = exitButtonList.stream().filter(item ->
!loadActionCodeList.contains(item.getCode())).collect(Collectors.toList());
saveBatch(StreamUtil.filter(addActionList, e -> TreeConst.TOP_LEVEL.equals(e.getParentId())));
addActionList.forEach(e -> {
if (TreeConst.TOP_LEVEL.equals(e.getParentId())) {
exitCodeMap.put(e.getCode(), e);
}
});
List<SysMenu> buttonList = new ArrayList<>(10);
addActionList.forEach(e -> {
if (!TreeConst.TOP_LEVEL.equals(e.getParentId())) {
String groupCode = getGroupCode(e.getCode());
SysMenu buttonGroup = exitCodeMap.get(groupCode);
if (buttonGroup != null) {
e.setParentId(buttonGroup.getId());
} else {
e.setParentId(e.getId());
}
buttonList.add(e);
}
if (StringUtils.isBlank(e.getParentId())) {
e.setParentId(TreeConst.TOP_LEVEL);
}
});
saveBatch(buttonList);
List<String> removeIdList = StreamUtil.mapId(deleteActionList, SysMenu::getId);
removeByIds(removeIdList);
}
@Override
public List<SysMenu> loadMenuCodeList() {
List<SysMenu> list = StreamUtil.filter(this.load(), e -> TreeConst.TOP_LEVEL.equals(e.getParentId()));
return list;
}
private List<SysMenu> load() {
Set<String> buttonCodeSet = new HashSet<>(16);
List<SysMenu> buttonList = new ArrayList<>();
// 禁止默认过滤条件设置false
final ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false);
//插入匹配过滤条件
provider.addIncludeFilter(new RegexPatternTypeFilter(Pattern.compile(".*Controller")));
final Set<BeanDefinition> classes = provider.findCandidateComponents("com.makeit.controller.tenant");
//从bean中加载数据
for (BeanDefinition bean : classes) {
try {
Class<?> clazz = Class.forName(bean.getBeanClassName());
Method[] methods = clazz.getMethods();
for (Method method : methods) {
if (method.isAnnotationPresent(Action.class)) {
Action action = method.getAnnotation(Action.class);
Arrays.asList(action.code()).forEach(e -> {
if (buttonCodeSet.contains(e)) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_CODE_DUPLICATE);
} else {
buttonCodeSet.add(e);
}
String groupName = action.module();
String groupCode = null;
if (StringUtils.isBlank(groupName)) {
Api api = clazz.getAnnotation(Api.class);
if (api != null) {
groupName = api.tags()[0];
}
}
groupCode = getGroupCode(e);
if (StringUtils.isNotBlank(groupCode) && !buttonCodeSet.contains(groupCode)) {
buttonCodeSet.add(groupCode);
buttonList.add(generateButtonGroup(groupName, groupCode));
}
SysMenu button = new SysMenu();
button.setName(action.name());
button.setCode(e);
button.setSort(0);
button.setStatus(CommonEnum.YES.getValue());
button.setCategory(SysEnum.MenuTypeEnum.BUTTON.getValue());
button.setHiddenStatus(CommonEnum.NO.getValue());
button.setCacheStatus(CommonEnum.NO.getValue());
buttonList.add(button);
});
}
}
} catch (ClassNotFoundException e) {
logger.info("ex_" + e.getMessage(), e);
}
}
return buttonList;
}
private String getGroupCode(String code) {
if (code.contains(":")) {
return code.substring(0, code.lastIndexOf(":"));
}
if (code.contains(".")) {
return code.substring(0, code.lastIndexOf("."));
}
return code;
}
private SysMenu generateButtonGroup(String name, String code) {
SysMenu button = new SysMenu();
button.setName(name);
button.setCode(code);
button.setParentId(TreeConst.TOP_LEVEL);
button.setSort(0);
button.setStatus(CommonEnum.YES.getValue());
button.setCategory(SysEnum.MenuTypeEnum.BUTTON.getValue());
button.setHiddenStatus(CommonEnum.NO.getValue());
button.setCacheStatus(CommonEnum.NO.getValue());
return button;
}
}
package com.makeit.module.admin.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.module.admin.entity.SysRoleFactory;
import com.makeit.module.admin.mapper.SysRoleFactoryMapper;
import com.makeit.module.admin.service.SysRoleFactoryService;
import org.springframework.stereotype.Service;
/**
* <p>
* 角色菜单关联表 服务实现类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Service
public class SysRoleFactoryServiceImpl extends ServiceImpl<SysRoleFactoryMapper, SysRoleFactory> implements SysRoleFactoryService {
}
package com.makeit.module.admin.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.module.admin.entity.SysRoleMenu;
import com.makeit.module.admin.mapper.SysRoleMenuMapper;
import com.makeit.module.admin.service.SysRoleMenuService;
import org.springframework.stereotype.Service;
/**
* <p>
* 角色菜单关联表 服务实现类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Service
public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuMapper, SysRoleMenu> implements SysRoleMenuService {
}
package com.makeit.module.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.id.IdConst;
import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdUtil;
import com.makeit.module.admin.dto.SysRoleDTOVO;
import com.makeit.module.admin.dto.SysRoleFactoryDTO;
import com.makeit.module.admin.dto.SysRoleMenuDTO;
import com.makeit.module.admin.dto.SysUserRoleDTO;
import com.makeit.module.admin.entity.*;
import com.makeit.module.admin.mapper.SysRoleMapper;
import com.makeit.module.admin.service.*;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sql.WrapperUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* <p>
* 角色 服务实现类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Service
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
@Autowired
private SysUserRoleService sysUserRoleService;
@Autowired
private SysRoleMenuService sysRoleMenuService;
@Autowired
private SysMenuService sysMenuService;
@Autowired
private SysRoleWechatMenuService sysRoleWechatMenuService;
@Autowired
private SysRoleFactoryService sysRoleFactoryService;
private LambdaQueryWrapper<SysRole> listWrapper(SysRoleDTOVO dto) {
// if (dto.getNameList() != null) {
// dto.getNameList().add(-1 + "");
// }
if (dto.getCodeList() != null) {
dto.getCodeList().add(-1 + "");
}
LambdaQueryWrapper<SysRole> lambdaQueryWrapper = new QueryWrapper<SysRole>().lambda()
.eq(SysRole::getTenantId, TenantIdUtil.getTenantId())
.like(StringUtils.isNotBlank(dto.getName()), SysRole::getName, dto.getName())
.like(StringUtils.isNotBlank(dto.getCode()), SysRole::getCode, dto.getCode())
//.in(dto.getNameList() != null, TntRole::getName, dto.getNameList())
.in(dto.getCodeList() != null, SysRole::getCode, dto.getCodeList())
.and(StringUtils.isNotBlank(dto.getKeyword()), qw -> {
qw.like(StringUtils.isNotBlank(dto.getKeyword()), SysRole::getName, dto.getKeyword())
.or()
.like(StringUtils.isNotBlank(dto.getKeyword()), SysRole::getName, dto.getKeyword());
})
.eq(StringUtils.isNotBlank(dto.getStatus()), SysRole::getStatus, dto.getStatus())
.orderByDesc(SysRole::getCreateDate);
menuFilter(dto, lambdaQueryWrapper);
return lambdaQueryWrapper;
}
private void menuFilter(SysRoleDTOVO dto, LambdaQueryWrapper<SysRole> lambdaQueryWrapper) {
if (dto.getMenuIdList() == null && dto.getMenuCodeList() == null) {
return;
}
// if (dto.getMenuIdList().isEmpty() || dto.getMenuCodeList().isEmpty()) {
// lambdaQueryWrapper.eq(TntRole::getId, -1);
// return;
// }
if (dto.getMenuIdList() != null) {
dto.getMenuIdList().add(-1 + "");
}
if (dto.getMenuCodeList() != null) {
dto.getMenuCodeList().add(-1 + "");
}
List<SysMenu> menuList = sysMenuService.list(new QueryWrapper<SysMenu>().lambda()
.eq(SysMenu::getStatus, CommonEnum.YES.getValue())//ywc 这里只看启用的
.in(dto.getMenuIdList() != null, SysMenu::getId, dto.getMenuIdList())
.in(dto.getMenuCodeList() != null, SysMenu::getCode, dto.getMenuCodeList())
);
List<String> menuIdList = StreamUtil.mapId(menuList, SysMenu::getId);
List<SysRoleMenu> roleMenuList = sysRoleMenuService.list(new QueryWrapper<SysRoleMenu>().lambda()
.in(SysRoleMenu::getMenuId, menuIdList));
List<String> roleIdList = StreamUtil.mapId(roleMenuList, SysRoleMenu::getRoleId);
lambdaQueryWrapper.in(SysRole::getId, roleIdList);
}
@Override
public List<SysRoleDTOVO> list(SysRoleDTOVO dto) {
List<SysRole> sysRoleList = list(listWrapper(dto));
return BeanDtoVoUtils.listVo(sysRoleList, SysRoleDTOVO.class);
}
@Override
public PageVO<SysRoleDTOVO> page(PageReqDTO<SysRoleDTOVO> page) {
SysRoleDTOVO dto = page.getData();
Page<SysRole> p = PageUtil.toMpPage(page);
Page<SysRole> pageList = page(p, listWrapper(dto));
List<SysRoleDTOVO> tntUserVOList = BeanDtoVoUtils.listVo(pageList.getRecords(), SysRoleDTOVO.class);
return PageUtil.toPageVO(tntUserVOList, pageList);
}
private void check(SysRoleDTOVO dto) {
SysRole old = WrapperUtil.getOne(this, new QueryWrapper<SysRole>().lambda()
.eq(SysRole::getTenantId, TenantIdUtil.getTenantId())
.eq(SysRole::getName, dto.getName()));
if (old != null && !old.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_NAME_DUPLICATE);
}
old = WrapperUtil.getOne(this, new QueryWrapper<SysRole>().lambda()
.eq(SysRole::getTenantId, TenantIdUtil.getTenantId())
.eq(SysRole::getCode, dto.getCode()));
if (old != null && !old.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_CODE_DUPLICATE);
}
}
private void setMenuIdList(SysRoleDTOVO dto) {
SysRoleMenuDTO roleMenuDTO = new SysRoleMenuDTO();
roleMenuDTO.setRoleId(dto.getId());
roleMenuDTO.setMenuIdList(dto.getMenuIdList());
assignMenuList(roleMenuDTO);
}
@Transactional
@Override
public void add(SysRoleDTOVO dto) {
check(dto);
SysRole sysRole = BeanDtoVoUtils.convert(dto, SysRole.class);
sysRole.setTenantId(TenantIdUtil.getTenantId());
save(sysRole);
dto.setId(sysRole.getId());
//setMenuIdList(dto);
}
@Transactional
@Override
public void edit(SysRoleDTOVO dto) {
check(dto);
SysRole old = getById(dto.getId());
SysRole role = BeanDtoVoUtils.convert(dto, SysRole.class);
role.setTenantId(old.getTenantId());
updateById(role);
//setMenuIdList(dto);
}
@Override
public SysRoleDTOVO view(String id) {
SysRoleDTOVO vo = BeanDtoVoUtils.convert(getById(id), SysRoleDTOVO.class);
return vo;
}
@Transactional
@Override
public void del(String id) {
long count = sysUserRoleService.count(new QueryWrapper<SysUserRole>().lambda()
.eq(SysUserRole::getRoleId, id));
if (count > 0) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_ROLE_CANT_DELETE);
}
removeById(id);
}
@Transactional
@Override
public void changeStatus(StatusDTO dto) {
if (Arrays.stream(CommonEnum.values()).noneMatch(e -> e.getValue().equals(dto.getStatus()))) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
SysRole role = getById(dto.getId());
if (role.getStatus().equals(dto.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
role.setStatus(dto.getStatus());
updateById(role);
}
@Transactional
@Override
public void assignUserList(List<SysUserRoleDTO> userRoleDTOList) {//目前只给一个角色 分配人人员使用
removeAssignUserList(userRoleDTOList);
List<SysUserRole> userRoleList = BeanDtoVoUtils.listVo(userRoleDTOList, SysUserRole.class);
userRoleDTOList.forEach(e -> {
e.setTenantId(TenantIdUtil.getTenantId());
});
sysUserRoleService.saveBatch(userRoleList);
}
@Transactional
@Override
public void removeAssignUserList(List<SysUserRoleDTO> userRoleDTOList) {
Map<String, List<SysUserRoleDTO>> roleUserMap = StreamUtil.groupBy(userRoleDTOList, SysUserRoleDTO::getRoleId);
roleUserMap.forEach((k, v) -> {
List<String> userIdList = StreamUtil.mapId(v, SysUserRoleDTO::getUserId);
sysUserRoleService.remove(new QueryWrapper<SysUserRole>().lambda()
.eq(SysUserRole::getRoleId, k)
.in(SysUserRole::getUserId, userIdList));
});
}
@Transactional
@Override
public void assignMenuList(SysRoleMenuDTO roleMenuDTO) {
sysRoleMenuService.remove(new QueryWrapper<SysRoleMenu>().lambda()
.eq(SysRoleMenu::getRoleId, roleMenuDTO.getRoleId()));
List<SysRoleMenu> roleMenuList = StreamUtil.map(roleMenuDTO.getMenuIdList(), e -> {
SysRoleMenu sysRoleMenu = new SysRoleMenu();
sysRoleMenu.setRoleId(roleMenuDTO.getRoleId());
sysRoleMenu.setMenuId(e);
return sysRoleMenu;
});
sysRoleMenuService.saveBatch(roleMenuList);
}
@Override
public List<SysRoleMenu> getAssignMenuList(String id) {
List<SysRoleMenu> roleMenuList = sysRoleMenuService.list(new QueryWrapper<SysRoleMenu>().lambda()
.eq(SysRoleMenu::getRoleId, id));
List<String> menuIdList = StreamUtil.mapId(roleMenuList, SysRoleMenu::getMenuId);
List<SysMenu> menuList = sysMenuService.list(new QueryWrapper<SysMenu>().lambda()
.in(SysMenu::getId, menuIdList));
Map<String, SysMenu> menuMap = StreamUtil.toMap(menuList, SysMenu::getId);
List<SysRoleMenu> newList = new ArrayList<>(10);
roleMenuList.forEach(e -> {
SysMenu menu = menuMap.get(e.getMenuId());
if (menu != null) {
e.setMenuName(menu.getName());
newList.add(e);
}
});
return newList;
}
@Transactional
@Override
public void assignWechatMenuList(SysRoleMenuDTO roleMenuDTO) {
sysRoleWechatMenuService.remove(new QueryWrapper<SysRoleWechatMenu>().lambda()
.eq(SysRoleWechatMenu::getRoleId, roleMenuDTO.getRoleId()));
List<SysRoleWechatMenu> roleMenuList = StreamUtil.map(roleMenuDTO.getMenuIdList(), e -> {
SysRoleWechatMenu tntRoleMenu = new SysRoleWechatMenu();
tntRoleMenu.setRoleId(roleMenuDTO.getRoleId());
tntRoleMenu.setMenuId(e);
tntRoleMenu.setTenantId(roleMenuDTO.getTenantId());
return tntRoleMenu;
});
sysRoleWechatMenuService.saveBatch(roleMenuList);
}
@Override
public List<SysRoleWechatMenu> getWechatMenuList(String roleId) {
List<SysRoleWechatMenu> roleWechatMenuList = sysRoleWechatMenuService.list(new QueryWrapper<SysRoleWechatMenu>().lambda()
.eq(SysRoleWechatMenu::getRoleId, roleId));
return roleWechatMenuList;
}
@Override
public void assignFactoryList(SysRoleFactoryDTO roleFactoryDTO) {
sysRoleFactoryService.remove(new QueryWrapper<SysRoleFactory>().lambda()
.eq(SysRoleFactory::getRoleId, roleFactoryDTO.getRoleId()));
List<SysRoleFactory> roleFactoryList = StreamUtil.map(roleFactoryDTO.getFactoryIdList(), e -> {
SysRoleFactory tntRoleMenu = new SysRoleFactory();
tntRoleMenu.setRoleId(roleFactoryDTO.getRoleId());
tntRoleMenu.setFactoryId(e);
return tntRoleMenu;
});
sysRoleFactoryService.saveBatch(roleFactoryList);
}
@Override
public List<SysRoleFactory> getFactoryList(String roleId) {
List<SysRoleFactory> roleFactoryList = sysRoleFactoryService.list(new QueryWrapper<SysRoleFactory>().lambda()
.eq(SysRoleFactory::getRoleId, roleId));
return roleFactoryList;
}
@Transactional
@Override
public String factoryInit(String factoryId) {
SysRole role = new SysRole();
role.setTenantId(factoryId);
role.setName(IdConst.ROLE_COMMON_USER_NAME);
role.setStatus(CommonEnum.YES.getValue());
role.setCode(IdConst.ROLE_COMMON_USER_CODE);
save(role);
SysRoleFactory sysRoleFactory = new SysRoleFactory();
sysRoleFactory.setRoleId(role.getId());
sysRoleFactory.setFactoryId(factoryId);
sysRoleFactoryService.save(sysRoleFactory);
return role.getId();
}
public static String getNewName(String name) {
return name + "_1";
}
@Override
public void copyRole(String roleId) {
SysRole sysRole = getById(roleId);
SysRole newRole = BeanDtoVoUtils.convert(sysRole, SysRole.class);
newRole.setName(getNewName(sysRole.getName()));
newRole.setCode(getNewName(sysRole.getCode()));
newRole.setId(null);
save(newRole);
List<SysUserRole> userRoleList = sysUserRoleService.list(new QueryWrapper<SysUserRole>().lambda()
.eq(SysUserRole::getRoleId, roleId));
List<SysUserRole> userRoleListNew = BeanDtoVoUtils.listVo(userRoleList, SysUserRole.class);
userRoleListNew.forEach(e -> {
e.setId(null);
e.setRoleId(newRole.getId());
});
sysUserRoleService.saveBatch(userRoleListNew);
List<SysRoleMenu> roleMenuList = sysRoleMenuService.list(new QueryWrapper<SysRoleMenu>().lambda()
.eq(SysRoleMenu::getRoleId, roleId));
List<SysRoleMenu> roleMenuListNew = BeanDtoVoUtils.listVo(roleMenuList, SysRoleMenu.class);
roleMenuListNew.forEach(e -> {
e.setId(null);
e.setRoleId(newRole.getId());
});
sysRoleMenuService.saveBatch(roleMenuListNew);
List<SysRoleWechatMenu> wechatMenuList = sysRoleWechatMenuService.list(new QueryWrapper<SysRoleWechatMenu>().lambda()
.eq(SysRoleWechatMenu::getRoleId, roleId));
wechatMenuList.forEach(e -> {
e.setId(null);
e.setRoleId(newRole.getId());
});
sysRoleWechatMenuService.saveBatch(wechatMenuList);
}
}
package com.makeit.module.admin.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.module.admin.entity.SysRoleWechatMenu;
import com.makeit.module.admin.mapper.SysRoleWechatMenuMapper;
import com.makeit.module.admin.service.SysRoleWechatMenuService;
import org.springframework.stereotype.Service;
/**
* <p>
* 角色菜单关联表 服务实现类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Service
public class SysRoleWechatMenuServiceImpl extends ServiceImpl<SysRoleWechatMenuMapper, SysRoleWechatMenu> implements SysRoleWechatMenuService {
}
package com.makeit.module.admin.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.module.admin.entity.SysUserRole;
import com.makeit.module.admin.mapper.SysUserRoleMapper;
import com.makeit.module.admin.service.SysUserRoleService;
import org.springframework.stereotype.Service;
/**
* <p>
* 用户角色关联表 服务实现类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Service
public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService {
}
package com.makeit.module.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.common.dto.LoginDTO;
import com.makeit.common.dto.StatusDTO;
import com.makeit.common.entity.BaseEntity;
import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.FileSuffixEnum;
import com.makeit.enums.biz.auth.IsFactoryAccountEnum;
import com.makeit.enums.biz.auth.SysEnum;
import com.makeit.enums.biz.auth.SysUserEnum;
import com.makeit.enums.biz.sys.SysDictCategoryConst;
import com.makeit.enums.id.IdConst;
import com.makeit.exception.BusinessException;
import com.makeit.global.aspect.tenant.TenantIdIgnore;
import com.makeit.global.aspect.tenant.TenantIdUtil;
import com.makeit.module.admin.dto.*;
import com.makeit.module.admin.entity.*;
import com.makeit.module.admin.mapper.SysUserMapper;
import com.makeit.module.admin.service.*;
import com.makeit.module.admin.vo.SysPersonSimpleVO;
import com.makeit.module.system.service.SysDictionaryCategoryService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.excel.ExcelUtil;
import com.makeit.utils.data.id.IdGen;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.sql.join.JoinUtil;
import com.makeit.utils.user.PasswordUtils;
import com.makeit.utils.user.TokenUtil;
import com.makeit.utils.user.common.CommonUserVO;
import com.makeit.utils.user.tenant.SysUserLoginVO;
import com.makeit.utils.user.tenant.SysUserRoleMenuRedisVO;
import com.makeit.utils.user.tenant.SysUserUtil;
import com.makeit.utils.user.tenant.SysUserVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
* 用户 服务实现类
* </p>
*
* @author eugene young
* @since 2022-05-10
*/
@Service
public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
@Autowired
private SysUserRoleService sysUserRoleService;
@Autowired
private SysRoleService sysRoleService;
@Autowired
private SysRoleMenuService sysRoleMenuService;
@Autowired
private SysMenuService sysMenuService;
@Autowired
private SysRoleWechatMenuService sysRoleWechatMenuService;
@Autowired
private SysDeptService sysDeptService;
@Autowired
private SysDictionaryCategoryService sysDictionaryCategoryService;
private static final Logger logger = LoggerFactory.getLogger(SysUserServiceImpl.class);
public static final String DEFAULT_PASSWORD = "888888";
private void checkPerson(SysUserDTOVO dto) {
List<SysUser> userList = list(
new QueryWrapper<SysUser>().lambda()
.eq(SysUser::getIsFactory, IsFactoryAccountEnum.NO.getValue())
.and(qw -> qw
// .eq(TntUser::getName, dto.getName())
//
// .or()
.eq(SysUser::getAccount, dto.getAccount())
.or()
.eq(SysUser::getMobile, dto.getMobile())
.or()
.eq(SysUser::getMail, dto.getMail())
)
);
userList.forEach(e -> {
// if (StringUtils.isNotBlank(e.getName()) && e.getName().equals(dto.getName()) && !e.getId().equals(dto.getId())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_NAME_DUPLICATE);
// }
if (StringUtils.isNotBlank(e.getAccount()) && e.getAccount().equals(dto.getAccount()) && !e.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_JOB_NO_DUPLICATE);
}
if (StringUtils.isNotBlank(e.getMobile()) && e.getMobile().equals(dto.getMobile()) && !e.getId().equals(dto.getId())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_MOBILE_DUPLICATE);
}
// if (StringUtils.isNotBlank(e.getMail()) && e.getMail().equals(dto.getMail()) && !e.getId().equals(dto.getId())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_MAIL_DUPLICATE);
// }
});
}
@Override
public void setDefaultPassword(SysUser user) {
if (StringUtils.isBlank(user.getPassword())) {
user.setPassword(DEFAULT_PASSWORD);
} else {
PasswordUtils.validatePasswordFormat(user.getPassword());
}
user.setPassword(PasswordUtils.encryptPassword(user.getPassword()));
}
@Override
public void setPassword(SysUser user) {
if (StringUtils.isNotBlank(user.getPassword())) {
PasswordUtils.validatePasswordFormat(user.getPassword());
user.setPassword(PasswordUtils.encryptPassword(user.getPassword()));
}
}
@Transactional
@Override
public void changePassword(SysUserDTOVO dto) {
SysUser user = getById(dto.getId());
user.setPassword(dto.getPassword());
setPassword(user);
updateById(user);
}
@Override
public SysUserDTOVO view(String id) {
SysUserDTOVO userVO = BeanDtoVoUtils.convert(getById(id), SysUserDTOVO.class);
return userVO;
}
@Transactional
@Override
public void del(String id) {
removeById(id);
}
@Transactional
@Override
public void changeStatus(StatusDTO dto) {
checkUserSuperException(dto.getId());
if (Arrays.stream(SysUserEnum.StatusEnum.values()).noneMatch(e -> e.getValue().equals(dto.getStatus()))) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
SysUser user = getById(dto.getId());
if (user.getStatus().equals(dto.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
user.setStatus(dto.getStatus());
updateById(user);
}
@Override
public SysUserLoginVO login(LoginDTO loginDTO) {
if (StringUtils.isBlank(loginDTO.getAccount())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
if (StringUtils.isBlank(loginDTO.getPassword())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR);
}
SysUser sysUser = getOne(new QueryWrapper<SysUser>().lambda()
.eq(SysUser::getAccount, loginDTO.getAccount())
.or()
.eq(SysUser::getMobile, loginDTO.getAccount())
.or()
.eq(SysUser::getMail, loginDTO.getAccount())
);
//这样在所有厂别内账户不能重复
if (sysUser == null) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_ACCOUNT_PASSWORD);
}
if (!SysUserEnum.StatusEnum.EFFECTIVE.getValue().equals(sysUser.getStatus())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_HAS_DISABLED);
}
if (!PasswordUtils.validatePassword(loginDTO.getPassword(), sysUser.getPassword())) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_AUTH_USER_ACCOUNT_PASSWORD);
}
updateById(sysUser);
SysUserLoginVO userLoginVO = BeanDtoVoUtils.convert(sysUser, SysUserLoginVO.class);
String token = IdGen.getUUID();
userLoginVO.setToken(token);
TokenUtil.tntLogin(token, userLoginVO);
CommonUserVO commonUserVO = new CommonUserVO();
commonUserVO.setId(userLoginVO.getId());
commonUserVO.setName(userLoginVO.getName());
return userLoginVO;
}
private void fillMenuList(List<SysMenu> menuList, SysUserLoginVO userLoginVO) {
List<SysMenu> buttonList = new ArrayList<>(10);
List<SysMenu> nonButtonList = new ArrayList<>(10);
String catalogue = SysEnum.MenuTypeEnum.CATALOGUE.getValue();
String menu = SysEnum.MenuTypeEnum.MENU.getValue();
String button = SysEnum.MenuTypeEnum.BUTTON.getValue();
menuList.forEach(e -> {
if (menu.equals(e.getCategory()) || button.equals(e.getCategory())) {
buttonList.add(e);
}
if (catalogue.equals(e.getCategory()) || menu.equals(e.getCategory())) {
nonButtonList.add(e);
}
});
List<SysMenuDTOVO> menuVOList = sysMenuService.tree(BeanDtoVoUtils.listVo(nonButtonList, SysMenuDTOVO.class));
userLoginVO.setButtonList(BeanDtoVoUtils.listVo(buttonList, SysButtonVO.class));
userLoginVO.setMenuList(menuVOList);
}
@Override
public List<SysMenu> getMenuListByFactoryId() {
List<SysMenu> menuList = sysMenuService.list(new QueryWrapper<SysMenu>().lambda()
.eq(SysMenu::getStatus, CommonEnum.YES.getValue())
.orderByAsc(SysMenu::getSort)
.orderByAsc(SysMenu::getCreateDate)
);
return menuList;
}
private void supperRoleMenuList(SysUserLoginVO userLoginVO) {
fillMenuList(getMenuListByFactoryId(), userLoginVO);
}
private void setRoleMenuToRedis(SysUserLoginVO userLoginVO) {
SysUserRoleMenuRedisVO sysUserRoleMenuRedisVO = new SysUserRoleMenuRedisVO();
sysUserRoleMenuRedisVO.setId(userLoginVO.getId());
sysUserRoleMenuRedisVO.setIsFactory(sysUserRoleMenuRedisVO.getIsFactory());
if (userLoginVO.getRoleList() != null) {
sysUserRoleMenuRedisVO.setRoleList(userLoginVO.getRoleList());
}
if (userLoginVO.getButtonList() != null) {
sysUserRoleMenuRedisVO.setButtonCodeList(StreamUtil.map(userLoginVO.getButtonList(), SysButtonVO::getCode));
}
if (userLoginVO.getFactoryList() != null) {
sysUserRoleMenuRedisVO.setFactoryList(userLoginVO.getFactoryList());
}
TokenUtil.tntLoginRoleMenu(sysUserRoleMenuRedisVO);
}
@Override
public SysUserLoginVO getUserVO() {
return SysUserUtil.getUserVODetail();
}
@Override
public SysPersonDTOVO getUserDetail() {
SysPersonDTOVO sysPersonDTOVO = BeanDtoVoUtils.convert(getById(SysUserUtil.getUserId()), SysPersonDTOVO.class);
List<SysRole> roleList = getRoleList(SysUserUtil.getUserId());
sysPersonDTOVO.setRoleList(BeanDtoVoUtils.listVo(roleList, SysRoleDTOVO.class));
JoinUtil.join(Arrays.asList(sysPersonDTOVO), sysDeptService, Arrays.asList(SysPersonDTOVO::getDeptId), SysDept::getId,
Arrays.asList(
(p, d) -> p.setDeptName(d.getName())
)
);
sysPersonDTOVO.setPassword(null);
return sysPersonDTOVO;
}
@Override
public List<SysRole> getRoleList(String userId) {
List<SysUserRole> userRoleList = sysUserRoleService.list(new QueryWrapper<SysUserRole>().lambda()
.eq(SysUserRole::getUserId, userId));
List<String> roleIdList = StreamUtil.mapId(userRoleList, SysUserRole::getRoleId);
List<SysRole> roleList = sysRoleService.list(new QueryWrapper<SysRole>().lambda()
.in(SysRole::getId, roleIdList)
.eq(SysRole::getStatus, CommonEnum.YES.getValue())
);
return roleList;
}
@Transactional
@Override
public void editSelf(SysPersonSimpleDTO dto) {
checkUserSuperException(SysUserUtil.getUserId());
SysUser old = getById(SysUserUtil.getUserId());
if (StringUtils.isNotBlank(dto.getMobile())) {
old.setMobile(dto.getMobile());
}
if (StringUtils.isNotBlank(dto.getMail())) {
old.setMail(dto.getMail());
}
if (StringUtils.isNotBlank(dto.getPassword())) {
old.setPassword(dto.getPassword());
setDefaultPassword(old);
}
checkUserSuperException(old.getId());
//dto.setAccount(null);
checkPerson(BeanDtoVoUtils.convert(old, SysUserDTOVO.class));
old.setIsFactory(CommonEnum.NO.getValue());
updateById(old);
}
//短信验证码频率 校验
//不用云服务厂商的校验
//或者 redisson 限流
//就要一个消息发送表
private List<SysMenu> getMenuListByUserId(SysUserLoginVO userLoginVO) {
List<SysRole> roleList = getRoleList(userLoginVO.getId());
List<String> roleIdList = StreamUtil.mapId(roleList, SysRole::getId);
List<SysRoleMenu> roleMenuList = sysRoleMenuService.list(new QueryWrapper<SysRoleMenu>().lambda()
.in(SysRoleMenu::getRoleId, roleIdList));
List<String> menuIdList = StreamUtil.mapId(roleMenuList, SysRoleMenu::getMenuId);
List<SysMenu> menuList = sysMenuService.list(new QueryWrapper<SysMenu>().lambda()
.in(SysMenu::getId, menuIdList)
.eq(SysMenu::getStatus, CommonEnum.YES.getValue())
.orderByAsc(SysMenu::getSort)
.orderByAsc(SysMenu::getCreateDate)
);
userLoginVO.setRoleList(BeanDtoVoUtils.listVo(roleList, SysRoleDTOVO.class));
if (StringUtils.isNotBlank(userLoginVO.getFactoryId())) {
Set<String> menuIdSet = StreamUtil.mapToSet(getMenuListByFactoryId(), SysMenu::getId);
menuList = StreamUtil.filter(menuList, e -> menuIdSet.contains(e.getId()));
}
return menuList;
}
private void setFactoryList(SysUserLoginVO userLoginVO) {
}
@Override
public SysUserLoginVO getRoleAndMenuList() {
//TODO ywc 用join做
//TODO ywc 只返回必要字段 菜单和角色
SysUserVO sysUserVO = SysUserUtil.getUserVO();
SysUserLoginVO userLoginVO = BeanDtoVoUtils.convert(sysUserVO, SysUserLoginVO.class);
if (checkUserSuper(BeanDtoVoUtils.convert(userLoginVO, SysUser.class))) {
TokenUtil.tntLogin(TokenUtil.tntGetToken(), userLoginVO);
supperRoleMenuList(userLoginVO);
setRoleMenuToRedis(userLoginVO);
setFactoryList(userLoginVO);
setRoleMenuToRedis(userLoginVO);
return userLoginVO;
}
List<SysMenu> menuList = getMenuListByUserId(userLoginVO);//要不要在这里 是超级管理员时权限部公司树返回全部
fillMenuList(menuList, userLoginVO);
setRoleMenuToRedis(userLoginVO);
setFactoryList(userLoginVO);
setRoleMenuToRedis(userLoginVO);
return userLoginVO;
}
private void supperWechatMenuList(SysUserLoginVO userLoginVO) {
userLoginVO.setWechatMenuCodeList(sysDictionaryCategoryService.getCodeListByPrefix(SysDictCategoryConst.WECHAT_MENU_PREFIX));
}
@Override
public SysUserLoginVO getWechatMenuList() {
//TODO ywc 用join做
//TODO ywc 只返回必要字段 菜单和角色
SysUserVO sysUserVO = SysUserUtil.getUserVO();
SysUserLoginVO userLoginVO = BeanDtoVoUtils.convert(sysUserVO, SysUserLoginVO.class);
if (checkUserSuper(BeanDtoVoUtils.convert(userLoginVO, SysUser.class))) {
supperWechatMenuList(userLoginVO);
return userLoginVO;
}
List<SysRole> roleList = getRoleList(userLoginVO.getId());
List<String> roleIdList = StreamUtil.mapId(roleList, SysRole::getId);
List<SysRoleWechatMenu> roleWechatMenuList = sysRoleWechatMenuService.list(new QueryWrapper<SysRoleWechatMenu>().lambda()
.in(SysRoleWechatMenu::getRoleId, roleIdList));
userLoginVO.setWechatMenuCodeList(StreamUtil.map(roleWechatMenuList, SysRoleWechatMenu::getMenuId));
return userLoginVO;
}
@Override
public void logout() {
TokenUtil.tntLogout();
}
public List<String> userIdListByRoleId(SysUserQueryDTO dto) {
List<String> userIdList = new ArrayList<>(10);
userIdList.add(-1 + "");
if (StringUtils.isNotBlank(dto.getRoleId())) {
List<SysUserRole> userRoleList = sysUserRoleService.list(new QueryWrapper<SysUserRole>().lambda()
.eq(SysUserRole::getRoleId, dto.getRoleId()));
userIdList.addAll(StreamUtil.map(userRoleList, SysUserRole::getUserId));
}
if (StringUtils.isNotBlank(dto.getNotRoleId())) {
List<SysUserRole> userRoleList = sysUserRoleService.list(new QueryWrapper<SysUserRole>().lambda()
.eq(SysUserRole::getRoleId, dto.getNotRoleId()));
userIdList.addAll(StreamUtil.map(userRoleList, SysUserRole::getUserId));
}
return userIdList;
}
private void roleIdFilter(LambdaQueryWrapper<SysUser> lambdaQueryWrapper, SysUserQueryDTO dto) {
if (StringUtils.isBlank(dto.getRoleId()) && StringUtils.isBlank(dto.getNotRoleId())) {
return;
}
//TODO ywc join
List<String> userIdList = userIdListByRoleId(dto);
lambdaQueryWrapper.in(StringUtils.isNotBlank(dto.getRoleId()), SysUser::getId, userIdList)
.notIn(StringUtils.isNotBlank(dto.getNotRoleId()), SysUser::getId, userIdList);
}
private LambdaQueryWrapper<SysUser> defaultUserWrapper() {
LambdaQueryWrapper<SysUser> lambdaQueryWrapper = new QueryWrapper<SysUser>().lambda()
.eq(SysUser::getIsFactory, IsFactoryAccountEnum.NO.getValue())
.ne(SysUser::getId, IdConst.SUPER_ADMIN_ID);
return lambdaQueryWrapper;
}
private LambdaQueryWrapper<SysUser> listLambdaQueryWrapper(SysUserQueryDTO dto) {
List<String> deptIdList = SysUserUtil.deptIdList();
boolean flag = SysUserUtil.isSuper() && deptIdList.isEmpty();
if (dto.getUserIdList() != null) {
List<String> userIdList = new ArrayList<>(dto.getUserIdList());
userIdList.add(-1 + "");
dto.setUserIdList(userIdList);
}
LambdaQueryWrapper<SysUser> lambdaQueryWrapper = defaultUserWrapper()
//.eq(SysUser::getFactoryId, FactoryIdUtil.getFactoryId())
.in(dto.getUserIdList() != null, SysUser::getId, dto.getUserIdList())
//.eq(StringUtils.isNotBlank(dto.getDeptId()), SysUser::getDeptId, dto.getDeptId())
//.in(StringUtils.isNotBlank(dto.getDeptId()), SysUser::getDeptId, sysDeptService.selfAndChildrenIdList(dto.getDeptId()))
.apply(StringUtils.isNotBlank(dto.getDeptId()), "find_in_set('" + dto.getDeptId() + "',dept_id_path)")
.in(dto.getDeptIdList() != null, SysUser::getDeptId, dto.getDeptIdList())
.like(StringUtils.isNotBlank(dto.getAccount()), SysUser::getAccount, dto.getAccount())
.in(dto.getAccountList() != null, SysUser::getAccount, dto.getAccountList())
.like(StringUtils.isNotBlank(dto.getName()), SysUser::getName, dto.getName())
.in(dto.getNameList() != null, SysUser::getName, dto.getName())
.like(StringUtils.isNotBlank(dto.getMobile()), SysUser::getMobile, dto.getMobile())
.like(StringUtils.isNotBlank(dto.getMail()), SysUser::getMail, dto.getMail())
.eq(StringUtils.isNotBlank(dto.getStatus()), SysUser::getStatus, dto.getStatus())
.and(StringUtils.isNotBlank(dto.getKeyword()), qw -> {
qw.like(StringUtils.isNotBlank(dto.getKeyword()), SysUser::getName, dto.getKeyword())
.or()
//.like(StringUtils.isNotBlank(dto.getKeyword()), TntUser::getAccount, dto.getKeyword());
.like(StringUtils.isNotBlank(dto.getKeyword()), SysUser::getMobile, dto.getKeyword());
});
roleIdFilter(lambdaQueryWrapper, dto);
roleIdList(lambdaQueryWrapper, dto);
lambdaQueryWrapper.orderByDesc(SysUser::getCreateDate);
lambdaQueryWrapper.orderByDesc(SysUser::getId);
//TODO ywc 要不要改成全查出来 内存过滤
if (!flag) {
findInSet(lambdaQueryWrapper, deptIdList);
}
return lambdaQueryWrapper;
}
private void findInSet(LambdaQueryWrapper<SysUser> lambdaQueryWrapper, List<String> deptIdList) {
lambdaQueryWrapper.and(qw -> {
for (int i = 0; i < deptIdList.size(); i++) {
String e = deptIdList.get(i);
qw.apply("find_in_set('" + e + "',dept_id_path)");
if (i < deptIdList.size() - 1) {
qw.or();
}
}
});
}
@Override
public PageVO<SysPersonDTOVO> page(PageReqDTO<SysUserQueryDTO> page) {
SysUserQueryDTO dto = page.getData();
Page<SysUser> p = PageUtil.toMpPage(page);
Page<SysUser> pageList = page(p, listLambdaQueryWrapper(dto));
List<SysPersonDTOVO> tntUserDTOVOList = BeanDtoVoUtils.listVo(pageList.getRecords(), SysPersonDTOVO.class);
fillPerson(tntUserDTOVOList);
getRoleList(tntUserDTOVOList);
return PageUtil.toPageVO(tntUserDTOVOList, pageList);
}
private void fillPerson(List<SysPersonDTOVO> list) {
JoinUtil.join(list, sysDeptService, SysPersonDTOVO::getDeptId, SysDept::getId, (u, d) -> {
u.setDeptName(d.getName());
});
JoinUtil.joinSplit(list, sysDeptService, SysPersonDTOVO::getDeptIdPath, SysDept::getId,
(u, l) -> u.setDeptIdPathName(StreamUtil.join(l, SysDept::getName)));
}
@Override
public List<SysPersonDTOVO> list(SysUserQueryDTO dto) {
List<SysPersonDTOVO> tntUserList = BeanDtoVoUtils.listVo(list(listLambdaQueryWrapper(dto)), SysPersonDTOVO.class);
fillPerson(tntUserList);
getRoleList(tntUserList);
return tntUserList;
}
@Override
public void exportExcel(HttpServletResponse response, SysUserQueryDTO dto) {
List<SysPersonExcelDTOVO> list = BeanDtoVoUtils.listVo(list(dto), SysPersonExcelDTOVO.class);
ExcelUtil.export(response, "用户信息" + FileSuffixEnum.EXCEL.getSuffix(), SysPersonExcelDTOVO.class, list);
}
@Override
public List<SysPersonSimpleVO> listSimple(SysUserQueryDTO dto) {
List<SysPersonSimpleVO> tntUserList = BeanDtoVoUtils.listVo(list(listLambdaQueryWrapper(dto)), SysPersonSimpleVO.class);
return tntUserList;
}
private void roleIdList(LambdaQueryWrapper<SysUser> lambdaQueryWrapper, SysUserQueryDTO dto) {
if (dto.getRoleIdList() != null) {
dto.getRoleIdList().add(-1 + "");
List<String> idList = new ArrayList<>();
idList.add(-1 + "");
List<SysUserRole> userRoleList = sysUserRoleService.list(new QueryWrapper<SysUserRole>().lambda()
.in(SysUserRole::getRoleId, dto.getRoleIdList()));
idList.addAll(StreamUtil.map(userRoleList, SysUserRole::getUserId));
lambdaQueryWrapper.in(SysUser::getId, idList);
}
}
private void setRoleList(SysPersonDTOVO dto) {
sysUserRoleService.remove(new QueryWrapper<SysUserRole>().lambda()
.eq(SysUserRole::getUserId, dto.getId()));
// if (dto.getRoleList() != null) {
// List<TntUserRole> userRoleList = StreamUtil.map(dto.getRoleList(), e -> {
// TntUserRole tntUserRole = new TntUserRole();
// tntUserRole.setUserId(dto.getId());
// tntUserRole.setRoleId(e.getId());
//
// return tntUserRole;
// });
// tntUserRoleService.saveBatch(userRoleList);
//
// }
if (dto.getRoleIdList() != null) {
List<SysUserRole> userRoleList = StreamUtil.map(dto.getRoleIdList(), e -> {
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setUserId(dto.getId());
sysUserRole.setRoleId(e);
return sysUserRole;
});
sysUserRoleService.saveBatch(userRoleList);
}
}
@Override
public SysUser checkUserSuperException(String id) {
SysUser user = getById(id);
if (checkUserSuper(user)) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_SUPER_ADMIN_CANT_EDIT);
}
return user;
}
@Override
public List<SysUser> checkUserSuperException(List<String> idList) {
List<SysUser> userList = listByIds(idList);
userList.forEach(e -> {
if (checkUserSuper(e)) {
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_SUPER_ADMIN_CANT_EDIT);
}
});
return userList;
}
@Override
public boolean checkUserSuper(SysUser user) {
return IsFactoryAccountEnum.YES.getValue().equals(user.getIsFactory()) || IdConst.SUPER_ADMIN_ID.equals(user.getId());
}
private void fillDeptIdPath(SysUser user) {
if (StringUtils.isNotBlank(user.getDeptId())) {
SysDept dept = sysDeptService.getById(user.getDeptId());
user.setDeptIdPath(dept.getParentPath() + "," + dept.getId());
}
}
@Transactional
@Override
public void addPerson(SysPersonDTOVO dto) {
checkPerson(BeanDtoVoUtils.convert(dto, SysUserDTOVO.class));
SysUser user = BeanDtoVoUtils.convert(dto, SysUser.class);
user.setIsFactory(CommonEnum.NO.getValue());
//user.setFactoryId(FactoryIdUtil.getFactoryId());
// if (StringUtils.isBlank(user.getPassword())) {
// throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_USER_PASSWORD_NOT_BLANK);
// }
// setPassword(user);
setDefaultPassword(user);
user.setStatus(CommonEnum.YES.getValue());
fillDeptIdPath(user);
user.setSyncTime(LocalDateTime.now());
user.setSelfStatus(CommonEnum.YES.getValue());
save(user);
dto.setId(user.getId());
setRoleList(dto);
}
@Transactional
@Override
public void editPerson(SysPersonDTOVO dto) {
SysUser old = checkUserSuperException(dto.getId());
checkPerson(BeanDtoVoUtils.convert(dto, SysUserDTOVO.class));
SysUser user = BeanDtoVoUtils.convert(dto, SysUser.class);
user.setIsFactory(CommonEnum.NO.getValue());
//setDefaultPassword(user);
fillDeptIdPath(user);
if (CommonEnum.YES.getValue().equals(old.getSelfStatus())) {
user.setSyncTime(LocalDateTime.now());
}
updateById(user);
setRoleList(dto);
}
private void getRoleList(List<SysPersonDTOVO> userVOList) {
List<String> userIdList = StreamUtil.mapId(userVOList, SysPersonDTOVO::getId);
List<SysUserRole> userRoleList = sysUserRoleService.list(new QueryWrapper<SysUserRole>().lambda()
.in(SysUserRole::getUserId, userIdList)
.orderByAsc(SysUserRole::getId)
);
List<String> roleIdList = StreamUtil.mapId(userRoleList, SysUserRole::getRoleId);
List<SysRole> roleList = sysRoleService.list(new QueryWrapper<SysRole>().lambda()
.in(SysRole::getId, roleIdList));
Map<String, SysRole> roleMap = StreamUtil.toMap(roleList, SysRole::getId);
Map<String, List<SysUserRole>> userIdRoleIdListMap = StreamUtil.groupBy(userRoleList, SysUserRole::getUserId);
userVOList.forEach(e -> {
List<SysUserRole> urList = userIdRoleIdListMap.get(e.getId());
if (urList == null || urList.isEmpty()) {
return;
}
List<SysRole> rList = urList.stream().map(ee -> roleMap.get(ee.getRoleId())).filter(Objects::nonNull)
.sorted(Comparator.comparing(BaseEntity::getId)).collect(Collectors.toList());
e.setRoleList(BeanDtoVoUtils.listVo(rList, SysRoleDTOVO.class));
e.setRoleIdList(StreamUtil.map(rList, SysRole::getId));
});
}
@Override
public SysPersonDTOVO viewPerson(String id) {
SysUser user = getById(id);
SysPersonDTOVO userVO = BeanDtoVoUtils.convert(user, SysPersonDTOVO.class);
getRoleList(Arrays.asList(userVO));
fillPerson(Arrays.asList(userVO));
return userVO;
}
@Transactional
@Override
public void delPerson(String id) {
checkUserSuperException(id);
removeById(id);
sysUserRoleService.remove(new QueryWrapper<SysUserRole>().lambda()
.eq(SysUserRole::getUserId, id));
}
@Transactional
@Override
public void factoryInit(String factoryId) {
String roleId = sysRoleService.factoryInit(factoryId);
LambdaQueryWrapper<SysUser> lambdaQueryWrapper = defaultUserWrapper();
List<String> deptIdList = TenantIdUtil.deptIdList(factoryId);
findInSet(lambdaQueryWrapper, deptIdList);
List<SysUser> userList = list(lambdaQueryWrapper);
List<SysUserRole> userRoleList = StreamUtil.map(userList, e -> {
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setUserId(e.getId());
sysUserRole.setRoleId(roleId);
sysUserRole.setTenantId(factoryId);
return sysUserRole;
});
sysUserRoleService.saveBatch(userRoleList);
}
/*feign*/
@Override
public List<SysUserVO> listByIdList(List<String> idList) {
if (idList.isEmpty()) {
return new ArrayList<>(10);
}
List<SysUser> dbList = list(new QueryWrapper<SysUser>().lambda()
.in(SysUser::getId, idList));
Map<String, SysUser> userEntityMap = StreamUtil.toMap(dbList, SysUser::getId);
Set<SysUser> userSet = new LinkedHashSet<>(10);
idList.forEach(e -> {
SysUser o = userEntityMap.get(e);
if (o != null) {
userSet.add(o);
}
});
return BeanDtoVoUtils.listVo(new ArrayList<>(userSet), SysUserVO.class);
}
@TenantIdIgnore
@Override
public List<SysUserVO> listByRoleAndMenuCode(SysRoleAndMenuCodeDTO codeDTO) {
if (codeDTO.getMenuCodeList() != null) {
codeDTO.getMenuCodeList().add(-1 + "");
}
if (codeDTO.getRoleCodeList() != null) {
codeDTO.getRoleCodeList().add(-1 + "");
}
SysRoleDTOVO dto = new SysRoleDTOVO();
dto.setStatus(CommonEnum.YES.getValue());
dto.setMenuCodeList(codeDTO.getMenuCodeList());
dto.setCodeList(codeDTO.getRoleCodeList());
List<SysRoleDTOVO> roleList = sysRoleService.list(dto);
List<String> roleIdList = StreamUtil.map(roleList, SysRoleDTOVO::getId);
SysUserQueryDTO queryDTO = new SysUserQueryDTO();
queryDTO.setStatus(CommonEnum.YES.getValue());
queryDTO.setRoleIdList(roleIdList);
List<SysPersonDTOVO> personList = list(queryDTO);
return BeanDtoVoUtils.listVo(personList, SysUserVO.class);
}
@Override
public List<String> listIdByName(String name) {
SysUserQueryDTO dto = new SysUserQueryDTO();
dto.setName(name);
List<SysPersonSimpleVO> userList = listSimple(dto);
return StreamUtil.mapId(userList, SysPersonSimpleVO::getId);
}
/*feign*/
}
\ No newline at end of file
package com.makeit.module.admin.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.common.dto.BaseIdDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@ApiModel("用户简易 详情")
@Data
public class SysPersonSimpleVO extends BaseIdDTO {
@ApiModelProperty(value = "账户")
private String account;
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "性別 数据字典 1男 2女")
private String sex;
@ApiModelProperty(value = "手机号")
private String mobile;
@ApiModelProperty(value = "邮箱")
private String mail;
@ApiModelProperty(value = "状态 1启用 0禁用")
private String status;
@ApiModelProperty(value = "在职状态 1在职 0离职")
private String empStatus;
@ApiModelProperty(value = "部门id")
private String deptId;
@ApiModelProperty(value = "主管")
private String superior;
@ApiModelProperty(value = "AD账号")
private String empNo;
@ApiModelProperty(value = "是否系统账号 0否 1是")
private String systemStatus;
@ApiModelProperty(value = "是否公共账号 0否 1是")
private String publicStatus;
@ApiModelProperty(value = "是否主账号 0否 1是")
private String masterStatus;
@ApiModelProperty(value = "备注")
private String remark;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedAt;
}
package com.makeit.module.admin.vo.plat;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.makeit.module.admin.plat.BaseOrgDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel("租户端角色 列表 新增 编辑 详情")
@Data
public class PlatRoleDTOVO extends BaseOrgDTO implements Serializable {
@NotBlank(message = "名称不能为空")
@Size(max = 64, message = "名称最长为64字符")
@ApiModelProperty(value = "名称")
private String name;
@NotBlank(message = "编码不能为空")
@Size(max = 64, message = "编码最长为64字符")
@Pattern(regexp = "[a-zA-Z0-9]{0,64}", message = "编码只能为大小写英文字符和数字")
@ApiModelProperty(value = "编码")
private String code;
@NotBlank(message = "状态不能为空")
@Pattern(regexp = "0|1", message = "状态可选值为 0禁用 1启用")
@ApiModelProperty(value = "状态 0禁用 1启用")
private String status;
@Size(max = 512, message = "备注最长512字符")
@ApiModelProperty(value = "备注")
private String remark;
@ApiModelProperty(value = "是否管理员角色 0否 1是")
private String isAdmin;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间", required = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdAt;
@ApiModelProperty(value = "关键词 查询用")
private String keyword;
@TableField(exist = false)
@ApiModelProperty(value = "部门名称")
private String deptName;
@TableField(exist = false)
@ApiModelProperty(value = "角色名称集合")
private List<String> nameList;
}
package com.makeit.utils.user.tenant; package com.makeit.module.admin.vo.plat;
import com.makeit.module.admin.dto.SysButtonVO; import com.makeit.module.admin.plat.PlatButtonVO;
import com.makeit.module.admin.dto.SysFactoryDTOVO; import com.makeit.module.admin.saas.SaasMenuDTOVO;
import com.makeit.module.admin.dto.SysMenuDTOVO;
import com.makeit.module.admin.dto.SysRoleDTOVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -11,7 +9,7 @@ import java.io.Serializable; ...@@ -11,7 +9,7 @@ import java.io.Serializable;
import java.util.List; import java.util.List;
@Data @Data
public class SysUserLoginVO implements Serializable { public class PlatUserLoginVO implements Serializable {
@ApiModelProperty("id") @ApiModelProperty("id")
private String id; private String id;
...@@ -22,34 +20,37 @@ public class SysUserLoginVO implements Serializable { ...@@ -22,34 +20,37 @@ public class SysUserLoginVO implements Serializable {
@ApiModelProperty("姓名") @ApiModelProperty("姓名")
private String name; private String name;
@ApiModelProperty(value = "厂别id 给非管理员用") // @ApiModelProperty("用户名")
private String factoryId; // private String username;
@ApiModelProperty(value = "租户id 给非管理员用")
private String tenantId;
@ApiModelProperty(value = "是否厂别账户 0否 1是") @ApiModelProperty(value = "是否租户账户 0否 1是")
private String isFactory; private String isTenant;
@ApiModelProperty(value = "部门树id")
@ApiModelProperty(value = "部门id")
private String deptId; private String deptId;
@ApiModelProperty("token") @ApiModelProperty("token")
private String token; private String token;
//todo dto
// @ApiModelProperty("租户列表")
// private List<PlatTenant> tenantList;
@ApiModelProperty("角色列表") @ApiModelProperty("角色列表")
private List<SysRoleDTOVO> roleList; private List<PlatRoleDTOVO> roleList;
@ApiModelProperty("菜单树形列表") @ApiModelProperty("菜单树形列表")
private List<SysMenuDTOVO> menuList; private List<SaasMenuDTOVO> menuList;
// @ApiModelProperty("按钮列表")
// private List<TntMenuDTOVO> buttonList;
@ApiModelProperty("按钮列表") @ApiModelProperty("按钮列表")
private List<SysButtonVO> buttonList; private List<PlatButtonVO> buttonList;
@ApiModelProperty("企微菜单列表") @ApiModelProperty("企微菜单列表")
private List<String> wechatMenuCodeList; private List<String> wechatMenuCodeList;
@ApiModelProperty("工厂列表")
private List<SysFactoryDTOVO> factoryList;
} }
package com.makeit.utils; package com.makeit.utils;
import com.makeit.global.aspect.tenant.TenantIdUtil;
import com.makeit.module.admin.service.SysDeptService;
import com.makeit.utils.user.tenant.SysUserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
@Component @Component
public class DeptIdUtil { public class DeptIdUtil {
private static SysDeptService sysDeptService; // private static SysDeptService sysDeptService;
//
public static List<String> deptIdListFromHeader() { // public static List<String> deptIdListFromHeader() {
return TenantIdUtil.deptIdList(); // return TenantIdUtil.deptIdList();
} // }
//
public static List<String> deptIdListFromUser() { // public static List<String> deptIdListFromUser() {
return SysUserUtil.deptIdList(); // return SysUserUtil.deptIdList();
} // }
//
public static List<String> deptIdAndChildrenListFromHeader() { // public static List<String> deptIdAndChildrenListFromHeader() {
return sysDeptService.selfAndChildrenIdList(deptIdListFromHeader()); // return sysDeptService.selfAndChildrenIdList(deptIdListFromHeader());
} // }
//
public static List<String> deptIdAndChildrenListFromUser() { // public static List<String> deptIdAndChildrenListFromUser() {
return sysDeptService.selfAndChildrenIdList(deptIdListFromUser()); // return sysDeptService.selfAndChildrenIdList(deptIdListFromUser());
} // }
//
//
@Autowired // @Autowired
public void setSysDeptService(SysDeptService sysDeptService) { // public void setSysDeptService(SysDeptService sysDeptService) {
DeptIdUtil.sysDeptService = sysDeptService; // DeptIdUtil.sysDeptService = sysDeptService;
} // }
} }
package com.makeit.utils.contract.word;
import com.makeit.utils.ThreadUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Component
public class WordConverterUtil {
private static final Logger logger = LoggerFactory.getLogger(WordConverterUtil.class);
private static String libreOffice;
public static byte[] convert(byte[] bytes) {
return convert(new ByteArrayInputStream(bytes));
}
public static byte[] convert(InputStream inputStream) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
try {
File projectPath = PathUtil.userDirPath();
String tmpName = UUID.randomUUID().toString().replaceAll("-", "");
File wordFile = new File(projectPath, tmpName + ".docx");
File pdfFile = new File(projectPath, tmpName + ".pdf");
try (FileOutputStream fileOutputStream = new FileOutputStream(wordFile)) {
byte[] b = new byte[1024];
int i = inputStream.read(b);
while (i != -1) {
fileOutputStream.write(b, 0, i);
i = inputStream.read(b);
}
}
convert(wordFile.getAbsolutePath(), projectPath.getAbsolutePath());
byte[] bytes;
try (FileInputStream fileInputStream = new FileInputStream(pdfFile);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
byte[] b = new byte[1024];
int i = fileInputStream.read(b);
while (i != -1) {
byteArrayOutputStream.write(b, 0, i);
i = fileInputStream.read(b);
}
bytes = byteArrayOutputStream.toByteArray();
}
// wordFile.delete();
// pdfFile.delete();
ThreadUtil.run(wordFile::delete);
ThreadUtil.run(pdfFile::delete);
return bytes;
} catch (Exception ex) {
throw new RuntimeException(ex);
}finally {
stopWatch.stop();
logger.info("word转换成pdf 耗时:{} ms", stopWatch.getLastTaskTimeMillis());
}
}
public static void convert(String libreOffice, String inputFile, String outDir) {
long start = System.currentTimeMillis();
String command = "";
String osName = System.getProperty("os.name");
command = libreOffice + " --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile + " --outdir " + outDir;
exec(command);
long end = System.currentTimeMillis();
logger.info("用时:{} ms", end - start);
}
public static void convert(String inputFile, String outDir) {
//convert("C:\\Program Files\\LibreOffice\\program\\soffice",inputFile,outDir);
convert(libreOffice, inputFile, outDir);
}
private static boolean exec(String command) {
Process process;// Process可以控制该子进程的执行或获取该子进程的信息
try {
logger.info("exec cmd : {}", command);
process = Runtime.getRuntime().exec(command);// exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。
} catch (IOException e) {
logger.error(" exec {} error", command, e);
return false;
}
int exitStatus = 0;
try {
exitStatus = process.waitFor();// 等待子进程完成再往下执行,返回值是子线程执行完毕的返回值,返回0表示正常结束
// 第二种接受返回值的方法
int i = process.exitValue(); // 接收执行完毕的返回值
logger.info("i----" + i);
} catch (InterruptedException e) {
logger.error("InterruptedException exec {}", command, e);
return false;
}
if (exitStatus != 0) {
logger.error("exec cmd exitStatus {}", exitStatus);
} else {
logger.info("exec cmd exitStatus {}", exitStatus);
}
process.destroy(); // 销毁子进程
process = null;
return true;
}
@Value("${libreOffice}")
public void setLibreOffice(String libreOffice) {
WordConverterUtil.libreOffice = libreOffice;
}
}
package com.makeit.utils.sql.join;
import com.makeit.module.admin.service.SysUserService;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.user.tenant.SysUserVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.stream.Collectors;
@Component
public class SysUserJoinUtil {
private static SysUserService sysUserService;
public static List<String> userIdListByName(String name) {
return sysUserService.listIdByName(name);
}
public static SysUserVO getUserByUserId(String userId) {
return getUserByUserIdList(Arrays.asList(userId)).get(0);
}
public static List<SysUserVO> getUserByUserIdList(Collection<String> userIdList) {
List<String> userIdListNew = new ArrayList<>(userIdList);
userIdListNew.add(-1 + "");
return sysUserService.listByIdList(userIdListNew);
//return BeanDtoVoUtils.listVo(tntUserService.listByIds(userIdListNew), TntUserVO.class);
}
private static <T> JoinVo<SysUserVO> joinInternal(List<T> list, List<Function<T, String>> getNidList) {
Set<String> idList = new HashSet<>(16);
list.forEach(e -> {
getNidList.forEach(f -> {
idList.add(f.apply(e));
});
});
idList.add(-1 + "");
List<SysUserVO> mList = getUserByUserIdList(idList);
Map<String, SysUserVO> map = StreamUtil.toMap(mList, SysUserVO::getId);
return new JoinVo<>(mList, map);
}
public static <T> void join(List<T> list, List<Function<T, String>> getNidList, List<BiConsumer<T, SysUserVO>> consumerList) {
if (list.isEmpty()) {
return;
}
JoinVo<SysUserVO> vo = joinInternal(list, getNidList);
List<SysUserVO> mList = vo.getList();
Map<String, SysUserVO> map = vo.getMap();
list.forEach(e -> {
for (int i = 0; i < getNidList.size(); i++) {
SysUserVO m = map.get(getNidList.get(i).apply(e));
if (m != null) {
consumerList.get(i).accept(e, m);
}
}
});
}
public static <T> void join(List<T> list, Function<T, String> getNid, BiConsumer<T, SysUserVO> consumer) {
join(list, Arrays.asList(getNid), Arrays.asList(consumer));
}
public static <T> JoinVo<SysUserVO> join(List<T> list, Function<T, String> getNid) {
return join(list, Arrays.asList(getNid));
}
public static <T> JoinVo<SysUserVO> join(List<T> list, List<Function<T, String>> getNidList) {
if (list.isEmpty()) {
return new JoinVo<>(new ArrayList<>(10), new HashMap<>(16));
}
return joinInternal(list, getNidList);
}
public static <T> void joinSplit(List<T> list, Function<T, String> getNid, BiConsumer<T, List<SysUserVO>> consumer) {
if (list.isEmpty()) {
return;
}
Set<String> idList = list.stream().map(getNid).filter(StringUtils::isNotBlank).map(e -> new ArrayList<>(Arrays.asList(e.split(","))))
.flatMap(Collection::stream).filter(StringUtils::isNotBlank).collect(Collectors.toSet());
if (idList.isEmpty()) {
return;
}
List<SysUserVO> mList = getUserByUserIdList(idList);
Map<String, SysUserVO> map = StreamUtil.toMap(mList, SysUserVO::getId);
list.forEach(e -> {
String ids = getNid.apply(e);
if (StringUtils.isBlank(ids)) {
return;
}
List<SysUserVO> list1 = Arrays.stream(ids.split(",")).map(ee -> {
if (StringUtils.isNotBlank(ee)) {
SysUserVO m = map.get(ee);
return m;
}
return null;
}).filter(Objects::nonNull).collect(Collectors.toList());
consumer.accept(e, list1);
});
}
@Autowired
public void setTntUserService(SysUserService sysUserService) {
SysUserJoinUtil.sysUserService = sysUserService;
}
}
package com.makeit.utils.user; package com.makeit.utils.user;
import com.makeit.config.global.thread.BizThreadLocal; import com.makeit.config.global.thread.BizThreadLocal;
import com.makeit.utils.user.tenant.SysUserLoginVO; import com.makeit.module.admin.plat.PlatUserRoleMenuRedisVO;
import com.makeit.utils.user.tenant.SysUserRoleMenuRedisVO; import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.utils.user.saas.SaasUserLoginVO;
import com.makeit.utils.user.wechat.WechatUserInfo; import com.makeit.utils.user.wechat.WechatUserInfo;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -16,7 +18,8 @@ public class ThreadLocalUserUtil { ...@@ -16,7 +18,8 @@ public class ThreadLocalUserUtil {
private static final ThreadLocal<SaasUserLoginVO> THREAD_LOCAL_TNT_USER = new BizThreadLocal<>(); private static final ThreadLocal<SaasUserLoginVO> THREAD_LOCAL_TNT_USER = new BizThreadLocal<>();
private static final ThreadLocal<WechatUserInfo> THREAD_LOCAL_WECHAT_USER = new BizThreadLocal<>(); private static final ThreadLocal<WechatUserInfo> THREAD_LOCAL_WECHAT_USER = new BizThreadLocal<>();
private static final ThreadLocal<SysUserRoleMenuRedisVO> THREAD_LOCAL_TNT_USER_ROLE_MENU = new BizThreadLocal<>(); private static final ThreadLocal<PlatUserRoleMenuRedisVO> THREAD_LOCAL_TNT_USER_ROLE_MENU = new BizThreadLocal<>();
private static final ThreadLocal<SaasUserRoleMenuRedisVO> THREAD_LOCAL_SAAS_USER_ROLE_MENU = new BizThreadLocal<>();
private static final ThreadLocal<WechatUserInfo> THREAD_LOCAL_WECHAT_USER_ROLE_MENU = new BizThreadLocal<>(); private static final ThreadLocal<WechatUserInfo> THREAD_LOCAL_WECHAT_USER_ROLE_MENU = new BizThreadLocal<>();
...@@ -45,7 +48,7 @@ public class ThreadLocalUserUtil { ...@@ -45,7 +48,7 @@ public class ThreadLocalUserUtil {
} }
public static SysUserLoginVO getTntUser() { public static PlatUserLoginVO getTntUser() {
// SysUserLoginVO sysUserLoginVO = THREAD_LOCAL_TNT_USER.get(); // SysUserLoginVO sysUserLoginVO = THREAD_LOCAL_TNT_USER.get();
...@@ -63,7 +66,7 @@ public class ThreadLocalUserUtil { ...@@ -63,7 +66,7 @@ public class ThreadLocalUserUtil {
//TODO ywc 上面好像有threadlocal 泄露问题 //TODO ywc 上面好像有threadlocal 泄露问题
SysUserLoginVO sysUserLoginVO = TokenUtil.getTntUserDetail(); PlatUserLoginVO sysUserLoginVO = TokenUtil.getTntUserDetail();
return sysUserLoginVO; return sysUserLoginVO;
} }
...@@ -82,8 +85,8 @@ public class ThreadLocalUserUtil { ...@@ -82,8 +85,8 @@ public class ThreadLocalUserUtil {
return wechatUserInfo; return wechatUserInfo;
} }
public static SysUserRoleMenuRedisVO getTntUserRoleAndMenu() { public static PlatUserRoleMenuRedisVO getTntUserRoleAndMenu() {
SysUserRoleMenuRedisVO sysUserRoleMenuRedisVO = THREAD_LOCAL_TNT_USER_ROLE_MENU.get(); PlatUserRoleMenuRedisVO sysUserRoleMenuRedisVO = THREAD_LOCAL_TNT_USER_ROLE_MENU.get();
if (sysUserRoleMenuRedisVO == null) { if (sysUserRoleMenuRedisVO == null) {
sysUserRoleMenuRedisVO = TokenUtil.getTntUserRoleMenu(); sysUserRoleMenuRedisVO = TokenUtil.getTntUserRoleMenu();
THREAD_LOCAL_TNT_USER_ROLE_MENU.set(sysUserRoleMenuRedisVO); THREAD_LOCAL_TNT_USER_ROLE_MENU.set(sysUserRoleMenuRedisVO);
......
...@@ -5,12 +5,13 @@ import com.makeit.enums.CodeMessageEnum; ...@@ -5,12 +5,13 @@ import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.HeaderConst; import com.makeit.enums.HeaderConst;
import com.makeit.enums.redis.RedisConst; import com.makeit.enums.redis.RedisConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.module.admin.plat.PlatUserRoleMenuRedisVO;
import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO; import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.utils.redis.RedisTemplateUtil; import com.makeit.utils.redis.RedisTemplateUtil;
import com.makeit.utils.redis.RedisUtil; import com.makeit.utils.redis.RedisUtil;
import com.makeit.utils.request.RequestUtil; import com.makeit.utils.request.RequestUtil;
import com.makeit.utils.user.tenant.SysUserLoginVO; import com.makeit.utils.user.saas.SaasUserLoginVO;
import com.makeit.utils.user.tenant.SysUserRoleMenuRedisVO;
import com.makeit.utils.user.wechat.WechatUserInfo; import com.makeit.utils.user.wechat.WechatUserInfo;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -74,18 +75,18 @@ public class TokenUtil { ...@@ -74,18 +75,18 @@ public class TokenUtil {
return null; return null;
} }
public static SysUserRoleMenuRedisVO getTntUserRoleMenu(String token) { public static PlatUserRoleMenuRedisVO getTntUserRoleMenu(String token) {
if (StringUtils.isNotBlank(token)) { if (StringUtils.isNotBlank(token)) {
SysUserRoleMenuRedisVO userLoginVO = RedisTemplateUtil.get(RedisConst.TOKEN_ROLE_MENU_PREFIX + token, SysUserRoleMenuRedisVO.class); PlatUserRoleMenuRedisVO userLoginVO = RedisTemplateUtil.get(RedisConst.TOKEN_ROLE_MENU_PREFIX + token, PlatUserRoleMenuRedisVO.class);
return userLoginVO; return userLoginVO;
} }
return null; return null;
} }
public static SysUserRoleMenuRedisVO getTntUserRoleMenu() { public static PlatUserRoleMenuRedisVO getTntUserRoleMenu() {
String token = RequestUtil.getHeader(HeaderConst.TOKEN); String token = RequestUtil.getHeader(HeaderConst.TOKEN);
if (StringUtils.isNotBlank(token)) { if (StringUtils.isNotBlank(token)) {
SysUserRoleMenuRedisVO userLoginVO = RedisTemplateUtil.get(RedisConst.TOKEN_ROLE_MENU_PREFIX + token, SysUserRoleMenuRedisVO.class); PlatUserRoleMenuRedisVO userLoginVO = RedisTemplateUtil.get(RedisConst.TOKEN_ROLE_MENU_PREFIX + token, PlatUserRoleMenuRedisVO.class);
return userLoginVO; return userLoginVO;
} }
return null; return null;
...@@ -199,10 +200,10 @@ public class TokenUtil { ...@@ -199,10 +200,10 @@ public class TokenUtil {
} }
public static SysUserLoginVO getTntUserDetail() { public static PlatUserLoginVO getTntUserDetail() {
String token = RequestUtil.getHeader(HeaderConst.TOKEN); String token = RequestUtil.getHeader(HeaderConst.TOKEN);
if (StringUtils.isNotBlank(token)) { if (StringUtils.isNotBlank(token)) {
SysUserLoginVO userLoginVO = RedisTemplateUtil.get(RedisConst.TOKEN_PREFIX + token, SysUserLoginVO.class); PlatUserLoginVO userLoginVO = RedisTemplateUtil.get(RedisConst.TOKEN_PREFIX + token, PlatUserLoginVO.class);
return userLoginVO; return userLoginVO;
} }
return null; return null;
......
package com.makeit.utils.user.common; package com.makeit.utils.user.common;
import com.makeit.enums.HeaderConst; import com.makeit.enums.HeaderConst;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.utils.user.saas.SaasUserLoginVO;
import com.makeit.utils.user.ThreadLocalUserUtil; import com.makeit.utils.user.ThreadLocalUserUtil;
import com.makeit.utils.user.TokenUtil; import com.makeit.utils.user.TokenUtil;
import com.makeit.utils.user.SaasUserLoginVO;
import com.makeit.utils.user.tenant.SysUserLoginVO;
import com.makeit.utils.user.wechat.WechatUserInfo; import com.makeit.utils.user.wechat.WechatUserInfo;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
...@@ -14,7 +14,7 @@ public class CommonUserUtil { ...@@ -14,7 +14,7 @@ public class CommonUserUtil {
public static CommonUserVO getUser() { public static CommonUserVO getUser() {
SysUserLoginVO sysUserLoginVO = ThreadLocalUserUtil.getTntUser(); PlatUserLoginVO sysUserLoginVO = ThreadLocalUserUtil.getTntUser();
if (sysUserLoginVO != null) { if (sysUserLoginVO != null) {
return new CommonUserVO(sysUserLoginVO.getId(), sysUserLoginVO.getName()); return new CommonUserVO(sysUserLoginVO.getId(), sysUserLoginVO.getName());
} }
......
package com.makeit.utils.user.plat;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.biz.auth.IsFactoryAccountEnum;
import com.makeit.enums.id.IdConst;
import com.makeit.exception.BusinessException;
import com.makeit.module.admin.plat.PlatUserRoleMenuRedisVO;
import com.makeit.module.admin.vo.plat.PlatUserLoginVO;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.user.TokenUtil;
import com.makeit.utils.user.wechat.WechatUserInfo;
import com.makeit.utils.user.wechat.WechatUserUtil;
public class PlatUserUtil {
private static final ThreadLocal<PlatUserVO> THREAD_LOCAL_USER = new ThreadLocal<>();
public static boolean isSuper() {
PlatUserVO userVO = PlatUserUtil.getUserVO();
return IsFactoryAccountEnum.YES.getValue().equals(userVO.getTenantId())
|| IdConst.SUPER_ADMIN_ID.equals(userVO.getId());
}
public static void execute(PlatUserVO userVO, Runnable runnable) {
THREAD_LOCAL_USER.set(userVO);
try {
runnable.run();
} finally {
THREAD_LOCAL_USER.remove();
}
}
public static PlatUserVO getUserVO() {
PlatUserVO userVO = THREAD_LOCAL_USER.get();
if (userVO != null) {
return userVO;
}
//或者这里用策略模式
WechatUserInfo wechatUserInfo = WechatUserUtil.getUserVOCanNull();
if (wechatUserInfo != null) {
return BeanDtoVoUtils.convert(wechatUserInfo, PlatUserVO.class);
}
PlatUserLoginVO tntUserLoginVO = TokenUtil.getTntUserDetail();
if (tntUserLoginVO != null) {
return BeanDtoVoUtils.convert(tntUserLoginVO, PlatUserVO.class);
}
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_TOKEN_BLANK_OR_NOT_EXIST);
}
public static PlatUserVO getUserVOCanNull() {
//或者这里用策略模式
WechatUserInfo wechatUserInfo = WechatUserUtil.getUserVOCanNull();
if (wechatUserInfo != null) {
return BeanDtoVoUtils.convert(wechatUserInfo, PlatUserVO.class);
}
PlatUserLoginVO tntUserLoginVO = TokenUtil.getTntUserDetail();
if (tntUserLoginVO != null) {
return BeanDtoVoUtils.convert(tntUserLoginVO, PlatUserVO.class);
}
return null;
}
public static PlatUserVO getSystemUser() {
PlatUserVO platUserVO = new PlatUserVO();
platUserVO.setId("1");
platUserVO.setName("system");
//tntUserVO.setTenantId();
platUserVO.setIsTenant(CommonEnum.NO.getValue());
return platUserVO;
}
public static PlatUserVO getUserVOCanSystem() {//TODO 这里可能有问题
try {
PlatUserVO platUserVO = getUserVOCanNull();
if (platUserVO == null) {
return getSystemUser();
}
return platUserVO;
} catch (RuntimeException e) {
return getSystemUser();
}
}
public static PlatUserLoginVO getUserVODetail() {
TokenUtil.tntGetToken();
return TokenUtil.getTntUserDetail();
}
public static PlatUserRoleMenuRedisVO getTntUserRoleMenu() {
return TokenUtil.getTntUserRoleMenu();
}
public static String getUserId() {
return getUserVO().getId();
}
}
package com.makeit.utils.user; package com.makeit.utils.user.plat;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
@Data @Data
public class TntUserVO implements Serializable { public class PlatUserVO implements Serializable {
private String id; private String id;
private String name; private String name;
// private String username; // private String username;
...@@ -16,16 +16,16 @@ public class TntUserVO implements Serializable { ...@@ -16,16 +16,16 @@ public class TntUserVO implements Serializable {
private String deptId; private String deptId;
public TntUserVO() { public PlatUserVO() {
} }
public TntUserVO(String id, String name, String tenantId) { public PlatUserVO(String id, String name, String tenantId) {
this.id = id; this.id = id;
this.tenantId = tenantId; this.tenantId = tenantId;
this.name = name; this.name = name;
} }
public TntUserVO(String id, String name) { public PlatUserVO(String id, String name) {
this.id = id; this.id = id;
this.name = name; this.name = name;
} }
......
package com.makeit.utils.user; package com.makeit.utils.user.saas;
import com.makeit.module.admin.saas.PlatMenuDTOVO; import com.makeit.module.admin.saas.SaasMenuDTOVO;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.saas.SaasRoleDTOVO;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -31,9 +31,9 @@ public class SaasUserLoginVO implements Serializable { ...@@ -31,9 +31,9 @@ public class SaasUserLoginVO implements Serializable {
private List<SaasRoleDTOVO> roleList; private List<SaasRoleDTOVO> roleList;
@ApiModelProperty("菜单树形列表") @ApiModelProperty("菜单树形列表")
private List<PlatMenuDTOVO> menuList; private List<SaasMenuDTOVO> menuList;
@ApiModelProperty("按钮列表") @ApiModelProperty("按钮列表")
private List<PlatMenuDTOVO> buttonList; private List<SaasMenuDTOVO> buttonList;
} }
package com.makeit.utils.user; package com.makeit.utils.user.saas;
import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO; import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.user.TokenUtil;
public class PlatUserUtil { public class SaasUserUtil {
public static PlatUserVO getUserVO() { public static SaasUserVO getUserVO() {
TokenUtil.platGetToken(); TokenUtil.platGetToken();
return BeanDtoVoUtils.convert(TokenUtil.getPlatUserDetail(), PlatUserVO.class); return BeanDtoVoUtils.convert(TokenUtil.getPlatUserDetail(), SaasUserVO.class);
} }
public static PlatUserVO getUserVOCanNull() { public static SaasUserVO getUserVOCanNull() {
return BeanDtoVoUtils.convert(TokenUtil.getPlatUserDetail(), PlatUserVO.class); return BeanDtoVoUtils.convert(TokenUtil.getPlatUserDetail(), SaasUserVO.class);
} }
public static SaasUserLoginVO getUserVODetail() { public static SaasUserLoginVO getUserVODetail() {
......
package com.makeit.utils.user; package com.makeit.utils.user.saas;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
@Data @Data
public class PlatUserVO implements Serializable { public class SaasUserVO implements Serializable {
private String id; private String id;
private String name; private String name;
} }
package com.makeit.utils.user.tenant;
import com.makeit.config.global.thread.BizThreadLocal;
import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum;
import com.makeit.enums.biz.auth.IsFactoryAccountEnum;
import com.makeit.enums.id.IdConst;
import com.makeit.enums.redis.RedisConst;
import com.makeit.exception.BusinessException;
import com.makeit.module.admin.dto.SysFactoryDTOVO;
import com.makeit.module.admin.entity.SysDept;
import com.makeit.module.admin.service.SysDeptService;
import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.old.StringUtils;
import com.makeit.utils.user.ThreadLocalUserUtil;
import com.makeit.utils.user.TokenUtil;
import com.makeit.utils.user.wechat.WechatUserInfo;
import com.makeit.utils.user.wechat.WechatUserUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Component
public class SysUserUtil {
private static SysDeptService sysDeptService;
private static final BizThreadLocal<SysUserVO> THREAD_LOCAL_USER = new BizThreadLocal<>();
public static void execute(SysUserVO userVO, Runnable runnable) {
THREAD_LOCAL_USER.execute(userVO, runnable);
}
public static boolean isSuper() {
SysUserVO userVO = SysUserUtil.getUserVO();
return IsFactoryAccountEnum.YES.getValue().equals(userVO.getIsFactory())
|| IdConst.SUPER_ADMIN_ID.equals(userVO.getId());
}
public static List<String> factoryIdList() {
return StreamUtil.map(Optional.ofNullable(TokenUtil.getTntUserRoleMenu().getFactoryList()).orElse(new ArrayList<>()), SysFactoryDTOVO::getId);
}
public static List<String> deptIdList() {
List<String> deptIdList = Optional.ofNullable(TokenUtil.getTntUserRoleMenu().getFactoryList()).orElse(new ArrayList<>()).stream().flatMap(e -> Arrays.stream(e.getDeptIdList().split(","))).filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
deptIdList.add(-1 + "");
return StreamUtil.map(sysDeptService.listByIds(deptIdList), SysDept::getId);
}
public static SysUserVO getUserVO() {
SysUserVO userVO = THREAD_LOCAL_USER.get();
if (userVO != null) {
return userVO;
}
//或者这里用策略模式
WechatUserInfo wechatUserInfo = WechatUserUtil.getUserVOCanNull();
if (wechatUserInfo != null) {
return BeanDtoVoUtils.convert(wechatUserInfo, SysUserVO.class);
}
SysUserLoginVO sysUserLoginVO = ThreadLocalUserUtil.getTntUser();
if (sysUserLoginVO != null) {
return BeanDtoVoUtils.convert(sysUserLoginVO, SysUserVO.class);
}
throw new BusinessException(CodeMessageEnum.SYSTEM_ERROR_TOKEN_BLANK_OR_NOT_EXIST);
}
public static SysUserVO getUserVOCanNull() {
//或者这里用策略模式
WechatUserInfo wechatUserInfo = WechatUserUtil.getUserVOCanNull();
if (wechatUserInfo != null) {
return BeanDtoVoUtils.convert(wechatUserInfo, SysUserVO.class);
}
SysUserLoginVO sysUserLoginVO = ThreadLocalUserUtil.getTntUser();
if (sysUserLoginVO != null) {
return BeanDtoVoUtils.convert(sysUserLoginVO, SysUserVO.class);
}
return null;
}
public static String getUserIdCanNull() {
SysUserVO userVO = getUserVOCanNull();
if (userVO == null) {
return null;
}
return userVO.getId();
}
public static SysUserVO getSystemUser() {
SysUserVO sysUserVO = new SysUserVO();
sysUserVO.setId("1");
sysUserVO.setName("系统");
sysUserVO.setNameEng("System");
//tntUserVO.setTenantId();
sysUserVO.setIsFactory(CommonEnum.NO.getValue());
return sysUserVO;
}
public static SysUserVO getUserVOCanSystem() {//TODO ywc 这里可能有问题
try {
SysUserVO sysUserVO = getUserVOCanNull();
if (sysUserVO == null) {
return getSystemUser();
}
return sysUserVO;
} catch (RuntimeException e) {
return getSystemUser();
}
}
public static SysUserLoginVO getUserVODetail() {
TokenUtil.getToken(RedisConst.TOKEN_PREFIX, ThreadLocalUserUtil.getTntToken());
return ThreadLocalUserUtil.getTntUser();
}
public static SysUserRoleMenuRedisVO getTntUserRoleMenu() {
return ThreadLocalUserUtil.getTntUserRoleAndMenu();
}
public static String getUserId() {
return getUserVO().getId();
}
@Autowired
public void setSysDeptService(SysDeptService sysDeptService) {
SysUserUtil.sysDeptService = sysDeptService;
}
}
package com.makeit.utils.user.tenant;
import com.makeit.common.dto.BaseTenantDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("厂别用户vo")
@Data
public class SysUserVO extends BaseTenantDTO {
@ApiModelProperty(value = "姓名")
private String name;
@ApiModelProperty(value = "姓名-目前给系统用户用")
private String nameEng;
@ApiModelProperty("账号")
private String account;
@ApiModelProperty("是否厂别超级管理员 0否 1是")
private String isFactory;
@ApiModelProperty(value = "部门id")
private String deptId;
}
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<dependency> <dependency>
<groupId>com.makeit</groupId> <groupId>com.makeit</groupId>
<artifactId>server-common</artifactId> <artifactId>server-common</artifactId>
<version>1.0.1</version> <version>1.0.0</version>
</dependency> </dependency>
<dependency> <dependency>
...@@ -54,5 +54,9 @@ ...@@ -54,5 +54,9 @@
<artifactId>mybatis-plus-generator</artifactId> <artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version> <version>3.4.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
...@@ -32,7 +32,7 @@ public class PlatElderAddDTO extends BaseTenantDTO { ...@@ -32,7 +32,7 @@ public class PlatElderAddDTO extends BaseTenantDTO {
@ApiModelProperty(value = "年龄") @ApiModelProperty(value = "年龄")
private Integer age; private Integer age;
@DictEnum(em = PlatElderEnum.SexEnum.class,message = "性别可选值为{m}") @DictEnum(em = PlatElderEnum.SexEnum.class, message = "性别可选值为{m}")
@ApiModelProperty(value = "性别 数据字典 1 男 2 女") @ApiModelProperty(value = "性别 数据字典 1 男 2 女")
private String sex; private String sex;
......
...@@ -29,7 +29,7 @@ public class PlatElderDTOVO extends BaseTenantDTO { ...@@ -29,7 +29,7 @@ public class PlatElderDTOVO extends BaseTenantDTO {
@ApiModelProperty(value = "年龄") @ApiModelProperty(value = "年龄")
private Integer age; private Integer age;
@DictEnum(em = PlatElderEnum.SexEnum.class,message = "性别可选值为{m}") @DictEnum(em = PlatElderEnum.SexEnum.class, message = "性别可选值为{m}")
@ApiModelProperty(value = "性别 数据字典 1 男 2 女") @ApiModelProperty(value = "性别 数据字典 1 男 2 女")
private String sex; private String sex;
......
...@@ -16,11 +16,9 @@ import lombok.EqualsAndHashCode; ...@@ -16,11 +16,9 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value="ElderHealthInfo对象", description="长者健康状态") @ApiModel(value = "ElderHealthInfo对象", description = "长者健康状态")
public class PlatElderHealthInfoDTOVO extends BaseTenantDTO { public class PlatElderHealthInfoDTOVO extends BaseTenantDTO {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "长者id") @ApiModelProperty(value = "长者id")
private String elderId; private String elderId;
......
...@@ -16,9 +16,10 @@ import lombok.EqualsAndHashCode; ...@@ -16,9 +16,10 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value="ElderSocialRelation对象", description="长者社会关系") @ApiModel(value = "ElderSocialRelation对象", description = "长者社会关系")
public class PlatElderSocialRelationDTOVO extends BaseTenantDTO { public class PlatElderSocialRelationDTOVO extends BaseTenantDTO {
@ApiModelProperty(value = "长者id") @ApiModelProperty(value = "长者id")
private String elderId; private String elderId;
......
package com.makeit.entity.platform.auth;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import lombok.Data;
/**
* 租户端部门
* @TableName plat_org
*/
@TableName(value ="plat_org")
@Data
public class PlatOrg extends BaseBusEntity {
/**
* 租户id
*/
private String tenantId;
/**
* 父级id
*/
private String parentId;
/**
* 组织名称
*/
private String name;
/**
* 排序
*/
private Integer sort;
/**
* 状态 0禁用 1启用
*/
private String status;
/**
* 类型 1-居家 2-机构
*/
private String type;
/**
* 管辖区域id
*/
private String region;
}
\ No newline at end of file
package com.makeit.entity.platform.auth;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import lombok.Data;
/**
* 租户端角色
* @TableName plat_role
*/
@TableName(value ="plat_role")
@Data
public class PlatRole extends BaseBusEntity {
/**
* 租户id
*/
private String tenantId;
/**
* 名称
*/
private String roleName;
/**
* 备注
*/
private String remark;
/**
* 数据权限 子公司id 上级可看到下级
*/
private String dataScope;
}
\ No newline at end of file
package com.makeit.entity.platform.auth;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import lombok.Data;
/**
* 租户端角色菜单关联表
* @TableName plat_role_menu
*/
@TableName(value ="plat_role_menu")
@Data
public class PlatRoleMenu extends BaseBusEntity {
/**
* id
*/
@TableId
private String id;
/**
* 租户id
*/
private String tenantId;
/**
* 角色id
*/
private String roleId;
/**
* 菜单id
*/
private String menuId;
}
\ No newline at end of file
package com.makeit.entity.platform.auth;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import lombok.Data;
/**
* 租户端角色部门关联表
* @TableName plat_role_org
*/
@TableName(value ="plat_role_org")
@Data
public class PlatRoleOrg extends BaseBusEntity {
/**
* 租户id
*/
private String tenantId;
/**
* 角色id
*/
private String roleId;
/**
* 部门树id
*/
private String orgId;
}
\ No newline at end of file
package com.makeit.entity.platform.auth;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import lombok.Data;
/**
* 租户账号管理
* @TableName plat_user
*/
@TableName(value ="plat_user")
@Data
public class PlatUser extends BaseBusEntity {
/**
* 租户id
*/
private String tenantId;
/**
* 用户名
*/
private String username;
/**
* 账户
*/
private String account;
/**
* 密码
*/
private String password;
/**
* 手机号
*/
private String mobile;
/**
* 邮箱
*/
private String email;
/**
* 状态 0禁用 1启用
*/
private String status;
/**
* 头像
*/
private String avatar;
/**
* 是否租户账户/租户管理员 0否 1是
*/
private String isTenant;
/**
* 部门树id
*/
private String orgId;
/**
* 部门树冗余id
*/
private String orgPath;
/**
* 备注
*/
private String remark;
}
\ No newline at end of file
package com.makeit.entity.platform.auth;
import com.baomidou.mybatisplus.annotation.TableName;
import com.makeit.common.entity.BaseBusEntity;
import lombok.Data;
/**
* 租户端用户角色关联表
* @TableName plat_user_role
*/
@TableName(value ="plat_user_role")
@Data
public class PlatUserRole extends BaseBusEntity {
/**
* 租户id
*/
private String tenantId;
/**
* 用户id
*/
private String userId;
/**
* 角色id
*/
private String roleId;
}
\ No newline at end of file
...@@ -8,9 +8,9 @@ import lombok.Data; ...@@ -8,9 +8,9 @@ import lombok.Data;
* 租户端资源管理 * 租户端资源管理
* @TableName tnt_auth_menu * @TableName tnt_auth_menu
*/ */
@TableName(value ="tnt_auth_menu") @TableName(value ="plat_menu")
@Data @Data
public class TntAuthMenu extends BaseEntity { public class PlatMenu extends BaseEntity {
/** /**
* 父级id * 父级id
......
...@@ -10,9 +10,9 @@ import java.util.Date; ...@@ -10,9 +10,9 @@ import java.util.Date;
* 租户管理 * 租户管理
* @TableName tnt_tenant * @TableName tnt_tenant
*/ */
@TableName(value ="tnt_tenant") @TableName(value ="plat_tenant")
@Data @Data
public class TntTenant extends BaseEntity { public class PlatTenant extends BaseEntity {
/** /**
* 名称 * 名称
......
package com.makeit.mapper.platform.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.auth.PlatOrg;
/**
* @author lixl
* @description 针对表【plat_org(租户端部门)】的数据库操作Mapper
* @createDate 2023-08-30 20:10:25
* @Entity generator.entity.PlatOrg
*/
public interface PlatOrgMapper extends BaseMapper<PlatOrg> {
}
package com.makeit.mapper.platform.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.auth.PlatRole;
/**
* @author lixl
* @description 针对表【plat_role(租户端角色)】的数据库操作Mapper
* @createDate 2023-08-30 20:10:25
* @Entity generator.entity.PlatRole
*/
public interface PlatRoleMapper extends BaseMapper<PlatRole> {
}
package com.makeit.mapper.platform.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.auth.PlatRoleMenu;
/**
* @author lixl
* @description 针对表【plat_role_menu(租户端角色菜单关联表)】的数据库操作Mapper
* @createDate 2023-08-30 20:10:25
* @Entity generator.entity.PlatRoleMenu
*/
public interface PlatRoleMenuMapper extends BaseMapper<PlatRoleMenu> {
}
package com.makeit.mapper.platform.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.auth.PlatRoleOrg;
/**
* @author lixl
* @description 针对表【plat_role_org(租户端角色部门关联表)】的数据库操作Mapper
* @createDate 2023-08-30 20:10:25
* @Entity generator.entity.PlatRoleOrg
*/
public interface PlatRoleOrgMapper extends BaseMapper<PlatRoleOrg> {
}
package com.makeit.mapper.platform.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.auth.PlatUser;
/**
* @author lixl
* @description 针对表【plat_user(租户账号管理)】的数据库操作Mapper
* @createDate 2023-08-30 20:10:25
* @Entity generator.entity.PlatUser
*/
public interface PlatUserMapper extends BaseMapper<PlatUser> {
}
package com.makeit.mapper.platform.auth;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.platform.auth.PlatUserRole;
/**
* @author lixl
* @description 针对表【plat_user_role(租户端用户角色关联表)】的数据库操作Mapper
* @createDate 2023-08-30 20:10:25
* @Entity generator.entity.PlatUserRole
*/
public interface PlatUserRoleMapper extends BaseMapper<PlatUserRole> {
}
package com.makeit.mapper.saas; package com.makeit.mapper.saas;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.saas.TntAuthMenu; import com.makeit.entity.saas.PlatMenu;
/** /**
* @author lixl * @author lixl
...@@ -9,7 +9,7 @@ import com.makeit.entity.saas.TntAuthMenu; ...@@ -9,7 +9,7 @@ import com.makeit.entity.saas.TntAuthMenu;
* @createDate 2023-08-29 14:29:10 * @createDate 2023-08-29 14:29:10
* @Entity com.makeit.entity.saas.TntAuthMenu * @Entity com.makeit.entity.saas.TntAuthMenu
*/ */
public interface TntAuthMenuMapper extends BaseMapper<TntAuthMenu> { public interface PlatMenuMapper extends BaseMapper<PlatMenu> {
} }
package com.makeit.mapper.saas; package com.makeit.mapper.saas;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.makeit.entity.saas.TntTenant; import com.makeit.entity.saas.PlatTenant;
/** /**
* @author lixl * @author lixl
...@@ -9,7 +9,7 @@ import com.makeit.entity.saas.TntTenant; ...@@ -9,7 +9,7 @@ import com.makeit.entity.saas.TntTenant;
* @createDate 2023-08-29 14:29:10 * @createDate 2023-08-29 14:29:10
* @Entity com.makeit.entity.saas.TntTenant * @Entity com.makeit.entity.saas.TntTenant
*/ */
public interface TntTenantMapper extends BaseMapper<TntTenant> { public interface PlatTenantMapper extends BaseMapper<PlatTenant> {
} }
package com.makeit.server.platform.auth;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.auth.PlatOrg;
/**
* @author lixl
* @description 针对表【plat_org(租户端部门)】的数据库操作Service
* @createDate 2023-08-30 20:10:25
*/
public interface PlatOrgService extends IService<PlatOrg> {
}
package com.makeit.server.platform.auth;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.auth.PlatRoleMenu;
/**
* @author lixl
* @description 针对表【plat_role_menu(租户端角色菜单关联表)】的数据库操作Service
* @createDate 2023-08-30 20:10:25
*/
public interface PlatRoleMenuService extends IService<PlatRoleMenu> {
}
package com.makeit.server.platform.auth;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.auth.PlatRoleOrg;
/**
* @author lixl
* @description 针对表【plat_role_org(租户端角色部门关联表)】的数据库操作Service
* @createDate 2023-08-30 20:10:25
*/
public interface PlatRoleOrgService extends IService<PlatRoleOrg> {
}
package com.makeit.server.platform.auth;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.auth.PlatRole;
/**
* @author lixl
* @description 针对表【plat_role(租户端角色)】的数据库操作Service
* @createDate 2023-08-30 20:10:25
*/
public interface PlatRoleService extends IService<PlatRole> {
}
package com.makeit.server.platform.auth;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.auth.PlatUserRole;
/**
* @author lixl
* @description 针对表【plat_user_role(租户端用户角色关联表)】的数据库操作Service
* @createDate 2023-08-30 20:10:25
*/
public interface PlatUserRoleService extends IService<PlatUserRole> {
}
package com.makeit.server.platform.auth;
import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.platform.auth.PlatUser;
/**
* @author lixl
* @description 针对表【plat_user(租户账号管理)】的数据库操作Service
* @createDate 2023-08-30 20:10:25
*/
public interface PlatUserService extends IService<PlatUser> {
}
package com.makeit.server.platform.auth.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.auth.PlatOrg;
import com.makeit.mapper.platform.auth.PlatOrgMapper;
import com.makeit.server.platform.auth.PlatOrgService;
import org.springframework.stereotype.Service;
/**
* @author lixl
* @description 针对表【plat_org(租户端部门)】的数据库操作Service实现
* @createDate 2023-08-30 20:10:25
*/
@Service
public class PlatOrgServiceImpl extends ServiceImpl<PlatOrgMapper, PlatOrg>
implements PlatOrgService{
}
package com.makeit.server.platform.auth.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.auth.PlatRoleMenu;
import com.makeit.mapper.platform.auth.PlatRoleMenuMapper;
import com.makeit.server.platform.auth.PlatRoleMenuService;
import org.springframework.stereotype.Service;
/**
* @author lixl
* @description 针对表【plat_role_menu(租户端角色菜单关联表)】的数据库操作Service实现
* @createDate 2023-08-30 20:10:25
*/
@Service
public class PlatRoleMenuServiceImpl extends ServiceImpl<PlatRoleMenuMapper, PlatRoleMenu>
implements PlatRoleMenuService{
}
package com.makeit.server.platform.auth.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.auth.PlatRoleOrg;
import com.makeit.mapper.platform.auth.PlatRoleOrgMapper;
import com.makeit.server.platform.auth.PlatRoleOrgService;
import org.springframework.stereotype.Service;
/**
* @author lixl
* @description 针对表【plat_role_org(租户端角色部门关联表)】的数据库操作Service实现
* @createDate 2023-08-30 20:10:25
*/
@Service
public class PlatRoleOrgServiceImpl extends ServiceImpl<PlatRoleOrgMapper, PlatRoleOrg>
implements PlatRoleOrgService{
}
package com.makeit.server.platform.auth.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.auth.PlatRole;
import com.makeit.mapper.platform.auth.PlatRoleMapper;
import com.makeit.server.platform.auth.PlatRoleService;
import org.springframework.stereotype.Service;
/**
* @author lixl
* @description 针对表【plat_role(租户端角色)】的数据库操作Service实现
* @createDate 2023-08-30 20:10:25
*/
@Service
public class PlatRoleServiceImpl extends ServiceImpl<PlatRoleMapper, PlatRole>
implements PlatRoleService{
}
package com.makeit.server.platform.auth.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.auth.PlatUserRole;
import com.makeit.mapper.platform.auth.PlatUserRoleMapper;
import com.makeit.server.platform.auth.PlatUserRoleService;
import org.springframework.stereotype.Service;
/**
* @author lixl
* @description 针对表【plat_user_role(租户端用户角色关联表)】的数据库操作Service实现
* @createDate 2023-08-30 20:10:25
*/
@Service
public class PlatUserRoleServiceImpl extends ServiceImpl<PlatUserRoleMapper, PlatUserRole>
implements PlatUserRoleService{
}
package com.makeit.server.platform.auth.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.platform.auth.PlatUser;
import com.makeit.mapper.platform.auth.PlatUserMapper;
import com.makeit.server.platform.auth.PlatUserService;
import org.springframework.stereotype.Service;
/**
* @author lixl
* @description 针对表【plat_user(租户账号管理)】的数据库操作Service实现
* @createDate 2023-08-30 20:10:25
*/
@Service
public class PlatUserServiceImpl extends ServiceImpl<PlatUserMapper, PlatUser>
implements PlatUserService{
}
package com.makeit.service.saas; package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.saas.TntAuthMenu; import com.makeit.entity.saas.PlatMenu;
/** /**
* @author lixl * @author lixl
* @description 针对表【tnt_auth_menu(租户端资源管理)】的数据库操作Service * @description 针对表【tnt_auth_menu(租户端资源管理)】的数据库操作Service
* @createDate 2023-08-29 14:29:10 * @createDate 2023-08-29 14:29:10
*/ */
public interface TntAuthMenuService extends IService<TntAuthMenu> { public interface PlatMenuService extends IService<PlatMenu> {
} }
package com.makeit.service.saas; package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.saas.TntTenant; import com.makeit.entity.saas.PlatTenant;
/** /**
* @author lixl * @author lixl
* @description 针对表【tnt_tenant(租户管理)】的数据库操作Service * @description 针对表【tnt_tenant(租户管理)】的数据库操作Service
* @createDate 2023-08-29 14:29:10 * @createDate 2023-08-29 14:29:10
*/ */
public interface TntTenantService extends IService<TntTenant> { public interface PlatTenantService extends IService<PlatTenant> {
} }
...@@ -2,8 +2,8 @@ package com.makeit.service.saas; ...@@ -2,8 +2,8 @@ package com.makeit.service.saas;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.entity.saas.SaasMenu; import com.makeit.entity.saas.SaasMenu;
import com.makeit.module.admin.saas.PlatMenuDTOVO; import com.makeit.module.admin.saas.SaasMenuDTOVO;
import com.makeit.module.admin.saas.PlatMenuQueryDTO; import com.makeit.module.admin.saas.SaasMenuQueryDTO;
import java.util.List; import java.util.List;
...@@ -14,17 +14,17 @@ import java.util.List; ...@@ -14,17 +14,17 @@ import java.util.List;
*/ */
public interface SaasMenuService extends IService<SaasMenu> { public interface SaasMenuService extends IService<SaasMenu> {
List<PlatMenuDTOVO> list(PlatMenuQueryDTO dto); List<SaasMenuDTOVO> list(SaasMenuQueryDTO dto);
List<PlatMenuDTOVO> tree(List<PlatMenuDTOVO> platMenuList); List<SaasMenuDTOVO> tree(List<SaasMenuDTOVO> platMenuList);
List<PlatMenuDTOVO> tree(PlatMenuQueryDTO dto); List<SaasMenuDTOVO> tree(SaasMenuQueryDTO dto);
void add(PlatMenuDTOVO dto); void add(SaasMenuDTOVO dto);
void edit(PlatMenuDTOVO dto); void edit(SaasMenuDTOVO dto);
PlatMenuDTOVO view(String id); SaasMenuDTOVO view(String id);
void del(String id); void del(String id);
......
...@@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.makeit.common.dto.StatusDTO; import com.makeit.common.dto.StatusDTO;
import com.makeit.entity.saas.SaasRole; import com.makeit.entity.saas.SaasRole;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.saas.SaasRoleDTOVO;
import com.makeit.module.admin.saas.PlatRoleMenuDTO; import com.makeit.module.admin.saas.SaasRoleMenuDTO;
import com.makeit.module.admin.saas.PlatUserRoleDTO; import com.makeit.module.admin.saas.SaasUserRoleDTO;
import java.util.List; import java.util.List;
...@@ -28,10 +28,10 @@ public interface SaasRoleService extends IService<SaasRole> { ...@@ -28,10 +28,10 @@ public interface SaasRoleService extends IService<SaasRole> {
void changeStatus(StatusDTO dto); void changeStatus(StatusDTO dto);
void assignUserList(List<PlatUserRoleDTO> userRoleDTOList); void assignUserList(List<SaasUserRoleDTO> userRoleDTOList);
void removeAssignUserList(List<PlatUserRoleDTO> userRoleDTOList); void removeAssignUserList(List<SaasUserRoleDTO> userRoleDTOList);
void assignMenuList(PlatRoleMenuDTO roleMenuDTO); void assignMenuList(SaasRoleMenuDTO roleMenuDTO);
} }
...@@ -6,9 +6,9 @@ import com.makeit.common.dto.StatusDTO; ...@@ -6,9 +6,9 @@ import com.makeit.common.dto.StatusDTO;
import com.makeit.common.page.PageReqDTO; import com.makeit.common.page.PageReqDTO;
import com.makeit.common.page.PageVO; import com.makeit.common.page.PageVO;
import com.makeit.module.admin.saas.SaasUserDTOVO; import com.makeit.module.admin.saas.SaasUserDTOVO;
import com.makeit.module.admin.saas.PlatUserQueryDTO; import com.makeit.module.admin.saas.SaasUserQueryDTO;
import com.makeit.entity.saas.SaasUser; import com.makeit.entity.saas.SaasUser;
import com.makeit.utils.user.SaasUserLoginVO; import com.makeit.utils.user.saas.SaasUserLoginVO;
import java.util.List; import java.util.List;
...@@ -18,13 +18,13 @@ import java.util.List; ...@@ -18,13 +18,13 @@ import java.util.List;
* @createDate 2023-08-29 11:14:07 * @createDate 2023-08-29 11:14:07
*/ */
public interface SaasUserService extends IService<SaasUser> { public interface SaasUserService extends IService<SaasUser> {
PageVO<SaasUserDTOVO> page(PageReqDTO<PlatUserQueryDTO> page); PageVO<SaasUserDTOVO> page(PageReqDTO<SaasUserQueryDTO> page);
PageVO<SaasUserDTOVO> pageNoSuperAdmin(PageReqDTO<PlatUserQueryDTO> page); PageVO<SaasUserDTOVO> pageNoSuperAdmin(PageReqDTO<SaasUserQueryDTO> page);
List<SaasUserDTOVO> list(PlatUserQueryDTO dto); List<SaasUserDTOVO> list(SaasUserQueryDTO dto);
List<SaasUserDTOVO> listNoSuperAdmin(PlatUserQueryDTO dto); List<SaasUserDTOVO> listNoSuperAdmin(SaasUserQueryDTO dto);
void add(SaasUserDTOVO dto); void add(SaasUserDTOVO dto);
......
package com.makeit.service.saas.impl; package com.makeit.service.saas.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.saas.TntAuthMenu; import com.makeit.entity.saas.PlatMenu;
import com.makeit.mapper.saas.TntAuthMenuMapper; import com.makeit.mapper.saas.PlatMenuMapper;
import com.makeit.service.saas.TntAuthMenuService; import com.makeit.service.saas.PlatMenuService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
...@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service; ...@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
* @createDate 2023-08-29 14:29:10 * @createDate 2023-08-29 14:29:10
*/ */
@Service @Service
public class TntAuthMenuServiceImpl extends ServiceImpl<TntAuthMenuMapper, TntAuthMenu> public class PlatMenuServiceImpl extends ServiceImpl<PlatMenuMapper, PlatMenu>
implements TntAuthMenuService{ implements PlatMenuService {
} }
package com.makeit.service.saas.impl; package com.makeit.service.saas.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.makeit.entity.saas.TntTenant; import com.makeit.entity.saas.PlatTenant;
import com.makeit.mapper.saas.TntTenantMapper; import com.makeit.mapper.saas.PlatTenantMapper;
import com.makeit.service.saas.TntTenantService; import com.makeit.service.saas.PlatTenantService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
...@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service; ...@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
* @createDate 2023-08-29 14:29:10 * @createDate 2023-08-29 14:29:10
*/ */
@Service @Service
public class TntTenantServiceImpl extends ServiceImpl<TntTenantMapper, TntTenant> public class PlatTenantServiceImpl extends ServiceImpl<PlatTenantMapper, PlatTenant>
implements TntTenantService{ implements PlatTenantService {
} }
...@@ -11,8 +11,8 @@ import com.makeit.enums.id.TreeConst; ...@@ -11,8 +11,8 @@ import com.makeit.enums.id.TreeConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.global.annotation.Action; import com.makeit.global.annotation.Action;
import com.makeit.mapper.saas.SaasMenuMapper; import com.makeit.mapper.saas.SaasMenuMapper;
import com.makeit.module.admin.saas.PlatMenuDTOVO; import com.makeit.module.admin.saas.SaasMenuDTOVO;
import com.makeit.module.admin.saas.PlatMenuQueryDTO; import com.makeit.module.admin.saas.SaasMenuQueryDTO;
import com.makeit.service.saas.SaasMenuService; import com.makeit.service.saas.SaasMenuService;
import com.makeit.service.saas.SaasRoleMenuService; import com.makeit.service.saas.SaasRoleMenuService;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
...@@ -65,7 +65,7 @@ public class SaasMenuServiceImpl extends ServiceImpl<SaasMenuMapper, SaasMenu> i ...@@ -65,7 +65,7 @@ public class SaasMenuServiceImpl extends ServiceImpl<SaasMenuMapper, SaasMenu> i
//这里排除当前角色没有绑定的菜单 不该做 菜单树形 //这里排除当前角色没有绑定的菜单 不该做 菜单树形
@Override @Override
public List<PlatMenuDTOVO> list(PlatMenuQueryDTO dto) { public List<SaasMenuDTOVO> list(SaasMenuQueryDTO dto) {
//查找角色绑的菜单 是否一定要返回树形 能不能直接返回中间表数据 //查找角色绑的菜单 是否一定要返回树形 能不能直接返回中间表数据
// 直接返回中间表数据的话 代码可以放role那边 // 直接返回中间表数据的话 代码可以放role那边
...@@ -87,18 +87,18 @@ public class SaasMenuServiceImpl extends ServiceImpl<SaasMenuMapper, SaasMenu> i ...@@ -87,18 +87,18 @@ public class SaasMenuServiceImpl extends ServiceImpl<SaasMenuMapper, SaasMenu> i
.orderByAsc(SaasMenu::getCreateDate) .orderByAsc(SaasMenu::getCreateDate)
); );
return BeanDtoVoUtils.listVo(platMenuList, PlatMenuDTOVO.class); return BeanDtoVoUtils.listVo(platMenuList, SaasMenuDTOVO.class);
} }
@Override @Override
public List<PlatMenuDTOVO> tree(List<PlatMenuDTOVO> platMenuList) { public List<SaasMenuDTOVO> tree(List<SaasMenuDTOVO> platMenuList) {
Map<String, PlatMenuDTOVO> map = StreamUtil.toMap(platMenuList, PlatMenuDTOVO::getId); Map<String, SaasMenuDTOVO> map = StreamUtil.toMap(platMenuList, SaasMenuDTOVO::getId);
List<PlatMenuDTOVO> topList = StreamUtil.filter(platMenuList, e -> TreeConst.TOP_LEVEL.equals(e.getParentId())); List<SaasMenuDTOVO> topList = StreamUtil.filter(platMenuList, e -> TreeConst.TOP_LEVEL.equals(e.getParentId()));
platMenuList.forEach(e -> { platMenuList.forEach(e -> {
PlatMenuDTOVO parent = map.get(e.getParentId()); SaasMenuDTOVO parent = map.get(e.getParentId());
if (parent != null) { if (parent != null) {
List<PlatMenuDTOVO> children = parent.getChildren(); List<SaasMenuDTOVO> children = parent.getChildren();
if (children == null) { if (children == null) {
children = new ArrayList<>(10); children = new ArrayList<>(10);
parent.setChildren(children); parent.setChildren(children);
...@@ -112,12 +112,12 @@ public class SaasMenuServiceImpl extends ServiceImpl<SaasMenuMapper, SaasMenu> i ...@@ -112,12 +112,12 @@ public class SaasMenuServiceImpl extends ServiceImpl<SaasMenuMapper, SaasMenu> i
} }
@Override @Override
public List<PlatMenuDTOVO> tree(PlatMenuQueryDTO dto) { public List<SaasMenuDTOVO> tree(SaasMenuQueryDTO dto) {
List<PlatMenuDTOVO> platMenuList = list(dto); List<SaasMenuDTOVO> platMenuList = list(dto);
return tree(platMenuList); return tree(platMenuList);
} }
private void checkCode(PlatMenuDTOVO dto) { private void checkCode(SaasMenuDTOVO dto) {
SaasMenu old = getOne(new QueryWrapper<SaasMenu>().lambda() SaasMenu old = getOne(new QueryWrapper<SaasMenu>().lambda()
.eq(SaasMenu::getCode, dto.getCode())); .eq(SaasMenu::getCode, dto.getCode()));
if (old != null && !old.getId().equals(dto.getId())) { if (old != null && !old.getId().equals(dto.getId())) {
...@@ -127,21 +127,21 @@ public class SaasMenuServiceImpl extends ServiceImpl<SaasMenuMapper, SaasMenu> i ...@@ -127,21 +127,21 @@ public class SaasMenuServiceImpl extends ServiceImpl<SaasMenuMapper, SaasMenu> i
@Transactional @Transactional
@Override @Override
public void add(PlatMenuDTOVO dto) { public void add(SaasMenuDTOVO dto) {
checkCode(dto); checkCode(dto);
save(BeanDtoVoUtils.convert(dto, SaasMenu.class)); save(BeanDtoVoUtils.convert(dto, SaasMenu.class));
} }
@Transactional @Transactional
@Override @Override
public void edit(PlatMenuDTOVO dto) { public void edit(SaasMenuDTOVO dto) {
checkCode(dto); checkCode(dto);
updateById(BeanDtoVoUtils.convert(dto, SaasMenu.class)); updateById(BeanDtoVoUtils.convert(dto, SaasMenu.class));
} }
@Override @Override
public PlatMenuDTOVO view(String id) { public SaasMenuDTOVO view(String id) {
return BeanDtoVoUtils.convert(getById(id), PlatMenuDTOVO.class); return BeanDtoVoUtils.convert(getById(id), SaasMenuDTOVO.class);
} }
@Transactional @Transactional
......
...@@ -11,8 +11,8 @@ import com.makeit.enums.CommonEnum; ...@@ -11,8 +11,8 @@ import com.makeit.enums.CommonEnum;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.mapper.saas.SaasRoleMapper; import com.makeit.mapper.saas.SaasRoleMapper;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.saas.SaasRoleDTOVO;
import com.makeit.module.admin.saas.PlatRoleMenuDTO; import com.makeit.module.admin.saas.SaasRoleMenuDTO;
import com.makeit.module.admin.saas.PlatUserRoleDTO; import com.makeit.module.admin.saas.SaasUserRoleDTO;
import com.makeit.service.saas.SaasRoleMenuService; import com.makeit.service.saas.SaasRoleMenuService;
import com.makeit.service.saas.SaasRoleService; import com.makeit.service.saas.SaasRoleService;
import com.makeit.service.saas.SaasUserRoleService; import com.makeit.service.saas.SaasUserRoleService;
...@@ -116,7 +116,7 @@ implements SaasRoleService{ ...@@ -116,7 +116,7 @@ implements SaasRoleService{
@Transactional @Transactional
@Override @Override
public void assignUserList(List<PlatUserRoleDTO> userRoleDTOList) { public void assignUserList(List<SaasUserRoleDTO> userRoleDTOList) {
removeAssignUserList(userRoleDTOList); removeAssignUserList(userRoleDTOList);
...@@ -126,10 +126,10 @@ implements SaasRoleService{ ...@@ -126,10 +126,10 @@ implements SaasRoleService{
@Transactional @Transactional
@Override @Override
public void removeAssignUserList(List<PlatUserRoleDTO> userRoleDTOList) { public void removeAssignUserList(List<SaasUserRoleDTO> userRoleDTOList) {
Map<String, List<PlatUserRoleDTO>> roleUserMap = StreamUtil.groupBy(userRoleDTOList, PlatUserRoleDTO::getRoleId); Map<String, List<SaasUserRoleDTO>> roleUserMap = StreamUtil.groupBy(userRoleDTOList, SaasUserRoleDTO::getRoleId);
roleUserMap.forEach((k, v) -> { roleUserMap.forEach((k, v) -> {
List<String> userIdList = StreamUtil.map(v, PlatUserRoleDTO::getUserId); List<String> userIdList = StreamUtil.map(v, SaasUserRoleDTO::getUserId);
userIdList.add(-1 + ""); userIdList.add(-1 + "");
saasUserRoleService.remove(new QueryWrapper<SaasUserRole>().lambda() saasUserRoleService.remove(new QueryWrapper<SaasUserRole>().lambda()
.eq(SaasUserRole::getRoleId, k) .eq(SaasUserRole::getRoleId, k)
...@@ -139,7 +139,7 @@ implements SaasRoleService{ ...@@ -139,7 +139,7 @@ implements SaasRoleService{
@Transactional @Transactional
@Override @Override
public void assignMenuList(PlatRoleMenuDTO roleMenuDTO) { public void assignMenuList(SaasRoleMenuDTO roleMenuDTO) {
//removeAssignMenuList(roleMenuDTOList); //removeAssignMenuList(roleMenuDTOList);
saasRoleMenuService.remove(new QueryWrapper<SaasRoleMenu>().lambda().eq(SaasRoleMenu::getRoleId, roleMenuDTO.getRoleId())); saasRoleMenuService.remove(new QueryWrapper<SaasRoleMenu>().lambda().eq(SaasRoleMenu::getRoleId, roleMenuDTO.getRoleId()));
......
...@@ -13,7 +13,7 @@ import com.makeit.entity.saas.SaasRole; ...@@ -13,7 +13,7 @@ import com.makeit.entity.saas.SaasRole;
import com.makeit.entity.saas.SaasRoleMenu; import com.makeit.entity.saas.SaasRoleMenu;
import com.makeit.entity.saas.SaasUser; import com.makeit.entity.saas.SaasUser;
import com.makeit.entity.saas.SaasUserRole; import com.makeit.entity.saas.SaasUserRole;
import com.makeit.entity.saas.TntTenant; import com.makeit.entity.saas.PlatTenant;
import com.makeit.enums.CodeMessageEnum; import com.makeit.enums.CodeMessageEnum;
import com.makeit.enums.CommonEnum; import com.makeit.enums.CommonEnum;
import com.makeit.enums.biz.auth.SysEnum; import com.makeit.enums.biz.auth.SysEnum;
...@@ -21,25 +21,25 @@ import com.makeit.enums.biz.auth.TenantEnum; ...@@ -21,25 +21,25 @@ import com.makeit.enums.biz.auth.TenantEnum;
import com.makeit.enums.id.IdConst; import com.makeit.enums.id.IdConst;
import com.makeit.exception.BusinessException; import com.makeit.exception.BusinessException;
import com.makeit.mapper.saas.SaasUserMapper; import com.makeit.mapper.saas.SaasUserMapper;
import com.makeit.module.admin.saas.PlatMenuDTOVO; import com.makeit.module.admin.saas.SaasMenuDTOVO;
import com.makeit.module.admin.saas.SaasRoleDTOVO; import com.makeit.module.admin.saas.SaasRoleDTOVO;
import com.makeit.module.admin.saas.SaasUserDTOVO; import com.makeit.module.admin.saas.SaasUserDTOVO;
import com.makeit.module.admin.saas.PlatUserQueryDTO; import com.makeit.module.admin.saas.SaasUserQueryDTO;
import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO; import com.makeit.module.admin.saas.SaasUserRoleMenuRedisVO;
import com.makeit.service.saas.SaasMenuService; import com.makeit.service.saas.SaasMenuService;
import com.makeit.service.saas.SaasRoleMenuService; import com.makeit.service.saas.SaasRoleMenuService;
import com.makeit.service.saas.SaasRoleService; import com.makeit.service.saas.SaasRoleService;
import com.makeit.service.saas.SaasUserRoleService; import com.makeit.service.saas.SaasUserRoleService;
import com.makeit.service.saas.SaasUserService; import com.makeit.service.saas.SaasUserService;
import com.makeit.service.saas.TntTenantService; import com.makeit.service.saas.PlatTenantService;
import com.makeit.utils.data.convert.BeanDtoVoUtils; import com.makeit.utils.data.convert.BeanDtoVoUtils;
import com.makeit.utils.data.convert.PageUtil; import com.makeit.utils.data.convert.PageUtil;
import com.makeit.utils.data.convert.StreamUtil; import com.makeit.utils.data.convert.StreamUtil;
import com.makeit.utils.data.id.IdGen; import com.makeit.utils.data.id.IdGen;
import com.makeit.utils.user.PasswordUtils; import com.makeit.utils.user.PasswordUtils;
import com.makeit.utils.user.SaasUserLoginVO; import com.makeit.utils.user.saas.SaasUserLoginVO;
import com.makeit.utils.user.PlatUserUtil; import com.makeit.utils.user.saas.SaasUserUtil;
import com.makeit.utils.user.PlatUserVO; import com.makeit.utils.user.saas.SaasUserVO;
import com.makeit.utils.user.TokenUtil; import com.makeit.utils.user.TokenUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -75,7 +75,7 @@ implements SaasUserService{ ...@@ -75,7 +75,7 @@ implements SaasUserService{
private SaasRoleMenuService saasRoleMenuService; private SaasRoleMenuService saasRoleMenuService;
@Autowired @Autowired
private TntTenantService tntTenantService; private PlatTenantService platTenantService;
// @Autowired // @Autowired
// private TntLoginLogService tntLoginLogService; // private TntLoginLogService tntLoginLogService;
...@@ -85,9 +85,9 @@ implements SaasUserService{ ...@@ -85,9 +85,9 @@ implements SaasUserService{
//还是mybatis plus notin 查询 //还是mybatis plus notin 查询
//现在是重复添加中间表 没有效果 //现在是重复添加中间表 没有效果
public PageVO<SaasUserDTOVO> pageInternal(PageReqDTO<PlatUserQueryDTO> page, Consumer<LambdaQueryWrapper<SaasUser>> consumer) { public PageVO<SaasUserDTOVO> pageInternal(PageReqDTO<SaasUserQueryDTO> page, Consumer<LambdaQueryWrapper<SaasUser>> consumer) {
PlatUserQueryDTO dto = page.getData(); SaasUserQueryDTO dto = page.getData();
Page<SaasUser> p = PageUtil.toMpPage(page); Page<SaasUser> p = PageUtil.toMpPage(page);
...@@ -130,18 +130,18 @@ implements SaasUserService{ ...@@ -130,18 +130,18 @@ implements SaasUserService{
} }
@Override @Override
public PageVO<SaasUserDTOVO> page(PageReqDTO<PlatUserQueryDTO> page) { public PageVO<SaasUserDTOVO> page(PageReqDTO<SaasUserQueryDTO> page) {
return pageInternal(page, null); return pageInternal(page, null);
} }
@Override @Override
public PageVO<SaasUserDTOVO> pageNoSuperAdmin(PageReqDTO<PlatUserQueryDTO> page) { public PageVO<SaasUserDTOVO> pageNoSuperAdmin(PageReqDTO<SaasUserQueryDTO> page) {
return pageInternal(page, qw -> qw.ne(SaasUser::getId, IdConst.SUPER_ADMIN_ID)); return pageInternal(page, qw -> qw.ne(SaasUser::getId, IdConst.SUPER_ADMIN_ID));
} }
@Override @Override
public List<SaasUserDTOVO> list(PlatUserQueryDTO dto) { public List<SaasUserDTOVO> list(SaasUserQueryDTO dto) {
PageReqDTO<PlatUserQueryDTO> page = new PageReqDTO<>(); PageReqDTO<SaasUserQueryDTO> page = new PageReqDTO<>();
page.setPage(1); page.setPage(1);
page.setLimit(-1); page.setLimit(-1);
page.setData(dto); page.setData(dto);
...@@ -149,8 +149,8 @@ implements SaasUserService{ ...@@ -149,8 +149,8 @@ implements SaasUserService{
} }
@Override @Override
public List<SaasUserDTOVO> listNoSuperAdmin(PlatUserQueryDTO dto) { public List<SaasUserDTOVO> listNoSuperAdmin(SaasUserQueryDTO dto) {
PageReqDTO<PlatUserQueryDTO> page = new PageReqDTO<>(); PageReqDTO<SaasUserQueryDTO> page = new PageReqDTO<>();
page.setPage(1); page.setPage(1);
page.setLimit(-1); page.setLimit(-1);
page.setData(dto); page.setData(dto);
...@@ -328,9 +328,9 @@ implements SaasUserService{ ...@@ -328,9 +328,9 @@ implements SaasUserService{
private void fillMenuList(List<SaasMenu> menuList, SaasUserLoginVO userLoginVO) { private void fillMenuList(List<SaasMenu> menuList, SaasUserLoginVO userLoginVO) {
List<SaasMenu> buttonList = StreamUtil.filter(menuList, e -> SysEnum.MenuTypeEnum.MENU.getValue().equals(e.getCategory()) || SysEnum.MenuTypeEnum.BUTTON.getValue().equals(e.getCategory())); List<SaasMenu> buttonList = StreamUtil.filter(menuList, e -> SysEnum.MenuTypeEnum.MENU.getValue().equals(e.getCategory()) || SysEnum.MenuTypeEnum.BUTTON.getValue().equals(e.getCategory()));
List<SaasMenu> nonButtonList = StreamUtil.filter(menuList, e -> SysEnum.MenuTypeEnum.CATALOGUE.getValue().equals(e.getCategory()) || SysEnum.MenuTypeEnum.MENU.getValue().equals(e.getCategory())); List<SaasMenu> nonButtonList = StreamUtil.filter(menuList, e -> SysEnum.MenuTypeEnum.CATALOGUE.getValue().equals(e.getCategory()) || SysEnum.MenuTypeEnum.MENU.getValue().equals(e.getCategory()));
List<PlatMenuDTOVO> menuVOList = saasMenuService.tree(BeanDtoVoUtils.listVo(nonButtonList, PlatMenuDTOVO.class)); List<SaasMenuDTOVO> menuVOList = saasMenuService.tree(BeanDtoVoUtils.listVo(nonButtonList, SaasMenuDTOVO.class));
userLoginVO.setButtonList(BeanDtoVoUtils.listVo(buttonList, PlatMenuDTOVO.class)); userLoginVO.setButtonList(BeanDtoVoUtils.listVo(buttonList, SaasMenuDTOVO.class));
userLoginVO.setMenuList(menuVOList); userLoginVO.setMenuList(menuVOList);
} }
...@@ -350,7 +350,7 @@ implements SaasUserService{ ...@@ -350,7 +350,7 @@ implements SaasUserService{
platUserRoleMenuRedisVO.setRoleCodeList(StreamUtil.map(userLoginVO.getRoleList(), SaasRoleDTOVO::getCode)); platUserRoleMenuRedisVO.setRoleCodeList(StreamUtil.map(userLoginVO.getRoleList(), SaasRoleDTOVO::getCode));
} }
if (userLoginVO.getButtonList() != null) { if (userLoginVO.getButtonList() != null) {
platUserRoleMenuRedisVO.setButtonCodeList(StreamUtil.map(userLoginVO.getButtonList(), PlatMenuDTOVO::getCode)); platUserRoleMenuRedisVO.setButtonCodeList(StreamUtil.map(userLoginVO.getButtonList(), SaasMenuDTOVO::getCode));
} }
TokenUtil.platLoginRoleMenu(platUserRoleMenuRedisVO); TokenUtil.platLoginRoleMenu(platUserRoleMenuRedisVO);
} }
...@@ -401,7 +401,7 @@ implements SaasUserService{ ...@@ -401,7 +401,7 @@ implements SaasUserService{
@Override @Override
public SaasUserLoginVO getRoleAndMenuList() { public SaasUserLoginVO getRoleAndMenuList() {
PlatUserVO platUser = PlatUserUtil.getUserVO(); SaasUserVO platUser = SaasUserUtil.getUserVO();
SaasUserLoginVO platUserLoginVO = new SaasUserLoginVO(); SaasUserLoginVO platUserLoginVO = new SaasUserLoginVO();
platUserLoginVO.setId(platUser.getId()); platUserLoginVO.setId(platUser.getId());
getRoleAndMenuList(platUserLoginVO); getRoleAndMenuList(platUserLoginVO);
...@@ -411,7 +411,7 @@ implements SaasUserService{ ...@@ -411,7 +411,7 @@ implements SaasUserService{
@Override @Override
public SaasUserLoginVO getUserVO() { public SaasUserLoginVO getUserVO() {
return PlatUserUtil.getUserVODetail(); return SaasUserUtil.getUserVODetail();
} }
@Override @Override
...@@ -461,10 +461,10 @@ implements SaasUserService{ ...@@ -461,10 +461,10 @@ implements SaasUserService{
@Override @Override
public List<String> getDataScopeByUserId() {//要不要缓存 public List<String> getDataScopeByUserId() {//要不要缓存
PlatUserVO userVO = PlatUserUtil.getUserVO(); SaasUserVO userVO = SaasUserUtil.getUserVO();
if (IdConst.SUPER_ADMIN_ID.equals(userVO.getId())) { if (IdConst.SUPER_ADMIN_ID.equals(userVO.getId())) {
List<String> tenantIdList = StreamUtil.map(tntTenantService.list(), TntTenant::getId);//还是要直接返回null 那边直接不过滤 List<String> tenantIdList = StreamUtil.map(platTenantService.list(), PlatTenant::getId);//还是要直接返回null 那边直接不过滤
tenantIdList.add(-1 + ""); tenantIdList.add(-1 + "");
return tenantIdList; return tenantIdList;
} else { } else {
...@@ -482,7 +482,7 @@ implements SaasUserService{ ...@@ -482,7 +482,7 @@ implements SaasUserService{
boolean allFlag = false; boolean allFlag = false;
allFlag = roleList.stream().anyMatch(e -> TenantEnum.DataScopeTypeEnum.ALL.getValue().equals(e.getDataScopeType())); allFlag = roleList.stream().anyMatch(e -> TenantEnum.DataScopeTypeEnum.ALL.getValue().equals(e.getDataScopeType()));
if (allFlag) { if (allFlag) {
List<String> tenantIdList = StreamUtil.map(tntTenantService.list(), TntTenant::getId);//还是要直接返回null 那边直接不过滤 List<String> tenantIdList = StreamUtil.map(platTenantService.list(), PlatTenant::getId);//还是要直接返回null 那边直接不过滤
tenantIdList.add(-1 + ""); tenantIdList.add(-1 + "");
return tenantIdList; return tenantIdList;
} }
......
...@@ -20,6 +20,7 @@ import java.time.LocalDateTime; ...@@ -20,6 +20,7 @@ import java.time.LocalDateTime;
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value = "Elder对象", description = "长者基本信息") @ApiModel(value = "Elder对象", description = "长者基本信息")
public class PlatElderListVO extends BaseTenantDTO { public class PlatElderListVO extends BaseTenantDTO {
@ApiModelProperty(value = "姓名") @ApiModelProperty(value = "姓名")
......
<?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.makeit.mapper.saas.SaasMenuMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.SaasMenu">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="parentId" column="parent_id" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="icon" column="icon" jdbcType="VARCHAR"/>
<result property="sort" column="sort" jdbcType="INTEGER"/>
<result property="status" column="status" jdbcType="CHAR"/>
<result property="category" column="category" jdbcType="VARCHAR"/>
<result property="requestPath" column="request_path" jdbcType="VARCHAR"/>
<result property="componentPath" column="component_path" jdbcType="VARCHAR"/>
<result property="componentName" column="component_name" jdbcType="VARCHAR"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
<result property="hiddenStatus" column="hidden_status" jdbcType="CHAR"/>
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
<result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="cacheStatus" column="cache_status" jdbcType="CHAR"/>
<result property="createdByName" column="created_by_name" jdbcType="VARCHAR"/>
<result property="updateByName" column="update_by_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,parent_id,name,
code,icon,sort,
status,category,request_path,
component_path,component_name,remark,
hidden_status,created_at,updated_at,
del_flag,cache_status,created_by_name,
update_by_name
</sql>
</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.makeit.mapper.saas.SaasOperationLogMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.SaasOperationLog">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="saasUserId" column="saas_user_id" jdbcType="VARCHAR"/>
<result property="tenantId" column="tenant_id" jdbcType="CHAR"/>
<result property="content" column="content" jdbcType="VARCHAR"/>
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
<result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createdByName" column="created_by_name" jdbcType="VARCHAR"/>
<result property="updateByName" column="update_by_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,saas_user_id,tenant_id,
content,created_at,updated_at,
del_flag,created_by_name,update_by_name
</sql>
</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.makeit.mapper.saas.SaasPrivacyConfigMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.SaasPrivacyConfig">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="title" column="title" jdbcType="VARCHAR"/>
<result property="content" column="content" jdbcType="VARCHAR"/>
<result property="category" column="category" jdbcType="VARCHAR"/>
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
<result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createdByName" column="created_by_name" jdbcType="VARCHAR"/>
<result property="updateByName" column="update_by_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,title,content,
category,created_at,updated_at,
del_flag,created_by_name,update_by_name
</sql>
</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.makeit.mapper.saas.SaasRoleMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.SaasRole">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="CHAR"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
<result property="dataScopeType" column="data_scope_type" jdbcType="CHAR"/>
<result property="dataScope" column="data_scope" jdbcType="VARCHAR"/>
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
<result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createdByName" column="created_by_name" jdbcType="VARCHAR"/>
<result property="updateByName" column="update_by_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,name,code,
status,remark,data_scope_type,
data_scope,created_at,updated_at,
del_flag,created_by_name,update_by_name
</sql>
</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.makeit.mapper.saas.SaasRoleMenuMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.SaasRoleMenu">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="roleId" column="role_id" jdbcType="VARCHAR"/>
<result property="menuId" column="menu_id" jdbcType="VARCHAR"/>
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
<result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createdByName" column="created_by_name" jdbcType="VARCHAR"/>
<result property="updateByName" column="update_by_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,role_id,menu_id,
created_at,updated_at,del_flag,
created_by_name,update_by_name
</sql>
</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.makeit.mapper.saas.SaasUserMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.SaasUser">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="username" column="username" jdbcType="VARCHAR"/>
<result property="account" column="account" jdbcType="VARCHAR"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
<result property="mobile" column="mobile" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="CHAR"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
<result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createdByNameName" column="created_by_name_name" jdbcType="VARCHAR"/>
<result property="updateByNameName" column="update_by_name_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,username,account,
password,mobile,status,
remark,created_at,updated_at,
del_flag,created_by_name_name,update_by_name_name
</sql>
</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.makeit.mapper.saas.SaasUserRoleMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.SaasUserRole">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="userId" column="user_id" jdbcType="VARCHAR"/>
<result property="roleId" column="role_id" jdbcType="VARCHAR"/>
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
<result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createdByName" column="created_by_name" jdbcType="VARCHAR"/>
<result property="updateByName" column="update_by_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,user_id,role_id,
created_at,updated_at,del_flag,
created_by_name,update_by_name
</sql>
</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.makeit.mapper.saas.TntAuthMenuMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.TntAuthMenu">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="parentId" column="parent_id" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="requestPath" column="request_path" jdbcType="VARCHAR"/>
<result property="sort" column="sort" jdbcType="INTEGER"/>
<result property="icon" column="icon" jdbcType="VARCHAR"/>
<result property="resourceType" column="resource_type" jdbcType="VARCHAR"/>
<result property="hiddenStatus" column="hidden_status" jdbcType="CHAR"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
<result property="cacheStatus" column="cache_status" jdbcType="CHAR"/>
<result property="status" column="status" jdbcType="CHAR"/>
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
<result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createdByName" column="created_by_name" jdbcType="VARCHAR"/>
<result property="updateByName" column="update_by_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,parent_id,name,
request_path,sort,icon,
resource_type,hidden_status,remark,
cache_status,status,created_at,
updated_at,del_flag,created_by_name,
update_by_name
</sql>
</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.makeit.mapper.saas.TntTenantMapper">
<resultMap id="BaseResultMap" type="com.makeit.entity.saas.TntTenant">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="status" column="status" jdbcType="VARCHAR"/>
<result property="startTime" column="start_time" jdbcType="TIMESTAMP"/>
<result property="endTime" column="end_time" jdbcType="TIMESTAMP"/>
<result property="tntUserId" column="tnt_user_id" jdbcType="VARCHAR"/>
<result property="menuList" column="menu_list" jdbcType="VARCHAR"/>
<result property="alertChannel" column="alert_channel" jdbcType="VARCHAR"/>
<result property="createdAt" column="created_at" jdbcType="TIMESTAMP"/>
<result property="updatedAt" column="updated_at" jdbcType="TIMESTAMP"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createdByName" column="created_by_name" jdbcType="VARCHAR"/>
<result property="updateByName" column="update_by_name" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,name,status,
start_time,end_time,tnt_user_id,
menu_list,alert_channel,created_at,
updated_at,del_flag,created_by_name,
update_by_name
</sql>
</mapper>
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: com.makeit:server-common:1.0.0" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" /> <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.22" level="project" />
<orderEntry type="module" module-name="server-common" /> <orderEntry type="module" module-name="server-common" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.5.6" level="project" />
...@@ -62,6 +61,12 @@ ...@@ -62,6 +61,12 @@
<orderEntry type="library" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" /> <orderEntry type="library" name="Maven: com.sun.activation:jakarta.activation:1.2.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.3.4" level="project" /> <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.3.4" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.3.4" level="project" /> <orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.3.4" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.3.4" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.3.4" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.3.4" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.7" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.5.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.6" level="project" /> <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.5.6" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" /> <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
...@@ -288,12 +293,5 @@ ...@@ -288,12 +293,5 @@
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.8.3" level="project" /> <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.8.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.velocity:velocity-engine-core:2.0" level="project" /> <orderEntry type="library" name="Maven: org.apache.velocity:velocity-engine-core:2.0" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.32" level="project" /> <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.32" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.4.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.0" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.5" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
</component> </component>
</module> </module>
\ No newline at end of file
...@@ -48,12 +48,6 @@ ...@@ -48,12 +48,6 @@
<version>2.0</version> <version>2.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -84,4 +84,6 @@ maven: ...@@ -84,4 +84,6 @@ maven:
profile: profile:
redis: redis:
prefix: prefix:
\ No newline at end of file
libreOffice: C:\\Program Files\\LibreOffice\\program\\soffice
\ No newline at end of file
...@@ -87,4 +87,4 @@ maven: ...@@ -87,4 +87,4 @@ maven:
profile: profile:
redis: redis:
prefix: prefix:
\ No newline at end of file
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.makeit.common.entity.BaseBusEntity;
import org.junit.jupiter.api.Test;
public class CodeGenerator {
@Test
public void run() {
// 可多表 用,隔开
//String tables_name = "address";
//String tables_name = "address,admin,admin_province,admin_role,advertisement,advertisement_city,advertisement_day,advertisement_price,advertisement_price_rule,agreement,agriculture_goods,agriculture_goods_bid,agriculture_goods_category,area,area_info,contractor,dictionary_data,goods,goods_category,goods_order,goods_town,info_top_price,job,job_category,job_category_job,land,land_bid,land_bid_user,land_order,operation_log,permission,platform,point,point_rule,publish_price,role,role_permission,rural,rural_category,rural_unit,sensitive_word,supplier,template,tree,user,user_audit";
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
// 生成路径
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("eugene young");
gc.setOpen(false); //生成后是否打开资源管理器
gc.setFileOverride(false); //重新生成时文件是否覆盖
//UserService
gc.setServiceName("%sService"); //去掉Service接口的首字母I
gc.setIdType(IdType.AUTO); //主键策略-主键为Long类型 ***
//gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型 ***
gc.setSwagger2(true);//开启Swagger2模式
//gc.setBaseColumnList(true);
//gc.setBaseResultMap(true);
mpg.setGlobalConfig(gc);
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
// 8.0及以上的数据库配置 5.6自行百度
dsc.setUrl("jdbc:mysql://124.71.12.92:3306/dev_sz_tianma?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&autoReconnect=true");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("dev_sz_tianma");
dsc.setPassword("Dev_sz%!2346Tianma");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
//包 com.atguigu.eduservice
pc.setParent("com.makeit");
pc.setModuleName("server-generator"); //模块名
pc.setModuleName(null);
//包 com.atguigu.eduservice.com.xxl.job.admin.controller
pc.setController("com.makeit.controller");
pc.setEntity("entity");
pc.setService("com.makeit.service");
pc.setMapper("mappers");
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/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
*/
mpg.setCfg(cfg);
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
// 使用重点 下列字段填写表名 运行方法
// strategy.setInclude("edu_teacher","..."); // 多表-逆向工程
strategy.setInclude("ins_aging_oven","ins_aging_car","ins_aging_undesirable_phenomenon","ins_aging_exception_handle","ins_aging_fill_note");
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体属性时去掉表"_"前缀并且第一个字母大写 如:gmt_create -> gmtCreate
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
//strategy.setTableFillList(Arrays.asList(new TableFill("delete_status", FieldFill.INSERT),new TableFill("gmt_create", FieldFill.INSERT),new TableFill("gmt_modified", FieldFill.INSERT_UPDATE)));
//strategy.setLogicDeleteFieldName("delete_status");
strategy.setSuperEntityClass(BaseBusEntity.class);
mpg.setStrategy(strategy);
// 6、执行
mpg.execute();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment