| @@ -173,10 +173,19 @@ | |||
| <version>4.12</version> | |||
| <scope>test</scope> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>commons-codec</groupId> | |||
| <artifactId>commons-codec</artifactId> | |||
| <version>1.11</version> | |||
| </dependency> | |||
| <!-- 分页支持pageHelper --> | |||
| <dependency> | |||
| <groupId>cn.hutool</groupId> | |||
| <artifactId>hutool-all</artifactId> | |||
| <version>4.6.10</version> | |||
| </dependency> | |||
| </dependencies> | |||
| @@ -0,0 +1,46 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotBlank; | |||
| import javax.validation.constraints.NotEmpty; | |||
| import javax.validation.constraints.Size; | |||
| import java.util.List; | |||
| /** | |||
| * 添加角色 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-25 | |||
| **/ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "添加角色", description = "添加系统角色参数对象") | |||
| public class AddSysRoleParam { | |||
| @ApiModelProperty(value = "角色名称") | |||
| @NotBlank(message = "角色名称不能为空") | |||
| private String name; | |||
| @ApiModelProperty(value = "角色唯一编码") | |||
| private String code; | |||
| @ApiModelProperty(value = "角色类型") | |||
| private Integer type; | |||
| @ApiModelProperty(value = "角色状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "权限id列表") | |||
| @NotEmpty(message = "权限集合不能为空") | |||
| @Size(max = 1000, message = "权限集合超过上限") | |||
| private List<String> permissionIds; | |||
| } | |||
| @@ -0,0 +1,18 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import lombok.Data; | |||
| @Data | |||
| public class IsEnableSysOrganizeParam { | |||
| //用户Id | |||
| private Long userId; | |||
| //组织Id | |||
| private Long orgId; | |||
| public IsEnableSysOrganizeParam() { | |||
| } | |||
| public IsEnableSysOrganizeParam(Long userId, Long orgId) { | |||
| this.userId = userId; | |||
| this.orgId = orgId; | |||
| } | |||
| } | |||
| @@ -0,0 +1,60 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.xdf.creative.base.params.QueryParam; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotNull; | |||
| import java.util.Date; | |||
| /** | |||
| * <p> | |||
| * 组织信息 查询参数对象 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-11-05 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysOrganizeQueryParam对象", description = "组织信息查询参数") | |||
| public class SysOrganizeQueryParam extends QueryParam { | |||
| private static final long serialVersionUID = 1L; | |||
| @TableId(value = "id", type = IdType.AUTO) | |||
| @NotNull(message = "不能为空") | |||
| private Long id; | |||
| @ApiModelProperty(value = "组织名称") | |||
| private String organizeName; | |||
| @ApiModelProperty(value = "管辖区域") | |||
| private Long popedom_id; | |||
| @ApiModelProperty(value = "类型: 0 普通用户 1、园区用户 2 区文创办 3市文创办 8后台管理 ") | |||
| private Integer organizeType; | |||
| @ApiModelProperty(value = "是否为系统组织: 0 否 1是") | |||
| private Integer systemCreate; | |||
| @ApiModelProperty(value = "系统状态 0停用 1启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "修该时间") | |||
| private Date updateTime; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "父id") | |||
| private Long parentId; | |||
| } | |||
| @@ -0,0 +1,79 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.xdf.creative.base.params.QueryParam; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| import java.util.Date; | |||
| /** | |||
| * <p> | |||
| * 系统权限 查询参数对象 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-11-07 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysPermissionQueryParam对象", description = "系统权限查询参数") | |||
| public class SysPermissionQueryParam extends QueryParam { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "主键") | |||
| @TableId(value = "id", type = IdType.ID_WORKER) | |||
| private Long id; | |||
| @ApiModelProperty(value = "权限名称") | |||
| private String name; | |||
| private String resourceId; | |||
| @ApiModelProperty(value = "父id") | |||
| private String parentResourceId; | |||
| @ApiModelProperty(value = "路径") | |||
| private String url; | |||
| @ApiModelProperty(value = "唯一编码") | |||
| private String code; | |||
| @ApiModelProperty(value = "图标") | |||
| private String icon; | |||
| @ApiModelProperty(value = "类型,0 目录 1:菜单,2:按钮 3 url") | |||
| private Integer type; | |||
| @ApiModelProperty(value = "层级,1:第一级,2:第二级,N:第N级") | |||
| private Integer level; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "排序") | |||
| private Integer sort; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除") | |||
| private Integer deleted; | |||
| @ApiModelProperty(value = "版本") | |||
| private Integer version; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| private Date updateTime; | |||
| } | |||
| @@ -0,0 +1,24 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import com.xdf.creative.base.params.QueryParam; | |||
| import io.swagger.annotations.ApiModel; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| /** | |||
| * <pre> | |||
| * 角色权限关系 查询参数对象 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-24 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysRolePermissionQueryParam对象", description = "角色权限关系查询参数") | |||
| public class SysRolePermissionQueryParam extends QueryParam { | |||
| private static final long serialVersionUID = 1L; | |||
| } | |||
| @@ -0,0 +1,24 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import com.xdf.creative.base.params.QueryParam; | |||
| import io.swagger.annotations.ApiModel; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| /** | |||
| * <pre> | |||
| * 系统角色 查询参数对象 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-24 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysRoleQueryParam对象", description = "系统角色查询参数") | |||
| public class SysRoleQueryParam extends QueryParam { | |||
| private static final long serialVersionUID = 1L; | |||
| } | |||
| @@ -0,0 +1,24 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import com.xdf.creative.base.params.QueryParam; | |||
| import io.swagger.annotations.ApiModel; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| /** | |||
| * <pre> | |||
| * 系统用户 查询参数对象 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-24 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysUserQueryParam对象", description = "系统用户查询参数") | |||
| public class SysUserQueryParam extends QueryParam { | |||
| private static final long serialVersionUID = 1L; | |||
| } | |||
| @@ -0,0 +1,45 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.xdf.creative.base.params.QueryParam; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotNull; | |||
| import java.util.Date; | |||
| /** | |||
| * <p> | |||
| * 系统用户角色表 查询参数对象 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-30 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysUserRoleQueryParam对象", description = "系统用户角色表查询参数") | |||
| public class SysUserRoleQueryParam extends QueryParam { | |||
| private static final long serialVersionUID = 1L; | |||
| @TableId(value = "id", type = IdType.AUTO) | |||
| @NotNull(message = "不能为空") | |||
| private Long id; | |||
| @ApiModelProperty(value = "用户ID") | |||
| private Long userId; | |||
| @ApiModelProperty(value = "角色ID") | |||
| private Long roleId; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| } | |||
| @@ -0,0 +1,37 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotEmpty; | |||
| import javax.validation.constraints.NotNull; | |||
| /** | |||
| * 修改密码参数 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-27 | |||
| **/ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| public class UpdatePasswordParam { | |||
| @ApiModelProperty("用户id") | |||
| @NotNull(message = "用户id不能为空") | |||
| private Long userId; | |||
| @ApiModelProperty("原密码") | |||
| @NotEmpty(message = "原密码不能为空") | |||
| private String oldPassword; | |||
| @ApiModelProperty("新密码") | |||
| @NotEmpty(message = "新密码不能为空") | |||
| private String newPassword; | |||
| @ApiModelProperty("新密码") | |||
| @NotEmpty(message = "确认密码不能为空") | |||
| private String confirmPassword; | |||
| } | |||
| @@ -0,0 +1,48 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotBlank; | |||
| import javax.validation.constraints.NotEmpty; | |||
| import javax.validation.constraints.NotNull; | |||
| import javax.validation.constraints.Size; | |||
| import java.util.List; | |||
| /** | |||
| * 添加角色 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-25 | |||
| **/ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "添加角色", description = "添加系统角色参数对象") | |||
| public class UpdateSysRoleParam { | |||
| @ApiModelProperty(value = "主键") | |||
| @NotNull(message = "主键不能为空") | |||
| private Long id; | |||
| @ApiModelProperty(value = "角色名称") | |||
| @NotBlank(message = "角色名称不能为空") | |||
| private String name; | |||
| @ApiModelProperty(value = "角色类型") | |||
| private Integer type; | |||
| @ApiModelProperty(value = "角色状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "权限id列表") | |||
| @NotEmpty(message = "权限集合不能为空") | |||
| @Size(max = 1000, message = "权限集合超过上限") | |||
| private List<String> permissionIds; | |||
| } | |||
| @@ -0,0 +1,55 @@ | |||
| package com.xdf.creative.base.params.creative; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotNull; | |||
| import java.util.Set; | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "SaveSysUserParam对象", description = "添加系统用户对象") | |||
| public class UpdateUserParam { | |||
| @ApiModelProperty(value = "主键") | |||
| @TableId(value = "id", type = IdType.ID_WORKER) | |||
| @NotNull(message = "用户id不能为空") | |||
| private Long id; | |||
| @ApiModelProperty(value = "昵称") | |||
| private String nickname; | |||
| @ApiModelProperty(value = "密码") | |||
| private String password; | |||
| @ApiModelProperty(value = "手机号码") | |||
| private String phone; | |||
| @ApiModelProperty(value = "邮箱") | |||
| private String email; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用,2:锁定") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "角色id") | |||
| private Set<Long> roleId; | |||
| @ApiModelProperty(value = "性别,0:女,1:男,默认1") | |||
| private Integer gender; | |||
| @ApiModelProperty(value = "头像") | |||
| private String head; | |||
| @ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除") | |||
| private Integer deleted; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "组织id") | |||
| private Long organizeId; | |||
| } | |||
| @@ -0,0 +1,58 @@ | |||
| package com.xdf.creative.base.vo.creative; | |||
| import com.alibaba.fastjson.annotation.JSONField; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * <p> | |||
| * 组织信息 查询结果对象 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-11-05 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "SysOrganizeQueryVo对象", description = "组织信息查询参数") | |||
| public class SysOrganizeQueryVo implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private Long id; | |||
| @ApiModelProperty(value = "组织名称") | |||
| private String organizeName; | |||
| @ApiModelProperty(value = "管辖区域") | |||
| private Long popedomId; | |||
| @ApiModelProperty(value = "类型: 0 普通用户 1、园区用户 2 区文创办 3市文创办 8后台管理 ") | |||
| private Integer organizeType; | |||
| @ApiModelProperty(value = "是否为系统组织: 0 否 1是") | |||
| private Integer systemCreate; | |||
| @ApiModelProperty(value = "系统状态 0停用 1启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "修该时间") | |||
| @JSONField(format = "yyyy-MM-dd HH:mm:ss") | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date updateTime; | |||
| @ApiModelProperty(value = "创建时间") | |||
| @JSONField(format = "yyyy-MM-dd HH:mm:ss") | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "父id") | |||
| private Long parentId; | |||
| } | |||
| @@ -0,0 +1,72 @@ | |||
| package com.xdf.creative.base.vo.creative; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * <p> | |||
| * 系统权限 查询结果对象 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-11-07 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "SysPermissionQueryVo对象", description = "系统权限查询参数") | |||
| public class SysPermissionQueryVo implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "主键") | |||
| private Long id; | |||
| @ApiModelProperty(value = "权限名称") | |||
| private String name; | |||
| private String resourceId; | |||
| @ApiModelProperty(value = "父id") | |||
| private String parentResourceId; | |||
| @ApiModelProperty(value = "路径") | |||
| private String url; | |||
| @ApiModelProperty(value = "唯一编码") | |||
| private String code; | |||
| @ApiModelProperty(value = "图标") | |||
| private String icon; | |||
| @ApiModelProperty(value = "类型,0 目录 1:菜单,2:按钮 3 url") | |||
| private Integer type; | |||
| @ApiModelProperty(value = "层级,1:第一级,2:第二级,N:第N级") | |||
| private Integer level; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "排序") | |||
| private Integer sort; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除") | |||
| private Integer deleted; | |||
| @ApiModelProperty(value = "版本") | |||
| private Integer version; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| private Date updateTime; | |||
| } | |||
| @@ -0,0 +1,89 @@ | |||
| /* | |||
| * Copyright 2019-2029 geekidea(https://github.com/geekidea) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package com.xdf.creative.base.vo.creative; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.io.Serializable; | |||
| import java.util.ArrayList; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| /** | |||
| * 系统权限树形列表VO | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-26 | |||
| **/ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "SysPermissionTreeVo对象", description = "系统权限树形列表") | |||
| public class SysPermissionTreeVo implements Serializable { | |||
| private static final long serialVersionUID = 2738804574228359190L; | |||
| @ApiModelProperty(value = "主键") | |||
| private Long id; | |||
| @ApiModelProperty(value = "权限名称") | |||
| private String name; | |||
| private String resourceId; | |||
| @ApiModelProperty(value = "父id") | |||
| private String parentResourceId; | |||
| @ApiModelProperty(value = "路径") | |||
| private String url; | |||
| @ApiModelProperty(value = "唯一编码") | |||
| private String code; | |||
| @ApiModelProperty(value = "图标") | |||
| private String icon; | |||
| @ApiModelProperty(value = "类型,1:菜单,2:按钮") | |||
| private Integer type; | |||
| @ApiModelProperty(value = "层级,1:第一级,2:第二级,N:第N级") | |||
| private Integer level; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "排序") | |||
| private Integer sort; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "版本") | |||
| private Integer version; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| private Date updateTime; | |||
| @ApiModelProperty(value = "子节点集合") | |||
| private List<SysPermissionTreeVo> children = new ArrayList<>(); | |||
| } | |||
| @@ -0,0 +1,65 @@ | |||
| /* | |||
| * Copyright 2019-2029 geekidea(https://github.com/geekidea) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package com.xdf.creative.base.vo.creative; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * <pre> | |||
| * 角色权限关系 查询结果对象 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-24 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "SysRolePermissionQueryVo对象", description = "角色权限关系查询参数") | |||
| public class SysRolePermissionQueryVo implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "主键") | |||
| private Long id; | |||
| @ApiModelProperty(value = "角色id") | |||
| private Long roleId; | |||
| @ApiModelProperty(value = "权限id") | |||
| private Long permissionId; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "版本") | |||
| private Integer version; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| private Date updateTime; | |||
| } | |||
| @@ -0,0 +1,68 @@ | |||
| /* | |||
| * Copyright 2019-2029 geekidea(https://github.com/geekidea) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package com.xdf.creative.base.vo.creative; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * <pre> | |||
| * 系统角色 查询结果对象 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-24 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "SysRoleQueryVo对象", description = "系统角色查询参数") | |||
| public class SysRoleQueryVo implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "主键") | |||
| private Long id; | |||
| @ApiModelProperty(value = "角色名称") | |||
| private String name; | |||
| @ApiModelProperty(value = "角色唯一编码") | |||
| private String code; | |||
| @ApiModelProperty(value = "角色类型") | |||
| private Integer type; | |||
| @ApiModelProperty(value = "角色状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "版本") | |||
| private Integer version; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| private Date updateTime; | |||
| } | |||
| @@ -0,0 +1,102 @@ | |||
| /* | |||
| * Copyright 2019-2029 geekidea(https://github.com/geekidea) | |||
| * | |||
| * Licensed under the Apache License, Version 2.0 (the "License"); | |||
| * you may not use this file except in compliance with the License. | |||
| * You may obtain a copy of the License at | |||
| * | |||
| * http://www.apache.org/licenses/LICENSE-2.0 | |||
| * | |||
| * Unless required by applicable law or agreed to in writing, software | |||
| * distributed under the License is distributed on an "AS IS" BASIS, | |||
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| * See the License for the specific language governing permissions and | |||
| * limitations under the License. | |||
| */ | |||
| package com.xdf.creative.base.vo.creative; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 系统用户 查询结果对象 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-24 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "SysUserQueryVo对象", description = "系统用户查询参数") | |||
| public class SysUserQueryVo implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "主键") | |||
| private Long id; | |||
| @ApiModelProperty(value = "用户名") | |||
| private String username; | |||
| @ApiModelProperty(value = "昵称") | |||
| private String nickname; | |||
| @ApiModelProperty(value = "密码") | |||
| private String password; | |||
| @ApiModelProperty(value = "盐值") | |||
| private String salt; | |||
| @ApiModelProperty(value = "手机号码") | |||
| private String phone; | |||
| @ApiModelProperty(value = "邮箱") | |||
| private String email; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用,2:锁定") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "角色id") | |||
| @TableField(exist = false) | |||
| private Set<Long> roleId; | |||
| @ApiModelProperty(value = "性别,0:女,1:男,默认1") | |||
| private Integer gender; | |||
| @ApiModelProperty(value = "头像") | |||
| private String head; | |||
| @ApiModelProperty(value = "0 普通用户 1、园区 2 区文创办 3 市文创办 8后台管理") | |||
| private Integer userType; | |||
| @ApiModelProperty(value = "组织id") | |||
| private Long organizeId; | |||
| @ApiModelProperty(value = "创建者id") | |||
| private Long createUserId; | |||
| @ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除") | |||
| private Integer deleted; | |||
| @ApiModelProperty(value = "版本") | |||
| private Integer version; | |||
| @ApiModelProperty(value = "remark") | |||
| private String remark; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| private Date updateTime; | |||
| } | |||
| @@ -0,0 +1,36 @@ | |||
| package com.xdf.creative.base.vo.creative; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| /** | |||
| * <p> | |||
| * 系统用户角色表 查询结果对象 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-30 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel(value = "SysUserRoleQueryVo对象", description = "系统用户角色表查询参数") | |||
| public class SysUserRoleQueryVo implements Serializable { | |||
| private static final long serialVersionUID = 1L; | |||
| private Long id; | |||
| @ApiModelProperty(value = "用户ID") | |||
| private Long userId; | |||
| @ApiModelProperty(value = "角色ID") | |||
| private Long roleId; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| } | |||
| @@ -0,0 +1,15 @@ | |||
| package com.xdf.creative.enums; | |||
| /** | |||
| * @author DeanYe | |||
| * @date 2018-11-08 | |||
| */ | |||
| public interface BaseTypeStateEnum { | |||
| Integer getKey(); | |||
| String getValue(); | |||
| } | |||
| @@ -0,0 +1,30 @@ | |||
| package com.xdf.creative.enums; | |||
| /** | |||
| * @author DeanYe | |||
| * @date 2019-10-24 | |||
| **/ | |||
| public enum LevelEnum implements BaseTypeStateEnum { | |||
| ONE(1, "一级菜单"), | |||
| TWO(2, "二级菜单"), | |||
| THREE(3, "功能菜单"); | |||
| private Integer key; | |||
| private String value; | |||
| LevelEnum(Integer key, String value) { | |||
| this.key = key; | |||
| this.value = value; | |||
| } | |||
| @Override | |||
| public Integer getKey() { | |||
| return this.key; | |||
| } | |||
| @Override | |||
| public String getValue() { | |||
| return this.value; | |||
| } | |||
| } | |||
| @@ -0,0 +1,22 @@ | |||
| package com.xdf.creative.enums; | |||
| /** | |||
| * @author DeanYe | |||
| * @date 2019-10-24 | |||
| **/ | |||
| public enum StateEnum implements BaseTypeStateEnum { | |||
| DISABLE, ENABLE; | |||
| @Override | |||
| public Integer getKey() { | |||
| return this.ordinal(); | |||
| } | |||
| @Override | |||
| public String getValue() { | |||
| return this.name(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,91 @@ | |||
| package com.xdf.creative.module.controller; | |||
| import com.xdf.creative.base.controller.BaseController; | |||
| import com.xdf.creative.base.params.IdParam; | |||
| import com.xdf.creative.base.params.creative.SysOrganizeQueryParam; | |||
| import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo; | |||
| import com.xdf.creative.module.entity.SysOrganize; | |||
| import com.xdf.creative.module.service.SysOrganizeService; | |||
| import com.xdf.creative.util.page.ApiResult; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| 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.RestController; | |||
| import javax.validation.Valid; | |||
| /** | |||
| * <p> | |||
| * 组织信息 前端控制器 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-11-05 | |||
| */ | |||
| @Slf4j | |||
| @RestController | |||
| @RequestMapping("/sysOrganize") | |||
| @Api("组织信息 API") | |||
| public class SysOrganizeController extends BaseController { | |||
| @Autowired | |||
| private SysOrganizeService sysOrganizeService; | |||
| /** | |||
| * 添加组织信息 | |||
| */ | |||
| @PostMapping("/add") | |||
| @ApiOperation(value = "添加SysOrganize对象", notes = "添加组织信息", response = ApiResult.class) | |||
| public ApiResult<Boolean> addSysOrganize(@Valid @RequestBody SysOrganize sysOrganize) throws Exception { | |||
| boolean flag = sysOrganizeService.save(sysOrganize); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 修改组织信息 | |||
| */ | |||
| @PostMapping("/update") | |||
| @ApiOperation(value = "修改SysOrganize对象", notes = "修改组织信息", response = ApiResult.class) | |||
| public ApiResult<Boolean> updateSysOrganize(@Valid @RequestBody SysOrganize sysOrganize) throws Exception { | |||
| boolean flag = sysOrganizeService.updateById(sysOrganize); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 删除组织信息 | |||
| */ | |||
| @PostMapping("/delete") | |||
| @ApiOperation(value = "删除SysOrganize对象", notes = "删除组织信息", response = ApiResult.class) | |||
| public ApiResult<Boolean> deleteSysOrganize(@Valid @RequestBody IdParam idParam) throws Exception { | |||
| boolean flag = sysOrganizeService.removeById(idParam.getId()); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 获取组织信息 | |||
| */ | |||
| @PostMapping("/getSysOrganize") | |||
| @ApiOperation(value = "获取SysOrganize对象详情", notes = "查看组织信息", response = SysOrganizeQueryVo.class) | |||
| public ApiResult<SysOrganizeQueryVo> getSysOrganize(@Valid @RequestBody IdParam idParam) throws Exception { | |||
| SysOrganizeQueryVo sysOrganizeQueryVo = sysOrganizeService.getSysOrganizeById(idParam.getId()); | |||
| return ApiResult.ok(sysOrganizeQueryVo); | |||
| } | |||
| /** | |||
| * 组织信息分页列表 | |||
| */ | |||
| @PostMapping("/getPageList") | |||
| @ApiOperation(value = "获取SysOrganize分页列表", notes = "组织信息分页列表", response = SysOrganizeQueryVo.class) | |||
| public ApiResult<PageTool<SysOrganizeQueryVo>> getSysOrganizePageList(@Valid @RequestBody SysOrganizeQueryParam sysOrganizeQueryParam) throws Exception { | |||
| PageTool<SysOrganizeQueryVo> pageList = sysOrganizeService.getSysOrganizePageList(sysOrganizeQueryParam); | |||
| return ApiResult.ok(pageList); | |||
| } | |||
| } | |||
| @@ -0,0 +1,170 @@ | |||
| package com.xdf.creative.module.controller; | |||
| import com.xdf.creative.base.controller.BaseController; | |||
| import com.xdf.creative.base.params.creative.SysPermissionQueryParam; | |||
| import com.xdf.creative.base.vo.creative.SysPermissionQueryVo; | |||
| import com.xdf.creative.module.entity.SysPermission; | |||
| import com.xdf.creative.module.service.SysPermissionService; | |||
| import com.xdf.creative.util.page.ApiResult; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import com.xdf.creative.util.tree.TreeConfig; | |||
| import com.xdf.creative.util.tree.Utils; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.validation.Valid; | |||
| import java.util.List; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 系统权限 前端控制器 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Slf4j | |||
| @RestController | |||
| @RequestMapping("/sysPermission") | |||
| @Api("系统权限 API") | |||
| public class SysPermissionController extends BaseController { | |||
| @Autowired | |||
| private SysPermissionService sysPermissionService; | |||
| /** | |||
| * 添加系统权限 | |||
| */ | |||
| @PostMapping("/add") | |||
| @ApiOperation(value = "添加SysPermission对象", notes = "添加系统权限", response = ApiResult.class) | |||
| public ApiResult<Boolean> addSysPermission(@Valid @RequestBody SysPermission sysPermission) throws Exception { | |||
| boolean flag = sysPermissionService.saveSysPermission(sysPermission); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 修改系统权限 | |||
| */ | |||
| @PostMapping("/update") | |||
| @ApiOperation(value = "修改SysPermission对象", notes = "修改系统权限", response = ApiResult.class) | |||
| public ApiResult<Boolean> updateSysPermission(@Valid @RequestBody SysPermission sysPermission) throws Exception { | |||
| boolean flag = sysPermissionService.updateSysPermission(sysPermission); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 删除系统权限 | |||
| */ | |||
| @PostMapping("/deleteSysPermissionById") | |||
| @ApiOperation(value = "删除SysPermission对象", notes = "删除系统权限", response = ApiResult.class) | |||
| public ApiResult<Boolean> deleteSysPermission(String resourceId) throws Exception { | |||
| boolean flag = sysPermissionService.deleteSysPermission(resourceId); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 获取系统权限 | |||
| */ | |||
| @GetMapping("/getSysPermissionById") | |||
| @ApiOperation(value = "获取SysPermission对象详情", notes = "查看系统权限", response = SysPermissionQueryVo.class) | |||
| public ApiResult<SysPermissionQueryVo> getSysPermission(Long id) throws Exception { | |||
| SysPermissionQueryVo sysPermissionQueryVo = sysPermissionService.getSysPermissionById(id); | |||
| return ApiResult.ok(sysPermissionQueryVo); | |||
| } | |||
| /** | |||
| * 系统权限分页列表 | |||
| */ | |||
| @PostMapping("/getPageList") | |||
| @ApiOperation(value = "获取SysPermission分页列表", notes = "系统权限分页列表", response = SysPermissionQueryVo.class) | |||
| public ApiResult<PageTool<SysPermissionQueryVo>> getSysPermissionPageList(@Valid @RequestBody SysPermissionQueryParam sysPermissionQueryParam) throws Exception { | |||
| PageTool<SysPermissionQueryVo> paging = sysPermissionService.getSysPermissionPageList(sysPermissionQueryParam); | |||
| return ApiResult.ok(paging); | |||
| } | |||
| /** | |||
| * 获取所有菜单列表 | |||
| */ | |||
| @PostMapping("/getAllMenuList") | |||
| @ApiOperation(value = "获取所有菜单列表", notes = "获取所有菜单列表", response = SysPermission.class) | |||
| public ApiResult<SysPermission> getAllMenuList() throws Exception { | |||
| List<SysPermission> list = sysPermissionService.getAllMenuList(); | |||
| return ApiResult.ok(list); | |||
| } | |||
| /** | |||
| * 根据用户id获取菜单列表 | |||
| */ | |||
| @GetMapping("/getMenuListByUserId") | |||
| @ApiOperation(value = "根据用户id获取菜单列表", notes = "根据用户id获取菜单列表", response = SysPermission.class) | |||
| public ApiResult<SysPermission> getMenuListByUserId(Long userId) throws Exception { | |||
| List<SysPermission> list = sysPermissionService.getMenuListByUserId(userId); | |||
| return ApiResult.ok(list); | |||
| } | |||
| /** | |||
| * 根据请userId获取该用户权限路径集合 | |||
| */ | |||
| @RequestMapping(value = "/getPermissionUrlByUserId", method = {RequestMethod.POST, RequestMethod.GET}) | |||
| @ApiOperation(value = "根据请求路径获取该用户权限编码", notes = "根据请求路径获取该用户权限编码", response = ApiResult.class) | |||
| public ApiResult<Set<String>> getPermissionUrlByUserId(Long userId) throws Exception { | |||
| Set<String> permissionUrls = sysPermissionService.getPermissionUrlByUserId(userId); | |||
| return ApiResult.ok(permissionUrls); | |||
| } | |||
| /** | |||
| * 角色授权资源树 | |||
| */ | |||
| @PostMapping("/impowerResourceTreeList") | |||
| @ApiOperation(value = "获取所有菜单列表", notes = "获取所有菜单列表", response = SysPermission.class) | |||
| public ApiResult<SysPermission> impowerResourceTreeList(Long userId) throws Exception { | |||
| List<Object> list = sysPermissionService.impowerResourceTreeList(userId); | |||
| TreeConfig config = new TreeConfig("resourceId", "parentResourceId", "parentResourceId", "1", ""); | |||
| return ApiResult.ok(Utils.tree(list, config)); | |||
| } | |||
| @RequestMapping(value = "/setPermissionToRoleByUserId", method = {RequestMethod.GET}) | |||
| @ApiOperation(value = "给用户角色授权", notes = "给用户角色授权", response = SysPermission.class) | |||
| public ApiResult<Boolean> setPermissionToRoleByUserId(Long userId, Long roleId) throws Exception { | |||
| boolean isSucceed = sysPermissionService.setPermissionToRoleByUserId(userId, roleId); | |||
| return ApiResult.result(isSucceed); | |||
| } | |||
| @RequestMapping(value = "/getTreeMenusByUserId", method = {RequestMethod.GET}) | |||
| @ApiOperation(value = "根据用户ID获取树形菜单", notes = "根据用户ID获取树形菜单", response = SysPermission.class) | |||
| public ApiResult<List<Object>> getTreeMenusByUserId(Long userId) throws Exception { | |||
| List<Object> treeMenusByUserId = sysPermissionService.getTreeMenusByUserId(userId); | |||
| return ApiResult.ok(treeMenusByUserId); | |||
| } | |||
| @RequestMapping(value = "/getSkipAuthUrls", method = {RequestMethod.GET}) | |||
| @ApiOperation(value = "获取无需鉴权URL", notes = "获取无需鉴权URL", response = SysPermission.class) | |||
| public ApiResult<List<String>> getSkipAuthUrls() throws Exception { | |||
| List<String> skipAuthUrls = sysPermissionService.getSkipAuthUrls(); | |||
| return ApiResult.ok(skipAuthUrls); | |||
| } | |||
| @RequestMapping(value = "/refreshSkipAuthUrls", method = {RequestMethod.POST}) | |||
| @ApiOperation(value = "刷新SkipAuthUrls", notes = "刷新SkipAuthUrls", response = SysPermission.class) | |||
| public ApiResult refreshSkipAuthUrls() throws Exception { | |||
| List<String> skipAuthUrls = sysPermissionService.getSkipAuthUrls(); | |||
| // redisTemplate.convertAndSend("skipAuthUrls", skipAuthUrls);//发送对列消息 | |||
| return ApiResult.ok(); | |||
| } | |||
| } | |||
| @@ -0,0 +1,99 @@ | |||
| package com.xdf.creative.module.controller; | |||
| import com.xdf.creative.base.controller.BaseController; | |||
| import com.xdf.creative.base.params.creative.AddSysRoleParam; | |||
| import com.xdf.creative.base.params.creative.SysRoleQueryParam; | |||
| import com.xdf.creative.base.params.creative.UpdateSysRoleParam; | |||
| import com.xdf.creative.base.vo.creative.SysRoleQueryVo; | |||
| import com.xdf.creative.module.service.SysRoleService; | |||
| import com.xdf.creative.util.page.ApiResult; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.validation.Valid; | |||
| import java.util.List; | |||
| /** | |||
| * <pre> | |||
| * 系统角色 前端控制器 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Slf4j | |||
| @RestController | |||
| @RequestMapping("/sysRole") | |||
| @Api("系统角色 API") | |||
| public class SysRoleController extends BaseController { | |||
| @Autowired | |||
| private SysRoleService sysRoleService; | |||
| /** | |||
| * 添加系统角色 | |||
| */ | |||
| @PostMapping("/add") | |||
| @ApiOperation(value = "添加SysRole对象", notes = "添加系统角色", response = ApiResult.class) | |||
| public ApiResult<Boolean> addSysRole(@Valid @RequestBody AddSysRoleParam addSysRoleParam) throws Exception { | |||
| boolean flag = sysRoleService.saveSysRole(addSysRoleParam); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 修改系统角色 | |||
| */ | |||
| @PostMapping("/update") | |||
| @ApiOperation(value = "修改SysRole对象", notes = "修改系统角色", response = ApiResult.class) | |||
| public ApiResult<Boolean> updateSysRole(@Valid @RequestBody UpdateSysRoleParam updateSysRoleParam) throws Exception { | |||
| boolean flag = sysRoleService.updateSysRole(updateSysRoleParam); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 删除系统角色 | |||
| */ | |||
| @PostMapping("/delete/{id}") | |||
| @ApiOperation(value = "删除SysRole对象", notes = "删除系统角色", response = ApiResult.class) | |||
| public ApiResult<Boolean> deleteSysRole(@PathVariable("id") Long id) throws Exception { | |||
| boolean flag = sysRoleService.deleteSysRole(id); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 获取系统角色 | |||
| */ | |||
| @GetMapping("/getSysRoleInfo") | |||
| @ApiOperation(value = "获取SysRole对象详情", notes = "查看系统角色", response = SysRoleQueryVo.class) | |||
| public ApiResult<SysRoleQueryVo> getSysRole(Long id) throws Exception { | |||
| SysRoleQueryVo sysRoleQueryVo = sysRoleService.getSysRoleById(id); | |||
| return ApiResult.ok(sysRoleQueryVo); | |||
| } | |||
| /** | |||
| * 系统角色分页列表 | |||
| */ | |||
| @PostMapping("/getPageList") | |||
| @ApiOperation(value = "获取SysRole分页列表", notes = "系统角色分页列表", response = SysRoleQueryVo.class) | |||
| public ApiResult<PageTool<SysRoleQueryVo>> getSysRolePageList(@Valid @RequestBody SysRoleQueryParam sysRoleQueryParam) throws Exception { | |||
| PageTool<SysRoleQueryVo> pageList = sysRoleService.getSysRolePageList(sysRoleQueryParam); | |||
| return ApiResult.ok(pageList); | |||
| } | |||
| /** | |||
| * 根据UserId系统角色列表 | |||
| */ | |||
| @RequestMapping(value = "/getUserRoleByUserId", method = {RequestMethod.GET, RequestMethod.POST}) | |||
| @ApiOperation(value = "获取SysRole列表", notes = "系统角色列表", response = SysRoleQueryVo.class) | |||
| public ApiResult<List<SysRoleQueryVo>> getUserRoleByUserId(@RequestParam Long userId) { | |||
| List<SysRoleQueryVo> vos = sysRoleService.getUserRoleByUserId(userId); | |||
| return ApiResult.ok(vos); | |||
| } | |||
| } | |||
| @@ -0,0 +1,122 @@ | |||
| package com.xdf.creative.module.controller; | |||
| import com.xdf.creative.base.controller.BaseController; | |||
| import com.xdf.creative.base.params.creative.SysUserQueryParam; | |||
| import com.xdf.creative.base.params.creative.UpdatePasswordParam; | |||
| import com.xdf.creative.base.params.creative.UpdateUserParam; | |||
| import com.xdf.creative.base.vo.creative.SysUserQueryVo; | |||
| import com.xdf.creative.module.entity.SysUser; | |||
| import com.xdf.creative.module.service.SysUserService; | |||
| import com.xdf.creative.support.auth.LoginParam; | |||
| import com.xdf.creative.support.auth.LoginSysUserTokenVo; | |||
| import com.xdf.creative.util.page.ApiResult; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import io.swagger.annotations.Api; | |||
| import io.swagger.annotations.ApiOperation; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import javax.validation.Valid; | |||
| /** | |||
| * <pre> | |||
| * 系统用户 前端控制器 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Slf4j | |||
| @RestController | |||
| @RequestMapping("/sysUser") | |||
| @Api("系统用户 API") | |||
| public class SysUserController extends BaseController { | |||
| @Autowired | |||
| private SysUserService sysUserService; | |||
| @PostMapping("/login") | |||
| @ApiOperation(value = "登陆", notes = "系统用户登陆", response = ApiResult.class) | |||
| public ApiResult login(@Valid @RequestBody LoginParam loginParam, HttpServletResponse response) throws Exception { | |||
| LoginSysUserTokenVo loginSysUserTokenVo = sysUserService.login(loginParam); | |||
| // 设置token响应头 | |||
| // response.setHeader(JwtTokenUtil.getTokenName(), loginSysUserTokenVo.getToken()); | |||
| return ApiResult.ok(loginSysUserTokenVo, "登陆成功"); | |||
| } | |||
| /** | |||
| * 添加系统用户 | |||
| */ | |||
| @PostMapping("/add") | |||
| @ApiOperation(value = "添加SysUser对象", notes = "添加系统用户", response = ApiResult.class) | |||
| public ApiResult<Boolean> addSysUser(@Valid @RequestBody SysUser sysUser) throws Exception { | |||
| boolean flag = sysUserService.saveSysUser(sysUser); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 修改系统用户 | |||
| */ | |||
| @PostMapping("/update") | |||
| @ApiOperation(value = "修改SysUser对象", notes = "修改系统用户", response = ApiResult.class) | |||
| public ApiResult<Boolean> updateSysUser(@Valid @RequestBody UpdateUserParam updateUserParam) throws Exception { | |||
| boolean flag = sysUserService.updateSysUser(updateUserParam); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 删除系统用户 | |||
| */ | |||
| @RequestMapping(value = "/delete", method = {RequestMethod.GET, RequestMethod.POST}) | |||
| @ApiOperation(value = "删除SysUser对象", notes = "删除系统用户", response = ApiResult.class) | |||
| public ApiResult<Boolean> deleteSysUser(Long id) throws Exception { | |||
| boolean flag = sysUserService.deleteSysUser(id); | |||
| return ApiResult.result(flag); | |||
| } | |||
| /** | |||
| * 获取系统用户 | |||
| */ | |||
| @GetMapping("/getSysUserById") | |||
| @ApiOperation(value = "获取SysUser对象详情", notes = "查看系统用户", response = SysUserQueryVo.class) | |||
| public ApiResult<SysUserQueryVo> getSysUser(Long id) throws Exception { | |||
| SysUserQueryVo sysUserQueryVo = sysUserService.getSysUserById(id); | |||
| return ApiResult.ok(sysUserQueryVo); | |||
| } | |||
| /** | |||
| * 获取系统用户 | |||
| */ | |||
| @GetMapping("/getSysUserByUserName") | |||
| @ApiOperation(value = "获取SysUser对象详情", notes = "查看系统用户", response = SysUserQueryVo.class) | |||
| public ApiResult<SysUser> getSysUserByUserName(@RequestParam String username) throws Exception { | |||
| SysUser sysUser = sysUserService.getSysUserByUserName(username); | |||
| return ApiResult.ok(sysUser); | |||
| } | |||
| /** | |||
| * 系统用户分页列表 | |||
| */ | |||
| @PostMapping("/getPageList") | |||
| @ApiOperation(value = "获取SysUser分页列表", notes = "系统用户分页列表", response = SysUserQueryVo.class) | |||
| public ApiResult<PageTool<SysUserQueryVo>> getSysUserPageList(@Valid @RequestBody SysUserQueryParam sysUserQueryParam) throws Exception { | |||
| PageTool<SysUserQueryVo> pageList = sysUserService.getSysUserPageList(sysUserQueryParam); | |||
| return ApiResult.ok(pageList); | |||
| } | |||
| /** | |||
| * 修改密码 | |||
| */ | |||
| @PostMapping("/updatePassword") | |||
| @ApiOperation(value = "修改密码", notes = "修改密码", response = ApiResult.class) | |||
| public ApiResult<Boolean> updatePassword(@Valid @RequestBody UpdatePasswordParam updatePasswordParam) throws Exception { | |||
| boolean flag = sysUserService.updatePassword(updatePasswordParam); | |||
| return ApiResult.result(flag); | |||
| } | |||
| } | |||
| @@ -0,0 +1,57 @@ | |||
| package com.xdf.creative.module.entity; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.xdf.creative.base.entity.BaseEntity; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| import java.util.Date; | |||
| /** | |||
| * <p> | |||
| * 组织信息 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-11-05 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysOrganize对象", description = "组织信息") | |||
| public class SysOrganize extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| @TableId(value = "id", type = IdType.AUTO) | |||
| private Long id; | |||
| @ApiModelProperty(value = "组织名称") | |||
| private String organizeName; | |||
| @ApiModelProperty(value = "管辖区域") | |||
| private Long popedom_id; | |||
| @ApiModelProperty(value = "类型: 0 普通用户 1、园区用户 2 区文创办 3市文创办 8后台管理 ") | |||
| private Integer organizeType; | |||
| @ApiModelProperty(value = "是否为系统组织: 0 否 1是") | |||
| private Integer systemCreate; | |||
| @ApiModelProperty(value = "系统状态 0停用 1启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "修该时间") | |||
| private Date updateTime; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "父id") | |||
| private Long parentId; | |||
| } | |||
| @@ -0,0 +1,94 @@ | |||
| package com.xdf.creative.module.entity; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.xdf.creative.base.entity.BaseEntity; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| import java.util.ArrayList; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| /** | |||
| * <p> | |||
| * 系统权限 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-11-07 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysPermission对象", description = "系统权限") | |||
| public class SysPermission extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "主键") | |||
| @TableId(value = "id", type = IdType.ID_WORKER) | |||
| private Long id; | |||
| @ApiModelProperty(value = "权限名称") | |||
| private String name; | |||
| @ApiModelProperty(value = "资源id") | |||
| private String resourceId; | |||
| @ApiModelProperty(value = "父id") | |||
| private String parentResourceId; | |||
| @ApiModelProperty(value = "路径") | |||
| private String url; | |||
| @ApiModelProperty(value = "唯一编码") | |||
| private String code; | |||
| @ApiModelProperty(value = "图标") | |||
| private String icon; | |||
| @ApiModelProperty(value = "类型,0 目录 1:菜单,2:按钮 3 url") | |||
| private Integer type; | |||
| @ApiModelProperty(value = "层级,1:第一级,2:第二级,N:第N级") | |||
| private Integer level; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "排序") | |||
| private Integer sort; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除") | |||
| private Integer deleted; | |||
| @ApiModelProperty(value = "版本") | |||
| private Integer version; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| private Date updateTime; | |||
| /** | |||
| * 用于构造树 | |||
| */ | |||
| @TableField(exist = false) | |||
| protected List<SysPermission> children = new ArrayList<SysPermission>(); | |||
| @TableField(exist = false) | |||
| protected Boolean leaf; | |||
| @TableField(exist = false) | |||
| protected Boolean checked; | |||
| } | |||
| @@ -0,0 +1,67 @@ | |||
| package com.xdf.creative.module.entity; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.Version; | |||
| import com.xdf.creative.base.entity.BaseEntity; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotBlank; | |||
| import javax.validation.constraints.Null; | |||
| import java.util.Date; | |||
| /** | |||
| * <pre> | |||
| * 系统角色 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysRole对象", description = "系统角色") | |||
| public class SysRole extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "主键") | |||
| @TableId(value = "id", type = IdType.ID_WORKER) | |||
| private Long id; | |||
| @ApiModelProperty(value = "角色名称") | |||
| @NotBlank(message = "角色名称不能为空") | |||
| private String name; | |||
| @ApiModelProperty(value = "角色唯一编码") | |||
| private String code; | |||
| @ApiModelProperty(value = "角色类型") | |||
| private Integer type; | |||
| @ApiModelProperty(value = "角色状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "版本") | |||
| @Null(message = "版本不用传") | |||
| @Version | |||
| private Integer version; | |||
| @ApiModelProperty(value = "创建时间") | |||
| @Null(message = "创建时间不用传") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| @Null(message = "修改时间不用传") | |||
| private Date updateTime; | |||
| } | |||
| @@ -0,0 +1,65 @@ | |||
| package com.xdf.creative.module.entity; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.baomidou.mybatisplus.annotation.Version; | |||
| import com.xdf.creative.base.entity.BaseEntity; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotNull; | |||
| import javax.validation.constraints.Null; | |||
| import java.util.Date; | |||
| /** | |||
| * <pre> | |||
| * 角色权限关系 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysRolePermission对象", description = "角色权限关系") | |||
| public class SysRolePermission extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "主键") | |||
| @TableId(value = "id", type = IdType.AUTO) | |||
| private Long id; | |||
| @ApiModelProperty(value = "角色id") | |||
| @NotNull(message = "角色id不能为空") | |||
| private Long roleId; | |||
| @ApiModelProperty(value = "权限id") | |||
| @NotNull(message = "权限id不能为空") | |||
| private String permissionId; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "备注") | |||
| private String remark; | |||
| @ApiModelProperty(value = "版本") | |||
| @Null(message = "版本不用传") | |||
| @Version | |||
| private Integer version; | |||
| @ApiModelProperty(value = "创建时间") | |||
| @Null(message = "创建时间不用传") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| @Null(message = "修改时间不用传") | |||
| private Date updateTime; | |||
| } | |||
| @@ -0,0 +1,98 @@ | |||
| package com.xdf.creative.module.entity; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.xdf.creative.base.entity.BaseEntity; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotBlank; | |||
| import javax.validation.constraints.NotNull; | |||
| import java.util.Date; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 系统用户 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysUser对象", description = "系统用户") | |||
| public class SysUser extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| @ApiModelProperty(value = "主键") | |||
| @TableId(value = "id", type = IdType.ID_WORKER) | |||
| private Long id; | |||
| @ApiModelProperty(value = "用户名") | |||
| @NotBlank(message = "用户名不能为空") | |||
| private String username; | |||
| @ApiModelProperty(value = "昵称") | |||
| private String nickname; | |||
| @ApiModelProperty(value = "密码") | |||
| @NotBlank(message = "密码不能为空") | |||
| private String password; | |||
| @ApiModelProperty(value = "盐值") | |||
| private String salt; | |||
| @ApiModelProperty(value = "手机号码") | |||
| @NotBlank(message = "手机号码不能为空") | |||
| private String phone; | |||
| @ApiModelProperty(value = "邮箱") | |||
| private String email; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用,2:锁定") | |||
| private Integer state; | |||
| @ApiModelProperty(value = "角色id") | |||
| @TableField(exist = false) | |||
| private Set<Long> roleId; | |||
| @ApiModelProperty(value = "性别,0:女,1:男,默认1") | |||
| private Integer gender; | |||
| @ApiModelProperty(value = "头像") | |||
| private String head; | |||
| @ApiModelProperty(value = "0 普通用户 1、园区 2 区文创办 3 市文创办 8后台管理") | |||
| private Integer userType; | |||
| @ApiModelProperty(value = "组织id") | |||
| @NotNull(message = "组织不能为空") | |||
| private Long organizeId; | |||
| @ApiModelProperty(value = "创建者id") | |||
| private Long createUserId; | |||
| @ApiModelProperty(value = "逻辑删除,0:未删除,1:已删除") | |||
| private Integer deleted; | |||
| @ApiModelProperty(value = "版本") | |||
| private Integer version; | |||
| @ApiModelProperty(value = "remark") | |||
| private String remark; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| @ApiModelProperty(value = "修改时间") | |||
| private Date updateTime; | |||
| } | |||
| @@ -0,0 +1,44 @@ | |||
| package com.xdf.creative.module.entity; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| import com.xdf.creative.base.entity.BaseEntity; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| import lombok.experimental.Accessors; | |||
| import javax.validation.constraints.NotNull; | |||
| import java.util.Date; | |||
| /** | |||
| * <p> | |||
| * 系统用户角色表 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-30 | |||
| */ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @EqualsAndHashCode(callSuper = true) | |||
| @ApiModel(value = "SysUserRole对象", description = "系统用户角色表") | |||
| public class SysUserRole extends BaseEntity { | |||
| private static final long serialVersionUID = 1L; | |||
| @TableId(value = "id", type = IdType.AUTO) | |||
| @NotNull(message = "不能为空") | |||
| private Long id; | |||
| @ApiModelProperty(value = "用户ID") | |||
| private Long userId; | |||
| @ApiModelProperty(value = "角色ID") | |||
| private Long roleId; | |||
| @ApiModelProperty(value = "创建时间") | |||
| private Date createTime; | |||
| } | |||
| @@ -0,0 +1,56 @@ | |||
| package com.xdf.creative.module.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam; | |||
| import com.xdf.creative.base.params.creative.SysOrganizeQueryParam; | |||
| import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo; | |||
| import com.xdf.creative.module.entity.SysOrganize; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import org.springframework.stereotype.Repository; | |||
| import java.io.Serializable; | |||
| /** | |||
| * 组织信息 Mapper 接口 | |||
| */ | |||
| @Repository | |||
| public interface SysOrganizeMapper extends BaseMapper<SysOrganize> { | |||
| /** | |||
| * 根据用户id | |||
| * | |||
| * @param userId | |||
| * @return | |||
| */ | |||
| SysOrganizeQueryVo getSysOrganizeByUserId(Long userId); | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| */ | |||
| SysOrganizeQueryVo getSysOrganizeById(Serializable id); | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param page | |||
| * @param sysOrganizeQueryParam | |||
| * @return | |||
| */ | |||
| IPage<SysOrganizeQueryVo> getSysOrganizePageList(@Param("page") Page page, @Param("param") SysOrganizeQueryParam sysOrganizeQueryParam); | |||
| /** | |||
| * 检查当前用户组织是否可用 | |||
| * | |||
| * @param isEnableSysOrganizeParam | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| Integer isEnableSysOrganize(IsEnableSysOrganizeParam isEnableSysOrganizeParam) throws Exception; | |||
| } | |||
| @@ -0,0 +1,83 @@ | |||
| package com.xdf.creative.module.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.SysPermissionQueryParam; | |||
| import com.xdf.creative.base.vo.creative.SysPermissionQueryVo; | |||
| import com.xdf.creative.module.entity.SysPermission; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import org.springframework.stereotype.Repository; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| /** | |||
| * <pre> | |||
| * 系统权限 Mapper 接口 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Repository | |||
| public interface SysPermissionMapper extends BaseMapper<SysPermission> { | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| */ | |||
| SysPermissionQueryVo getSysPermissionById(Serializable id); | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param page | |||
| * @param sysPermissionQueryParam | |||
| * @return | |||
| */ | |||
| IPage<SysPermissionQueryVo> getSysPermissionPageList(@Param("page") Page page, @Param("param") SysPermissionQueryParam sysPermissionQueryParam); | |||
| /** | |||
| * 根据用户id获取该用户所有Url | |||
| * 一个用户可以映射多个角色 | |||
| * | |||
| * @param userId | |||
| * @return | |||
| */ | |||
| List<String> getPermissionUrlByUserId(@Param("userId") Long userId); | |||
| /** | |||
| * 根据用户id获取菜单列表 | |||
| * | |||
| * @param userId | |||
| * @return | |||
| */ | |||
| List<SysPermission> getMenuListByUserId(@Param("userId") Long userId); | |||
| /** | |||
| * 根据用户ID获取菜单 | |||
| * | |||
| * @param userId | |||
| * @return | |||
| */ | |||
| List<Object> getMenusByUserId(@Param("userId") Long userId); | |||
| /** | |||
| * 获取用户角色授权资源 树 | |||
| */ | |||
| List<Object> impowerResourceTreeList(@Param("userId") Long userId); | |||
| /** | |||
| * 获取不需要鉴权urls | |||
| * | |||
| * @return | |||
| */ | |||
| List<String> getSkipAuthUrls(); | |||
| } | |||
| @@ -0,0 +1,47 @@ | |||
| package com.xdf.creative.module.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.SysRoleQueryParam; | |||
| import com.xdf.creative.base.vo.creative.SysRoleQueryVo; | |||
| import com.xdf.creative.module.entity.SysRole; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import org.springframework.stereotype.Repository; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| /** | |||
| * <pre> | |||
| * 系统角色 Mapper 接口 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Repository | |||
| public interface SysRoleMapper extends BaseMapper<SysRole> { | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| */ | |||
| SysRoleQueryVo getSysRoleById(Serializable id); | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param page | |||
| * @param sysRoleQueryParam | |||
| * @return | |||
| */ | |||
| IPage<SysRoleQueryVo> getSysRolePageList(@Param("page") Page page, @Param("param") SysRoleQueryParam sysRoleQueryParam); | |||
| List<SysRoleQueryVo> getUserRoleByUserId(Long userId); | |||
| } | |||
| @@ -0,0 +1,51 @@ | |||
| package com.xdf.creative.module.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.SysRolePermissionQueryParam; | |||
| import com.xdf.creative.base.vo.creative.SysRolePermissionQueryVo; | |||
| import com.xdf.creative.module.entity.SysRolePermission; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import org.springframework.stereotype.Repository; | |||
| import java.io.Serializable; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 角色权限关系 Mapper 接口 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Repository | |||
| public interface SysRolePermissionMapper extends BaseMapper<SysRolePermission> { | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| */ | |||
| SysRolePermissionQueryVo getSysRolePermissionById(Serializable id); | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param page | |||
| * @param sysRolePermissionQueryParam | |||
| * @return | |||
| */ | |||
| IPage<SysRolePermissionQueryVo> getSysRolePermissionPageList(@Param("page") Page page, @Param("param") SysRolePermissionQueryParam sysRolePermissionQueryParam); | |||
| /** | |||
| * 根据角色id获取可用的权限编码 | |||
| * | |||
| * @param roleId | |||
| * @return | |||
| */ | |||
| Set<String> getPermissionCodesByRoleId(@Param("roleId") Long roleId); | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| package com.xdf.creative.module.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.SysUserQueryParam; | |||
| import com.xdf.creative.base.vo.creative.SysUserQueryVo; | |||
| import com.xdf.creative.module.entity.SysUser; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import org.springframework.stereotype.Repository; | |||
| import java.io.Serializable; | |||
| /** | |||
| * <pre> | |||
| * 系统用户 Mapper 接口 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Repository | |||
| public interface SysUserMapper extends BaseMapper<SysUser> { | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| */ | |||
| SysUserQueryVo getSysUserById(Serializable id); | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param page | |||
| * @param sysUserQueryParam | |||
| * @return | |||
| */ | |||
| IPage<SysUserQueryVo> getSysUserPageList(@Param("page") Page page, @Param("param") SysUserQueryParam sysUserQueryParam); | |||
| SysUser getSysUserByUserName(@Param("username") String username); | |||
| } | |||
| @@ -0,0 +1,43 @@ | |||
| package com.xdf.creative.module.mapper; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.core.toolkit.Constants; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.SysUserRoleQueryParam; | |||
| import com.xdf.creative.base.vo.creative.SysUserRoleQueryVo; | |||
| import com.xdf.creative.module.entity.SysUserRole; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import org.springframework.stereotype.Repository; | |||
| import java.io.Serializable; | |||
| /** | |||
| * <p> | |||
| * 系统用户角色表 Mapper 接口 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-30 | |||
| */ | |||
| @Repository | |||
| public interface SysUserRoleMapper extends BaseMapper<SysUserRole> { | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| */ | |||
| SysUserRoleQueryVo getSysUserRoleById(Serializable id); | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param page | |||
| * @param sysUserRoleQueryParam | |||
| * @return | |||
| */ | |||
| IPage<SysUserRoleQueryVo> getSysUserRolePageList(@Param("page") Page page, @Param(Constants.WRAPPER) SysUserRoleQueryParam sysUserRoleQueryParam); | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| package com.xdf.creative.module.service; | |||
| import com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam; | |||
| import com.xdf.creative.base.params.creative.SysOrganizeQueryParam; | |||
| import com.xdf.creative.base.service.BaseService; | |||
| import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo; | |||
| import com.xdf.creative.module.entity.SysOrganize; | |||
| import com.xdf.creative.util.page.ApiResult; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import java.io.Serializable; | |||
| /** | |||
| * <p> | |||
| * 组织信息 服务类 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-11-05 | |||
| */ | |||
| public interface SysOrganizeService extends BaseService<SysOrganize> { | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| */ | |||
| SysOrganizeQueryVo getSysOrganizeById(Serializable id) throws Exception; | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param sysOrganizeQueryParam | |||
| * @return | |||
| */ | |||
| PageTool<SysOrganizeQueryVo> getSysOrganizePageList(SysOrganizeQueryParam sysOrganizeQueryParam) throws Exception; | |||
| /** | |||
| * 检查组织是否可用 | |||
| * | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean isEnableSysOrganize(IsEnableSysOrganizeParam isEnableSysOrganizeParam) throws Exception; | |||
| } | |||
| @@ -0,0 +1,139 @@ | |||
| package com.xdf.creative.module.service; | |||
| import com.xdf.creative.base.params.creative.SysPermissionQueryParam; | |||
| import com.xdf.creative.base.service.BaseService; | |||
| import com.xdf.creative.base.vo.creative.SysPermissionQueryVo; | |||
| import com.xdf.creative.module.entity.SysPermission; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 系统权限 服务类 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| public interface SysPermissionService extends BaseService<SysPermission> { | |||
| /** | |||
| * 保存 | |||
| * | |||
| * @param sysPermission | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean saveSysPermission(SysPermission sysPermission) throws Exception; | |||
| /** | |||
| * 修改 | |||
| * | |||
| * @param sysPermission | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean updateSysPermission(SysPermission sysPermission) throws Exception; | |||
| /** | |||
| * 删除 | |||
| * | |||
| * @param resourceId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean deleteSysPermission(String resourceId) throws Exception; | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param resourceId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| SysPermissionQueryVo getSysPermissionById(Serializable resourceId) throws Exception; | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param sysPermissionQueryParam | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| PageTool<SysPermissionQueryVo> getSysPermissionPageList(SysPermissionQueryParam sysPermissionQueryParam) throws Exception; | |||
| /** | |||
| * 判断权限id是否存在 | |||
| * | |||
| * @param permissionIds | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean isExistsByPermissionIds(List<String> permissionIds) throws Exception; | |||
| /** | |||
| * 获取所有菜单列表 | |||
| * | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| List<SysPermission> getAllMenuList() throws Exception; | |||
| /** | |||
| * 获取角色授权资源树 | |||
| * | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| List<Object> impowerResourceTreeList(Long userId) throws Exception; | |||
| /** | |||
| * 根据用户id获取菜单列表 | |||
| * | |||
| * @param userId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| List<SysPermission> getMenuListByUserId(Long userId) throws Exception; | |||
| /** | |||
| * @param userId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| List<Object> getTreeMenusByUserId(Long userId) throws Exception; | |||
| /** | |||
| * 根据请用户id取权限路径集合 | |||
| * | |||
| * @param userId | |||
| * @return | |||
| */ | |||
| Set<String> getPermissionUrlByUserId(Long userId) throws Exception; | |||
| /** | |||
| * 给超级管理角色员赋予所有权限 | |||
| * | |||
| * @param userId | |||
| * @param roleId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| Boolean setPermissionToRoleByUserId(Long userId, Long roleId) throws Exception; | |||
| /** | |||
| * 获取不需要鉴权url | |||
| * | |||
| * @return | |||
| */ | |||
| List<String> getSkipAuthUrls() throws Exception; | |||
| } | |||
| @@ -0,0 +1,77 @@ | |||
| package com.xdf.creative.module.service; | |||
| import com.xdf.creative.base.service.BaseService; | |||
| import com.xdf.creative.module.entity.SysRolePermission; | |||
| import org.apache.commons.collections4.SetUtils; | |||
| import java.util.List; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 角色权限关系 服务类 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| public interface SysRolePermissionService extends BaseService<SysRolePermission> { | |||
| /** | |||
| * 保存 | |||
| * | |||
| * @param roleId | |||
| * @param permissionIds | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean saveSysRolePermission(Long roleId, List<String> permissionIds) throws Exception; | |||
| /** | |||
| * 根据角色id获取权限id列表 | |||
| * | |||
| * @param roleId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| List<String> getPermissionIdsByRoleId(Long roleId) throws Exception; | |||
| /** | |||
| * 批量保存角色权限关系 | |||
| * | |||
| * @param roleId | |||
| * @param addSet | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean saveSysRolePermissionBatch(Long roleId, SetUtils.SetView addSet) throws Exception; | |||
| /** | |||
| * 根据角色id删除关联的权限关系 | |||
| * | |||
| * @param roleId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean deleteSysRolePermissionByRoleId(Long roleId) throws Exception; | |||
| /** | |||
| * 根据角色id获取可用的权限编码 | |||
| * | |||
| * @param roleId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| Set<String> getPermissionCodesByRoleId(Long roleId) throws Exception; | |||
| /** | |||
| * 通过角色id判断在角色权限表中是否有数据存在 | |||
| * | |||
| * @param permissionId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean isExistsByPermissionId(String permissionId) throws Exception; | |||
| } | |||
| @@ -0,0 +1,96 @@ | |||
| package com.xdf.creative.module.service; | |||
| import com.xdf.creative.base.params.creative.AddSysRoleParam; | |||
| import com.xdf.creative.base.params.creative.SysRoleQueryParam; | |||
| import com.xdf.creative.base.params.creative.UpdateSysRoleParam; | |||
| import com.xdf.creative.base.service.BaseService; | |||
| import com.xdf.creative.base.vo.creative.SysRoleQueryVo; | |||
| import com.xdf.creative.module.entity.SysRole; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 系统角色 服务类 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| public interface SysRoleService extends BaseService<SysRole> { | |||
| /** | |||
| * 保存 | |||
| * | |||
| * @param addSysRoleParam | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean saveSysRole(AddSysRoleParam addSysRoleParam) throws Exception; | |||
| /** | |||
| * 修改 | |||
| * | |||
| * @param updateSysRoleParam | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean updateSysRole(UpdateSysRoleParam updateSysRoleParam) throws Exception; | |||
| /** | |||
| * 删除 | |||
| * | |||
| * @param id | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean deleteSysRole(Long id) throws Exception; | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| SysRoleQueryVo getSysRoleById(Serializable id) throws Exception; | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param sysRoleQueryParam | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| PageTool<SysRoleQueryVo> getSysRolePageList(SysRoleQueryParam sysRoleQueryParam) throws Exception; | |||
| /** | |||
| * 根据id校验角色是否存在并且已启用 | |||
| * | |||
| * @param id | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean isEnableSysRole(Long id) throws Exception; | |||
| boolean isEnableSysRole(Set<Long> id) throws Exception; | |||
| /** | |||
| * 判断角色编码是否存在 | |||
| * | |||
| * @param code | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean isExistsByCode(String code) throws Exception; | |||
| List<SysRoleQueryVo> getUserRoleByUserId(Long userId); | |||
| } | |||
| @@ -0,0 +1,37 @@ | |||
| package com.xdf.creative.module.service; | |||
| import com.xdf.creative.base.params.creative.SysUserRoleQueryParam; | |||
| import com.xdf.creative.base.service.BaseService; | |||
| import com.xdf.creative.base.vo.creative.SysUserRoleQueryVo; | |||
| import com.xdf.creative.module.entity.SysUserRole; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import java.io.Serializable; | |||
| /** | |||
| * <p> | |||
| * 系统用户角色表 服务类 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-30 | |||
| */ | |||
| public interface SysUserRoleService extends BaseService<SysUserRole> { | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| */ | |||
| SysUserRoleQueryVo getSysUserRoleById(Serializable id) throws Exception; | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param sysUserRoleQueryParam | |||
| * @return | |||
| */ | |||
| PageTool<SysUserRoleQueryVo> getSysUserRolePageList(SysUserRoleQueryParam sysUserRoleQueryParam) throws Exception; | |||
| } | |||
| @@ -0,0 +1,132 @@ | |||
| package com.xdf.creative.module.service; | |||
| import com.xdf.creative.base.params.creative.SysUserQueryParam; | |||
| import com.xdf.creative.base.params.creative.UpdatePasswordParam; | |||
| import com.xdf.creative.base.params.creative.UpdateUserParam; | |||
| import com.xdf.creative.base.service.BaseService; | |||
| import com.xdf.creative.base.vo.creative.SysUserQueryVo; | |||
| import com.xdf.creative.module.entity.SysUser; | |||
| import com.xdf.creative.support.auth.LoginParam; | |||
| import com.xdf.creative.support.auth.LoginSysUserTokenVo; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import java.io.Serializable; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 系统用户 服务类 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| public interface SysUserService extends BaseService<SysUser> { | |||
| /** | |||
| * 用户登录 | |||
| * | |||
| * @param loginParam | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| LoginSysUserTokenVo login(LoginParam loginParam) throws Exception; | |||
| /** | |||
| * 保存 | |||
| * | |||
| * @param sysUser | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean saveSysUser(SysUser sysUser) throws Exception; | |||
| /** | |||
| * 修改系统用户信息 | |||
| * | |||
| * @param updateUserParam | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean updateSysUser(UpdateUserParam updateUserParam) throws Exception; | |||
| /** | |||
| * 删除 | |||
| * | |||
| * @param id | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean deleteSysUser(Long id) throws Exception; | |||
| /** | |||
| * 根据ID获取查询对象 | |||
| * | |||
| * @param id | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| SysUserQueryVo getSysUserById(Serializable id) throws Exception; | |||
| /** | |||
| * 获取分页对象 | |||
| * | |||
| * @param sysUserQueryParam | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| PageTool<SysUserQueryVo> getSysUserPageList(SysUserQueryParam sysUserQueryParam) throws Exception; | |||
| /** | |||
| * 判断用户名是否存在 | |||
| * | |||
| * @param username | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean isExistsByUsername(String username) throws Exception; | |||
| /** | |||
| * 检验部门和角色是否存在并且已启用 | |||
| * | |||
| * @param departmentId | |||
| * @param roleId | |||
| * @throws Exception | |||
| */ | |||
| void checkOrganizeAndRole(Long departmentId, Set<Long> roleId) throws Exception; | |||
| /** | |||
| * 通过角色id判断是否存在可用用户id | |||
| * | |||
| * @param roleId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean isExistsSysUserByRoleId(Long roleId) throws Exception; | |||
| /** | |||
| * 修改密码 | |||
| * | |||
| * @param updatePasswordParam | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean updatePassword(UpdatePasswordParam updatePasswordParam) throws Exception; | |||
| /** | |||
| * 修改系统用户头像 | |||
| * | |||
| * @param id | |||
| * @param headPath | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| boolean updateSysUserHead(Long id, String headPath) throws Exception; | |||
| SysUser getSysUserByUserName(String username) throws Exception; | |||
| } | |||
| @@ -0,0 +1,61 @@ | |||
| package com.xdf.creative.module.service.impl; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam; | |||
| import com.xdf.creative.base.params.creative.SysOrganizeQueryParam; | |||
| import com.xdf.creative.base.service.impl.BaseServiceImpl; | |||
| import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo; | |||
| import com.xdf.creative.module.entity.SysOrganize; | |||
| import com.xdf.creative.module.mapper.SysOrganizeMapper; | |||
| import com.xdf.creative.module.mapper.SysRegionMapper; | |||
| import com.xdf.creative.module.service.SysOrganizeService; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import java.io.Serializable; | |||
| /** | |||
| * <p> | |||
| * 组织信息 服务实现类 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-11-05 | |||
| */ | |||
| @Slf4j | |||
| @Service | |||
| @Transactional(rollbackFor = Exception.class) | |||
| public class SysOrganizeServiceImpl extends BaseServiceImpl<SysOrganizeMapper, SysOrganize> implements SysOrganizeService { | |||
| @Autowired | |||
| private SysOrganizeMapper sysOrganizeMapper; | |||
| @Autowired | |||
| private SysRegionMapper sysRegionMapper; | |||
| @Override | |||
| public SysOrganizeQueryVo getSysOrganizeById(Serializable id) throws Exception { | |||
| return sysOrganizeMapper.getSysOrganizeById(id); | |||
| } | |||
| @Override | |||
| public PageTool<SysOrganizeQueryVo> getSysOrganizePageList(SysOrganizeQueryParam sysOrganizeQueryParam) throws Exception { | |||
| Page page = setPageParam(sysOrganizeQueryParam); | |||
| IPage<SysOrganizeQueryVo> iPage = sysOrganizeMapper.getSysOrganizePageList(page, sysOrganizeQueryParam); | |||
| return new PageTool(iPage); | |||
| } | |||
| @Override | |||
| public boolean isEnableSysOrganize(IsEnableSysOrganizeParam isEnableSysOrganizeParam) throws Exception { | |||
| Integer count = sysOrganizeMapper.isEnableSysOrganize(isEnableSysOrganizeParam); | |||
| return count > 0; | |||
| } | |||
| } | |||
| @@ -0,0 +1,187 @@ | |||
| package com.xdf.creative.module.service.impl; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.SysPermissionQueryParam; | |||
| import com.xdf.creative.base.service.impl.BaseServiceImpl; | |||
| import com.xdf.creative.base.vo.creative.SysPermissionQueryVo; | |||
| import com.xdf.creative.enums.StateEnum; | |||
| import com.xdf.creative.module.entity.SysPermission; | |||
| import com.xdf.creative.module.entity.SysRolePermission; | |||
| import com.xdf.creative.module.mapper.SysPermissionMapper; | |||
| import com.xdf.creative.module.service.SysPermissionService; | |||
| import com.xdf.creative.module.service.SysRolePermissionService; | |||
| import com.xdf.creative.support.exception.BusinessException; | |||
| import com.xdf.creative.util.StringUtil; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import com.xdf.creative.util.tree.TreeConfig; | |||
| import com.xdf.creative.util.tree.Utils; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import javax.annotation.Resource; | |||
| import java.io.Serializable; | |||
| import java.util.*; | |||
| /** | |||
| * <pre> | |||
| * 系统权限 服务实现类 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-25 | |||
| */ | |||
| @Slf4j | |||
| @Service | |||
| public class SysPermissionServiceImpl extends BaseServiceImpl<SysPermissionMapper, SysPermission> implements SysPermissionService { | |||
| @Autowired | |||
| private SysPermissionMapper sysPermissionMapper; | |||
| @Resource | |||
| private SysRolePermissionService sysRolePermissionService; | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean saveSysPermission(SysPermission sysPermission) throws Exception { | |||
| sysPermission.setId(null); | |||
| return super.save(sysPermission); | |||
| } | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean updateSysPermission(SysPermission sysPermission) throws Exception { | |||
| // 获取权限 | |||
| SysPermission updateSysPermission = getById(sysPermission.getResourceId()); | |||
| if (updateSysPermission == null) { | |||
| throw new BusinessException("权限不存在"); | |||
| } | |||
| // 指定需改的字段 | |||
| updateSysPermission.setParentResourceId(sysPermission.getParentResourceId()) | |||
| .setLevel(sysPermission.getLevel()) | |||
| .setName(sysPermission.getName()) | |||
| .setState(sysPermission.getState()) | |||
| .setCode(sysPermission.getCode()) | |||
| .setIcon(sysPermission.getIcon()) | |||
| .setRemark(sysPermission.getRemark()) | |||
| .setSort(sysPermission.getSort()) | |||
| .setType(sysPermission.getType()) | |||
| .setUrl(sysPermission.getUrl()) | |||
| .setUpdateTime(new Date()); | |||
| return super.updateById(updateSysPermission); | |||
| } | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean deleteSysPermission(String resourceId) throws Exception { | |||
| boolean isExists = sysRolePermissionService.isExistsByPermissionId(resourceId); | |||
| if (isExists) { | |||
| throw new BusinessException("该权限存在角色关联关系,不能删除"); | |||
| } | |||
| return super.removeById(resourceId); | |||
| } | |||
| @Override | |||
| public SysPermissionQueryVo getSysPermissionById(Serializable id) throws Exception { | |||
| return sysPermissionMapper.getSysPermissionById(id); | |||
| } | |||
| @Override | |||
| public PageTool<SysPermissionQueryVo> getSysPermissionPageList(SysPermissionQueryParam sysPermissionQueryParam) throws Exception { | |||
| Page page = setPageParam(sysPermissionQueryParam); | |||
| IPage<SysPermissionQueryVo> iPage = sysPermissionMapper.getSysPermissionPageList(page, sysPermissionQueryParam); | |||
| return new PageTool(iPage); | |||
| } | |||
| @Override | |||
| public boolean isExistsByPermissionIds(List<String> permissionIds) { | |||
| QueryWrapper queryWrapper = new QueryWrapper(); | |||
| queryWrapper.in("resourceId", permissionIds); | |||
| return sysPermissionMapper.selectCount(queryWrapper).intValue() == permissionIds.size(); | |||
| } | |||
| @Override | |||
| public List<SysPermission> getAllMenuList() throws Exception { | |||
| SysPermission sysPermission = new SysPermission().setState(StateEnum.ENABLE.ordinal()); | |||
| // 获取所有已启用的权限列表 | |||
| return sysPermissionMapper.selectList(new QueryWrapper(sysPermission)); | |||
| } | |||
| /** | |||
| * 获取角色授权资源树 | |||
| * | |||
| * @param userId | |||
| * @return | |||
| * @throws Exception | |||
| */ | |||
| @Override | |||
| public List<Object> impowerResourceTreeList(Long userId) throws Exception { | |||
| return sysPermissionMapper.impowerResourceTreeList(userId); | |||
| } | |||
| @Override | |||
| public List<SysPermission> getMenuListByUserId(Long userId) throws Exception { | |||
| return sysPermissionMapper.getMenuListByUserId(userId); | |||
| } | |||
| @Override | |||
| public List<Object> getTreeMenusByUserId(Long userId) throws Exception { | |||
| // 获取所有已启用的权限列表 | |||
| List<Object> list = sysPermissionMapper.getMenusByUserId(userId); | |||
| TreeConfig config = new TreeConfig("resourceId", "parentResourceId", "parentResourceId", "01", ""); | |||
| List<Object> objectList = Utils.tree(list, config); | |||
| return objectList; | |||
| } | |||
| @Override | |||
| public Set<String> getPermissionUrlByUserId(Long userId) throws Exception { | |||
| List<String> permissionUrls = sysPermissionMapper.getPermissionUrlByUserId(userId); | |||
| HashSet<String> stringHashSet = new HashSet<>(); | |||
| permissionUrls.stream().forEach(s -> { | |||
| if (StringUtil.isNotEmpty(s)) { | |||
| if (s.contains(";")) { | |||
| String[] url = s.split(s); | |||
| for (String s1 : url) { | |||
| stringHashSet.add(s1); | |||
| } | |||
| } else { | |||
| stringHashSet.add(s); | |||
| } | |||
| } | |||
| }); | |||
| return stringHashSet; | |||
| } | |||
| @Override | |||
| public Boolean setPermissionToRoleByUserId(Long userId, Long roleId) throws Exception { | |||
| QueryWrapper queryWrapper = new QueryWrapper(); | |||
| List<SysPermission> list = sysPermissionMapper.selectList(queryWrapper); | |||
| List<SysRolePermission> sysRolePermissions = new ArrayList<>(); | |||
| list.stream().forEach(sysPermission -> { | |||
| SysRolePermission sysRolePermission = new SysRolePermission(); | |||
| String resourceId = sysPermission.getResourceId(); | |||
| sysRolePermission.setPermissionId(resourceId); | |||
| sysRolePermission.setRoleId(roleId); | |||
| sysRolePermission.setRemark(sysPermission.getName()); | |||
| sysRolePermissions.add(sysRolePermission); | |||
| }); | |||
| boolean isSucceed = sysRolePermissionService.saveBatch(sysRolePermissions, 20); | |||
| return isSucceed; | |||
| } | |||
| @Override | |||
| public List<String> getSkipAuthUrls() throws Exception { | |||
| List<String> skipAuthUrls = sysPermissionMapper.getSkipAuthUrls(); | |||
| return skipAuthUrls; | |||
| } | |||
| } | |||
| @@ -0,0 +1,94 @@ | |||
| package com.xdf.creative.module.service.impl; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.xdf.creative.base.service.impl.BaseServiceImpl; | |||
| import com.xdf.creative.enums.StateEnum; | |||
| import com.xdf.creative.module.entity.SysRolePermission; | |||
| import com.xdf.creative.module.mapper.SysRolePermissionMapper; | |||
| import com.xdf.creative.module.service.SysRolePermissionService; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.apache.commons.collections4.SetUtils; | |||
| 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; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 角色权限关系 服务实现类 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-25 | |||
| */ | |||
| @Slf4j | |||
| @Service | |||
| public class SysRolePermissionServiceImpl extends BaseServiceImpl<SysRolePermissionMapper, SysRolePermission> implements SysRolePermissionService { | |||
| @Autowired | |||
| private SysRolePermissionMapper sysRolePermissionMapper; | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean saveSysRolePermission(Long roleId, List<String> permissionIds) throws Exception { | |||
| List<SysRolePermission> list = new ArrayList<>(); | |||
| permissionIds.forEach(permissionId -> { | |||
| SysRolePermission sysRolePermission = new SysRolePermission() | |||
| .setRoleId(roleId) | |||
| .setPermissionId(permissionId) | |||
| .setState(StateEnum.ENABLE.ordinal()); | |||
| list.add(sysRolePermission); | |||
| }); | |||
| // 批量保存角色权限中间表 | |||
| return saveBatch(list, 20); | |||
| } | |||
| @Override | |||
| public List<String> getPermissionIdsByRoleId(Long roleId) throws Exception { | |||
| SysRolePermission sysRolePermission = new SysRolePermission() | |||
| .setRoleId(roleId) | |||
| .setState(StateEnum.ENABLE.ordinal()); | |||
| QueryWrapper queryWrapper = new QueryWrapper(sysRolePermission, "permission_id"); | |||
| return sysRolePermissionMapper.selectObjs(queryWrapper); | |||
| } | |||
| @Override | |||
| public boolean saveSysRolePermissionBatch(Long roleId, SetUtils.SetView addSet) { | |||
| List<SysRolePermission> list = new ArrayList<>(); | |||
| addSet.forEach(id -> { | |||
| SysRolePermission sysRolePermission = new SysRolePermission(); | |||
| String permissionId = (String) id; | |||
| sysRolePermission | |||
| .setRoleId(roleId) | |||
| .setPermissionId(permissionId) | |||
| .setState(StateEnum.ENABLE.ordinal()); | |||
| list.add(sysRolePermission); | |||
| }); | |||
| return saveBatch(list, 20); | |||
| } | |||
| @Override | |||
| public boolean deleteSysRolePermissionByRoleId(Long roleId) throws Exception { | |||
| SysRolePermission sysRolePermission = new SysRolePermission() | |||
| .setRoleId(roleId); | |||
| return remove(new QueryWrapper<>(sysRolePermission)); | |||
| } | |||
| @Override | |||
| public Set<String> getPermissionCodesByRoleId(Long roleId) throws Exception { | |||
| return sysRolePermissionMapper.getPermissionCodesByRoleId(roleId); | |||
| } | |||
| @Override | |||
| public boolean isExistsByPermissionId(String permissionId) throws Exception { | |||
| // 判断角色权限表是否有关联存在,如果存在,则不能删除 | |||
| SysRolePermission sysRolePermission = new SysRolePermission() | |||
| .setPermissionId(permissionId); | |||
| return count(new QueryWrapper(sysRolePermission)) > 0; | |||
| } | |||
| } | |||
| @@ -0,0 +1,217 @@ | |||
| package com.xdf.creative.module.service.impl; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.AddSysRoleParam; | |||
| import com.xdf.creative.base.params.creative.SysRoleQueryParam; | |||
| import com.xdf.creative.base.params.creative.UpdateSysRoleParam; | |||
| import com.xdf.creative.base.service.impl.BaseServiceImpl; | |||
| import com.xdf.creative.base.vo.creative.SysRoleQueryVo; | |||
| import com.xdf.creative.enums.StateEnum; | |||
| import com.xdf.creative.module.entity.SysRole; | |||
| import com.xdf.creative.module.mapper.SysRoleMapper; | |||
| import com.xdf.creative.module.service.SysPermissionService; | |||
| import com.xdf.creative.module.service.SysRolePermissionService; | |||
| import com.xdf.creative.module.service.SysRoleService; | |||
| import com.xdf.creative.module.service.SysUserService; | |||
| import com.xdf.creative.support.exception.BusinessException; | |||
| import com.xdf.creative.support.exception.DaoException; | |||
| import com.xdf.creative.util.convert.SysRoleConvert; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.apache.commons.collections4.SetUtils; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import javax.annotation.Resource; | |||
| import java.io.Serializable; | |||
| import java.util.Date; | |||
| import java.util.HashSet; | |||
| import java.util.List; | |||
| import java.util.Set; | |||
| /** | |||
| * <pre> | |||
| * 系统角色 服务实现类 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Slf4j | |||
| @Service | |||
| public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleMapper, SysRole> implements SysRoleService { | |||
| @Autowired | |||
| private SysRoleMapper sysRoleMapper; | |||
| @Resource | |||
| private SysPermissionService sysPermissionService; | |||
| @Resource | |||
| private SysRolePermissionService sysRolePermissionService; | |||
| @Resource | |||
| private SysUserService sysUserService; | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean saveSysRole(AddSysRoleParam addSysRoleParam) throws Exception { | |||
| String code = addSysRoleParam.getCode(); | |||
| List<String> permissionIds = addSysRoleParam.getPermissionIds(); | |||
| // 校验角色标识code唯一性 | |||
| if (isExistsByCode(code)) { | |||
| throw new BusinessException("角色编码已存在"); | |||
| } | |||
| // 校验权限列表是否存在 | |||
| if (!sysPermissionService.isExistsByPermissionIds(permissionIds)) { | |||
| throw new BusinessException("权限id不存在"); | |||
| } | |||
| // 保存角色 | |||
| SysRole sysRole = SysRoleConvert.INSTANCE.addSysRoleParamToSysRole(addSysRoleParam); | |||
| boolean saveRoleResult = super.save(sysRole); | |||
| if (!saveRoleResult) { | |||
| throw new DaoException("保存角色失败"); | |||
| } | |||
| // 保存角色权限 | |||
| Long roleId = sysRole.getId(); | |||
| boolean saveRolePermissionResult = sysRolePermissionService.saveSysRolePermission(roleId, permissionIds); | |||
| if (!saveRolePermissionResult) { | |||
| throw new DaoException("保存角色权限失败"); | |||
| } | |||
| return true; | |||
| } | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean updateSysRole(UpdateSysRoleParam updateSysRoleParam) throws Exception { | |||
| Long roleId = updateSysRoleParam.getId(); | |||
| List<String> permissionIds = updateSysRoleParam.getPermissionIds(); | |||
| // 校验角色是否存在 | |||
| SysRole sysRole = getById(roleId); | |||
| if (sysRole == null) { | |||
| throw new BusinessException("该角色不存在"); | |||
| } | |||
| // 校验权限列表是否存在 | |||
| if (!sysPermissionService.isExistsByPermissionIds(permissionIds)) { | |||
| throw new BusinessException("权限列表id匹配失败"); | |||
| } | |||
| // 修改角色 | |||
| sysRole.setName(updateSysRoleParam.getName()) | |||
| .setType(updateSysRoleParam.getType()) | |||
| .setRemark(updateSysRoleParam.getRemark()) | |||
| .setState(updateSysRoleParam.getState()) | |||
| .setUpdateTime(new Date()); | |||
| boolean updateResult = updateById(sysRole); | |||
| if (!updateResult) { | |||
| throw new DaoException("修改系统角色失败"); | |||
| } | |||
| // 获取之前的权限id集合 | |||
| List<String> beforeList = sysRolePermissionService.getPermissionIdsByRoleId(roleId); | |||
| // 差集计算 | |||
| // before:1,2,3,4,5,6 | |||
| // after: 1,2,3,4,7,8 | |||
| // 删除5,6 新增7,8 | |||
| // 此处真实删除,去掉deleted字段的@TableLogic注解 | |||
| Set<String> beforeSet = new HashSet<>(beforeList); | |||
| Set<String> afterSet = new HashSet<>(permissionIds); | |||
| SetUtils.SetView deleteSet = SetUtils.difference(beforeSet, afterSet); | |||
| SetUtils.SetView addSet = SetUtils.difference(afterSet, beforeSet); | |||
| log.debug("deleteSet = " + deleteSet); | |||
| log.debug("addSet = " + addSet); | |||
| // 删除权限关联 | |||
| UpdateWrapper updateWrapper = new UpdateWrapper(); | |||
| updateWrapper.eq("role_id", roleId); | |||
| updateWrapper.in("permission_id", deleteSet); | |||
| boolean deleteResult = sysRolePermissionService.remove(updateWrapper); | |||
| if (!deleteResult) { | |||
| throw new DaoException("删除角色权限关系失败"); | |||
| } | |||
| // 新增权限关联 | |||
| boolean addResult = sysRolePermissionService.saveSysRolePermissionBatch(roleId, addSet); | |||
| if (!addResult) { | |||
| throw new DaoException("新增角色权限关系失败"); | |||
| } | |||
| return true; | |||
| } | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean deleteSysRole(Long id) throws Exception { | |||
| // 判断该角色下是否有可用用户,如果有,则不能删除 | |||
| boolean isExistsUser = sysUserService.isExistsSysUserByRoleId(id); | |||
| if (isExistsUser) { | |||
| throw new DaoException("该角色下还存在可用用户,不能删除"); | |||
| } | |||
| // 角色逻辑删除 | |||
| boolean deleteRoleResult = removeById(id); | |||
| if (!deleteRoleResult) { | |||
| throw new DaoException("删除角色失败"); | |||
| } | |||
| // 角色权限关系真实删除 | |||
| boolean deletePermissionResult = sysRolePermissionService.deleteSysRolePermissionByRoleId(id); | |||
| if (!deletePermissionResult) { | |||
| throw new DaoException("删除角色权限关系失败"); | |||
| } | |||
| return true; | |||
| } | |||
| @Override | |||
| public SysRoleQueryVo getSysRoleById(Serializable id) throws Exception { | |||
| return sysRoleMapper.getSysRoleById(id); | |||
| } | |||
| @Override | |||
| public PageTool<SysRoleQueryVo> getSysRolePageList(SysRoleQueryParam sysRoleQueryParam) throws Exception { | |||
| Page page = setPageParam(sysRoleQueryParam); | |||
| IPage<SysRoleQueryVo> iPage = sysRoleMapper.getSysRolePageList(page, sysRoleQueryParam); | |||
| return new PageTool(iPage); | |||
| } | |||
| @Override | |||
| public boolean isEnableSysRole(Long id) throws Exception { | |||
| SysRole sysRole = new SysRole() | |||
| .setId(id) | |||
| .setState(StateEnum.ENABLE.ordinal()); | |||
| int count = sysRoleMapper.selectCount(new QueryWrapper<>(sysRole)); | |||
| return count > 0; | |||
| } | |||
| @Override | |||
| public boolean isEnableSysRole(Set<Long> ids) throws Exception { | |||
| for (Long id : ids) { | |||
| SysRole sysRole = new SysRole() | |||
| .setId(id) | |||
| .setState(StateEnum.ENABLE.ordinal()); | |||
| int count = sysRoleMapper.selectCount(new QueryWrapper<>(sysRole)); | |||
| if (count == 0) { | |||
| return false; | |||
| } | |||
| } | |||
| return true; | |||
| } | |||
| @Override | |||
| public boolean isExistsByCode(String code) throws Exception { | |||
| SysRole sysRole = new SysRole().setCode(code); | |||
| return sysRoleMapper.selectCount(new QueryWrapper<>(sysRole)) > 0; | |||
| } | |||
| @Override | |||
| public List<SysRoleQueryVo> getUserRoleByUserId(Long userId) { | |||
| return sysRoleMapper.getUserRoleByUserId(userId); | |||
| } | |||
| } | |||
| @@ -0,0 +1,48 @@ | |||
| package com.xdf.creative.module.service.impl; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.SysUserRoleQueryParam; | |||
| import com.xdf.creative.base.service.impl.BaseServiceImpl; | |||
| import com.xdf.creative.base.vo.creative.SysUserRoleQueryVo; | |||
| import com.xdf.creative.module.entity.SysUserRole; | |||
| import com.xdf.creative.module.mapper.SysUserRoleMapper; | |||
| import com.xdf.creative.module.service.SysUserRoleService; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import java.io.Serializable; | |||
| /** | |||
| * <p> | |||
| * 系统用户角色表 服务实现类 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-30 | |||
| */ | |||
| @Slf4j | |||
| @Service | |||
| @Transactional(rollbackFor = Exception.class) | |||
| public class SysUserRoleServiceImpl extends BaseServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService { | |||
| @Autowired | |||
| private SysUserRoleMapper sysUserRoleMapper; | |||
| @Override | |||
| public SysUserRoleQueryVo getSysUserRoleById(Serializable id) throws Exception { | |||
| return sysUserRoleMapper.getSysUserRoleById(id); | |||
| } | |||
| @Override | |||
| public PageTool<SysUserRoleQueryVo> getSysUserRolePageList(SysUserRoleQueryParam sysUserRoleQueryParam) throws Exception { | |||
| Page page = setPageParam(sysUserRoleQueryParam); | |||
| IPage<SysUserRoleQueryVo> iPage = sysUserRoleMapper.getSysUserRolePageList(page, sysUserRoleQueryParam); | |||
| return new PageTool(iPage); | |||
| } | |||
| } | |||
| @@ -0,0 +1,358 @@ | |||
| package com.xdf.creative.module.service.impl; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.baomidou.mybatisplus.core.metadata.IPage; | |||
| import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
| import com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam; | |||
| import com.xdf.creative.base.params.creative.SysUserQueryParam; | |||
| import com.xdf.creative.base.params.creative.UpdatePasswordParam; | |||
| import com.xdf.creative.base.params.creative.UpdateUserParam; | |||
| import com.xdf.creative.base.service.impl.BaseServiceImpl; | |||
| import com.xdf.creative.base.vo.creative.SysOrganizeQueryVo; | |||
| import com.xdf.creative.base.vo.creative.SysRoleQueryVo; | |||
| import com.xdf.creative.base.vo.creative.SysUserQueryVo; | |||
| import com.xdf.creative.enums.ApiCode; | |||
| import com.xdf.creative.enums.StateEnum; | |||
| import com.xdf.creative.module.entity.SysUser; | |||
| import com.xdf.creative.module.entity.SysUserRole; | |||
| import com.xdf.creative.module.mapper.SysUserMapper; | |||
| import com.xdf.creative.module.service.SysOrganizeService; | |||
| import com.xdf.creative.module.service.SysRoleService; | |||
| import com.xdf.creative.module.service.SysUserRoleService; | |||
| import com.xdf.creative.module.service.SysUserService; | |||
| import com.xdf.creative.shiro.jwt.JwtProperties; | |||
| import com.xdf.creative.shiro.jwt.JwtToken; | |||
| import com.xdf.creative.shiro.jwt.JwtUtil; | |||
| import com.xdf.creative.shiro.jwt.SaltUtil; | |||
| import com.xdf.creative.support.auth.LoginParam; | |||
| import com.xdf.creative.support.auth.LoginSysUserTokenVo; | |||
| import com.xdf.creative.support.auth.LoginSysUserVo; | |||
| import com.xdf.creative.support.exception.BusinessException; | |||
| import com.xdf.creative.support.exception.SysLoginException; | |||
| import com.xdf.creative.util.PasswordUtil; | |||
| import com.xdf.creative.util.StringUtil; | |||
| import com.xdf.creative.util.UUIDUtil; | |||
| import com.xdf.creative.util.convert.SysUserConvert; | |||
| import com.xdf.creative.util.page.PageTool; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import cn.hutool.core.collection.CollectionUtil; | |||
| import org.apache.shiro.SecurityUtils; | |||
| import org.apache.shiro.authc.UsernamePasswordToken; | |||
| import org.apache.shiro.subject.Subject; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.context.annotation.Lazy; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import java.io.Serializable; | |||
| import java.time.Duration; | |||
| import java.util.*; | |||
| /** | |||
| * <pre> | |||
| * 系统用户 服务实现类 | |||
| * </pre> | |||
| * | |||
| * @author DeanYe | |||
| * @since 2019-10-24 | |||
| */ | |||
| @Slf4j | |||
| @Service | |||
| public class SysUserServiceImpl extends BaseServiceImpl<SysUserMapper, SysUser> implements SysUserService { | |||
| @Autowired | |||
| private SysUserMapper sysUserMapper; | |||
| @Lazy | |||
| @Autowired | |||
| private SysRoleService sysRoleService; | |||
| @Lazy | |||
| @Autowired | |||
| private SysOrganizeService sysOrganizeService; | |||
| @Lazy | |||
| @Autowired | |||
| private SysUserRoleService sysUserRoleService; | |||
| @Autowired | |||
| private JwtProperties jwtProperties; | |||
| @Override | |||
| public LoginSysUserTokenVo login(LoginParam loginParam) throws Exception { | |||
| // 校验验证码 | |||
| String userName = loginParam.getUsername(); | |||
| SysUser sysUser = getSysUserByUserName(userName); | |||
| if (sysUser == null) { | |||
| log.error("登陆失败,用户名不正确,loginParam:{}", loginParam); | |||
| throw new SysLoginException(ApiCode.USERNAME_ERROR); | |||
| } | |||
| if (StateEnum.DISABLE.getKey().equals(sysUser.getState())) { | |||
| log.debug("登陆失败,用户不可用,loginParam:{}", loginParam); | |||
| throw new SysLoginException(ApiCode.USER_DISABLE); | |||
| } | |||
| String encryptPassword = PasswordUtil.encrypt(loginParam.getPassword(), sysUser.getSalt()); | |||
| if (!encryptPassword.equals(sysUser.getPassword())) { | |||
| throw new SysLoginException(ApiCode.PASSWORD_ERROR); | |||
| } | |||
| SysOrganizeQueryVo sysOrganizeQueryVo = sysOrganizeService.getSysOrganizeById(sysUser.getOrganizeId()); | |||
| if (sysOrganizeQueryVo == null) { | |||
| throw new BusinessException("组织不存在"); | |||
| } | |||
| if (!StateEnum.ENABLE.getKey().equals(sysOrganizeQueryVo.getState())) { | |||
| throw new BusinessException("组织已禁用"); | |||
| } | |||
| // 将系统用户对象转换成登陆用户对象 | |||
| LoginSysUserVo loginSysUserVo = SysUserConvert.INSTANCE.sysUserToLoginSysUserVo(sysUser); | |||
| loginSysUserVo.setOrganizeId(sysOrganizeQueryVo.getId()); | |||
| //获取角色id、名称、code | |||
| HashSet<Long> roleIdSet = new HashSet<>(); | |||
| HashSet<String> roleNameSet = new HashSet<>(); | |||
| HashSet<String> roleCodeSet = new HashSet<>(); | |||
| List<SysRoleQueryVo> sysRoleQueryVoList = sysRoleService.getUserRoleByUserId(sysUser.getId()); | |||
| if (CollectionUtil.isEmpty(sysRoleQueryVoList)) { | |||
| throw new BusinessException("角色不存在"); | |||
| } | |||
| sysRoleQueryVoList.stream().forEach(sysRoleQueryVo -> { | |||
| roleIdSet.add(sysRoleQueryVo.getId()); | |||
| roleNameSet.add(sysRoleQueryVo.getName()); | |||
| roleCodeSet.add(sysRoleQueryVo.getCode()); | |||
| }); | |||
| loginSysUserVo.setRoleId(roleIdSet) | |||
| .setRoleName(roleNameSet) | |||
| .setRoleCode(roleCodeSet); | |||
| //获取角色url | |||
| // 获取数据库中保存的盐值 | |||
| String newSalt = SaltUtil.getSalt(sysUser.getSalt(), jwtProperties); | |||
| // 生成token字符串并返回 | |||
| Long expireSecond = jwtProperties.getExpireSecond(); | |||
| String token = JwtUtil.generateToken(sysUser.getId(), userName, sysUser.getOrganizeId(),sysUser.getUserType(), newSalt, Duration.ofSeconds(expireSecond)); | |||
| log.debug("token:{}", token); | |||
| // 创建AuthenticationToken | |||
| JwtToken jwtToken = JwtToken.build(token, sysUser.getId(), userName, sysUser.getOrganizeId(),sysUser.getUserType(), newSalt, expireSecond); | |||
| Subject subject = SecurityUtils.getSubject(); | |||
| UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken( | |||
| loginParam.getUsername(), | |||
| loginParam.getPassword()); | |||
| //进行验证,这里可以捕获异常,然后返回对应信息 | |||
| subject.login(usernamePasswordToken); | |||
| // 返回token和登陆用户信息对象 | |||
| LoginSysUserTokenVo loginSysUserTokenVo = new LoginSysUserTokenVo(); | |||
| loginSysUserTokenVo.setToken("12wer234f345g34g45"); | |||
| loginSysUserTokenVo.setLoginSysUserVo(loginSysUserVo); | |||
| return loginSysUserTokenVo; | |||
| } | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean saveSysUser(SysUser sysUser) throws Exception { | |||
| // 校验用户名是否存在 | |||
| boolean isExists = isExistsByUsername(sysUser.getUsername()); | |||
| if (isExists) { | |||
| throw new BusinessException("用户名已存在"); | |||
| } | |||
| // 校验组织和角色 | |||
| checkOrganizeAndRole(sysUser.getOrganizeId(), sysUser.getRoleId()); | |||
| // Long userId = getUserId();//获取当前用户id | |||
| // 生成盐值 | |||
| String salt = UUIDUtil.getUUID(); | |||
| sysUser.setSalt(salt); | |||
| sysUser.setId(null); | |||
| //sysUser.setCreateUserId(userId); | |||
| // 密码加密 | |||
| String newPassword = PasswordUtil.encrypt(sysUser.getPassword(), salt); | |||
| sysUser.setPassword(newPassword); | |||
| // 保存系统用户 | |||
| return super.save(sysUser); | |||
| } | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean updateSysUser(UpdateUserParam updateUserParam) throws Exception { | |||
| // 获取系统用户 | |||
| SysUser updateSysUser = getById(updateUserParam.getId()); | |||
| if (updateSysUser == null) { | |||
| throw new BusinessException("修改的用户不存在"); | |||
| } | |||
| // 校验组织和角色 | |||
| checkOrganizeAndRole(updateUserParam.getOrganizeId(), updateUserParam.getRoleId()); | |||
| //String jsonStr = (String) redisTemplate.opsForValue().get(String.format(CommonRedisKey.LOGIN_USER, updateSysUser.getUsername())); | |||
| //LoginSysUserRedisVo loginSysUserRedisVo = JSONObject.parseObject(jsonStr, LoginSysUserRedisVo.class); | |||
| //权限修改 | |||
| Set<Long> roleIds = updateUserParam.getRoleId(); | |||
| if (1==1){//CollectionUtil.isNotEmpty(roleIds)) { | |||
| QueryWrapper<SysUserRole> queryWrapper = new QueryWrapper(); | |||
| queryWrapper.eq("user_id", updateUserParam.getId()); | |||
| sysUserRoleService.remove(queryWrapper); | |||
| List<SysUserRole> sysUserRoles = new ArrayList<>(); | |||
| for (Long roleId : roleIds) { | |||
| SysUserRole sysUserRole = new SysUserRole(); | |||
| sysUserRole.setRoleId(roleId); | |||
| sysUserRole.setUserId(updateUserParam.getId()); | |||
| sysUserRoles.add(sysUserRole); | |||
| } | |||
| //sysUserRoleService.saveBatch(sysUserRoles); | |||
| Set<Long> roleSet = new HashSet<>(); | |||
| Set<String> roleNameSet = new HashSet<>(); | |||
| List<SysRoleQueryVo> sysRoleQueryVos = sysRoleService.getUserRoleByUserId(null);//getUserId()); | |||
| sysRoleQueryVos.stream().forEach(sysRoleQueryVo -> { | |||
| roleSet.add(sysRoleQueryVo.getId()); | |||
| roleNameSet.add(sysRoleQueryVo.getName()); | |||
| }); | |||
| // loginSysUserRedisVo.setRoleId(roleSet); | |||
| // loginSysUserRedisVo.setRoleName(roleNameSet); | |||
| } | |||
| // 修改系统用户 | |||
| updateSysUser.setNickname(updateUserParam.getNickname()) | |||
| .setPhone(updateUserParam.getPhone()) | |||
| .setGender(updateUserParam.getGender()) | |||
| .setRemark(updateUserParam.getRemark()) | |||
| .setState(updateUserParam.getState()) | |||
| .setOrganizeId(updateUserParam.getOrganizeId()) | |||
| .setUpdateTime(new Date()); | |||
| super.updateById(updateSysUser); | |||
| // if (StringUtil.isNotEmpty(updateUserParam.getNickname())) { | |||
| // loginSysUserRedisVo.setNickname(updateUserParam.getNickname()); | |||
| // } | |||
| // if (StringUtil.isNotEmpty(updateUserParam.getPhone())) { | |||
| // loginSysUserRedisVo.setPhone(updateUserParam.getPhone()); | |||
| // } | |||
| // if (updateUserParam.getGender() != null) { | |||
| // loginSysUserRedisVo.setGender(updateUserParam.getGender()); | |||
| // } | |||
| // if (updateUserParam.getState() != null) { | |||
| // loginSysUserRedisVo.setState(updateUserParam.getState()); | |||
| // } | |||
| // if (StringUtil.longIsNotEmpty(updateUserParam.getOrganizeId())) { | |||
| // loginSysUserRedisVo.setOrgId(updateUserParam.getOrganizeId()); | |||
| // } | |||
| // | |||
| // | |||
| // Long expireDuration = redisTemplate.getExpire(String.format(CommonRedisKey.LOGIN_USER, updateSysUser.getUsername())); | |||
| // redisTemplate.delete(String.format(CommonRedisKey.LOGIN_USER, updateSysUser.getUsername())); | |||
| // String key = String.format(CommonRedisKey.LOGIN_USER, updateSysUser.getUsername()); | |||
| // String val = JSON.toJSONString(loginSysUserRedisVo); | |||
| // redisUtil.set(key, val, expireDuration); | |||
| return true; | |||
| } | |||
| @Transactional(rollbackFor = Exception.class) | |||
| @Override | |||
| public boolean deleteSysUser(Long id) throws Exception { | |||
| return super.removeById(id); | |||
| } | |||
| @Override | |||
| public SysUserQueryVo getSysUserById(Serializable id) throws Exception { | |||
| return sysUserMapper.getSysUserById(id); | |||
| } | |||
| @Override | |||
| public PageTool<SysUserQueryVo> getSysUserPageList(SysUserQueryParam sysUserQueryParam) throws Exception { | |||
| Page page = setPageParam(sysUserQueryParam); | |||
| IPage<SysUserQueryVo> iPage = sysUserMapper.getSysUserPageList(page, sysUserQueryParam); | |||
| return new PageTool(iPage); | |||
| } | |||
| @Override | |||
| public boolean isExistsByUsername(String username) throws Exception { | |||
| SysUser selectSysUser = new SysUser().setUsername(username); | |||
| return sysUserMapper.selectCount(new QueryWrapper<>(selectSysUser)) > 0; | |||
| } | |||
| @Override | |||
| public void checkOrganizeAndRole(Long organizeId, Set<Long> roleId) throws Exception { | |||
| // 校验组织是否存在并且可用 | |||
| if (StringUtil.longIsNotEmpty(organizeId)) { | |||
| boolean isEnableSysOrganize = sysOrganizeService.isEnableSysOrganize(new IsEnableSysOrganizeParam(null, organizeId));//getUserId(), organizeId)); | |||
| if (!isEnableSysOrganize) { | |||
| throw new BusinessException("该组织不存在或已禁用"); | |||
| } | |||
| } | |||
| // 校验角色是否存在并且可用 | |||
| if (1==1){//CollectionUtil.isNotEmpty(roleId)) { | |||
| boolean isEnable = sysRoleService.isEnableSysRole(roleId); | |||
| if (!isEnable) { | |||
| throw new BusinessException("该角色不存在或已禁用"); | |||
| } | |||
| } | |||
| } | |||
| @Override | |||
| public boolean isExistsSysUserByRoleId(Long roleId) throws Exception { | |||
| SysUser sysUser = new SysUser() | |||
| .setState(StateEnum.ENABLE.ordinal()); | |||
| return sysUserMapper.selectCount(new QueryWrapper(sysUser)) > 0; | |||
| } | |||
| @Override | |||
| public boolean updatePassword(UpdatePasswordParam updatePasswordParam) throws Exception { | |||
| String oldPassword = updatePasswordParam.getOldPassword(); | |||
| String newPassword = updatePasswordParam.getNewPassword(); | |||
| String confirmPassword = updatePasswordParam.getConfirmPassword(); | |||
| if (!newPassword.equals(confirmPassword)) { | |||
| throw new BusinessException("两次输入的密码不一致"); | |||
| } | |||
| if (newPassword.equals(oldPassword)) { | |||
| throw new BusinessException("新密码和旧密码不能一致"); | |||
| } | |||
| // 判断原密码是否正确 | |||
| SysUser sysUser = null;//getById(updatePasswordParam.getUserId()); | |||
| if (sysUser == null) { | |||
| throw new BusinessException("用户不存在"); | |||
| } | |||
| if (StateEnum.DISABLE.getKey().equals(sysUser.getState())) { | |||
| throw new BusinessException("用户已禁用"); | |||
| } | |||
| // 密码加密处理 | |||
| String salt = sysUser.getSalt(); | |||
| String encryptOldPassword = PasswordUtil.encrypt(oldPassword, salt); | |||
| if (!sysUser.getPassword().equals(encryptOldPassword)) { | |||
| throw new BusinessException("原密码错误"); | |||
| } | |||
| // 新密码加密 | |||
| String encryptNewPassword = PasswordUtil.encrypt(newPassword, salt); | |||
| // 修改密码 | |||
| sysUser.setPassword(encryptNewPassword) | |||
| .setUpdateTime(new Date()); | |||
| return updateById(sysUser); | |||
| } | |||
| @Override | |||
| public boolean updateSysUserHead(Long id, String headPath) throws Exception { | |||
| SysUser sysUser = new SysUser() | |||
| .setId(id) | |||
| .setHead(headPath); | |||
| return updateById(sysUser); | |||
| } | |||
| @Override | |||
| public SysUser getSysUserByUserName(String username) throws Exception { | |||
| return sysUserMapper.getSysUserByUserName(username); | |||
| } | |||
| } | |||
| @@ -0,0 +1,90 @@ | |||
| package com.xdf.creative.shiro; | |||
| import cn.hutool.core.collection.CollectionUtil; | |||
| import com.xdf.creative.base.vo.creative.SysRoleQueryVo; | |||
| import com.xdf.creative.module.entity.SysUser; | |||
| import com.xdf.creative.module.service.SysRoleService; | |||
| import com.xdf.creative.module.service.SysUserService; | |||
| import com.xdf.creative.support.exception.BusinessException; | |||
| import org.apache.shiro.authc.*; | |||
| import org.apache.shiro.authz.AuthorizationInfo; | |||
| import org.apache.shiro.authz.SimpleAuthorizationInfo; | |||
| import org.apache.shiro.realm.AuthorizingRealm; | |||
| import org.apache.shiro.subject.PrincipalCollection; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import java.util.HashSet; | |||
| import java.util.List; | |||
| public class CustomRealm extends AuthorizingRealm { | |||
| private final static Logger log = LoggerFactory.getLogger(AuthorizingRealm.class); | |||
| @Autowired | |||
| private SysUserService sysUserService; | |||
| @Autowired | |||
| private SysRoleService sysRoleService; | |||
| @Override | |||
| protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { | |||
| //获取登录用户名 | |||
| String name = (String) principalCollection.getPrimaryPrincipal(); | |||
| //根据用户名去数据库查询用户信息 | |||
| SysUser user = null; | |||
| try { | |||
| user = sysUserService.getSysUserByUserName(name); | |||
| if(null==user){ | |||
| return null; | |||
| } | |||
| } catch (Exception e) { | |||
| throw new BusinessException("用户不存在"); | |||
| } | |||
| //添加角色和权限 | |||
| SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo(); | |||
| HashSet<Long> roleIdSet = new HashSet<>(); | |||
| HashSet<String> roleNameSet = new HashSet<>(); | |||
| HashSet<String> roleCodeSet = new HashSet<>(); | |||
| List<SysRoleQueryVo> sysRoleQueryVoList = sysRoleService.getUserRoleByUserId(user.getId()); | |||
| if (CollectionUtil.isEmpty(sysRoleQueryVoList)) { | |||
| throw new BusinessException("角色不存在"); | |||
| } | |||
| sysRoleQueryVoList.stream().forEach(sysRoleQueryVo -> { | |||
| roleIdSet.add(sysRoleQueryVo.getId()); | |||
| roleNameSet.add(sysRoleQueryVo.getName()); | |||
| roleCodeSet.add(sysRoleQueryVo.getCode()); | |||
| }); | |||
| simpleAuthorizationInfo.setRoles(roleCodeSet); | |||
| // simpleAuthorizationInfo.addStringPermission(permissions.getPermissionsName()); | |||
| return simpleAuthorizationInfo; | |||
| } | |||
| @Override | |||
| protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { | |||
| //加这一步的目的是在Post请求的时候会先进认证,然后在到请求 | |||
| if (authenticationToken.getPrincipal() == null) { | |||
| return null; | |||
| } | |||
| UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken; | |||
| //根据用户名去数据库查询用户信息 | |||
| SysUser user = null; | |||
| //获取用户信息 | |||
| String name =usernamePasswordToken.getUsername(); | |||
| try { | |||
| user = sysUserService.getSysUserByUserName(name); | |||
| } catch (Exception e) { | |||
| log.error("用户 { "+name+" } 不存在 "); | |||
| throw new AccountException("账户不存在"); | |||
| } | |||
| if (user == null) { | |||
| //这里返回后会报出对应异常 | |||
| throw new BusinessException("用户不存在"); | |||
| } else { | |||
| //这里验证authenticationToken和simpleAuthenticationInfo的信息 | |||
| SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(user, usernamePasswordToken.getPassword().toString(), getName()); | |||
| return simpleAuthenticationInfo; | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,31 @@ | |||
| package com.xdf.creative.shiro; | |||
| import com.xdf.creative.enums.ApiCode; | |||
| import com.xdf.creative.util.page.ApiResult; | |||
| import org.apache.shiro.authz.UnauthorizedException; | |||
| import org.springframework.web.bind.annotation.ControllerAdvice; | |||
| import org.springframework.web.bind.annotation.ExceptionHandler; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| /** | |||
| * @author : lgw | |||
| * @date : 16:51 2020/3/3 | |||
| */ | |||
| @ControllerAdvice | |||
| public class GlobalExceptionHandler { | |||
| @ExceptionHandler(value = UnauthorizedException.class) | |||
| public ApiResult jsonExceptionHandler(HttpServletRequest req, Exception e) { | |||
| return ApiResult.fail(ApiCode.FAIL, "权限不足!"); | |||
| } | |||
| // @ExceptionHandler(value = UnauthorizedException.class) | |||
| // public ModelAndView businessExceptionHandler(){ | |||
| // ModelAndView mav = new ModelAndView(); | |||
| // mav.setStatus(HttpStatus.UNAUTHORIZED); | |||
| // mav.addObject("message", e.getMessage()); | |||
| // mav.setViewName("403"); | |||
| // return mav; | |||
| // } | |||
| } | |||
| @@ -0,0 +1,103 @@ | |||
| package com.xdf.creative.shiro; | |||
| /** | |||
| * @author : lgw | |||
| * @date : 15:58 2020/3/3 | |||
| */ | |||
| import org.apache.shiro.SecurityUtils; | |||
| import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; | |||
| import org.apache.shiro.mgt.DefaultSubjectDAO; | |||
| import org.apache.shiro.mgt.SecurityManager; | |||
| import org.apache.shiro.spring.LifecycleBeanPostProcessor; | |||
| import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; | |||
| import org.apache.shiro.spring.web.ShiroFilterFactoryBean; | |||
| import org.apache.shiro.web.mgt.DefaultWebSecurityManager; | |||
| import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; | |||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | |||
| import org.springframework.context.annotation.Bean; | |||
| import org.springframework.context.annotation.Configuration; | |||
| import org.springframework.context.annotation.DependsOn; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| @Configuration | |||
| public class ShiroConfig { | |||
| //不加这个注解不生效,具体不详 | |||
| @Bean | |||
| @ConditionalOnMissingBean | |||
| public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { | |||
| DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator(); | |||
| defaultAAP.setProxyTargetClass(true); | |||
| return defaultAAP; | |||
| } | |||
| //将自己的验证方式加入容器 | |||
| @Bean | |||
| public CustomRealm myShiroRealm() { | |||
| CustomRealm customRealm = new CustomRealm(); | |||
| return customRealm; | |||
| } | |||
| //权限管理,配置主要是Realm的管理认证 | |||
| @Bean | |||
| public SecurityManager securityManager() { | |||
| DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); | |||
| securityManager.setRealm(myShiroRealm()); | |||
| // 无状态subjectFactory设置 | |||
| DefaultSessionStorageEvaluator evaluator = (DefaultSessionStorageEvaluator)((DefaultSubjectDAO) securityManager.getSubjectDAO()).getSessionStorageEvaluator(); | |||
| evaluator.setSessionStorageEnabled(Boolean.FALSE); | |||
| StatelessWebSubjectFactory subjectFactory = new StatelessWebSubjectFactory(); | |||
| securityManager.setSubjectFactory(subjectFactory); | |||
| SecurityUtils.setSecurityManager(securityManager); | |||
| return securityManager; | |||
| } | |||
| //Filter工厂,设置对应的过滤条件和跳转条件 | |||
| @Bean | |||
| public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { | |||
| ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); | |||
| shiroFilterFactoryBean.setSecurityManager(securityManager); | |||
| Map<String, String> map = new HashMap<>(); | |||
| //登出 | |||
| map.put("/logout", "logout"); | |||
| //对所有用户认证 | |||
| map.put("/**", "authc"); | |||
| //登录 | |||
| shiroFilterFactoryBean.setLoginUrl("/sysUser/login"); | |||
| //首页 | |||
| shiroFilterFactoryBean.setSuccessUrl("/index"); | |||
| //错误页面,认证不通过跳转 | |||
| shiroFilterFactoryBean.setUnauthorizedUrl("/error"); | |||
| shiroFilterFactoryBean.setFilterChainDefinitionMap(map); | |||
| return shiroFilterFactoryBean; | |||
| } | |||
| /** | |||
| * 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证 | |||
| * 配置以下两个bean(DefaultAdvisorAutoProxyCreator(可选)和AuthorizationAttributeSourceAdvisor)即可实现此功能 | |||
| * | |||
| * @return | |||
| */ | |||
| @Bean | |||
| @DependsOn({"lifecycleBeanPostProcessor"}) | |||
| public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() { | |||
| DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator(); | |||
| advisorAutoProxyCreator.setProxyTargetClass(true); | |||
| return advisorAutoProxyCreator; | |||
| } | |||
| @Bean(name="lifecycleBeanPostProcessor") | |||
| public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() { | |||
| return new LifecycleBeanPostProcessor(); | |||
| } | |||
| //加入注解的使用,不加入这个注解不生效 | |||
| @Bean | |||
| public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { | |||
| AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); | |||
| authorizationAttributeSourceAdvisor.setSecurityManager(securityManager); | |||
| return authorizationAttributeSourceAdvisor; | |||
| } | |||
| } | |||
| @@ -0,0 +1,23 @@ | |||
| package com.xdf.creative.shiro; | |||
| import org.apache.shiro.subject.Subject; | |||
| import org.apache.shiro.subject.SubjectContext; | |||
| import org.apache.shiro.web.mgt.DefaultWebSubjectFactory; | |||
| /** | |||
| * 对于无状态的TOKEN不创建session 这里都不使用session | |||
| * @author tomsun28 | |||
| * @date 21:52 2018/3/3 | |||
| */ | |||
| public class StatelessWebSubjectFactory extends DefaultWebSubjectFactory { | |||
| @Override | |||
| public Subject createSubject(SubjectContext context) { | |||
| // 这里都不创建session | |||
| context.setSessionCreationEnabled(Boolean.FALSE); | |||
| return super.createSubject(context); | |||
| } | |||
| public StatelessWebSubjectFactory() {} | |||
| } | |||
| @@ -0,0 +1,121 @@ | |||
| /* | |||
| package com.xdf.creative.shiro.filter; | |||
| import com.usthe.bootshiro.service.AccountService; | |||
| import com.usthe.bootshiro.shiro.config.RestPathMatchingFilterChainResolver; | |||
| import com.usthe.bootshiro.shiro.provider.ShiroFilterRulesProvider; | |||
| import com.usthe.bootshiro.shiro.rule.RolePermRule; | |||
| import com.usthe.bootshiro.support.SpringContextHolder; | |||
| import org.apache.shiro.spring.web.ShiroFilterFactoryBean; | |||
| import org.apache.shiro.web.filter.mgt.DefaultFilterChainManager; | |||
| import org.apache.shiro.web.servlet.AbstractShiroFilter; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Value; | |||
| import org.springframework.data.redis.core.StringRedisTemplate; | |||
| import org.springframework.stereotype.Component; | |||
| import javax.servlet.Filter; | |||
| import java.util.Arrays; | |||
| import java.util.LinkedHashMap; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| */ | |||
| /** | |||
| * Filter 管理器 | |||
| * @author tomsun28 | |||
| * @date 11:16 2018/2/28 | |||
| *//* | |||
| @Component | |||
| public class ShiroFilterChainManager { | |||
| private static final Logger LOGGER = LoggerFactory.getLogger(ShiroFilterChainManager.class); | |||
| private final ShiroFilterRulesProvider shiroFilterRulesProvider; | |||
| private final StringRedisTemplate redisTemplate; | |||
| private final AccountService accountService; | |||
| @Value("${bootshiro.enableEncryptPassword}") | |||
| private boolean isEncryptPassword; | |||
| @Autowired | |||
| public ShiroFilterChainManager(ShiroFilterRulesProvider shiroFilterRulesProvider, StringRedisTemplate redisTemplate, AccountService accountService){ | |||
| this.shiroFilterRulesProvider = shiroFilterRulesProvider; | |||
| this.redisTemplate = redisTemplate; | |||
| this.accountService = accountService; | |||
| } | |||
| */ | |||
| /** | |||
| * description 初始化获取过滤链 | |||
| * | |||
| * @return java.util.Map<java.lang.String,javax.servlet.Filter> | |||
| *//* | |||
| public Map<String,Filter> initGetFilters() { | |||
| Map<String,Filter> filters = new LinkedHashMap<>(); | |||
| PasswordFilter passwordFilter = new PasswordFilter(); | |||
| passwordFilter.setRedisTemplate(redisTemplate); | |||
| passwordFilter.setEncryptPassword(isEncryptPassword); | |||
| filters.put("auth",passwordFilter); | |||
| BonJwtFilter jwtFilter = new BonJwtFilter(); | |||
| jwtFilter.setRedisTemplate(redisTemplate); | |||
| jwtFilter.setAccountService(accountService); | |||
| filters.put("jwt",jwtFilter); | |||
| return filters; | |||
| } | |||
| */ | |||
| /** | |||
| * description 初始化获取过滤链规则 | |||
| * | |||
| * @return java.util.Map<java.lang.String,java.lang.String> | |||
| *//* | |||
| public Map<String,String> initGetFilterChain() { | |||
| Map<String,String> filterChain = new LinkedHashMap<>(); | |||
| // -------------anon 默认过滤器忽略的URL | |||
| List<String> defalutAnon = Arrays.asList("/css/**","/js/**"); | |||
| defalutAnon.forEach(ignored -> filterChain.put(ignored,"anon")); | |||
| // -------------auth 默认需要认证过滤器的URL 走auth--PasswordFilter | |||
| List<String> defalutAuth = Arrays.asList("/account/**"); | |||
| defalutAuth.forEach(auth -> filterChain.put(auth,"auth")); | |||
| // -------------dynamic 动态URL | |||
| if (shiroFilterRulesProvider != null) { | |||
| List<RolePermRule> rolePermRules = this.shiroFilterRulesProvider.loadRolePermRules(); | |||
| if (null != rolePermRules) { | |||
| rolePermRules.forEach(rule -> { | |||
| StringBuilder chain = rule.toFilterChain(); | |||
| if (null != chain) { | |||
| filterChain.putIfAbsent(rule.getUrl(),chain.toString()); | |||
| } | |||
| }); | |||
| } | |||
| } | |||
| return filterChain; | |||
| } | |||
| */ | |||
| /** | |||
| * description 动态重新加载过滤链规则 | |||
| *//* | |||
| public void reloadFilterChain() { | |||
| ShiroFilterFactoryBean shiroFilterFactoryBean = SpringContextHolder.getBean(ShiroFilterFactoryBean.class); | |||
| AbstractShiroFilter abstractShiroFilter = null; | |||
| try { | |||
| abstractShiroFilter = (AbstractShiroFilter)shiroFilterFactoryBean.getObject(); | |||
| RestPathMatchingFilterChainResolver filterChainResolver = (RestPathMatchingFilterChainResolver)abstractShiroFilter.getFilterChainResolver(); | |||
| DefaultFilterChainManager filterChainManager = (DefaultFilterChainManager)filterChainResolver.getFilterChainManager(); | |||
| filterChainManager.getFilterChains().clear(); | |||
| shiroFilterFactoryBean.getFilterChainDefinitionMap().clear(); | |||
| shiroFilterFactoryBean.setFilterChainDefinitionMap(this.initGetFilterChain()); | |||
| shiroFilterFactoryBean.getFilterChainDefinitionMap().forEach((k,v) -> filterChainManager.createChain(k,v)); | |||
| } catch (Exception e) { | |||
| LOGGER.error(e.getMessage(),e); | |||
| } | |||
| } | |||
| } | |||
| */ | |||
| @@ -0,0 +1,81 @@ | |||
| package com.xdf.creative.shiro.jwt; | |||
| import lombok.Data; | |||
| import org.springframework.boot.context.properties.ConfigurationProperties; | |||
| import org.springframework.core.annotation.Order; | |||
| import org.springframework.stereotype.Component; | |||
| /** | |||
| * JWT属性配置 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-05-22 | |||
| **/ | |||
| @Data | |||
| @Component | |||
| @Order(-1) | |||
| @ConfigurationProperties(prefix = "spring-boot-plus.jwt") | |||
| public class JwtProperties { | |||
| /** | |||
| * token名称,默认名称为:token,可自定义 | |||
| */ | |||
| private String tokenName; | |||
| /** | |||
| * 密码 | |||
| */ | |||
| private String secret; | |||
| /** | |||
| * 签发人 | |||
| */ | |||
| private String issuer; | |||
| /** | |||
| * 主题 | |||
| */ | |||
| private String subject; | |||
| /** | |||
| * 签发的目标 | |||
| */ | |||
| private String audience; | |||
| /** | |||
| * token失效时间,默认1小时,60*60=3600 | |||
| */ | |||
| private Long expireSecond; | |||
| /** | |||
| * 是否刷新token,默认为true | |||
| */ | |||
| private boolean refreshToken = true; | |||
| /** | |||
| * 刷新token倒计时,默认10分钟,10*60=600 | |||
| */ | |||
| private Integer refreshTokenCountdown; | |||
| /** | |||
| * redis校验jwt token是否存在 | |||
| */ | |||
| private boolean redisCheck; | |||
| /** | |||
| * 单用户登陆,一个用户只能又一个有效的token | |||
| */ | |||
| private boolean singleLogin; | |||
| /** | |||
| * 是否进行盐值校验 | |||
| */ | |||
| private boolean saltCheck; | |||
| /** | |||
| * 刷新tokenName | |||
| */ | |||
| private String refreshTokenName; | |||
| } | |||
| @@ -0,0 +1,91 @@ | |||
| package com.xdf.creative.shiro.jwt; | |||
| import com.auth0.jwt.interfaces.DecodedJWT; | |||
| import com.xdf.creative.util.IpUtil; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.util.Date; | |||
| /** | |||
| * Shiro JwtToken对象 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-09-27 | |||
| * @since 1.3.0.RELEASE | |||
| **/ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| public class JwtToken { | |||
| private Long userId; | |||
| /** | |||
| * 登陆ip | |||
| */ | |||
| private String host; | |||
| /** | |||
| * 登陆用户名称 | |||
| */ | |||
| private String username; | |||
| /*** | |||
| * 组织id | |||
| */ | |||
| private Long organizeId; | |||
| /*** | |||
| * 组织类型 0 普通用户 1、园区用户 2 区文创办 3市文创办 8后台管理 | |||
| */ | |||
| private Integer organizeType; | |||
| /** | |||
| * 辖区id | |||
| */ | |||
| private String regionId; | |||
| /** | |||
| * 登陆盐值 | |||
| */ | |||
| private String salt; | |||
| /** | |||
| * 登陆token | |||
| */ | |||
| private String token; | |||
| /** | |||
| * 创建时间 | |||
| */ | |||
| private Date createDate; | |||
| /** | |||
| * 多长时间过期,默认一小时 | |||
| */ | |||
| private long expireSecond; | |||
| /** | |||
| * 过期日期 | |||
| */ | |||
| private Date expireDate; | |||
| private String principal; | |||
| private String credentials; | |||
| public static JwtToken build(String token, Long userId, String username, Long organizeId, Integer organizeType, String salt, long expireSecond) { | |||
| DecodedJWT decodedJWT = JwtUtil.getJwtInfo(token); | |||
| Date createDate = decodedJWT.getIssuedAt(); | |||
| Date expireDate = decodedJWT.getExpiresAt(); | |||
| return new JwtToken() | |||
| .setUsername(username) | |||
| .setUserId(userId) | |||
| .setToken(token) | |||
| .setOrganizeType(organizeType) | |||
| .setOrganizeId(organizeId) | |||
| .setHost(IpUtil.getRequestIp()) | |||
| .setSalt(salt) | |||
| .setCreateDate(createDate) | |||
| .setExpireSecond(expireSecond) | |||
| .setExpireDate(expireDate); | |||
| } | |||
| } | |||
| @@ -0,0 +1,77 @@ | |||
| package com.xdf.creative.shiro.jwt; | |||
| import com.xdf.creative.util.HttpServletRequestUtil; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.springframework.stereotype.Component; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| /** | |||
| * JwtToken工具类 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-03 | |||
| * @since 1.3.0.RELEASE | |||
| **/ | |||
| @Slf4j | |||
| @Component | |||
| public class JwtTokenUtil { | |||
| private static String tokenName; | |||
| private static String refreshTokenName; | |||
| public JwtTokenUtil(JwtProperties jwtProperties) { | |||
| tokenName = jwtProperties.getTokenName(); | |||
| refreshTokenName = jwtProperties.getRefreshTokenName(); | |||
| log.debug("tokenName:{}", tokenName); | |||
| } | |||
| /** | |||
| * 获取token名称 | |||
| * | |||
| * @return | |||
| */ | |||
| public static String getTokenName() { | |||
| return tokenName; | |||
| } | |||
| /** | |||
| * 获取refreshTokenName名称 | |||
| * | |||
| * @return | |||
| */ | |||
| public static String getRefreshTokenName() { | |||
| return refreshTokenName; | |||
| } | |||
| /** | |||
| * 从请求头或者请求参数中 | |||
| * | |||
| * @return | |||
| */ | |||
| public static String getToken() { | |||
| return getToken(HttpServletRequestUtil.getRequest()); | |||
| } | |||
| /** | |||
| * 从请求头或者请求参数中 | |||
| * | |||
| * @param request | |||
| * @return | |||
| */ | |||
| public static String getToken(HttpServletRequest request) { | |||
| if (request == null) { | |||
| throw new IllegalArgumentException("request不能为空"); | |||
| } | |||
| // 从请求头中获取token | |||
| String token = request.getHeader(tokenName); | |||
| if (StringUtils.isBlank(token)) { | |||
| // 从请求参数中获取token | |||
| token = request.getParameter(tokenName); | |||
| } | |||
| return token; | |||
| } | |||
| } | |||
| @@ -0,0 +1,256 @@ | |||
| package com.xdf.creative.shiro.jwt; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.auth0.jwt.JWT; | |||
| import com.auth0.jwt.JWTVerifier; | |||
| import com.auth0.jwt.algorithms.Algorithm; | |||
| import com.auth0.jwt.interfaces.DecodedJWT; | |||
| import com.xdf.creative.constant.CommonConstant; | |||
| import com.xdf.creative.util.UUIDUtil; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| import org.apache.commons.lang3.time.DateUtils; | |||
| import org.springframework.stereotype.Component; | |||
| import java.time.Duration; | |||
| import java.util.Date; | |||
| /** | |||
| * JWT工具类 | |||
| * https://github.com/auth0/java-jwt | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-09-30 | |||
| * @since 1.3.0.RELEASE | |||
| **/ | |||
| @Slf4j | |||
| @Component | |||
| public class JwtUtil { | |||
| private static JwtProperties jwtProperties; | |||
| public JwtUtil(JwtProperties jwtProperties) { | |||
| JwtUtil.jwtProperties = jwtProperties; | |||
| log.info(JSON.toJSONString(JwtUtil.jwtProperties)); | |||
| } | |||
| /** | |||
| * 生成JWT Token | |||
| * | |||
| * @param username 用户名 | |||
| * @param salt 盐值 | |||
| * @param expireDuration 过期时间和单位 | |||
| * @return token | |||
| */ | |||
| public static String generateToken(long userId, String username, long organizeId, Integer organizeType, String salt, Duration expireDuration) { | |||
| try { | |||
| if (StringUtils.isBlank(username)) { | |||
| log.error("username不能为空"); | |||
| return null; | |||
| } | |||
| log.debug("username:{}", username); | |||
| // 如果盐值为空,则使用默认值:666666 | |||
| if (StringUtils.isBlank(salt)) { | |||
| salt = jwtProperties.getSecret(); | |||
| } | |||
| log.debug("salt:{}", salt); | |||
| // 过期时间,单位:秒 | |||
| Long expireSecond; | |||
| // 默认过期时间为1小时 | |||
| if (expireDuration == null) { | |||
| expireSecond = jwtProperties.getExpireSecond(); | |||
| } else { | |||
| expireSecond = expireDuration.getSeconds(); | |||
| } | |||
| log.debug("expireSecond:{}", expireSecond); | |||
| Date expireDate = DateUtils.addSeconds(new Date(), expireSecond.intValue()); | |||
| log.debug("expireDate:{}", expireDate); | |||
| // 生成token | |||
| Algorithm algorithm = Algorithm.HMAC256(salt); | |||
| String token = JWT.create() | |||
| .withClaim(CommonConstant.JWT_USERNAME, username) | |||
| .withClaim(CommonConstant.JWT_USERID, userId) | |||
| .withClaim(CommonConstant.JWT_ORGANIZE, organizeId) | |||
| .withClaim(CommonConstant.JWT_ORGANIZETYPE, organizeType) | |||
| .withJWTId(UUIDUtil.getUUID()) // jwt唯一id | |||
| .withIssuer(jwtProperties.getIssuer()) // 签发人 | |||
| .withSubject(jwtProperties.getSubject()) // 主题 | |||
| .withAudience(jwtProperties.getAudience()) // 签发的目标 | |||
| .withIssuedAt(new Date()) // 签名时间 | |||
| .withExpiresAt(expireDate) // token过期时间 | |||
| .sign(algorithm); // 签名 | |||
| return token; | |||
| } catch (Exception e) { | |||
| log.error("generateToken exception", e); | |||
| } | |||
| return null; | |||
| } | |||
| public static boolean verifyToken(String token, String salt) { | |||
| try { | |||
| Algorithm algorithm = Algorithm.HMAC256(salt); | |||
| JWTVerifier verifier = JWT.require(algorithm) | |||
| .withIssuer(jwtProperties.getIssuer()) // 签发人 | |||
| .withSubject(jwtProperties.getSubject()) // 主题 | |||
| .withAudience(jwtProperties.getAudience()) // 签发的目标 | |||
| .build(); | |||
| DecodedJWT jwt = verifier.verify(token); | |||
| if (jwt != null) { | |||
| return true; | |||
| } | |||
| } catch (Exception e) { | |||
| log.error("Verify Token Exception", e); | |||
| } | |||
| return false; | |||
| } | |||
| /** | |||
| * 解析token,获取token数据 | |||
| * | |||
| * @param token | |||
| * @return | |||
| */ | |||
| public static DecodedJWT getJwtInfo(String token) { | |||
| DecodedJWT decodedJWT = JWT.decode(token); | |||
| return decodedJWT; | |||
| } | |||
| /** | |||
| * 获取用户名 | |||
| * | |||
| * @param token | |||
| * @return | |||
| */ | |||
| public static String getUsername(String token) { | |||
| if (StringUtils.isBlank(token)) { | |||
| return null; | |||
| } | |||
| DecodedJWT decodedJWT = getJwtInfo(token); | |||
| if (decodedJWT == null) { | |||
| return null; | |||
| } | |||
| String username = decodedJWT.getClaim(CommonConstant.JWT_USERNAME).asString(); | |||
| return username; | |||
| } | |||
| /** | |||
| * 获取组织id | |||
| * | |||
| * @param token | |||
| * @return | |||
| */ | |||
| public static Long getOrganizeId(String token) { | |||
| if (StringUtils.isBlank(token)) { | |||
| return null; | |||
| } | |||
| DecodedJWT decodedJWT = getJwtInfo(token); | |||
| if (decodedJWT == null) { | |||
| return null; | |||
| } | |||
| Long organizeId = decodedJWT.getClaim(CommonConstant.JWT_ORGANIZE).asLong(); | |||
| return organizeId; | |||
| } | |||
| /** | |||
| * 获取辖区id | |||
| * | |||
| * @param token | |||
| * @return | |||
| */ | |||
| public static String getRegionId(String token) { | |||
| if (StringUtils.isBlank(token)) { | |||
| return null; | |||
| } | |||
| DecodedJWT decodedJWT = getJwtInfo(token); | |||
| if (decodedJWT == null) { | |||
| return null; | |||
| } | |||
| String regionId = decodedJWT.getClaim(CommonConstant.JWT_REGIONID).asString(); | |||
| return regionId; | |||
| } | |||
| /** | |||
| * 获取组织类型 | |||
| * | |||
| * @param token | |||
| * @return | |||
| */ | |||
| public static Integer getOrganizeType(String token) { | |||
| if (StringUtils.isBlank(token)) { | |||
| return null; | |||
| } | |||
| DecodedJWT decodedJWT = getJwtInfo(token); | |||
| if (decodedJWT == null) { | |||
| return null; | |||
| } | |||
| Integer organizeType = decodedJWT.getClaim(CommonConstant.JWT_ORGANIZETYPE).asInt(); | |||
| return organizeType; | |||
| } | |||
| /** | |||
| * 获取用户ID | |||
| * | |||
| * @param token | |||
| * @return | |||
| */ | |||
| public static Long getUserId(String token) { | |||
| if (StringUtils.isBlank(token)) { | |||
| return null; | |||
| } | |||
| DecodedJWT decodedJWT = getJwtInfo(token); | |||
| if (decodedJWT == null) { | |||
| return null; | |||
| } | |||
| Long userId = decodedJWT.getClaim(CommonConstant.JWT_USERID).asLong(); | |||
| return userId; | |||
| } | |||
| /** | |||
| * 获取创建时间 | |||
| * | |||
| * @param token | |||
| * @return | |||
| */ | |||
| public static Date getIssuedAt(String token) { | |||
| DecodedJWT decodedJWT = getJwtInfo(token); | |||
| if (decodedJWT == null) { | |||
| return null; | |||
| } | |||
| return decodedJWT.getIssuedAt(); | |||
| } | |||
| /** | |||
| * 获取过期时间 | |||
| * | |||
| * @param token | |||
| * @return | |||
| */ | |||
| public static Date getExpireDate(String token) { | |||
| DecodedJWT decodedJWT = getJwtInfo(token); | |||
| if (decodedJWT == null) { | |||
| return null; | |||
| } | |||
| return decodedJWT.getExpiresAt(); | |||
| } | |||
| /** | |||
| * 判断token是否已过期 | |||
| * | |||
| * @param token | |||
| * @return | |||
| */ | |||
| public static boolean isExpired(String token) { | |||
| Date expireDate = getExpireDate(token); | |||
| if (expireDate == null) { | |||
| return true; | |||
| } | |||
| return expireDate.before(new Date()); | |||
| } | |||
| } | |||
| @@ -0,0 +1,53 @@ | |||
| package com.xdf.creative.shiro.jwt; | |||
| import org.apache.commons.codec.digest.DigestUtils; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| /** | |||
| * 盐值包装工具类 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-09-30 | |||
| * @since 1.3.0.RELEASE | |||
| **/ | |||
| public class SaltUtil { | |||
| /** | |||
| * 盐值包装 | |||
| * | |||
| * @param secret 配置文件中配置的附加盐值 | |||
| * @param salt 数据库中保存的盐值 | |||
| * @return | |||
| */ | |||
| public static String getSalt(String secret, String salt) { | |||
| if (StringUtils.isBlank(secret) && StringUtils.isBlank(salt)) { | |||
| return null; | |||
| } | |||
| // 加密方法 | |||
| String newSalt = DigestUtils.sha256Hex(secret + salt); | |||
| return newSalt; | |||
| } | |||
| /** | |||
| * 加工盐值 | |||
| * | |||
| * @param salt | |||
| * @param jwtProperties | |||
| * @return | |||
| */ | |||
| public static String getSalt(String salt, JwtProperties jwtProperties) { | |||
| String newSalt; | |||
| if (jwtProperties.isSaltCheck()) { | |||
| // 包装盐值 | |||
| newSalt = SaltUtil.getSalt(jwtProperties.getSecret(), salt); | |||
| } else { | |||
| newSalt = jwtProperties.getSecret(); | |||
| } | |||
| return newSalt; | |||
| } | |||
| } | |||
| @@ -0,0 +1,21 @@ | |||
| package com.xdf.creative.shiro.match; | |||
| import org.apache.shiro.authc.AuthenticationInfo; | |||
| import org.apache.shiro.authc.AuthenticationToken; | |||
| import org.apache.shiro.authc.credential.CredentialsMatcher; | |||
| import org.springframework.stereotype.Component; | |||
| /** | |||
| * @author tomsun28 | |||
| * @date 18:00 2018/3/3 | |||
| */ | |||
| @Component | |||
| public class PasswordMatcher implements CredentialsMatcher { | |||
| @Override | |||
| public boolean doCredentialsMatch(AuthenticationToken authenticationToken, AuthenticationInfo authenticationInfo) { | |||
| return authenticationToken.getPrincipal().toString().equals(authenticationInfo.getPrincipals().getPrimaryPrincipal().toString()) | |||
| && authenticationToken.getCredentials().toString().equals(authenticationInfo.getCredentials().toString()); | |||
| } | |||
| } | |||
| @@ -0,0 +1,35 @@ | |||
| package com.xdf.creative.support.auth; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import javax.validation.constraints.NotBlank; | |||
| import javax.validation.constraints.NotNull; | |||
| /** | |||
| * 登录参数 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-05-15 | |||
| **/ | |||
| @Data | |||
| @ApiModel("登录参数") | |||
| public class LoginParam { | |||
| @NotBlank(message = "请输入账号") | |||
| @ApiModelProperty("账号") | |||
| private String username; | |||
| @NotBlank(message = "请输入密码") | |||
| @ApiModelProperty("密码") | |||
| private String password; | |||
| @ApiModelProperty("验证码Token") | |||
| private String verifyToken; | |||
| @ApiModelProperty("验证码") | |||
| private String code; | |||
| } | |||
| @@ -0,0 +1,28 @@ | |||
| package com.xdf.creative.support.auth; | |||
| import io.swagger.annotations.ApiModel; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.io.Serializable; | |||
| /** | |||
| * @author DeanYe | |||
| * @date 2019-10-26 | |||
| **/ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| @ApiModel("登陆用户信息TokenVO") | |||
| public class LoginSysUserTokenVo implements Serializable { | |||
| private static final long serialVersionUID = -4650803752566647697L; | |||
| @ApiModelProperty("token") | |||
| private String token; | |||
| /** | |||
| * 登陆用户对象 | |||
| */ | |||
| private LoginSysUserVo loginSysUserVo; | |||
| } | |||
| @@ -0,0 +1,61 @@ | |||
| package com.xdf.creative.support.auth; | |||
| import io.swagger.annotations.ApiModelProperty; | |||
| import lombok.Data; | |||
| import lombok.experimental.Accessors; | |||
| import java.io.Serializable; | |||
| import java.util.Set; | |||
| /** | |||
| * <p> | |||
| * 登录用户对象,响应给前端 | |||
| * </p> | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-05-15 | |||
| **/ | |||
| @Data | |||
| @Accessors(chain = true) | |||
| public class LoginSysUserVo implements Serializable { | |||
| private static final long serialVersionUID = -1758338570596088158L; | |||
| @ApiModelProperty(value = "主键") | |||
| private Long id; | |||
| @ApiModelProperty(value = "用户名") | |||
| private String username; | |||
| @ApiModelProperty(value = "昵称") | |||
| private String nickname; | |||
| @ApiModelProperty(value = "手机号") | |||
| private String phone; | |||
| @ApiModelProperty(value = "头像") | |||
| private String head; | |||
| @ApiModelProperty(value = "性别,0:女,1:男,默认1") | |||
| private Integer gender; | |||
| @ApiModelProperty(value = "状态,0:禁用,1:启用,2:锁定") | |||
| private Integer state; | |||
| @ApiModelProperty("组织id") | |||
| private Long organizeId; | |||
| @ApiModelProperty("角色id") | |||
| private Set<Long> roleId; | |||
| @ApiModelProperty("角色名称") | |||
| private Set<String> roleName; | |||
| @ApiModelProperty("角色编码") | |||
| private Set<String> roleCode; | |||
| @ApiModelProperty("权限编码列表") | |||
| private Set<String> permissionUrls; | |||
| } | |||
| @@ -0,0 +1,19 @@ | |||
| package com.xdf.creative.support.exception; | |||
| /** | |||
| * 业务异常 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2018-11-08 | |||
| */ | |||
| public class BusinessException extends SpringBootPlusException { | |||
| public BusinessException(String message) { | |||
| super(message); | |||
| } | |||
| public BusinessException(Integer errorCode, String message) { | |||
| super(errorCode, message); | |||
| } | |||
| } | |||
| @@ -0,0 +1,21 @@ | |||
| package com.xdf.creative.support.exception; | |||
| /** | |||
| * DAO异常 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2018-11-08 | |||
| */ | |||
| public class DaoException extends SpringBootPlusException { | |||
| public DaoException(String message) { | |||
| super(message); | |||
| } | |||
| public DaoException(Integer errorCode, String message) { | |||
| super(errorCode, message); | |||
| } | |||
| } | |||
| @@ -0,0 +1,29 @@ | |||
| package com.xdf.creative.support.exception; | |||
| import lombok.Data; | |||
| import lombok.EqualsAndHashCode; | |||
| /** | |||
| * 自定义异常 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2018-11-08 | |||
| */ | |||
| @Data | |||
| @EqualsAndHashCode(callSuper = false) | |||
| public class SpringBootPlusException extends RuntimeException { | |||
| private Integer errorCode; | |||
| private String message; | |||
| public SpringBootPlusException(String message) { | |||
| super(message); | |||
| this.message = message; | |||
| } | |||
| public SpringBootPlusException(Integer errorCode, String message) { | |||
| super(message); | |||
| this.errorCode = errorCode; | |||
| this.message = message; | |||
| } | |||
| } | |||
| @@ -0,0 +1,24 @@ | |||
| package com.xdf.creative.support.exception; | |||
| import com.xdf.creative.enums.ApiCode; | |||
| /** | |||
| * 系统登录异常 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-08-04 | |||
| */ | |||
| public class SysLoginException extends SpringBootPlusException { | |||
| public SysLoginException(String message) { | |||
| super(message); | |||
| } | |||
| public SysLoginException(Integer errorCode, String message) { | |||
| super(errorCode, message); | |||
| } | |||
| public SysLoginException(ApiCode apiCode) { | |||
| super(apiCode.getCode(), apiCode.getMsg()); | |||
| } | |||
| } | |||
| @@ -0,0 +1,21 @@ | |||
| package com.xdf.creative.util; | |||
| import org.springframework.web.context.request.RequestContextHolder; | |||
| import org.springframework.web.context.request.ServletRequestAttributes; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| /** | |||
| * 获取当前请求的HttpServletRequest对象 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2018-11-08 | |||
| */ | |||
| public class HttpServletRequestUtil { | |||
| public static HttpServletRequest getRequest() { | |||
| HttpServletRequest httpServletRequest = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); | |||
| return httpServletRequest; | |||
| } | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| package com.xdf.creative.util; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.apache.commons.codec.digest.DigestUtils; | |||
| import org.apache.commons.lang3.StringUtils; | |||
| /** | |||
| * 密码加密工具类 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2018-11-08 | |||
| */ | |||
| @Slf4j | |||
| public class PasswordUtil { | |||
| private static final String KEY = "f80b2eed0110a7ea5a94c35cbea1fe003d9bb450803473428b74862cceb697f8"; | |||
| public static String encrypt(String pwd, String salt) { | |||
| if (StringUtils.isBlank(pwd)) { | |||
| return null; | |||
| } | |||
| return DigestUtils.sha256Hex(pwd + salt); | |||
| } | |||
| public static void main(String[] args) { | |||
| String pss = encrypt("123456", "99952b31c18156169a26bec80fd211f6"); | |||
| System.out.println("----------:" + pss); | |||
| } | |||
| } | |||
| @@ -0,0 +1,17 @@ | |||
| package com.xdf.creative.util; | |||
| import java.util.UUID; | |||
| /** | |||
| * @author DeanYe | |||
| * @date 2018-11-08 | |||
| */ | |||
| public class UUIDUtil { | |||
| public static String getUUID() { | |||
| String uuid = UUID.randomUUID().toString().replaceAll("-", ""); | |||
| return uuid; | |||
| } | |||
| } | |||
| @@ -0,0 +1,28 @@ | |||
| package com.xdf.creative.util.convert; | |||
| import com.xdf.creative.base.vo.creative.SysPermissionTreeVo; | |||
| import com.xdf.creative.module.entity.SysPermission; | |||
| import org.mapstruct.Mapper; | |||
| import org.mapstruct.factory.Mappers; | |||
| /** | |||
| * SysPermission类相关转换 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-26 | |||
| **/ | |||
| @Mapper | |||
| public interface SysPermissionConvert { | |||
| SysPermissionConvert INSTANCE = Mappers.getMapper(SysPermissionConvert.class); | |||
| /** | |||
| * SysPermission对象转换成SysPermissionTreeVo对象 | |||
| * | |||
| * @param sysPermission | |||
| * @return | |||
| */ | |||
| SysPermissionTreeVo permissionToTreeVo(SysPermission sysPermission); | |||
| } | |||
| @@ -0,0 +1,27 @@ | |||
| package com.xdf.creative.util.convert; | |||
| import com.xdf.creative.base.params.creative.AddSysRoleParam; | |||
| import com.xdf.creative.module.entity.SysRole; | |||
| import org.mapstruct.Mapper; | |||
| import org.mapstruct.factory.Mappers; | |||
| /** | |||
| * 系统角色转换器 | |||
| * | |||
| * @author DeanYe | |||
| * @date 2019-10-05 | |||
| **/ | |||
| @Mapper | |||
| public interface SysRoleConvert { | |||
| SysRoleConvert INSTANCE = Mappers.getMapper(SysRoleConvert.class); | |||
| /** | |||
| * AddSysRoleParam转SysRole | |||
| * | |||
| * @param addSysRoleParam | |||
| * @return | |||
| */ | |||
| SysRole addSysRoleParamToSysRole(AddSysRoleParam addSysRoleParam); | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| package com.xdf.creative.util.convert; | |||
| import com.xdf.creative.base.params.creative.SysUserQueryParam; | |||
| import com.xdf.creative.base.vo.creative.SysUserQueryVo; | |||
| import com.xdf.creative.module.entity.SysUser; | |||
| import com.xdf.creative.support.auth.LoginSysUserVo; | |||
| import org.mapstruct.Mapper; | |||
| import org.mapstruct.factory.Mappers; | |||
| /** | |||
| * @author DeanYe | |||
| * @date 2019-10-05 | |||
| **/ | |||
| @Mapper | |||
| public interface SysUserConvert { | |||
| SysUserConvert INSTANCE = Mappers.getMapper(SysUserConvert.class); | |||
| /** | |||
| * 系统用户实体对象转换成登陆用户VO对象 | |||
| * | |||
| * @param sysUser | |||
| * @return | |||
| */ | |||
| LoginSysUserVo sysUserToLoginSysUserVo(SysUser sysUser); | |||
| SysUserQueryVo sysUserToSysUserQueryVo(SysUser sysUser); | |||
| SysUser sysUserQueryParamToSysUser(SysUserQueryParam sysUserQueryParam); | |||
| } | |||
| @@ -0,0 +1,102 @@ | |||
| package com.xdf.creative.util.tree; | |||
| import org.apache.commons.lang.StringUtils; | |||
| /** | |||
| * 构建树时,需要对树的构成进行配置 | |||
| * | |||
| * @author chen | |||
| * @Date 2011-4-21 | |||
| */ | |||
| public class TreeConfig { | |||
| /** | |||
| * 主键字段 | |||
| */ | |||
| String idField; | |||
| /** | |||
| * 父节点字段 | |||
| */ | |||
| String parentField; | |||
| /** | |||
| * 根节点字段 | |||
| */ | |||
| String rootField; | |||
| /** | |||
| * 根节点值 | |||
| */ | |||
| String rootValue; | |||
| /** | |||
| * 叶节点字段,如果为空,对节点是否为叶子节点将由每个节点是否有子节点来判定 | |||
| */ | |||
| String leafField; | |||
| public TreeConfig() { | |||
| } | |||
| public TreeConfig(String idField, String parentField, String rootField, String rootValue, String leafField) { | |||
| this.idField = idField; | |||
| this.parentField = parentField; | |||
| this.rootField = rootField; | |||
| this.rootValue = rootValue; | |||
| this.leafField = leafField; | |||
| } | |||
| /** | |||
| * 如果配置参数不完全,将返回false | |||
| * | |||
| * @return | |||
| * @author chen | |||
| * @Date 2011-4-21 | |||
| */ | |||
| public boolean isNull() { | |||
| //当leafField为空时,将要把是否有子节点来判定是否是叶子节点 | |||
| if (/*StringUtils.isBlank(this.displayField) || */StringUtils.isBlank(this.parentField) | |||
| || StringUtils.isBlank(this.rootField) || StringUtils.isBlank(this.rootValue) | |||
| || StringUtils.isBlank(this.idField)) | |||
| return true; | |||
| /*//如果设置显示叶子节点,但并没有设置节点字段,将返回为空 | |||
| else if(this.getShowLeaf() && StringUtils.isBlank(this.getLeafField())) | |||
| return true;*/ | |||
| return false; | |||
| } | |||
| public String getIdField() { | |||
| return idField; | |||
| } | |||
| public void setIdField(String idField) { | |||
| this.idField = idField; | |||
| } | |||
| public String getRootField() { | |||
| return rootField; | |||
| } | |||
| public void setRootField(String rootField) { | |||
| this.rootField = rootField; | |||
| } | |||
| public String getParentField() { | |||
| return parentField; | |||
| } | |||
| public void setParentField(String parentField) { | |||
| this.parentField = parentField; | |||
| } | |||
| public String getRootValue() { | |||
| return rootValue; | |||
| } | |||
| public void setRootValue(String returnValue) { | |||
| this.rootValue = returnValue; | |||
| } | |||
| public String getLeafField() { | |||
| return leafField; | |||
| } | |||
| public void setLeafField(String leafField) { | |||
| this.leafField = leafField; | |||
| } | |||
| } | |||
| @@ -0,0 +1,227 @@ | |||
| package com.xdf.creative.util.tree; | |||
| import org.apache.commons.lang.StringUtils; | |||
| import java.lang.reflect.InvocationTargetException; | |||
| import java.lang.reflect.Method; | |||
| import java.util.ArrayList; | |||
| import java.util.Collection; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * 系统工具类 | |||
| * | |||
| * @author chen | |||
| * @Date 2011-1-26 | |||
| */ | |||
| @SuppressWarnings("unchecked") | |||
| public class Utils { | |||
| /** | |||
| * 将list集合转换为TreePanel所使用的数据,并返回 | |||
| * | |||
| * @param list list集合 | |||
| * @param config TreeNode的配置信息 | |||
| * @return | |||
| */ | |||
| public static List tree(List<Object> list, TreeConfig config) { | |||
| List results = new ArrayList(); | |||
| if (Utils.isNotEmpty(list) && !config.isNull()) { | |||
| for (int i = 0; i < list.size(); i++) { | |||
| Object obj = list.get(i); | |||
| if (null != obj | |||
| && getFieldValue(obj, config.getRootField()).equals( | |||
| config.getRootValue())) { | |||
| obj = parse(list, obj, config); | |||
| if (null != obj) | |||
| results.add(obj); | |||
| } | |||
| if (i == list.size() - 1) | |||
| return results; | |||
| } | |||
| } | |||
| return results; | |||
| } | |||
| /** | |||
| * 供 @see #tree(List, TreeConfig)方法递归出TreeNode | |||
| * | |||
| * @param list list集合 | |||
| * @param current 当前节点 | |||
| * @param config TreeNode配置信息 | |||
| * @return | |||
| */ | |||
| @SuppressWarnings("rawtypes") | |||
| public static Object parse(List<Object> list, Object current, | |||
| TreeConfig config) { | |||
| for (Object obj : list) { | |||
| if (null != obj | |||
| && getFieldValue(obj, config.getParentField()).equals( | |||
| getFieldValue(current, config.getIdField()))) { | |||
| if (null != obj) { | |||
| List children = (List) getFieldValue(current, "children"); | |||
| Object child = parse(list, obj, config); | |||
| children.add(child); | |||
| } | |||
| } | |||
| } | |||
| if (Utils.isNotEmpty(((List) getFieldValue(current, "children")))) { | |||
| setFieldValue(current, "leaf", false); | |||
| } else { | |||
| setFieldValue(current, "leaf", true); | |||
| } | |||
| return current; | |||
| } | |||
| /** | |||
| * 验证集合是否为空,包括是否为null或者集合长度为0 | |||
| * | |||
| * @param obj | |||
| * @return | |||
| * @author chen | |||
| * @Date 2011-4-19 | |||
| */ | |||
| public static boolean isNotEmpty(Object obj) { | |||
| if (null == obj) | |||
| return false; | |||
| else { | |||
| if (obj instanceof Collection) { | |||
| if (((Collection) obj).size() < 1) | |||
| return false; | |||
| } else if (obj instanceof Map) { | |||
| if (((Map) obj).size() < 1) | |||
| return false; | |||
| } else { | |||
| String className = obj.getClass().getName(); | |||
| if (className.indexOf(".") != -1) | |||
| if (((Object[]) obj).length < 1) | |||
| return false; | |||
| if (className.length() == 2 && className.startsWith("[")) { | |||
| String type = className.substring(1); | |||
| if (type.equals("I")) { | |||
| if (((int[]) obj).length < 1) | |||
| return false; | |||
| } else if (type.equals("D")) { | |||
| if (((double[]) obj).length < 1) | |||
| return false; | |||
| } else if (type.equals("F")) { | |||
| if (((float[]) obj).length < 1) | |||
| return false; | |||
| } else if (type.equals("B")) { | |||
| if (((byte[]) obj).length < 1) | |||
| return false; | |||
| } else if (type.equals("C")) { | |||
| if (((char[]) obj).length < 1) | |||
| return false; | |||
| } else if (type.equals("S")) { | |||
| if (((short[]) obj).length < 1) | |||
| return false; | |||
| } else if (type.equals("L")) { | |||
| if (((long[]) obj).length < 1) | |||
| return false; | |||
| } else if (type.equals("Z")) { | |||
| if (((boolean[]) obj).length < 1) | |||
| return false; | |||
| } | |||
| } | |||
| } | |||
| return true; | |||
| } | |||
| } | |||
| /** | |||
| * 得到对象的指定字段值 | |||
| * | |||
| * @param obj | |||
| * @param fieldName 字段名 | |||
| * @return | |||
| * @author chen | |||
| * @Date 2011-1-26 | |||
| */ | |||
| public static Object getFieldValue(Object obj, String fieldName) { | |||
| if (null == obj || !StringUtils.isNotEmpty(fieldName)) | |||
| return null; | |||
| // 得到对象的所有定义的方法 | |||
| Method[] methods = obj.getClass().getDeclaredMethods(); | |||
| for (Method method : methods) { | |||
| // 得到对象的getter方法 | |||
| if (method.getName().toLowerCase() | |||
| .equals(("get" + fieldName).toLowerCase())) | |||
| try { | |||
| // 调用getter方法获得字段值 | |||
| return method.invoke(obj, null); | |||
| } catch (IllegalArgumentException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| return null; | |||
| } catch (IllegalAccessException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| return null; | |||
| } catch (InvocationTargetException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| return null; | |||
| } catch (Exception e) { | |||
| // TODO: handle exception | |||
| e.printStackTrace(); | |||
| return null; | |||
| } | |||
| } | |||
| return null; | |||
| } | |||
| /** | |||
| * 设置对象指定的字段值 | |||
| * | |||
| * @param obj 需要设置值的对象 | |||
| * @param fieldName 字段名 | |||
| * @param fieldValue 字段值 | |||
| * @author chen | |||
| * @Date 2011-3-10 | |||
| */ | |||
| public static void setFieldValue(Object obj, String fieldName, | |||
| Object fieldValue) { | |||
| if (null == obj || !StringUtils.isNotEmpty(fieldName)) | |||
| return; | |||
| // 得到对象的所有定义的方法 | |||
| Method[] methods = obj.getClass().getMethods(); | |||
| for (Method method : methods) { | |||
| // 得到对象的getter方法 | |||
| if (method.getName().toLowerCase() | |||
| .equals(("set" + fieldName).toLowerCase())) | |||
| try { | |||
| // 调用setter方法设置字段值 | |||
| method.invoke(obj, fieldValue); | |||
| } catch (IllegalArgumentException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| } catch (IllegalAccessException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| } catch (InvocationTargetException e) { | |||
| // TODO Auto-generated catch block | |||
| e.printStackTrace(); | |||
| } catch (Exception e) { | |||
| // TODO: handle exception | |||
| e.printStackTrace(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -70,7 +70,29 @@ spring: | |||
| validation-query-timeout: 60000 | |||
| ############################ JWT start ############################# | |||
| jwt: | |||
| # token请求头名称 | |||
| token-name: token | |||
| # jwt密钥线上需要修改secret | |||
| secret: f80b2eed0110a7ea5a94c35cbea1fe003d9bb450803473428b74862cceb697f8 | |||
| # 发行人 | |||
| issuer: xdf | |||
| # 观众 | |||
| audience: web | |||
| # 默认过期时间1小时,单位:秒 | |||
| expire-second: 3600 | |||
| # 是否刷新token | |||
| refresh-token: true | |||
| # 刷新token的时间间隔,默认10分钟,单位:秒 | |||
| refresh-token-countdown: 600 | |||
| # redis校验jwt token是否存在,可选 | |||
| redis-check: true | |||
| # true: 同一个账号只能是最后一次登陆token有效,false:同一个账号可多次登陆 | |||
| single-login: true | |||
| # 盐值校验,如果不加自定义盐值,则使用secret校验 | |||
| salt-check: true | |||
| ############################ JWT end ############################### | |||
| ############################### mybatis-plus start ################################# | |||
| mybatis-plus: | |||
| @@ -0,0 +1,91 @@ | |||
| <?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.xdf.creative.module.mapper.SysOrganizeMapper"> | |||
| <!-- 通用查询结果列 --> | |||
| <sql id="Base_Column_List"> | |||
| id, organize_name,popedom_id,organize_type,system_create,state, | |||
| update_time, create_time, parent_id | |||
| </sql> | |||
| <sql id="Base_Bus_Column_List"> | |||
| ${alias}.id, ${alias}.organize_name, | |||
| ${alias}.popedom_id,, ${alias}.organize_type, ${alias}.system_create, ${alias}.state, | |||
| ${alias}.update_time, ${alias}.create_time, ${alias}.parent_id | |||
| </sql> | |||
| <sql id="Base_If_Condition"> | |||
| <where> | |||
| <if test="param.id !=null and param.id!=''"> | |||
| and id=#{param.id} | |||
| </if> | |||
| <if test="param.organizeName !=null and param.organizeName!=''"> | |||
| and organize_name=#{param.organizeName} | |||
| </if> | |||
| <if test="param.popedomId !=null and param.popedomId!=''"> | |||
| and popedom_id=#{param.popedomId} | |||
| </if> | |||
| <if test="param.organizeType !=null and param.organizeType!=''"> | |||
| and organize_type=#{param.organizeType} | |||
| </if> | |||
| <if test="param.systemCeate !=null and param.systemCeate!=''"> | |||
| and system_create=#{param.systemCeate} | |||
| </if> | |||
| <if test="param.state !=null and param.state!=''"> | |||
| and state=#{param.state} | |||
| </if> | |||
| <if test="param.updateTime !=null and param.updateTime!=''"> | |||
| and update_time=#{param.updateTime} | |||
| </if> | |||
| <if test="param.createTime !=null and param.createTime!=''"> | |||
| and create_time=#{param.createTime} | |||
| </if> | |||
| <if test="param.parentId !=null and param.parentId!=''"> | |||
| and parent_id=#{param.parentId} | |||
| </if> | |||
| </where> | |||
| </sql> | |||
| <!--根据ID查询--> | |||
| <select id="getSysOrganizeById" resultType="com.xdf.creative.base.vo.creative.SysOrganizeQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_organize where id = #{id} | |||
| </select> | |||
| <!--根据用户ID查询--> | |||
| <select id="getSysOrganizeByUserId" resultType="com.xdf.creative.base.vo.creative.SysOrganizeQueryVo"> | |||
| select | |||
| <include refid="Base_Bus_Column_List"> | |||
| <property name="alias" value="a"/> | |||
| </include> | |||
| from sys_organize a left join web_user b on a.id = b.organize_id where b.id = #{id} | |||
| </select> | |||
| <!--分页查询--> | |||
| <select id="getSysOrganizePageList" | |||
| resultType="com.xdf.creative.base.vo.creative.SysOrganizeQueryVo" | |||
| parameterType="com.xdf.creative.base.params.creative.SysOrganizeQueryParam"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_organize | |||
| <include refid="Base_If_Condition"/> | |||
| </select> | |||
| <select id="isEnableSysOrganize" parameterType="com.xdf.creative.base.params.creative.IsEnableSysOrganizeParam" | |||
| resultType="java.lang.Integer"> | |||
| select count(1) | |||
| from sys_organize so | |||
| inner join sys_user su | |||
| on so.parent_id = su.organize_id | |||
| where su.id=#{userId} | |||
| and so.id=#{orgId} | |||
| and so.state = 1 | |||
| </select> | |||
| </mapper> | |||
| @@ -0,0 +1,115 @@ | |||
| <?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.xdf.creative.module.mapper.SysPermissionMapper"> | |||
| <!-- 通用查询结果列 --> | |||
| <!-- 通用查询结果列 --> | |||
| <sql id="Base_Column_List"> | |||
| id, name, resource_id, parent_resource_id, url, code, icon, type, level, state, sort, remark, deleted, version, | |||
| create_time, update_time | |||
| </sql> | |||
| <select id="getSysPermissionById" resultType="com.xdf.creative.base.vo.creative.SysPermissionQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_permission where resource_id = #{resourceId} | |||
| </select> | |||
| <select id="getSysPermissionPageList" resultType="com.xdf.creative.base.vo.creative.SysPermissionQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_permission | |||
| </select> | |||
| <select id="getMenuListByUserId" resultType="com.xdf.creative.module.entity.SysPermission"> | |||
| select sp.* | |||
| from sys_user u | |||
| inner join sys_user_role sur | |||
| on u.id = sur.user_id | |||
| inner join sys_role sr | |||
| on sur.role_id = sr.id | |||
| inner join sys_role_permission srp | |||
| on sr.id=srp.role_id | |||
| inner join sys_permission sp | |||
| on srp.permission_id = sp.resource_id | |||
| where u.state = 1 | |||
| and u.deleted = 0 | |||
| and sr.state = 1 | |||
| and sp.state = 1 | |||
| and u.id = #{userId} | |||
| </select> | |||
| <select id="getPermissionUrlByUserId" resultType="java.lang.String" parameterType="java.lang.Long"> | |||
| select url from sys_permission where parent_resource_id in ( | |||
| select sp.resource_id | |||
| from sys_user u | |||
| inner join sys_user_role sur | |||
| on u.id = sur.user_id | |||
| inner join sys_role sr | |||
| on sur.role_id = sr.id | |||
| inner join sys_role_permission srp | |||
| on sr.id = srp.role_id | |||
| inner join sys_permission sp | |||
| on srp.permission_id = sp.resource_id | |||
| where u.id = #{userId} | |||
| and u.state = 1 | |||
| and u.deleted = 0 | |||
| and sr.state = 1 | |||
| and sr.deleted = 0 | |||
| and sp.state = 1 | |||
| and sp.deleted = 0 | |||
| ) and state = 1 | |||
| and deleted = 0 | |||
| and type = 2 | |||
| </select> | |||
| <select id="getMenusByUserId" resultType="com.xdf.creative.module.entity.SysPermission" parameterType="java.lang.Long"> | |||
| select | |||
| sp.id, sp.name, sp.resource_id, sp.parent_resource_id, sp.url, sp.code, sp.icon, sp.type, sp.level, sp.state, | |||
| sp.sort, sp.remark, sp.deleted, sp.version, sp.create_time, sp.update_time | |||
| from sys_user_role sur | |||
| inner join sys_role sr | |||
| on sur.role_id = sr.id | |||
| inner join sys_role_permission srp | |||
| on sr.id = srp.role_id | |||
| inner join sys_permission sp | |||
| on srp.permission_id = sp.resource_id | |||
| where sur.id = #{userId} | |||
| and sr.state = 1 | |||
| and sr.deleted = 0 | |||
| and sp.state = 1 | |||
| and sp.deleted = 0 | |||
| and sp.type =1 | |||
| </select> | |||
| <!--角色授权资源列表查询--> | |||
| <select id="impowerResourceTreeList" parameterType="java.lang.Long" | |||
| resultType="com.xdf.creative.module.entity.SysPermission"> | |||
| select a.*,case when b.state =1 then 'true' else 'false' end as checked from sys_permission a | |||
| left join (select distinct permission_id,state from sys_role_permission where role_id in (select role_id from | |||
| sys_user_role where user_id = #{userId}))b | |||
| on a.resource_id =b.permission_id where a.state = 1 and a.deleted = 0 and a.code <![CDATA[ <> ]]> "0" | |||
| </select> | |||
| <!--用户登录加载左侧资源树 屏蔽按钮--> | |||
| <select id="currentUserResourceTreeList" parameterType="java.lang.Long" | |||
| resultType="com.xdf.creative.module.entity.SysPermission"> | |||
| select a.* from sys_permission a right join (select * from sys_role_permission where role_id in (select role_id | |||
| from sys_user_role | |||
| where user_id = 1))b on a.resource_id =b.permission_id where a.state = 1 and a.deleted = 0 and a.type =1 | |||
| </select> | |||
| <!-- 获取不需要鉴权的url --> | |||
| <select id="getSkipAuthUrls" resultType="java.lang.String"> | |||
| select url from sys_permission where type = 2 and (code = 0 or code = 3); | |||
| </select> | |||
| </mapper> | |||
| @@ -0,0 +1,32 @@ | |||
| <?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.xdf.creative.module.mapper.SysRoleMapper"> | |||
| <!-- 通用查询结果列 --> | |||
| <sql id="Base_Column_List"> | |||
| id, name, code, type, state, remark, version, create_time, update_time | |||
| </sql> | |||
| <select id="getSysRoleById" resultType="com.xdf.creative.base.vo.creative.SysRoleQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_role where id = #{id} | |||
| </select> | |||
| <select id="getSysRolePageList" resultType="com.xdf.creative.base.vo.creative.SysRoleQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_role | |||
| </select> | |||
| <select id="getUserRoleByUserId" resultType="com.xdf.creative.base.vo.creative.SysRoleQueryVo" parameterType="java.lang.Long"> | |||
| select | |||
| sr.* | |||
| from sys_role sr | |||
| inner join sys_user_role sur | |||
| on sr.id = sur.role_id | |||
| where sur.user_id=#{userId} | |||
| </select> | |||
| </mapper> | |||
| @@ -0,0 +1,37 @@ | |||
| <?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.xdf.creative.module.mapper.SysRolePermissionMapper"> | |||
| <!-- 通用查询结果列 --> | |||
| <sql id="Base_Column_List"> | |||
| id, role_id, permission_id, state, remark, version, create_time, update_time | |||
| </sql> | |||
| <select id="getSysRolePermissionById" resultType="com.xdf.creative.base.vo.creative.SysRolePermissionQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_role_permission where id = #{id} | |||
| </select> | |||
| <select id="getSysRolePermissionPageList" | |||
| resultType="com.xdf.creative.base.vo.creative.SysRolePermissionQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_role_permission | |||
| </select> | |||
| <select id="getPermissionCodesByRoleId" resultType="java.lang.String"> | |||
| select p.code | |||
| from sys_role r | |||
| inner join sys_role_permission rp | |||
| on r.id = rp.role_id | |||
| inner join sys_permission p | |||
| on rp.permission_id = p.id | |||
| where r.state = 1 | |||
| and rp.state = 1 | |||
| and p.state = 1 | |||
| and r.id = #{roleId}; | |||
| </select> | |||
| </mapper> | |||
| @@ -0,0 +1,32 @@ | |||
| <?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.xdf.creative.module.mapper.SysUserMapper"> | |||
| <!-- 通用查询结果列 --> | |||
| <sql id="Base_Column_List"> | |||
| id, username, nickname, password, salt, phone, email, state, | |||
| gender, head, user_type, organize_id, deleted, version, remark, create_time, update_time | |||
| </sql> | |||
| <select id="getSysUserById" resultType="com.xdf.creative.base.vo.creative.SysUserQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_user | |||
| where deleted = 0 and id = #{id} | |||
| </select> | |||
| <select id="getSysUserPageList" resultType="com.xdf.creative.base.vo.creative.SysUserQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_user | |||
| where deleted = 0 | |||
| </select> | |||
| <select id="getSysUserByUserName" resultType="com.xdf.creative.module.entity.SysUser" parameterType="java.lang.String"> | |||
| SELECT | |||
| <include refid="Base_Column_List"/> | |||
| FROM sys_user | |||
| WHERE username=#{username} | |||
| </select> | |||
| </mapper> | |||
| @@ -0,0 +1,46 @@ | |||
| <?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.xdf.creative.module.mapper.SysUserRoleMapper"> | |||
| <!-- 通用查询结果列 --> | |||
| <sql id="Base_Column_List"> | |||
| id, user_id, role_id, create_time | |||
| </sql> | |||
| <sql id="Base_If_Condition"> | |||
| <where> | |||
| <if test="ew.id !=null and ew.id!=''"> | |||
| and id=id | |||
| </if> | |||
| <if test="ew.userId !=null and ew.userId!=''"> | |||
| and user_id=userId | |||
| </if> | |||
| <if test="ew.roleId !=null and ew.roleId!=''"> | |||
| and role_id=roleId | |||
| </if> | |||
| <if test="ew.createTime !=null and ew.createTime!=''"> | |||
| and create_time=createTime | |||
| </if> | |||
| </where> | |||
| </sql> | |||
| <!--根据ID查询--> | |||
| <select id="getSysUserRoleById" resultType="com.xdf.creative.base.vo.creative.SysUserRoleQueryVo"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_user_role where id = #{id} | |||
| </select> | |||
| <!--分页查询--> | |||
| <select id="getSysUserRolePageList" | |||
| resultType="com.xdf.creative.base.vo.creative.SysUserRoleQueryVo" | |||
| parameterType="com.xdf.creative.base.params.creative.SysUserRoleQueryParam"> | |||
| select | |||
| <include refid="Base_Column_List"/> | |||
| from sys_user_role | |||
| <include refid="Base_If_Condition"/> | |||
| </select> | |||
| </mapper> | |||