add
This commit is contained in:
20
pom.xml
20
pom.xml
@ -42,6 +42,8 @@
|
||||
<mysql-connector.version>8.0.33</mysql-connector.version>
|
||||
<!-- mybatis -->
|
||||
<mybatisplus-spring-boot.version>3.5.3.1</mybatisplus-spring-boot.version>
|
||||
<!-- easy poi -->
|
||||
<easypoi.version>4.4.0</easypoi.version>
|
||||
<!-- knife4接口文档 -->
|
||||
<knife4j.version>4.0.0</knife4j.version>
|
||||
<!-- spring doc -->
|
||||
@ -64,6 +66,12 @@
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>${hutool.version}</version>
|
||||
</dependency>
|
||||
<!-- easy poi -->
|
||||
<dependency>
|
||||
<groupId>cn.afterturn</groupId>
|
||||
<artifactId>easypoi-spring-boot-starter</artifactId>
|
||||
<version>${easypoi.version}</version>
|
||||
</dependency>
|
||||
<!-- knife4接口文档 -->
|
||||
<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
@ -126,6 +134,16 @@
|
||||
<artifactId>qiaoba-common-doc</artifactId>
|
||||
<version>${qiaoba.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<artifactId>qiaoba-common-security</artifactId>
|
||||
<version>${qiaoba.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<artifactId>qiaoba-common-poi</artifactId>
|
||||
<version>${qiaoba.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
@ -175,4 +193,4 @@
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
</project>
|
||||
</project>
|
||||
|
@ -17,10 +17,6 @@
|
||||
</modules>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<artifactId>qiaoba-common-base</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<artifactId>qiaoba-common-datasource</artifactId>
|
||||
@ -33,5 +29,13 @@
|
||||
<groupId>jakarta.validation</groupId>
|
||||
<artifactId>jakarta.validation-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<artifactId>qiaoba-common-security</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<artifactId>qiaoba-common-poi</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
</project>
|
||||
|
@ -0,0 +1,71 @@
|
||||
package com.qiaoba.api.system.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import com.qiaoba.common.base.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 部门信息 sys_dept
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2022-09-22 04:20:28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("sys_dept")
|
||||
public class SysDept extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
@TableId
|
||||
private String deptId;
|
||||
|
||||
/**
|
||||
* 父部门ID
|
||||
*/
|
||||
private String parentId;
|
||||
|
||||
/**
|
||||
* 祖级列表
|
||||
*/
|
||||
private String ancestors;
|
||||
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
private String deptName;
|
||||
|
||||
/**
|
||||
* 显示顺序
|
||||
*/
|
||||
private Integer orderNum;
|
||||
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
private String leader;
|
||||
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 部门状态:0停用,1正常
|
||||
*/
|
||||
private String status;
|
||||
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
package com.qiaoba.api.system.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.qiaoba.common.base.entity.BaseEntity;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 菜单信息 sys_menu
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2022-09-22 04:20:28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("sys_menu")
|
||||
public class SysMenu extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 菜单ID
|
||||
*/
|
||||
@TableId
|
||||
private String menuId;
|
||||
|
||||
/**
|
||||
* 菜单名称
|
||||
*/
|
||||
@NotBlank(message = "菜单名称不能为空")
|
||||
@Size(min = 0, max = 10, message = "菜单名称长度不能超过{max}个字符")
|
||||
private String menuName;
|
||||
|
||||
/**
|
||||
* 父菜单ID
|
||||
*/
|
||||
private String parentId;
|
||||
|
||||
/**
|
||||
* 显示顺序
|
||||
*/
|
||||
private Integer orderNum;
|
||||
|
||||
/**
|
||||
* 路由地址
|
||||
*/
|
||||
private String path;
|
||||
|
||||
/**
|
||||
* 组件路径
|
||||
*/
|
||||
private String component;
|
||||
|
||||
/**
|
||||
* 路由参数
|
||||
*/
|
||||
private String query;
|
||||
|
||||
/**
|
||||
* 是否为外链(0否 1是)
|
||||
*/
|
||||
private String isFrame;
|
||||
|
||||
/**
|
||||
* 是否缓存(0不缓存 1缓存)
|
||||
*/
|
||||
private String isCache;
|
||||
|
||||
/**
|
||||
* 类型(M目录 C菜单 F按钮)
|
||||
*/
|
||||
private String menuType;
|
||||
|
||||
/**
|
||||
* 显示状态(0隐藏 1显示)
|
||||
*/
|
||||
private String isVisible;
|
||||
|
||||
/**
|
||||
* 权限字符串
|
||||
*/
|
||||
private String perms;
|
||||
|
||||
/**
|
||||
* 菜单图标
|
||||
*/
|
||||
private String icon;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package com.qiaoba.api.system.entity;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.qiaoba.common.base.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 岗位信息 sys_post
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2022-09-22 04:20:28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("sys_post")
|
||||
public class SysPost extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
@Excel(name = "岗位序号" , width = 20)
|
||||
private String postId;
|
||||
|
||||
@Excel(name = "岗位编码" , width = 20)
|
||||
private String postCode;
|
||||
|
||||
@Excel(name = "岗位名称" , width = 20)
|
||||
private String postName;
|
||||
|
||||
@Excel(name = "岗位排序" , width = 20)
|
||||
private String postSort;
|
||||
|
||||
@Excel(name = "状态" , width = 20, replace = {"正常_1" , "异常_0"})
|
||||
private String status;
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package com.qiaoba.api.system.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.qiaoba.common.base.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 角色信息 sys_role
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2022-09-22 04:20:28
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@TableName("sys_role")
|
||||
public class SysRole extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
@TableId
|
||||
private String roleId;
|
||||
|
||||
/**
|
||||
* 角色名称
|
||||
*/
|
||||
private String roleName;
|
||||
|
||||
/**
|
||||
* 角色权限
|
||||
*/
|
||||
private String roleKey;
|
||||
|
||||
/**
|
||||
* 角色排序
|
||||
*/
|
||||
private String roleSort;
|
||||
|
||||
/**
|
||||
* 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)
|
||||
*/
|
||||
private String dataScope;
|
||||
|
||||
/**
|
||||
* 角色状态(1正常 0停用)
|
||||
*/
|
||||
private String status;
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package com.qiaoba.api.system.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 角色和菜单关联 sys_role_menu
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2022-09-22 04:20:28
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@TableName("sys_role_menu")
|
||||
public class SysRoleMenu {
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
private String roleId;
|
||||
|
||||
/**
|
||||
* 菜单ID
|
||||
*/
|
||||
private String menuId;
|
||||
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
public SysRoleMenu(String roleId, String menuId) {
|
||||
this.roleId = roleId;
|
||||
this.menuId = menuId;
|
||||
}
|
||||
}
|
@ -23,7 +23,7 @@ public class SysTenant extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId
|
||||
private Long tenantId;
|
||||
private String tenantId;
|
||||
|
||||
private String tenantCode;
|
||||
|
||||
|
@ -23,10 +23,10 @@ public class SysUser extends BaseEntity {
|
||||
|
||||
@TableId
|
||||
@Schema(description = "用户ID")
|
||||
private Long userId;
|
||||
private String userId;
|
||||
|
||||
@Schema(description = "部门ID")
|
||||
private Long deptId;
|
||||
private String deptId;
|
||||
|
||||
@Schema(description = "登陆账号")
|
||||
private String username;
|
||||
@ -52,14 +52,8 @@ public class SysUser extends BaseEntity {
|
||||
@Schema(description = "帐号状态(1正常 0停用)")
|
||||
private String status;
|
||||
|
||||
@Schema(description = "是否是超管")
|
||||
private Boolean isSuperuser;
|
||||
|
||||
@Schema(description = "是否是管理员")
|
||||
private Boolean isManager;
|
||||
|
||||
@Schema(description = "是否已删除")
|
||||
private Boolean isDelete;
|
||||
private String isDelete;
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,40 @@
|
||||
package com.qiaoba.api.system.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 用户和岗位关联 sys_user_post
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2022-09-22 04:20:28
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@TableName("sys_user_post")
|
||||
public class SysUserPost {
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private String userId;
|
||||
|
||||
/**
|
||||
* 岗位ID
|
||||
*/
|
||||
private String postId;
|
||||
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
public SysUserPost(String userId, String postId) {
|
||||
this.userId = userId;
|
||||
this.postId = postId;
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package com.qiaoba.api.system.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 用户和角色关联 sys_user_role
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2022-09-22 04:20:28
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@TableName("sys_user_role")
|
||||
public class SysUserRole {
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private String userId;
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
private String roleId;
|
||||
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
public SysUserRole(String userId, String roleId) {
|
||||
this.userId = userId;
|
||||
this.roleId = roleId;
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.qiaoba.api.system.entity.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/10 14:03
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class ResetPwdDto implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String userId;
|
||||
|
||||
private String password;
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.qiaoba.api.system.entity.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/10 14:03
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class ResetUserStatusDto implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String userId;
|
||||
|
||||
private String status;
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package com.qiaoba.api.system.entity.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/8 15:54
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysRoleDto implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
private String roleId;
|
||||
|
||||
/**
|
||||
* 租户ID
|
||||
*/
|
||||
private String tenantId;
|
||||
|
||||
/**
|
||||
* 角色名称
|
||||
*/
|
||||
private String roleName;
|
||||
|
||||
/**
|
||||
* 角色权限
|
||||
*/
|
||||
private String roleKey;
|
||||
|
||||
/**
|
||||
* 角色排序
|
||||
*/
|
||||
private String roleSort;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 角色状态(1正常 0停用)
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 部门组(数据权限)
|
||||
*/
|
||||
private Set<String> deptIds;
|
||||
|
||||
/**
|
||||
* 菜单组
|
||||
*/
|
||||
private Set<String> menuIds;
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package com.qiaoba.api.system.entity.dto;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 用户
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/8 15:54
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysUserDto implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String userId;
|
||||
|
||||
private String nickname;
|
||||
|
||||
private String deptId;
|
||||
|
||||
private String phone;
|
||||
|
||||
private String email;
|
||||
|
||||
private String username;
|
||||
|
||||
private String password;
|
||||
|
||||
private String gender;
|
||||
|
||||
private String status;
|
||||
|
||||
private String isDelete;
|
||||
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 岗位组
|
||||
*/
|
||||
private Set<String> postIds;
|
||||
|
||||
/**
|
||||
* 角色组
|
||||
*/
|
||||
private Set<String> roleIds;
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.qiaoba.api.system.entity.param;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 部门查询参数
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023-04-23 15:37:43
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysDeptParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String deptName;
|
||||
private String status;
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.qiaoba.api.system.entity.param;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 菜单查询参数
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/5 11:24
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysMenuParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "菜单名称")
|
||||
private String menuName;
|
||||
|
||||
/**
|
||||
* 显示状态(0隐藏 1显示)
|
||||
*/
|
||||
private String isVisible;
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.qiaoba.api.system.entity.param;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 岗位查询参数
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023-04-23 15:37:43
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysPostParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String postName;
|
||||
|
||||
private String postCode;
|
||||
|
||||
private String status;
|
||||
|
||||
public SysPostParam() {
|
||||
}
|
||||
|
||||
public SysPostParam(String status) {
|
||||
this.status = status;
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.qiaoba.api.system.entity.param;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 角色查询参数
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023-04-23 15:37:43
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysRoleParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String roleName;
|
||||
private String status;
|
||||
}
|
@ -1,6 +1,5 @@
|
||||
package com.qiaoba.api.system.entity.param;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@ -19,6 +18,19 @@ public class SysUserParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "昵称")
|
||||
private String username;
|
||||
|
||||
private String nickname;
|
||||
|
||||
private String phone;
|
||||
|
||||
private String deptId;
|
||||
|
||||
private String status;
|
||||
|
||||
private String isDelete;
|
||||
|
||||
private String beginTime;
|
||||
|
||||
private String endTime;
|
||||
}
|
||||
|
@ -0,0 +1,69 @@
|
||||
package com.qiaoba.api.system.entity.vo;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 14:08
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysMenuVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 菜单ID
|
||||
*/
|
||||
private String menuId;
|
||||
|
||||
/**
|
||||
* 菜单名称
|
||||
*/
|
||||
private String menuName;
|
||||
|
||||
/**
|
||||
* 父菜单ID
|
||||
*/
|
||||
private String parentId;
|
||||
|
||||
/**
|
||||
* 显示顺序
|
||||
*/
|
||||
private Integer orderNum;
|
||||
|
||||
/**
|
||||
* 组件路径
|
||||
*/
|
||||
private String component;
|
||||
|
||||
/**
|
||||
* 显示状态(0隐藏 1显示)
|
||||
*/
|
||||
private String isVisible;
|
||||
|
||||
/**
|
||||
* 权限字符串
|
||||
*/
|
||||
private String perms;
|
||||
|
||||
/**
|
||||
* 菜单图标
|
||||
*/
|
||||
private String icon;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
private List<SysMenuVo> children;
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package com.qiaoba.api.system.entity.vo;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 角色
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 16:50
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysRoleDto implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 用户是否存在此角色标识 默认不存在
|
||||
*/
|
||||
private boolean flag = false;
|
||||
|
||||
/**
|
||||
* 菜单组
|
||||
*/
|
||||
private Long[] menuIds;
|
||||
|
||||
/**
|
||||
* 部门组(数据权限)
|
||||
*/
|
||||
private Long[] deptIds;
|
||||
|
||||
/**
|
||||
* 角色菜单权限
|
||||
*/
|
||||
private Set<String> permissions;
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package com.qiaoba.api.system.entity.vo;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 用户
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/10 15:50
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysUserVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Excel(name = "用户ID", width = 25)
|
||||
private String userId;
|
||||
|
||||
@Excel(name = "登录账号", width = 20)
|
||||
private String username;
|
||||
|
||||
@Excel(name = "姓名", width = 20)
|
||||
private String nickname;
|
||||
|
||||
@Excel(name = "部门", width = 20)
|
||||
private String deptName;
|
||||
|
||||
@Excel(name = "性别", replace = {"男_0", "女_1", "未知_2"})
|
||||
private String gender;
|
||||
|
||||
@Excel(name = "手机", width = 20)
|
||||
private String phone;
|
||||
|
||||
@Excel(name = "邮箱", width = 20)
|
||||
private String email;
|
||||
|
||||
@Excel(name = "创建时间", width = 30, format = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createTime;
|
||||
|
||||
@Excel(name = "状态", replace = {"正常_1", "停用_0"})
|
||||
private String status;
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package com.qiaoba.api.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysDept;
|
||||
import com.qiaoba.api.system.entity.param.SysDeptParam;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 部门对外暴露接口
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023-04-23 20:33:43
|
||||
*/
|
||||
public interface SysDeptApiService {
|
||||
|
||||
/**
|
||||
* 新增部门
|
||||
*
|
||||
* @param sysDept sysDept
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int insert(SysDept sysDept);
|
||||
|
||||
/**
|
||||
* 更新部门
|
||||
*
|
||||
* @param sysDept sysDept
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int updateById(SysDept sysDept);
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*
|
||||
* @param param 条件
|
||||
* @return 部门列表
|
||||
*/
|
||||
List<SysDept> selectList(SysDeptParam param);
|
||||
|
||||
/**
|
||||
* 查询详细
|
||||
*
|
||||
* @param deptId 部门Id
|
||||
* @return 部门信息
|
||||
*/
|
||||
SysDept selectById(Long deptId);
|
||||
|
||||
/**
|
||||
* 删除部门
|
||||
*
|
||||
* @param deptId 部门Id
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int deleteById(Long deptId);
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.qiaoba.api.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysMenu;
|
||||
import com.qiaoba.api.system.entity.param.SysMenuParam;
|
||||
import com.qiaoba.api.system.entity.vo.SysMenuVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单对外暴露接口
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023-5-5 11:25:33
|
||||
*/
|
||||
public interface SysMenuApiService {
|
||||
|
||||
/**
|
||||
* 新增菜单
|
||||
*
|
||||
* @param sysMenu sysMenu
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int insert(SysMenu sysMenu);
|
||||
|
||||
/**
|
||||
* 更新菜单
|
||||
*
|
||||
* @param sysMenu sysMenu
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int updateById(SysMenu sysMenu);
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*
|
||||
* @param param 条件
|
||||
* @return 菜单列表
|
||||
*/
|
||||
List<SysMenuVo> selectVoList(SysMenuParam param);
|
||||
|
||||
/**
|
||||
* 查询详细
|
||||
*
|
||||
* @param menuId 菜单Id
|
||||
* @return 菜单信息
|
||||
*/
|
||||
SysMenu selectById(String menuId);
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
*
|
||||
* @param menuId 菜单Id
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int deleteById(String menuId);
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
package com.qiaoba.api.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysPost;
|
||||
import com.qiaoba.api.system.entity.param.SysPostParam;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位对外暴露接口
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023-04-23 20:33:43
|
||||
*/
|
||||
public interface SysPostApiService {
|
||||
|
||||
/**
|
||||
* 新增岗位
|
||||
*
|
||||
* @param sysPost sysPost
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int insert(SysPost sysPost);
|
||||
|
||||
/**
|
||||
* 更新岗位
|
||||
*
|
||||
* @param sysPost sysPost
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int updateById(SysPost sysPost);
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*
|
||||
* @param param 条件
|
||||
* @return 岗位列表
|
||||
*/
|
||||
List<SysPost> selectList(SysPostParam param);
|
||||
|
||||
/**
|
||||
* 查询详细
|
||||
*
|
||||
* @param deptId 岗位Id
|
||||
* @return 岗位信息
|
||||
*/
|
||||
SysPost selectById(String deptId);
|
||||
|
||||
/**
|
||||
* 删除岗位
|
||||
*
|
||||
* @param deptId 岗位Id
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int deleteById(String deptId);
|
||||
|
||||
/**
|
||||
* 批量删除岗位
|
||||
*
|
||||
* @param ids 岗位Ids
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int deleteByIds(List<String> ids);
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package com.qiaoba.api.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysRole;
|
||||
import com.qiaoba.api.system.entity.dto.SysRoleDto;
|
||||
import com.qiaoba.api.system.entity.param.SysRoleParam;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色对外暴露接口
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023-04-23 20:33:43
|
||||
*/
|
||||
public interface SysRoleApiService {
|
||||
|
||||
/**
|
||||
* 新增角色
|
||||
*
|
||||
* @param roleDto roleDto
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int insert(SysRoleDto roleDto);
|
||||
|
||||
/**
|
||||
* 更新角色
|
||||
*
|
||||
* @param roleDto roleDto
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int updateById(SysRoleDto roleDto);
|
||||
|
||||
/**
|
||||
* 查询列表
|
||||
*
|
||||
* @param param 条件
|
||||
* @return 角色列表
|
||||
*/
|
||||
List<SysRole> selectList(SysRoleParam param);
|
||||
|
||||
/**
|
||||
* 查询详细
|
||||
*
|
||||
* @param roleId 角色Id
|
||||
* @return 角色信息
|
||||
*/
|
||||
SysRole selectById(String roleId);
|
||||
|
||||
/**
|
||||
* 删除角色
|
||||
*
|
||||
* @param roleId 角色Id
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int deleteById(Long roleId);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*
|
||||
* @param ids 角色ID列表
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int deleteByIds(List<String> ids);
|
||||
}
|
@ -1,6 +1,14 @@
|
||||
package com.qiaoba.api.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysUser;
|
||||
import com.qiaoba.api.system.entity.dto.ResetPwdDto;
|
||||
import com.qiaoba.api.system.entity.dto.ResetUserStatusDto;
|
||||
import com.qiaoba.api.system.entity.dto.SysUserDto;
|
||||
import com.qiaoba.api.system.entity.param.SysUserParam;
|
||||
import com.qiaoba.api.system.entity.vo.SysUserVo;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 用户对外暴露接口
|
||||
@ -12,18 +20,62 @@ import com.qiaoba.api.system.entity.SysUser;
|
||||
public interface SysUserApiService {
|
||||
|
||||
/**
|
||||
* 新增用户
|
||||
* 新增或更新用户
|
||||
*
|
||||
* @param sysUser sysUser
|
||||
* @param dto dto
|
||||
* @param isUpdate 是->更新
|
||||
* @return > 0 = success
|
||||
*/
|
||||
int insert(SysUser sysUser);
|
||||
int saveOrUpdate(SysUserDto dto, Boolean isUpdate);
|
||||
|
||||
/**
|
||||
* 更新租户
|
||||
* 查询用户
|
||||
*
|
||||
* @param sysUser sysUser
|
||||
* @return > 0 = success
|
||||
* @param userId userId
|
||||
* @param hasPassword 是否需要密码
|
||||
* @return SysUser
|
||||
*/
|
||||
int update(SysUser sysUser);
|
||||
SysUser selectById(String userId, Boolean hasPassword);
|
||||
|
||||
/**
|
||||
* 重置密码
|
||||
*
|
||||
* @param dto dto
|
||||
* @return 结果
|
||||
*/
|
||||
int resetPwd(ResetPwdDto dto);
|
||||
|
||||
/**
|
||||
* 更改用户状态
|
||||
*
|
||||
* @param dto dto
|
||||
* @return 结果
|
||||
*/
|
||||
int updateUserStatus(ResetUserStatusDto dto);
|
||||
|
||||
/**
|
||||
* 批量删除
|
||||
*
|
||||
* @param userIds userIds
|
||||
* @param isSoftDelete 是否软删除
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteByIds(List<String> userIds, Boolean isSoftDelete);
|
||||
|
||||
/**
|
||||
* 用户绑定角色
|
||||
*
|
||||
* @param userId userId
|
||||
* @param roleIds roleIds
|
||||
* @param isUpdate 是否是更新操作
|
||||
*/
|
||||
void handleUserRole(String userId, Set<String> roleIds, boolean isUpdate);
|
||||
|
||||
/**
|
||||
* 查询用户列表
|
||||
*
|
||||
* @param param 查询条件
|
||||
* @return list
|
||||
*/
|
||||
List<SysUserVo> selectVoList(SysUserParam param);
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.qiaoba.application;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.qiaoba.api.system.entity.SysMenu;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
@ -30,34 +30,15 @@ qiaoba:
|
||||
max: 20
|
||||
is-use: false # 不使用该库
|
||||
|
||||
qiaoba:
|
||||
datasource:
|
||||
master:
|
||||
driver: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://121.5.136.69:3306/qiaoba-boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true
|
||||
username: root
|
||||
password: LpYN7LUoL?l0OSpR2
|
||||
pool:
|
||||
init: 5 #连接池初始化大小
|
||||
min: 10 #最小空闲连接数
|
||||
max: 20 #最大连接数
|
||||
slaves:
|
||||
- url: jdbc:mysql://121.5.136.69:3306/qiaoba-boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true
|
||||
username: root
|
||||
password: LpYN7LUoL?l0OSpR2
|
||||
weight: 2
|
||||
pool:
|
||||
init: 5
|
||||
min: 10
|
||||
max: 20
|
||||
use: true
|
||||
- url: jdbc:mysql://121.5.136.69:3306/qiaoba-boot?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowMultiQueries=true
|
||||
username: root
|
||||
password: LpYN7LUoL?l0OSpR2
|
||||
weight:
|
||||
pool:
|
||||
init: 5 #连接池初始化大小
|
||||
min: 10 #最小空闲连接数
|
||||
max: 20 #最大连接数
|
||||
is-use: false
|
||||
|
||||
mybatis-plus:
|
||||
configuration:
|
||||
# 自动驼峰命名规则(camel case)映射
|
||||
mapUnderscoreToCamelCase: true
|
||||
# MyBatis 自动映射策略
|
||||
# NONE:不启用 PARTIAL:只对非嵌套 resultMap 自动映射 FULL:对所有 resultMap 自动映射
|
||||
autoMappingBehavior: PARTIAL
|
||||
# MyBatis 自动映射时未知列或未知属性处理策
|
||||
# NONE:不做处理 WARNING:打印相关警告 FAILING:抛出异常和详细信息
|
||||
autoMappingUnknownColumnBehavior: NONE
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
||||
|
@ -1,5 +1,5 @@
|
||||
server:
|
||||
port: 80
|
||||
port: 8080
|
||||
spring:
|
||||
main:
|
||||
allow-bean-definition-overriding: true #新创建的bean覆盖旧的bean
|
||||
@ -36,4 +36,11 @@ knife4j:
|
||||
language: zh_cn
|
||||
enable-swagger-models: false
|
||||
enable-footer-custom: true
|
||||
footer-custom-content: create by ailanyin
|
||||
footer-custom-content: create by ailanyin
|
||||
|
||||
# mybatis-plus:
|
||||
# 对应的 XML 文件位置
|
||||
# mapperLocations: classpath*:mapper/**/*Mapper.xml
|
||||
# 实体扫描,多个package用逗号或者分号分隔
|
||||
# typeAliasesPackage: com.qiaoba.**.entity
|
||||
|
||||
|
@ -17,7 +17,9 @@
|
||||
<module>qiaoba-common-web</module>
|
||||
<module>qiaoba-common-doc</module>
|
||||
<module>qiaoba-common-redis</module>
|
||||
<module>qiaoba-common-security</module>
|
||||
<module>qiaoba-common-poi</module>
|
||||
</modules>
|
||||
|
||||
|
||||
</project>
|
||||
</project>
|
||||
|
@ -11,5 +11,10 @@
|
||||
|
||||
<artifactId>qiaoba-common-base</artifactId>
|
||||
|
||||
|
||||
</project>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@ -18,4 +18,14 @@ public class BaseConstant {
|
||||
* 默认的字符拼接/切割符号: ','(英文逗号)
|
||||
*/
|
||||
public static final String DEFAULT_SPLIT_STR = ",";
|
||||
|
||||
/**
|
||||
* 树的key的命名
|
||||
*/
|
||||
public static final String TREE_KEY_NAME = "label";
|
||||
|
||||
/**
|
||||
* 默认的父ID = 0
|
||||
*/
|
||||
public static final String DEFAULT_PARENT_ID_VALUE = "0";
|
||||
}
|
||||
|
@ -48,6 +48,6 @@ public class BaseEntity implements Serializable {
|
||||
/**
|
||||
* 租户Id
|
||||
*/
|
||||
private Long tenantId;
|
||||
private String tenantId;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,167 @@
|
||||
package com.qiaoba.common.base.result;
|
||||
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* 通用返回
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2021-08-31
|
||||
*/
|
||||
public class AjaxResult extends HashMap<String, Object> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 状态码
|
||||
*/
|
||||
public static final String CODE_TAG = "code";
|
||||
|
||||
/**
|
||||
* 返回内容
|
||||
*/
|
||||
public static final String MSG_TAG = "msg";
|
||||
|
||||
/**
|
||||
* 数据对象
|
||||
*/
|
||||
public static final String DATA_TAG = "data";
|
||||
|
||||
/**
|
||||
* 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
|
||||
*/
|
||||
public AjaxResult() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化一个新创建的 AjaxResult 对象
|
||||
*
|
||||
* @param code 状态码
|
||||
* @param msg 返回内容
|
||||
*/
|
||||
public AjaxResult(int code, String msg) {
|
||||
super.put(CODE_TAG, code);
|
||||
super.put(MSG_TAG, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化一个新创建的 AjaxResult 对象
|
||||
*
|
||||
* @param code 状态码
|
||||
* @param msg 返回内容
|
||||
* @param data 数据对象
|
||||
*/
|
||||
public AjaxResult(int code, String msg, Object data) {
|
||||
super.put(CODE_TAG, code);
|
||||
super.put(MSG_TAG, msg);
|
||||
super.put(DATA_TAG, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回成功消息
|
||||
*
|
||||
* @return 成功消息
|
||||
*/
|
||||
public static AjaxResult success() {
|
||||
return AjaxResult.success("操作成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回成功数据
|
||||
*
|
||||
* @return 成功消息
|
||||
*/
|
||||
public static AjaxResult success(Object data) {
|
||||
return AjaxResult.success("操作成功" , data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回成功消息
|
||||
*
|
||||
* @param msg 返回内容
|
||||
* @return 成功消息
|
||||
*/
|
||||
public static AjaxResult success(String msg) {
|
||||
return AjaxResult.success(msg, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回成功消息
|
||||
*
|
||||
* @param msg 返回内容
|
||||
* @param data 数据对象
|
||||
* @return 成功消息
|
||||
*/
|
||||
public static AjaxResult success(String msg, Object data) {
|
||||
return new AjaxResult(200, msg, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回错误消息
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static AjaxResult error() {
|
||||
return AjaxResult.error("操作失败");
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回错误消息
|
||||
*
|
||||
* @param msg 返回内容
|
||||
* @return 警告消息
|
||||
*/
|
||||
public static AjaxResult error(String msg) {
|
||||
return AjaxResult.error(msg, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回错误消息
|
||||
*
|
||||
* @param msg 返回内容
|
||||
* @param data 数据对象
|
||||
* @return 警告消息
|
||||
*/
|
||||
public static AjaxResult error(String msg, Object data) {
|
||||
return new AjaxResult(500, msg, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回错误消息
|
||||
*
|
||||
* @param code 状态码
|
||||
* @param msg 返回内容
|
||||
* @return 警告消息
|
||||
*/
|
||||
public static AjaxResult error(int code, String msg) {
|
||||
return new AjaxResult(code, msg, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 方便链式调用
|
||||
*
|
||||
* @param key 键
|
||||
* @param value 值
|
||||
* @return 数据对象
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult put(String key, Object value) {
|
||||
super.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public static AjaxResult toAjax(int result) {
|
||||
return result > 0 ? AjaxResult.success() : AjaxResult.error();
|
||||
}
|
||||
|
||||
public static AjaxResult rateLimit() {
|
||||
return new AjaxResult(300, "您访问速度过快,系统繁忙!");
|
||||
}
|
||||
|
||||
public static AjaxResult noPermissionResult(String uri) {
|
||||
return new AjaxResult(401, "无 " + uri + " 路径访问权限");
|
||||
}
|
||||
|
||||
}
|
@ -12,11 +12,13 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
import javax.annotation.Resource;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
@ -79,6 +81,18 @@ public class DynamicDataSourceConfig {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 程序关闭后,要释放数据源连接池
|
||||
*/
|
||||
@PreDestroy
|
||||
public void close() {
|
||||
Set<Map.Entry<Object, Object>> entries = DATA_SOURCE_MAP.entrySet();
|
||||
for (Map.Entry<Object, Object> entry : entries) {
|
||||
DruidDataSource dataSource = (DruidDataSource) entry.getValue();
|
||||
dataSource.close();
|
||||
}
|
||||
}
|
||||
|
||||
private void addDataSourceToMap(String name, Object dataSource) {
|
||||
if (Objects.nonNull(dataSource)) {
|
||||
DATA_SOURCE_MAP.put(name, dataSource);
|
||||
|
@ -0,0 +1,39 @@
|
||||
package com.qiaoba.common.database.config;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
|
||||
import com.qiaoba.common.database.utils.TenantUtil;
|
||||
import net.sf.jsqlparser.expression.Expression;
|
||||
import net.sf.jsqlparser.expression.StringValue;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/8 11:18
|
||||
*/
|
||||
@Configuration
|
||||
public class MybatisPlusConfig {
|
||||
|
||||
@Bean
|
||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||
interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
|
||||
@Override
|
||||
public Expression getTenantId() {
|
||||
return new StringValue(TenantUtil.getTenantId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean ignoreTable(String tableName) {
|
||||
return false;
|
||||
}
|
||||
}));
|
||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
|
||||
return interceptor;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package com.qiaoba.common.database.entity;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.OrderItem;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 分页查询实体类
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
|
||||
@Data
|
||||
public class PageQuery implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 分页大小
|
||||
*/
|
||||
private Integer pageSize;
|
||||
|
||||
/**
|
||||
* 当前页数
|
||||
*/
|
||||
private Integer pageNum;
|
||||
|
||||
/**
|
||||
* 排序列
|
||||
*/
|
||||
private String orderByColumn;
|
||||
|
||||
/**
|
||||
* 排序的方向desc或者asc
|
||||
*/
|
||||
private String isAsc;
|
||||
|
||||
/**
|
||||
* 当前记录起始索引 默认值
|
||||
*/
|
||||
public static final int DEFAULT_PAGE_NUM = 1;
|
||||
|
||||
/**
|
||||
* 每页显示记录数 默认值 默认查全部
|
||||
*/
|
||||
public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE;
|
||||
|
||||
public <T> Page<T> build() {
|
||||
Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM);
|
||||
Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE);
|
||||
if (pageNum <= 0) {
|
||||
pageNum = DEFAULT_PAGE_NUM;
|
||||
}
|
||||
Page<T> page = new Page<>(pageNum, pageSize);
|
||||
/* List<OrderItem> orderItems = buildOrderItem();
|
||||
if (CollUtil.isNotEmpty(orderItems)) {
|
||||
page.addOrder(orderItems);
|
||||
}*/
|
||||
return page;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package com.qiaoba.common.database.entity;
|
||||
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 表格分页数据对象
|
||||
*
|
||||
* @author Lion Li
|
||||
*/
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
public class TableDataInfo<T> implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 总记录数
|
||||
*/
|
||||
private long total;
|
||||
|
||||
/**
|
||||
* 列表数据
|
||||
*/
|
||||
private List<T> rows;
|
||||
|
||||
/**
|
||||
* 消息状态码
|
||||
*/
|
||||
private int code;
|
||||
|
||||
/**
|
||||
* 消息内容
|
||||
*/
|
||||
private String msg;
|
||||
|
||||
/**
|
||||
* 分页
|
||||
*
|
||||
* @param list 列表数据
|
||||
* @param total 总记录数
|
||||
*/
|
||||
public TableDataInfo(List<T> list, long total) {
|
||||
this.rows = list;
|
||||
this.total = total;
|
||||
}
|
||||
|
||||
public static <T> TableDataInfo<T> build(IPage<T> page) {
|
||||
TableDataInfo<T> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(HttpStatus.HTTP_OK);
|
||||
rspData.setMsg("查询成功");
|
||||
rspData.setRows(page.getRecords());
|
||||
rspData.setTotal(page.getTotal());
|
||||
return rspData;
|
||||
}
|
||||
|
||||
public static <T> TableDataInfo<T> build(List<T> list) {
|
||||
TableDataInfo<T> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(HttpStatus.HTTP_OK);
|
||||
rspData.setMsg("查询成功");
|
||||
rspData.setRows(list);
|
||||
rspData.setTotal(list.size());
|
||||
return rspData;
|
||||
}
|
||||
|
||||
public static <T> TableDataInfo<T> build() {
|
||||
TableDataInfo<T> rspData = new TableDataInfo<>();
|
||||
rspData.setCode(HttpStatus.HTTP_OK);
|
||||
rspData.setMsg("查询成功");
|
||||
return rspData;
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +1,11 @@
|
||||
package com.qiaoba.common.database.factories;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.DbType;
|
||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||
import com.qiaoba.common.database.config.DynamicDataSourceConfig;
|
||||
import com.qiaoba.common.database.config.DynamicDataSourceContext;
|
||||
import com.qiaoba.common.database.config.MybatisPlusConfig;
|
||||
import com.qiaoba.common.database.filters.DynamicDataSourceFilter;
|
||||
import com.qiaoba.common.database.properties.DefaultDataSourceProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@ -36,4 +40,5 @@ public class DynamicDataSourceFactory {
|
||||
public DefaultDataSourceProperties defaultDataSourceProperties() {
|
||||
return new DefaultDataSourceProperties();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package com.qiaoba.common.database.filters;
|
||||
|
||||
import com.qiaoba.common.database.config.DynamicDataSourceContext;
|
||||
import com.qiaoba.common.database.constants.DynamicDatasourceConstant;
|
||||
import com.qiaoba.common.database.utils.TenantUtil;
|
||||
import com.qiaoba.common.web.utils.ResponseUtil;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
@ -27,16 +29,12 @@ public class DynamicDataSourceFilter implements Filter {
|
||||
|
||||
@Override
|
||||
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
|
||||
HttpServletRequest request = (HttpServletRequest) servletRequest;
|
||||
String tenantCode = request.getParameter("tenant");
|
||||
if (!checkTenantInfo(tenantCode, servletResponse)) {
|
||||
return;
|
||||
}
|
||||
//设置当前租户对应的数据库
|
||||
dynamicDataSourceContext.setDataSource(tenantCode);
|
||||
System.out.println("当前数据源是:" + dynamicDataSourceContext.getDataSource());
|
||||
dynamicDataSourceContext.setDataSource(DynamicDatasourceConstant.DEFAULT_MASTER_DATASOURCE_KEY);
|
||||
TenantUtil.setTenantId("1");
|
||||
filterChain.doFilter(servletRequest, servletResponse);
|
||||
dynamicDataSourceContext.clearDataSource();
|
||||
TenantUtil.clearTenantId();
|
||||
}
|
||||
|
||||
private boolean checkTenantInfo(String tenantCode, ServletResponse servletResponse) throws IOException {
|
||||
|
@ -0,0 +1,30 @@
|
||||
package com.qiaoba.common.database.utils;
|
||||
|
||||
/**
|
||||
* 租户工具类
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 12:57
|
||||
*/
|
||||
public class TenantUtil {
|
||||
|
||||
private static final ThreadLocal<String> TENANT_ID_HOLDER = new ThreadLocal<>();
|
||||
|
||||
/**
|
||||
* 获取登录用户的租户ID
|
||||
*
|
||||
* @return username
|
||||
*/
|
||||
public static String getTenantId() {
|
||||
return TENANT_ID_HOLDER.get();
|
||||
}
|
||||
|
||||
public static void clearTenantId() {
|
||||
TENANT_ID_HOLDER.remove();
|
||||
}
|
||||
|
||||
public static void setTenantId(String tenantId) {
|
||||
TENANT_ID_HOLDER.set(tenantId);
|
||||
}
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
com.qiaoba.common.database.factories.DynamicDataSourceFactory
|
||||
com.qiaoba.common.database.factories.DynamicDataSourceFactory,\
|
||||
com.qiaoba.common.database.config.MybatisPlusConfig
|
||||
|
||||
|
||||
|
||||
|
27
qiaoba-commons/qiaoba-common-poi/pom.xml
Normal file
27
qiaoba-commons/qiaoba-common-poi/pom.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>qiaoba-commons</artifactId>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<version>1.0</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>qiaoba-common-poi</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<!-- easypoi -->
|
||||
<dependency>
|
||||
<groupId>cn.afterturn</groupId>
|
||||
<artifactId>easypoi-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<!-- Java Servlet -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,39 @@
|
||||
package com.qiaoba.common.poi.model;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* Excel导出设置对象
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2021/10/25 0025 上午 9:15
|
||||
*/
|
||||
@Data
|
||||
public class ExcelSetting implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public static final String EXCEL_FIELD_SHOW_FLAG = "1";
|
||||
|
||||
private Long id;
|
||||
|
||||
private String className;
|
||||
|
||||
private String fieldId;
|
||||
|
||||
private String fieldName;
|
||||
|
||||
private String width;
|
||||
|
||||
private Integer sort;
|
||||
|
||||
private String show;
|
||||
|
||||
private String dateFormat;
|
||||
|
||||
private String replace;
|
||||
|
||||
}
|
@ -0,0 +1,120 @@
|
||||
package com.qiaoba.common.poi.utils;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.qiaoba.common.poi.model.ExcelSetting;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
/**
|
||||
* Excel 工具类
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2021/10/25 0025 上午 9:15
|
||||
*/
|
||||
public class ExcelUtil {
|
||||
|
||||
|
||||
/**
|
||||
* 默认导出
|
||||
*
|
||||
* @param list 数据
|
||||
* @param pojoClass java类
|
||||
* @param fileName 文件名
|
||||
* @param response response
|
||||
*/
|
||||
public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response) {
|
||||
defaultExport(list, pojoClass, fileName, new ExportParams(fileName, fileName, ExcelType.XSSF), response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义导出
|
||||
*
|
||||
* @param list 数据
|
||||
* @param entities 字段设置
|
||||
* @param fileName 文件名
|
||||
* @param response response
|
||||
*/
|
||||
public static void exportExcel(List<?> list, List<ExcelExportEntity> entities, String fileName, HttpServletResponse response) {
|
||||
exportBySettings(list, entities, fileName, new ExportParams(fileName, fileName, ExcelType.XSSF), response);
|
||||
}
|
||||
|
||||
private static void exportBySettings(List<?> list, List<ExcelExportEntity> entities, String fileName, ExportParams exportParams, HttpServletResponse response) {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entities, list);
|
||||
downLoadExcel(fileName, response, workbook);
|
||||
}
|
||||
|
||||
private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, ExportParams exportParams, HttpServletResponse response) {
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);
|
||||
downLoadExcel(fileName, response, workbook);
|
||||
}
|
||||
|
||||
private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
|
||||
try {
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
response.setHeader("content-Type" , "application/vnd.ms-excel");
|
||||
response.setHeader("Content-Disposition" , "attachment;filename=" + URLEncoder.encode(fileName + ".xlsx" , "UTF-8"));
|
||||
workbook.write(response.getOutputStream());
|
||||
IOUtils.closeQuietly(workbook);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> List<T> importExcel(MultipartFile file, Class<T> pojoClass) throws IOException {
|
||||
return importExcel(file.getInputStream(), 1, 1, pojoClass);
|
||||
}
|
||||
|
||||
private static <T> List<T> importExcel(InputStream inputStream, Integer titleRows, Integer headerRows, Class<T> pojoClass) throws IOException {
|
||||
if (inputStream == null) {
|
||||
return null;
|
||||
}
|
||||
ImportParams params = new ImportParams();
|
||||
params.setTitleRows(titleRows);
|
||||
params.setHeadRows(headerRows);
|
||||
params.setSaveUrl("/excel/");
|
||||
try {
|
||||
return ExcelImportUtil.importExcel(inputStream, pojoClass, params);
|
||||
} catch (NoSuchElementException e) {
|
||||
throw new IOException("excel文件不能为空");
|
||||
} catch (Exception e) {
|
||||
throw new IOException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public static List<ExcelExportEntity> createExcelEntry(List<ExcelSetting> settings) {
|
||||
List<ExcelExportEntity> entities = new ArrayList<>();
|
||||
for (ExcelSetting setting : settings) {
|
||||
// 去除隐藏
|
||||
if (!ExcelSetting.EXCEL_FIELD_SHOW_FLAG.equals(setting.getShow())) {
|
||||
continue;
|
||||
}
|
||||
ExcelExportEntity entity = new ExcelExportEntity(setting.getFieldName(), setting.getFieldId());
|
||||
entity.setWidth(Double.valueOf(setting.getWidth()));
|
||||
String replace = setting.getReplace();
|
||||
if (StrUtil.isNotBlank(replace) && replace.contains(",")) {
|
||||
entity.setReplace(replace.split(","));
|
||||
}
|
||||
entity.setFormat(setting.getDateFormat());
|
||||
entity.setOrderNum(setting.getSort());
|
||||
entities.add(entity);
|
||||
}
|
||||
return entities;
|
||||
}
|
||||
|
||||
}
|
21
qiaoba-commons/qiaoba-common-security/pom.xml
Normal file
21
qiaoba-commons/qiaoba-common-security/pom.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>qiaoba-commons</artifactId>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<version>1.0</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>qiaoba-common-security</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<artifactId>qiaoba-common-web</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,30 @@
|
||||
package com.qiaoba.common.security.utils;
|
||||
|
||||
/**
|
||||
* SecurityUtil
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 9:22
|
||||
*/
|
||||
public class SecurityUtil {
|
||||
|
||||
/**
|
||||
* 获取登录用户的账号
|
||||
*
|
||||
* @return username
|
||||
*/
|
||||
public static String getLoginUsername() {
|
||||
return "admin";
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录用户的ID
|
||||
*
|
||||
* @return username
|
||||
*/
|
||||
public static String getLoginUserId() {
|
||||
return "1L";
|
||||
}
|
||||
|
||||
}
|
@ -13,12 +13,12 @@
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<groupId>com.qiaoba</groupId>
|
||||
<artifactId>qiaoba-common-base</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
</project>
|
||||
|
@ -0,0 +1,45 @@
|
||||
package com.qiaoba.common.web.advice;
|
||||
|
||||
|
||||
import com.qiaoba.common.base.exceptions.ServiceException;
|
||||
import com.qiaoba.common.base.result.AjaxResult;
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
/**
|
||||
* 全局异常处理
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2021/10/15 0015 下午 16:43
|
||||
*/
|
||||
@ControllerAdvice
|
||||
public class ExceptionAdvice {
|
||||
|
||||
/**
|
||||
* 非自定义异常
|
||||
*
|
||||
* @param e Exception
|
||||
* @return AjaxResult
|
||||
*/
|
||||
@ExceptionHandler(value = Exception.class)
|
||||
@ResponseBody
|
||||
public AjaxResult error(Exception e) {
|
||||
e.printStackTrace();
|
||||
return AjaxResult.error(e.getMessage());
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义异常, 控制台不打印
|
||||
*
|
||||
* @param e ServiceException
|
||||
* @return AjaxResult
|
||||
*/
|
||||
@ExceptionHandler(ServiceException.class)
|
||||
@ResponseBody
|
||||
public AjaxResult handlerApiException(ServiceException e) {
|
||||
return AjaxResult.error(e.getMessage());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
com.qiaoba.common.web.advice.ExceptionAdvice
|
||||
|
||||
|
@ -16,5 +16,4 @@
|
||||
<module>qiaoba-module-job</module>
|
||||
</modules>
|
||||
|
||||
|
||||
</project>
|
||||
</project>
|
||||
|
@ -0,0 +1,68 @@
|
||||
package com.qiaoba.module.system.controller;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysDept;
|
||||
import com.qiaoba.api.system.entity.param.SysDeptParam;
|
||||
import com.qiaoba.common.base.result.AjaxResult;
|
||||
import com.qiaoba.module.system.service.SysDeptService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 部门管理 Web层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 15:06
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/system/dept")
|
||||
@RequiredArgsConstructor
|
||||
public class SysDeptController {
|
||||
|
||||
private final SysDeptService sysDeptService;
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:dept:list')")
|
||||
@GetMapping("/list")
|
||||
public AjaxResult list(SysDeptParam param) {
|
||||
return AjaxResult.success(sysDeptService.selectList(param));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:dept:list')")
|
||||
@GetMapping("/list/exclude/{deptId}")
|
||||
public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) String deptId) {
|
||||
return AjaxResult.success(sysDeptService.excludeChild(deptId));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:dept:query')")
|
||||
@GetMapping(value = "/{deptId}")
|
||||
public AjaxResult getInfo(@PathVariable Long deptId) {
|
||||
return AjaxResult.success(sysDeptService.selectById(deptId));
|
||||
}
|
||||
|
||||
@GetMapping("/deptTree")
|
||||
public AjaxResult deptTree(SysDeptParam param) {
|
||||
List<SysDept> list = sysDeptService.selectList(param);
|
||||
return AjaxResult.success(sysDeptService.buildDeptTree(list));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:dept:add')")
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody SysDept dept) {
|
||||
return AjaxResult.toAjax(sysDeptService.insert(dept));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:dept:edit')")
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody SysDept dept) {
|
||||
return AjaxResult.toAjax(sysDeptService.updateById(dept));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:dept:remove')")
|
||||
@DeleteMapping("/{id}")
|
||||
public AjaxResult remove(@PathVariable Long id) {
|
||||
return AjaxResult.toAjax(sysDeptService.deleteById(id));
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.qiaoba.module.system.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 登录
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/5 9:43
|
||||
*/
|
||||
@RestController
|
||||
public class SysLoginController {
|
||||
|
||||
@PostMapping("/login")
|
||||
public String login() {
|
||||
return "{\"msg\":\"操作成功\",\"code\":200,\"token\":\"eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjhhNjY4MGY1LTI0OTAtNDUyYi1hYzQ1LWE5YWI0MzQ0YTRlYyJ9.mTZr7TN1Jk2-_7zbeUbOBuHijVLiqY2QSbhcAIfWuX4oF22xGw_DpxOz3I2_-TLeYlJN4y2Gm1qmw6ricqCBqw\"}";
|
||||
}
|
||||
|
||||
@GetMapping("/getInfo")
|
||||
public String getInfo() {
|
||||
return "{\"msg\":\"操作成功\",\"code\":200,\"permissions\":[\"*:*:*\"],\"roles\":[\"admin\"],\"user\":{\"createBy\":\"admin\",\"createTime\":\"2023-04-23 16:11:38\",\"updateBy\":null,\"updateTime\":null,\"remark\":\"管理员\",\"userId\":1,\"deptId\":103,\"userName\":\"admin\",\"nickName\":\"若依\",\"email\":\"ry@163.com\",\"phonenumber\":\"15888888888\",\"sex\":\"1\",\"avatar\":\"\",\"password\":\"$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2\",\"status\":\"0\",\"delFlag\":\"0\",\"loginIp\":\"27.154.23.192\",\"loginDate\":\"2023-05-05T09:45:24.000+08:00\",\"dept\":{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"remark\":null,\"deptId\":103,\"parentId\":101,\"ancestors\":\"0,100,101\",\"deptName\":\"研发部门\",\"orderNum\":1,\"leader\":\"若依\",\"phone\":null,\"email\":null,\"status\":\"0\",\"delFlag\":null,\"parentName\":null,\"children\":[]},\"roles\":[{\"createBy\":null,\"createTime\":null,\"updateBy\":null,\"updateTime\":null,\"remark\":null,\"roleId\":1,\"roleName\":\"超级管理员\",\"roleKey\":\"admin\",\"roleSort\":1,\"dataScope\":\"1\",\"menuCheckStrictly\":false,\"deptCheckStrictly\":false,\"status\":\"0\",\"delFlag\":null,\"flag\":false,\"menuIds\":null,\"deptIds\":null,\"permissions\":null,\"admin\":true}],\"roleIds\":null,\"postIds\":null,\"roleId\":null,\"admin\":true}}";
|
||||
}
|
||||
|
||||
@GetMapping("/getRouters")
|
||||
public String getRouters() {
|
||||
return "{\"msg\":\"操作成功\",\"code\":200,\"data\":[{\"name\":\"System\",\"path\":\"/system\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统管理\",\"icon\":\"system\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"User\",\"path\":\"user\",\"hidden\":false,\"component\":\"system/user/index\",\"meta\":{\"title\":\"用户管理\",\"icon\":\"user\",\"noCache\":false,\"link\":null}},{\"name\":\"Role\",\"path\":\"role\",\"hidden\":false,\"component\":\"system/role/index\",\"meta\":{\"title\":\"角色管理\",\"icon\":\"peoples\",\"noCache\":false,\"link\":null}},{\"name\":\"Menu\",\"path\":\"menu\",\"hidden\":false,\"component\":\"system/menu/index\",\"meta\":{\"title\":\"菜单管理\",\"icon\":\"tree-table\",\"noCache\":false,\"link\":null}},{\"name\":\"Dept\",\"path\":\"dept\",\"hidden\":false,\"component\":\"system/dept/index\",\"meta\":{\"title\":\"部门管理\",\"icon\":\"tree\",\"noCache\":false,\"link\":null}},{\"name\":\"Post\",\"path\":\"post\",\"hidden\":false,\"component\":\"system/post/index\",\"meta\":{\"title\":\"岗位管理\",\"icon\":\"post\",\"noCache\":false,\"link\":null}},{\"name\":\"Dict\",\"path\":\"dict\",\"hidden\":false,\"component\":\"system/dict/index\",\"meta\":{\"title\":\"字典管理\",\"icon\":\"dict\",\"noCache\":false,\"link\":null}},{\"name\":\"Config\",\"path\":\"config\",\"hidden\":false,\"component\":\"system/config/index\",\"meta\":{\"title\":\"参数设置\",\"icon\":\"edit\",\"noCache\":false,\"link\":null}},{\"name\":\"Notice\",\"path\":\"notice\",\"hidden\":false,\"component\":\"system/notice/index\",\"meta\":{\"title\":\"通知公告\",\"icon\":\"message\",\"noCache\":false,\"link\":null}},{\"name\":\"Log\",\"path\":\"log\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"ParentView\",\"alwaysShow\":true,\"meta\":{\"title\":\"日志管理\",\"icon\":\"log\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Operlog\",\"path\":\"operlog\",\"hidden\":false,\"component\":\"monitor/operlog/index\",\"meta\":{\"title\":\"操作日志\",\"icon\":\"form\",\"noCache\":false,\"link\":null}},{\"name\":\"Logininfor\",\"path\":\"logininfor\",\"hidden\":false,\"component\":\"monitor/logininfor/index\",\"meta\":{\"title\":\"登录日志\",\"icon\":\"logininfor\",\"noCache\":false,\"link\":null}}]}]},{\"name\":\"Monitor\",\"path\":\"/monitor\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统监控\",\"icon\":\"monitor\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Online\",\"path\":\"online\",\"hidden\":false,\"component\":\"monitor/online/index\",\"meta\":{\"title\":\"在线用户\",\"icon\":\"online\",\"noCache\":false,\"link\":null}},{\"name\":\"Job\",\"path\":\"job\",\"hidden\":false,\"component\":\"monitor/job/index\",\"meta\":{\"title\":\"定时任务\",\"icon\":\"job\",\"noCache\":false,\"link\":null}},{\"name\":\"Druid\",\"path\":\"druid\",\"hidden\":false,\"component\":\"monitor/druid/index\",\"meta\":{\"title\":\"数据监控\",\"icon\":\"druid\",\"noCache\":false,\"link\":null}},{\"name\":\"Server\",\"path\":\"server\",\"hidden\":false,\"component\":\"monitor/server/index\",\"meta\":{\"title\":\"服务监控\",\"icon\":\"server\",\"noCache\":false,\"link\":null}},{\"name\":\"Cache\",\"path\":\"cache\",\"hidden\":false,\"component\":\"monitor/cache/index\",\"meta\":{\"title\":\"缓存监控\",\"icon\":\"redis\",\"noCache\":false,\"link\":null}},{\"name\":\"CacheList\",\"path\":\"cacheList\",\"hidden\":false,\"component\":\"monitor/cache/list\",\"meta\":{\"title\":\"缓存列表\",\"icon\":\"redis-list\",\"noCache\":false,\"link\":null}}]},{\"name\":\"Tool\",\"path\":\"/tool\",\"hidden\":false,\"redirect\":\"noRedirect\",\"component\":\"Layout\",\"alwaysShow\":true,\"meta\":{\"title\":\"系统工具\",\"icon\":\"tool\",\"noCache\":false,\"link\":null},\"children\":[{\"name\":\"Build\",\"path\":\"build\",\"hidden\":false,\"component\":\"tool/build/index\",\"meta\":{\"title\":\"表单构建\",\"icon\":\"build\",\"noCache\":false,\"link\":null}},{\"name\":\"Gen\",\"path\":\"gen\",\"hidden\":false,\"component\":\"tool/gen/index\",\"meta\":{\"title\":\"代码生成\",\"icon\":\"code\",\"noCache\":false,\"link\":null}},{\"name\":\"Swagger\",\"path\":\"swagger\",\"hidden\":false,\"component\":\"tool/swagger/index\",\"meta\":{\"title\":\"系统接口\",\"icon\":\"swagger\",\"noCache\":false,\"link\":null}}]},{\"name\":\"Http://ruoyi.vip\",\"path\":\"http://ruoyi.vip\",\"hidden\":false,\"component\":\"Layout\",\"meta\":{\"title\":\"若依官网\",\"icon\":\"guide\",\"noCache\":false,\"link\":\"http://ruoyi.vip\"}}]}";
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package com.qiaoba.module.system.controller;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysMenu;
|
||||
import com.qiaoba.api.system.entity.param.SysMenuParam;
|
||||
import com.qiaoba.api.system.entity.vo.SysMenuVo;
|
||||
import com.qiaoba.common.base.result.AjaxResult;
|
||||
import com.qiaoba.common.security.utils.SecurityUtil;
|
||||
import com.qiaoba.module.system.service.SysMenuService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单管理 Web层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/5 10:06
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/system/menu")
|
||||
@RequiredArgsConstructor
|
||||
public class SysMenuController {
|
||||
|
||||
private final SysMenuService sysMenuService;
|
||||
|
||||
@GetMapping("/list")
|
||||
public AjaxResult list(SysMenuParam param) {
|
||||
List<SysMenuVo> menus = sysMenuService.selectVoList(param);
|
||||
return AjaxResult.success(menus);
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:menu:query')")
|
||||
@GetMapping(value = "/{menuId}")
|
||||
public AjaxResult getInfo(@PathVariable String menuId) {
|
||||
return AjaxResult.success(sysMenuService.selectById(menuId));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:menu:add')")
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody SysMenu menu) {
|
||||
return AjaxResult.toAjax(sysMenuService.insert(menu));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:menu:edit')")
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody SysMenu menu) {
|
||||
return AjaxResult.toAjax(sysMenuService.updateById(menu));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:menu:remove')")
|
||||
@DeleteMapping("/{menuId}")
|
||||
public AjaxResult remove(@PathVariable("menuId") String menuId) {
|
||||
return AjaxResult.toAjax(sysMenuService.deleteById(menuId));
|
||||
}
|
||||
|
||||
@GetMapping("/tree_select")
|
||||
public AjaxResult treeSelect(SysMenuParam param) {
|
||||
List<SysMenuVo> menus = sysMenuService.selectVoList(param);
|
||||
return AjaxResult.success(sysMenuService.buildMenuTree(menus));
|
||||
}
|
||||
|
||||
@GetMapping(value = "/role_menu_tree_select/{roleId}")
|
||||
public AjaxResult roleMenuTreeSelect(@PathVariable("roleId") String roleId) {
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
ajax.put("checkedKeys", sysMenuService.selectMenuIdsByRoleId(roleId));
|
||||
ajax.put("menus", sysMenuService.buildMenuTree(sysMenuService.selectVoList(new SysMenuParam())));
|
||||
return ajax;
|
||||
}
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
package com.qiaoba.module.system.controller;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysPost;
|
||||
import com.qiaoba.api.system.entity.param.SysPostParam;
|
||||
import com.qiaoba.common.base.result.AjaxResult;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
import com.qiaoba.common.poi.utils.ExcelUtil;
|
||||
import com.qiaoba.module.system.service.SysPostService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位管理 web层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2022-09-22 04:20:28
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/system/post")
|
||||
@RequiredArgsConstructor
|
||||
public class SysPostController {
|
||||
|
||||
private final SysPostService sysPostService;
|
||||
|
||||
/**
|
||||
* 获取岗位列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
//@PreAuthorize("hasAuthority('system:post:list')")
|
||||
public TableDataInfo<SysPost> list(SysPostParam param, PageQuery pageQuery) {
|
||||
return sysPostService.selectPageList(param, pageQuery);
|
||||
}
|
||||
|
||||
@PostMapping("/export")
|
||||
//@PreAuthorize("hasAuthority('system:post:export')")
|
||||
public void export(HttpServletResponse response, SysPostParam param) {
|
||||
List<SysPost> list = sysPostService.selectList(param);
|
||||
ExcelUtil.exportExcel(list, SysPost.class, "岗位数据", response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据岗位编号获取详细信息
|
||||
*/
|
||||
@GetMapping(value = "/{postId}")
|
||||
//@PreAuthorize("hasAuthority('system:post:query')")
|
||||
public AjaxResult getInfo(@PathVariable("postId") String postId) {
|
||||
return AjaxResult.success(sysPostService.selectById(postId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增岗位
|
||||
*/
|
||||
@PostMapping
|
||||
//@PreAuthorize("hasAuthority('system:post:add')")
|
||||
public AjaxResult add(@RequestBody SysPost post) {
|
||||
return AjaxResult.toAjax(sysPostService.insert(post));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改岗位
|
||||
*/
|
||||
@PutMapping
|
||||
//@PreAuthorize("hasAuthority('system:post:edit')")
|
||||
public AjaxResult edit(@RequestBody SysPost post) {
|
||||
return AjaxResult.toAjax(sysPostService.updateById(post));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除岗位
|
||||
*/
|
||||
@DeleteMapping("/{ids}")
|
||||
//@PreAuthorize("hasAuthority('system:post:remove')")
|
||||
public AjaxResult remove(@PathVariable List<String> ids) {
|
||||
return AjaxResult.toAjax(sysPostService.deleteByIds(ids));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取岗位选择框列表
|
||||
*/
|
||||
/* @GetMapping("/optionSelect")
|
||||
public AjaxResult optionSelect() {
|
||||
List<SysPost> posts = postService.selectPostAll();
|
||||
return AjaxResult.success(posts);
|
||||
}*/
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package com.qiaoba.module.system.controller;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysRole;
|
||||
import com.qiaoba.api.system.entity.dto.SysRoleDto;
|
||||
import com.qiaoba.api.system.entity.param.SysRoleParam;
|
||||
import com.qiaoba.common.base.result.AjaxResult;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
import com.qiaoba.module.system.service.SysRoleService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色管理 web层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2022-09-22 04:20:28
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/system/role")
|
||||
@RequiredArgsConstructor
|
||||
public class SysRoleController {
|
||||
|
||||
private final SysRoleService sysRoleService;
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:role:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<SysRole> list(SysRoleParam param, PageQuery pageQuery) {
|
||||
return sysRoleService.selectPageList(param, pageQuery);
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:role:query')")
|
||||
@GetMapping(value = "/{roleId}")
|
||||
public AjaxResult getInfo(@PathVariable String roleId) {
|
||||
return AjaxResult.success(sysRoleService.selectById(roleId));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:role:add')")
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody SysRoleDto roleDto) {
|
||||
return AjaxResult.toAjax(sysRoleService.insert(roleDto));
|
||||
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:role:edit')")
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody SysRoleDto roleDto) {
|
||||
return AjaxResult.toAjax(sysRoleService.updateById(roleDto));
|
||||
|
||||
}
|
||||
//@PreAuthorize("hasAuthority('system:role:edit')")
|
||||
@PutMapping("/changeStatus")
|
||||
public AjaxResult changeStatus(@RequestBody SysRoleDto dto) {
|
||||
return AjaxResult.toAjax(sysRoleService.updateById(dto));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:role:remove')")
|
||||
@DeleteMapping("/{roleIds}")
|
||||
public AjaxResult remove(@PathVariable List<String> roleIds) {
|
||||
return AjaxResult.toAjax(sysRoleService.deleteByIds(roleIds));
|
||||
}
|
||||
}
|
@ -1,17 +1,30 @@
|
||||
package com.qiaoba.module.system.controller;
|
||||
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.qiaoba.api.system.entity.SysRole;
|
||||
import com.qiaoba.api.system.entity.SysUser;
|
||||
import com.qiaoba.api.system.entity.dto.ResetPwdDto;
|
||||
import com.qiaoba.api.system.entity.dto.ResetUserStatusDto;
|
||||
import com.qiaoba.api.system.entity.dto.SysUserDto;
|
||||
import com.qiaoba.api.system.entity.param.SysPostParam;
|
||||
import com.qiaoba.api.system.entity.param.SysRoleParam;
|
||||
import com.qiaoba.api.system.entity.param.SysUserParam;
|
||||
import com.qiaoba.module.system.service.SysUserService;
|
||||
import com.qiaoba.api.system.entity.vo.SysUserVo;
|
||||
import com.qiaoba.common.base.enums.BaseEnum;
|
||||
import com.qiaoba.common.base.result.AjaxResult;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
import com.qiaoba.common.poi.utils.ExcelUtil;
|
||||
import com.qiaoba.module.system.service.*;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 用户管理 web层
|
||||
@ -23,27 +36,89 @@ import java.util.List;
|
||||
@RestController
|
||||
@RequestMapping("/system/user")
|
||||
@Tag(name = "用户管理")
|
||||
@RequiredArgsConstructor
|
||||
public class SysUserController {
|
||||
|
||||
@Resource
|
||||
private SysUserService baseService;
|
||||
private final SysUserService sysUserService;
|
||||
private final SysRoleService sysRoleService;
|
||||
private final SysPostService sysPostService;
|
||||
private final SysUserPostService sysUserPostService;
|
||||
private final SysUserRoleService sysUserRoleService;
|
||||
|
||||
@GetMapping("/add")
|
||||
public String add() {
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setUsername(RandomUtil.randomString(8));
|
||||
sysUser.setNickname(RandomUtil.randomString(8));
|
||||
sysUser.setIsSuperuser(false);
|
||||
sysUser.setIsDelete(true);
|
||||
sysUser.setIsManager(true);
|
||||
baseService.insert(sysUser);
|
||||
return "OK";
|
||||
//@PreAuthorize("hasAuthority('system:user:add')")
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody SysUserDto dto) {
|
||||
return AjaxResult.toAjax(sysUserService.saveOrUpdate(dto, false));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:user:edit')")
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody SysUserDto dto) {
|
||||
return AjaxResult.toAjax(sysUserService.saveOrUpdate(dto, true));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:user:resetPwd')")
|
||||
@PutMapping("/resetPwd")
|
||||
public AjaxResult resetPwd(@RequestBody ResetPwdDto dto) {
|
||||
return AjaxResult.toAjax(sysUserService.resetPwd(dto));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:user:edit')")
|
||||
@PutMapping("/changeStatus")
|
||||
public AjaxResult changeStatus(@RequestBody ResetUserStatusDto dto) {
|
||||
return AjaxResult.toAjax(sysUserService.updateUserStatus(dto));
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:user:remove')")
|
||||
@DeleteMapping("/{userIds}")
|
||||
public AjaxResult remove(@PathVariable List<String> userIds) {
|
||||
return AjaxResult.toAjax(sysUserService.deleteByIds(userIds, true));
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
public List<SysUser> list(@RequestParam String name) {
|
||||
SysUserParam dto = new SysUserParam();
|
||||
dto.setNickname(name);
|
||||
return baseService.selectList(dto);
|
||||
public TableDataInfo<SysUserVo> list(SysUserParam param, PageQuery pageQuery) {
|
||||
return sysUserService.selectVoPageList(param, pageQuery);
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:user:export')")
|
||||
@PostMapping("/export")
|
||||
public void export(HttpServletResponse response, SysUserParam param) {
|
||||
List<SysUserVo> list = sysUserService.selectVoList(param);
|
||||
ExcelUtil.exportExcel(list, SysUserVo.class, "用户数据", response);
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:user:query')")
|
||||
@GetMapping(value = {"/", "/{userId}"})
|
||||
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) String userId) {
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
List<SysRole> roles = sysRoleService.selectList(new SysRoleParam());
|
||||
ajax.put("roles", roles);
|
||||
ajax.put("posts", sysPostService.selectList(new SysPostParam(BaseEnum.NORMAL.getCode())));
|
||||
if (StrUtil.isNotBlank(userId)) {
|
||||
SysUser sysUser = sysUserService.selectById(userId, false);
|
||||
ajax.put(AjaxResult.DATA_TAG, sysUser);
|
||||
ajax.put("postIds", sysUserPostService.selectPostIdsByUserId(userId));
|
||||
ajax.put("roleIds", sysUserRoleService.selectRoleIdsByUserId(userId));
|
||||
}
|
||||
return ajax;
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:user:query')")
|
||||
@GetMapping("/authRole/{userId}")
|
||||
public AjaxResult authRole(@PathVariable("userId") String userId) {
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
SysUser user = sysUserService.selectById(userId, false);
|
||||
List<SysRole> roles = sysRoleService.selectList(new SysRoleParam());
|
||||
ajax.put("user", user);
|
||||
ajax.put("roles", roles);
|
||||
ajax.put("hasRoleIds", sysUserRoleService.selectRoleIdsByUserId(userId));
|
||||
return ajax;
|
||||
}
|
||||
|
||||
//@PreAuthorize("hasAuthority('system:user:edit')")
|
||||
@PutMapping("/authRole")
|
||||
public AjaxResult handleUserRole(String userId, String[] roleIds) {
|
||||
sysUserService.handleUserRole(userId, Arrays.stream(roleIds).collect(Collectors.toSet()), true);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
package com.qiaoba.module.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.qiaoba.api.system.entity.SysDept;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 部门管理 数据层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 15:03
|
||||
*/
|
||||
public interface SysDeptMapper extends BaseMapper<SysDept> {
|
||||
|
||||
/**
|
||||
* 校验部门名称是否唯一
|
||||
*
|
||||
* @param dept 部门信息
|
||||
* @return 结果
|
||||
*/
|
||||
int checkDeptNameUnique(SysDept dept);
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.qiaoba.module.system.mapper;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysMenu;
|
||||
import com.qiaoba.api.system.entity.vo.SysMenuVo;
|
||||
import com.qiaoba.common.database.mapper.BaseMapperPlus;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单管理 数据层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/5 11:36
|
||||
*/
|
||||
public interface SysMenuMapper extends BaseMapperPlus<SysMenuMapper, SysMenu, SysMenuVo> {
|
||||
|
||||
/**
|
||||
* 校验菜单名称是否唯一
|
||||
*
|
||||
* @param sysMenu 菜单
|
||||
* @return count
|
||||
*/
|
||||
int checkMenuNameUnique(SysMenu sysMenu);
|
||||
|
||||
/**
|
||||
* 根据角色ID查询菜单树信息
|
||||
*
|
||||
* @param roleId 角色ID
|
||||
* @return 选中菜单ID列表
|
||||
*/
|
||||
List<String> selectMenuIdsByRoleId(String roleId);
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.qiaoba.module.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.qiaoba.api.system.entity.SysPost;
|
||||
|
||||
/**
|
||||
* 岗位管理 数据层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 15:03
|
||||
*/
|
||||
public interface SysPostMapper extends BaseMapper<SysPost> {
|
||||
|
||||
/**
|
||||
* 校验岗位名称
|
||||
*
|
||||
* @param sysPost 岗位名称
|
||||
* @return 结果
|
||||
*/
|
||||
int checkPostNameUnique(SysPost sysPost);
|
||||
|
||||
/**
|
||||
* 校验岗位编码
|
||||
*
|
||||
* @param sysPost 岗位编码
|
||||
* @return 结果
|
||||
*/
|
||||
int checkPostCodeUnique(SysPost sysPost);
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package com.qiaoba.module.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.qiaoba.api.system.entity.SysRole;
|
||||
|
||||
/**
|
||||
* 角色管理 数据层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 15:03
|
||||
*/
|
||||
public interface SysRoleMapper extends BaseMapper<SysRole> {
|
||||
|
||||
/**
|
||||
* 校验角色名称是否唯一
|
||||
*
|
||||
* @param role role
|
||||
* @return count
|
||||
*/
|
||||
int checkRoleNameUnique(SysRole role);
|
||||
|
||||
/**
|
||||
* 校验角色权限是否唯一
|
||||
*
|
||||
* @param role role
|
||||
* @return count
|
||||
*/
|
||||
int checkRoleKeyUnique(SysRole role);
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.qiaoba.module.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.qiaoba.api.system.entity.SysRoleMenu;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色菜单关联 数据层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 9:50
|
||||
*/
|
||||
public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
|
||||
|
||||
/**
|
||||
* 通过角色ID批量删除角色和菜单的绑定关系
|
||||
*
|
||||
* @param ids 角色ids
|
||||
*/
|
||||
void deleteByRoleIds(@Param("list") List<String> ids);
|
||||
}
|
@ -1,7 +1,13 @@
|
||||
package com.qiaoba.module.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.qiaoba.api.system.entity.SysUser;
|
||||
import com.qiaoba.api.system.entity.param.SysUserParam;
|
||||
import com.qiaoba.api.system.entity.vo.SysUserVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户管理 数据层
|
||||
@ -11,4 +17,54 @@ import com.qiaoba.api.system.entity.SysUser;
|
||||
* @since 2023-04-23 20:38:55
|
||||
*/
|
||||
public interface SysUserMapper extends BaseMapper<SysUser> {
|
||||
|
||||
/**
|
||||
* 校验用户名是否唯一
|
||||
*
|
||||
* @param sysUser sysUser
|
||||
* @return count
|
||||
*/
|
||||
int checkUsernameUnique(SysUser sysUser);
|
||||
|
||||
/**
|
||||
* 校验手机号码是否唯一
|
||||
*
|
||||
* @param sysUser sysUser
|
||||
* @return count
|
||||
*/
|
||||
int checkPhoneUnique(SysUser sysUser);
|
||||
|
||||
/**
|
||||
* 校验email是否唯一
|
||||
*
|
||||
* @param sysUser sysUser
|
||||
* @return count
|
||||
*/
|
||||
int checkEmailUnique(SysUser sysUser);
|
||||
|
||||
/**
|
||||
* 更新删除状态
|
||||
*
|
||||
* @param userIds userIds
|
||||
* @param status status
|
||||
* @return 结果
|
||||
*/
|
||||
int updateUserDeleteStatus(@Param("list") List<String> userIds, String status);
|
||||
|
||||
/**
|
||||
* 分页查询用户列表
|
||||
*
|
||||
* @param page 分页信息
|
||||
* @param param 查询条件
|
||||
* @return list
|
||||
*/
|
||||
Page<SysUserVo> selectVoPageList(Page page, @Param("param") SysUserParam param);
|
||||
|
||||
/**
|
||||
* 查询用户列表
|
||||
*
|
||||
* @param param 查询条件
|
||||
* @return list
|
||||
*/
|
||||
List<SysUserVo> selectVoList(@Param("param") SysUserParam param);
|
||||
}
|
||||
|
@ -0,0 +1,23 @@
|
||||
package com.qiaoba.module.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.qiaoba.api.system.entity.SysUserPost;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户岗位关联 数据层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 9:50
|
||||
*/
|
||||
public interface SysUserPostMapper extends BaseMapper<SysUserPost> {
|
||||
/**
|
||||
* 通过userId查询所绑定的岗位ID列表
|
||||
*
|
||||
* @param userId userId
|
||||
* @return postIds
|
||||
*/
|
||||
List<String> selectPostIdsByUserId(String userId);
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.qiaoba.module.system.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.qiaoba.api.system.entity.SysUserRole;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户角色关联 数据层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 9:50
|
||||
*/
|
||||
public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
|
||||
|
||||
/**
|
||||
* 通过userId查询所绑定的角色ID列表
|
||||
*
|
||||
* @param userId userId
|
||||
* @return roleIds
|
||||
*/
|
||||
List<String> selectRoleIdsByUserId(String userId);
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.qiaoba.module.system.service;
|
||||
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
import com.qiaoba.api.system.entity.SysDept;
|
||||
import com.qiaoba.api.system.service.SysDeptApiService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 部门管理 服务层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 15:02
|
||||
*/
|
||||
public interface SysDeptService extends SysDeptApiService {
|
||||
|
||||
/**
|
||||
* 查询部门列表(排除节点)
|
||||
*
|
||||
* @param deptId deptId
|
||||
* @return list
|
||||
*/
|
||||
List<SysDept> excludeChild(String deptId);
|
||||
|
||||
/**
|
||||
* 构建前端所需要下拉树结构
|
||||
*
|
||||
* @param list 部门列表
|
||||
* @return 下拉树结构列表
|
||||
*/
|
||||
List<Tree<String>> buildDeptTree(List<SysDept> list);
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.qiaoba.module.system.service;
|
||||
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
import com.qiaoba.api.system.entity.vo.SysMenuVo;
|
||||
import com.qiaoba.api.system.service.SysMenuApiService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单管理 服务层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/5 11:30
|
||||
*/
|
||||
public interface SysMenuService extends SysMenuApiService {
|
||||
|
||||
|
||||
/**
|
||||
* 构建前端所需要下拉树结构
|
||||
*
|
||||
* @param menus 菜单列表
|
||||
* @return 下拉树结构列表
|
||||
*/
|
||||
List<Tree<String>> buildMenuTree(List<SysMenuVo> menus);
|
||||
|
||||
/**
|
||||
* 根据角色ID查询菜单树信息
|
||||
*
|
||||
* @param roleId 角色ID
|
||||
* @return 选中菜单ID列表
|
||||
*/
|
||||
List<String> selectMenuIdsByRoleId(String roleId);
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.qiaoba.module.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysPost;
|
||||
import com.qiaoba.api.system.entity.SysRole;
|
||||
import com.qiaoba.api.system.entity.param.SysPostParam;
|
||||
import com.qiaoba.api.system.entity.param.SysRoleParam;
|
||||
import com.qiaoba.api.system.service.SysPostApiService;
|
||||
import com.qiaoba.api.system.service.SysRoleApiService;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 岗位管理 服务层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 16:57
|
||||
*/
|
||||
public interface SysPostService extends SysPostApiService {
|
||||
|
||||
/**
|
||||
* 分页查询岗位列表
|
||||
*
|
||||
* @param param param
|
||||
* @param pageQuery pageQuery
|
||||
* @return list
|
||||
*/
|
||||
TableDataInfo<SysPost> selectPageList(SysPostParam param, PageQuery pageQuery);
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.qiaoba.module.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysRoleMenu;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色菜单关联 服务层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 9:50
|
||||
*/
|
||||
public interface SysRoleMenuService {
|
||||
|
||||
/**
|
||||
* 批量新增
|
||||
*
|
||||
* @param list list
|
||||
*/
|
||||
void insertBatch(List<SysRoleMenu> list);
|
||||
|
||||
/**
|
||||
* 通过角色ID批量删除角色和菜单的绑定关系
|
||||
*
|
||||
* @param ids 角色ids
|
||||
*/
|
||||
void deleteByRoleIds(List<String> ids);
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.qiaoba.module.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysRole;
|
||||
import com.qiaoba.api.system.entity.param.SysRoleParam;
|
||||
import com.qiaoba.api.system.service.SysRoleApiService;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 角色管理 服务层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 16:57
|
||||
*/
|
||||
public interface SysRoleService extends SysRoleApiService {
|
||||
|
||||
/**
|
||||
* 分页查询角色列表
|
||||
*
|
||||
* @param param param
|
||||
* @param pageQuery pageQuery
|
||||
* @return list
|
||||
*/
|
||||
TableDataInfo<SysRole> selectPageList(SysRoleParam param, PageQuery pageQuery);
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.qiaoba.module.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysUserPost;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户岗位关联 服务层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 9:50
|
||||
*/
|
||||
public interface SysUserPostService {
|
||||
|
||||
/**
|
||||
* 批量新增
|
||||
*
|
||||
* @param list list
|
||||
*/
|
||||
void insertBatch(List<SysUserPost> list);
|
||||
|
||||
/**
|
||||
* 通过userId删除
|
||||
*
|
||||
* @param userId userId
|
||||
*/
|
||||
void deleteByUserId(String userId);
|
||||
|
||||
/**
|
||||
* 通过userId查询所绑定的岗位ID列表
|
||||
*
|
||||
* @param userId userId
|
||||
* @return postIds
|
||||
*/
|
||||
List<String> selectPostIdsByUserId(String userId);
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.qiaoba.module.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysUserRole;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户角色关联 服务层
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 9:50
|
||||
*/
|
||||
public interface SysUserRoleService {
|
||||
|
||||
/**
|
||||
* 批量新增
|
||||
*
|
||||
* @param list list
|
||||
*/
|
||||
void insertBatch(List<SysUserRole> list);
|
||||
|
||||
/**
|
||||
* 通过userId批量删除
|
||||
*
|
||||
* @param userId userId
|
||||
*/
|
||||
void deleteByUserId(String userId);
|
||||
|
||||
/**
|
||||
* 通过userId查询所绑定的角色ID列表
|
||||
*
|
||||
* @param userId userId
|
||||
* @return roleIds
|
||||
*/
|
||||
List<String> selectRoleIdsByUserId(String userId);
|
||||
}
|
@ -1,8 +1,12 @@
|
||||
package com.qiaoba.module.system.service;
|
||||
|
||||
import com.qiaoba.api.system.entity.SysUser;
|
||||
import com.qiaoba.api.system.entity.dto.ResetPwdDto;
|
||||
import com.qiaoba.api.system.entity.param.SysUserParam;
|
||||
import com.qiaoba.api.system.entity.vo.SysUserVo;
|
||||
import com.qiaoba.api.system.service.SysUserApiService;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -22,4 +26,23 @@ public interface SysUserService extends SysUserApiService {
|
||||
* @return list
|
||||
*/
|
||||
List<SysUser> selectList(SysUserParam sysUserParam);
|
||||
|
||||
/**
|
||||
* 条件分页查询列表
|
||||
*
|
||||
* @param param 查询参数
|
||||
* @param pageQuery 分页参数
|
||||
* @return list
|
||||
*/
|
||||
TableDataInfo<SysUser> selectPageList(SysUserParam param, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 分页查询用户列表
|
||||
*
|
||||
* @param pageQuery 分页信息
|
||||
* @param param 查询条件
|
||||
* @return list
|
||||
*/
|
||||
TableDataInfo<SysUserVo> selectVoPageList(SysUserParam param, PageQuery pageQuery);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,162 @@
|
||||
package com.qiaoba.module.system.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
import cn.hutool.core.lang.tree.TreeNodeConfig;
|
||||
import cn.hutool.core.lang.tree.TreeUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.Db;
|
||||
import com.qiaoba.api.system.entity.SysDept;
|
||||
import com.qiaoba.api.system.entity.param.SysDeptParam;
|
||||
import com.qiaoba.common.base.constants.BaseConstant;
|
||||
import com.qiaoba.common.base.enums.BaseEnum;
|
||||
import com.qiaoba.common.base.exceptions.ServiceException;
|
||||
import com.qiaoba.common.security.utils.SecurityUtil;
|
||||
import com.qiaoba.module.system.mapper.SysDeptMapper;
|
||||
import com.qiaoba.module.system.service.SysDeptService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 部门管理 服务层实现
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 15:02
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysDeptServiceImpl implements SysDeptService {
|
||||
|
||||
private final SysDeptMapper sysDeptMapper;
|
||||
|
||||
@Override
|
||||
public int insert(SysDept sysDept) {
|
||||
if (checkDeptNameNotUnique(sysDept)) {
|
||||
throw new ServiceException("同级下部门名称不允许重复!");
|
||||
}
|
||||
sysDept.setCreateTime(new Date());
|
||||
sysDept.setCreateUser(SecurityUtil.getLoginUsername());
|
||||
if (Objects.isNull(sysDept.getParentId()) || BaseConstant.DEFAULT_PARENT_ID_VALUE.equals(sysDept.getParentId())) {
|
||||
return sysDeptMapper.insert(sysDept);
|
||||
}
|
||||
SysDept info = sysDeptMapper.selectById(sysDept.getParentId());
|
||||
// 如果父节点不为正常状态,则不允许新增子节点
|
||||
if (BaseEnum.ABNORMAL.getCode().equals(info.getStatus())) {
|
||||
throw new ServiceException("上级部门停用,不允许新增");
|
||||
}
|
||||
sysDept.setAncestors(info.getAncestors() + BaseConstant.DEFAULT_SPLIT_STR + sysDept.getParentId());
|
||||
return sysDeptMapper.insert(sysDept);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateById(SysDept sysDept) {
|
||||
if (checkDeptNameNotUnique(sysDept)) {
|
||||
throw new ServiceException("同级下部门名称不允许重复!");
|
||||
}
|
||||
sysDept.setUpdateTime(new Date());
|
||||
sysDept.setUpdateUser(SecurityUtil.getLoginUsername());
|
||||
SysDept newParentDept = sysDeptMapper.selectById(sysDept.getParentId());
|
||||
// 如果父节点不为正常状态,则不允许新增子节点
|
||||
if (Objects.nonNull(newParentDept) && BaseEnum.ABNORMAL.getCode().equals(newParentDept.getStatus())) {
|
||||
throw new ServiceException("上级部门停用,不允许插入");
|
||||
}
|
||||
SysDept oldDept = sysDeptMapper.selectById(sysDept.getDeptId());
|
||||
if (Objects.nonNull(newParentDept) && Objects.nonNull(oldDept)) {
|
||||
String newAncestors = newParentDept.getAncestors() + BaseConstant.DEFAULT_SPLIT_STR + newParentDept.getDeptId();
|
||||
String oldAncestors = oldDept.getAncestors();
|
||||
sysDept.setAncestors(newAncestors);
|
||||
updateDeptChildren(sysDept.getDeptId(), newAncestors, oldAncestors);
|
||||
}
|
||||
return sysDeptMapper.updateById(sysDept);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysDept> selectList(SysDeptParam param) {
|
||||
return sysDeptMapper.selectList(param2Wrapper(param));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysDept selectById(Long deptId) {
|
||||
return sysDeptMapper.selectById(deptId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteById(Long deptId) {
|
||||
return sysDeptMapper.deleteById(deptId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysDept> excludeChild(String deptId) {
|
||||
List<SysDept> deptList = selectList(new SysDeptParam());
|
||||
deptList.removeIf(dept -> dept.getDeptId().equals(deptId)
|
||||
|| StrUtil.split(dept.getAncestors(), BaseConstant.DEFAULT_SPLIT_STR).contains(deptId));
|
||||
return deptList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Tree<String>> buildDeptTree(List<SysDept> list) {
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return CollUtil.newArrayList();
|
||||
}
|
||||
TreeNodeConfig config = TreeNodeConfig.DEFAULT_CONFIG.setNameKey(BaseConstant.TREE_KEY_NAME);
|
||||
return TreeUtil.build(list, BaseConstant.DEFAULT_PARENT_ID_VALUE, config, (dept, tree) ->
|
||||
tree.setId(dept.getDeptId())
|
||||
.setParentId(dept.getParentId())
|
||||
.setName(dept.getDeptName())
|
||||
.setWeight(dept.getOrderNum()));
|
||||
}
|
||||
|
||||
private QueryWrapper<SysDept> param2Wrapper(SysDeptParam param) {
|
||||
QueryWrapper<SysDept> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda()
|
||||
.orderByAsc(SysDept::getOrderNum)
|
||||
.like(StrUtil.isNotBlank(param.getDeptName()), SysDept::getDeptName, param.getDeptName())
|
||||
.eq(StrUtil.isNotBlank(param.getStatus()), SysDept::getStatus, param.getStatus());
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
private boolean checkDeptNameNotUnique(SysDept dept) {
|
||||
return sysDeptMapper.checkDeptNameUnique(dept) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改子元素关系
|
||||
*
|
||||
* @param deptId 被修改的部门ID
|
||||
* @param newAncestors 新的父ID集合
|
||||
* @param oldAncestors 旧的父ID集合
|
||||
*/
|
||||
private void updateDeptChildren(String deptId, String newAncestors, String oldAncestors) {
|
||||
List<SysDept> children = selectChildrenDeptById(deptId);
|
||||
if (CollUtil.isEmpty(children)) {
|
||||
return;
|
||||
}
|
||||
for (SysDept child : children) {
|
||||
child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
|
||||
}
|
||||
List<SysDept> list = new ArrayList<>();
|
||||
for (SysDept child : children) {
|
||||
SysDept dept = new SysDept();
|
||||
dept.setDeptId(child.getDeptId());
|
||||
dept.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
|
||||
list.add(dept);
|
||||
}
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
Db.updateBatchById(list);
|
||||
}
|
||||
|
||||
private List<SysDept> selectChildrenDeptById(String deptId) {
|
||||
List<SysDept> deptList = selectList(new SysDeptParam());
|
||||
deptList.removeIf(dept -> !StrUtil.split(dept.getAncestors(), BaseConstant.DEFAULT_SPLIT_STR).contains(deptId));
|
||||
return deptList;
|
||||
}
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
package com.qiaoba.module.system.service.impl;
|
||||
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
import cn.hutool.core.lang.tree.TreeNodeConfig;
|
||||
import cn.hutool.core.lang.tree.TreeUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.qiaoba.api.system.entity.SysMenu;
|
||||
import com.qiaoba.api.system.entity.param.SysMenuParam;
|
||||
import com.qiaoba.api.system.entity.vo.SysMenuVo;
|
||||
import com.qiaoba.common.base.constants.BaseConstant;
|
||||
import com.qiaoba.common.base.exceptions.ServiceException;
|
||||
import com.qiaoba.module.system.mapper.SysMenuMapper;
|
||||
import com.qiaoba.module.system.service.SysMenuService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单管理 服务层实现
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/5 11:30
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysMenuServiceImpl implements SysMenuService {
|
||||
|
||||
private final SysMenuMapper sysMenuMapper;
|
||||
|
||||
@Override
|
||||
public int insert(SysMenu sysMenu) {
|
||||
if (checkMenuNameNotUnique(sysMenu)) {
|
||||
throw new ServiceException("同级下菜单名称不允许重复!");
|
||||
}
|
||||
sysMenu.setCreateTime(new Date());
|
||||
return sysMenuMapper.insert(sysMenu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateById(SysMenu sysMenu) {
|
||||
if (checkMenuNameNotUnique(sysMenu)) {
|
||||
throw new ServiceException("同级下菜单名称不允许重复!");
|
||||
}
|
||||
return sysMenuMapper.updateById(sysMenu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenuVo> selectVoList(SysMenuParam param) {
|
||||
return sysMenuMapper.selectVoList(param2Wrapper((param)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysMenu selectById(String menuId) {
|
||||
return sysMenuMapper.selectById(menuId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteById(String menuId) {
|
||||
return sysMenuMapper.deleteById(menuId);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysMenu> param2Wrapper(SysMenuParam param) {
|
||||
QueryWrapper<SysMenu> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda()
|
||||
.orderByAsc(SysMenu::getOrderNum)
|
||||
.eq(StrUtil.isNotBlank(param.getIsVisible()), SysMenu::getIsVisible, param.getIsVisible())
|
||||
.like(StrUtil.isNotBlank(param.getMenuName()), SysMenu::getMenuName, param.getMenuName());
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Tree<String>> buildMenuTree(List<SysMenuVo> menus) {
|
||||
TreeNodeConfig config = TreeNodeConfig.DEFAULT_CONFIG.setNameKey(BaseConstant.TREE_KEY_NAME);
|
||||
return TreeUtil.build(menus, BaseConstant.DEFAULT_PARENT_ID_VALUE, config, (menu, tree) ->
|
||||
tree.setId(menu.getMenuId())
|
||||
.setParentId(menu.getParentId())
|
||||
.setName(menu.getMenuName())
|
||||
.setWeight(menu.getOrderNum()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> selectMenuIdsByRoleId(String roleId) {
|
||||
return sysMenuMapper.selectMenuIdsByRoleId(roleId);
|
||||
}
|
||||
|
||||
private boolean checkMenuNameNotUnique(SysMenu menu) {
|
||||
return sysMenuMapper.checkMenuNameUnique(menu) > 0;
|
||||
}
|
||||
}
|
@ -0,0 +1,106 @@
|
||||
package com.qiaoba.module.system.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.qiaoba.api.system.entity.SysPost;
|
||||
import com.qiaoba.api.system.entity.param.SysPostParam;
|
||||
import com.qiaoba.common.base.exceptions.ServiceException;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
import com.qiaoba.common.security.utils.SecurityUtil;
|
||||
import com.qiaoba.module.system.mapper.SysPostMapper;
|
||||
import com.qiaoba.module.system.service.SysPostService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 岗位管理 服务层实现
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 16:09
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysPostServiceImpl implements SysPostService {
|
||||
|
||||
private final SysPostMapper sysPostMapper;
|
||||
|
||||
@Override
|
||||
public TableDataInfo<SysPost> selectPageList(SysPostParam param, PageQuery pageQuery) {
|
||||
return TableDataInfo.build(sysPostMapper.selectPage(pageQuery.build(), param2Wrapper(param)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int insert(SysPost sysPost) {
|
||||
checkPostNameUnique(sysPost);
|
||||
checkPostCodeUnique(sysPost);
|
||||
sysPost.setCreateUser(SecurityUtil.getLoginUsername());
|
||||
sysPost.setCreateTime(new Date());
|
||||
return sysPostMapper.insert(sysPost);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateById(SysPost sysPost) {
|
||||
checkPostNameUnique(sysPost);
|
||||
checkPostCodeUnique(sysPost);
|
||||
sysPost.setUpdateUser(SecurityUtil.getLoginUsername());
|
||||
sysPost.setUpdateTime(new Date());
|
||||
return sysPostMapper.updateById(sysPost);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysPost> selectList(SysPostParam param) {
|
||||
return sysPostMapper.selectList(param2Wrapper(param));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysPost selectById(String deptId) {
|
||||
return sysPostMapper.selectById(deptId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteById(String deptId) {
|
||||
return sysPostMapper.deleteById(deptId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteByIds(List<String> ids) {
|
||||
return sysPostMapper.deleteBatchIds(ids);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysPost> param2Wrapper(SysPostParam param) {
|
||||
QueryWrapper<SysPost> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda()
|
||||
.orderByAsc(SysPost::getPostSort)
|
||||
.like(StrUtil.isNotBlank(param.getPostName()), SysPost::getPostName, param.getPostName())
|
||||
.like(StrUtil.isNotBlank(param.getPostCode()), SysPost::getPostCode, param.getPostCode())
|
||||
.eq(StrUtil.isNotBlank(param.getStatus()), SysPost::getStatus, param.getStatus());
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验岗位名称是否唯一
|
||||
*
|
||||
* @param post 岗位信息
|
||||
*/
|
||||
private void checkPostNameUnique(SysPost post) {
|
||||
if (sysPostMapper.checkPostNameUnique(post) > 0) {
|
||||
throw new ServiceException(StrUtil.format("处理岗位'{}'失败,岗位名称已存在", post.getPostName()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验岗位编码是否唯一
|
||||
*
|
||||
* @param post 岗位信息
|
||||
*/
|
||||
private void checkPostCodeUnique(SysPost post) {
|
||||
if (sysPostMapper.checkPostCodeUnique(post) > 0) {
|
||||
throw new ServiceException(StrUtil.format("处理岗位'{}'失败,岗位编码已存在", post.getPostName()));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package com.qiaoba.module.system.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.toolkit.Db;
|
||||
import com.qiaoba.api.system.entity.SysRoleMenu;
|
||||
import com.qiaoba.module.system.mapper.SysRoleMenuMapper;
|
||||
import com.qiaoba.module.system.service.SysRoleMenuService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色菜单关联 服务层实现
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/9 10:08
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysRoleMenuServiceImpl implements SysRoleMenuService {
|
||||
|
||||
private final SysRoleMenuMapper sysRoleMenuMapper;
|
||||
|
||||
@Override
|
||||
public void insertBatch(List<SysRoleMenu> list) {
|
||||
Db.saveBatch(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByRoleIds(List<String> ids) {
|
||||
sysRoleMenuMapper.deleteByRoleIds(ids);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,137 @@
|
||||
package com.qiaoba.module.system.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.qiaoba.api.system.entity.SysRole;
|
||||
import com.qiaoba.api.system.entity.SysRoleMenu;
|
||||
import com.qiaoba.api.system.entity.dto.SysRoleDto;
|
||||
import com.qiaoba.api.system.entity.param.SysRoleParam;
|
||||
import com.qiaoba.common.base.exceptions.ServiceException;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
import com.qiaoba.common.security.utils.SecurityUtil;
|
||||
import com.qiaoba.module.system.mapper.SysRoleMapper;
|
||||
import com.qiaoba.module.system.service.SysRoleMenuService;
|
||||
import com.qiaoba.module.system.service.SysRoleService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 角色管理 服务层实现
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/6 16:58
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysRoleServiceImpl implements SysRoleService {
|
||||
|
||||
private final SysRoleMapper sysRoleMapper;
|
||||
private final SysRoleMenuService sysRoleMenuService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int insert(SysRoleDto roleDto) {
|
||||
SysRole sysRole = BeanUtil.copyProperties(roleDto, SysRole.class);
|
||||
sysRole.setCreateUser(SecurityUtil.getLoginUsername());
|
||||
sysRole.setCreateTime(new Date());
|
||||
|
||||
checkAllowAddOrUpdate(sysRole);
|
||||
int row = sysRoleMapper.insert(sysRole);
|
||||
insertRoleMenu(sysRole.getRoleId(), roleDto.getMenuIds());
|
||||
return row;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int updateById(SysRoleDto roleDto) {
|
||||
SysRole sysRole = BeanUtil.copyProperties(roleDto, SysRole.class);
|
||||
sysRoleMenuService.deleteByRoleIds(CollUtil.toList(sysRole.getRoleId()));
|
||||
insertRoleMenu(sysRole.getRoleId(), roleDto.getMenuIds());
|
||||
return sysRoleMapper.updateById(sysRole);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysRole> selectList(SysRoleParam param) {
|
||||
return sysRoleMapper.selectList(param2Wrapper(param));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysRole selectById(String roleId) {
|
||||
return sysRoleMapper.selectById(roleId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteById(Long roleId) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int deleteByIds(List<String> ids) {
|
||||
sysRoleMenuService.deleteByRoleIds(ids);
|
||||
return sysRoleMapper.deleteBatchIds(ids);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysRole> param2Wrapper(SysRoleParam param) {
|
||||
QueryWrapper<SysRole> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda()
|
||||
.orderByAsc(SysRole::getRoleSort)
|
||||
.like(StrUtil.isNotBlank(param.getRoleName()), SysRole::getRoleName, param.getRoleName());
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<SysRole> selectPageList(SysRoleParam param, PageQuery pageQuery) {
|
||||
return TableDataInfo.build(sysRoleMapper.selectPage(pageQuery.build(), param2Wrapper(param)));
|
||||
}
|
||||
|
||||
private void checkAllowAddOrUpdate(SysRole role) {
|
||||
if (!checkRoleNameUnique(role)) {
|
||||
throw new ServiceException(StrUtil.format("新增或修改角色'{}'失败,角色名称已存在", role.getRoleName()));
|
||||
}
|
||||
if (!checkRoleKeyUnique(role)) {
|
||||
throw new ServiceException(StrUtil.format("新增或修改角色'{}'失败,角色权限已存在", role.getRoleName()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验角色名称是否唯一
|
||||
*
|
||||
* @param role 角色信息
|
||||
* @return 结果
|
||||
*/
|
||||
private boolean checkRoleNameUnique(SysRole role) {
|
||||
return sysRoleMapper.checkRoleNameUnique(role) == 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验角色权限是否唯一
|
||||
*
|
||||
* @param role 角色信息
|
||||
* @return 结果
|
||||
*/
|
||||
private boolean checkRoleKeyUnique(SysRole role) {
|
||||
return sysRoleMapper.checkRoleKeyUnique(role) == 0;
|
||||
}
|
||||
|
||||
private void insertRoleMenu(String roleId, Set<String> menuIds) {
|
||||
if (CollUtil.isEmpty(menuIds)) {
|
||||
return;
|
||||
}
|
||||
List<SysRoleMenu> list = new ArrayList<>();
|
||||
for (String menuId : menuIds) {
|
||||
list.add(new SysRoleMenu(roleId, menuId));
|
||||
}
|
||||
sysRoleMenuService.insertBatch(list);
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.qiaoba.module.system.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.Db;
|
||||
import com.qiaoba.api.system.entity.SysUserPost;
|
||||
import com.qiaoba.module.system.mapper.SysUserPostMapper;
|
||||
import com.qiaoba.module.system.service.SysUserPostService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户岗位关联 服务层实现
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/10 13:03
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysUserPostServiceImpl implements SysUserPostService {
|
||||
|
||||
private final SysUserPostMapper sysUserPostMapper;
|
||||
|
||||
@Override
|
||||
public void insertBatch(List<SysUserPost> list) {
|
||||
Db.saveBatch(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByUserId(String userId) {
|
||||
sysUserPostMapper.delete(createWrapper(userId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> selectPostIdsByUserId(String userId) {
|
||||
return sysUserPostMapper.selectPostIdsByUserId(userId);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysUserPost> createWrapper(String userId) {
|
||||
QueryWrapper<SysUserPost> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda()
|
||||
.eq(SysUserPost::getUserId, userId);
|
||||
return wrapper;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.qiaoba.module.system.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.toolkit.Db;
|
||||
import com.qiaoba.api.system.entity.SysUserRole;
|
||||
import com.qiaoba.module.system.mapper.SysUserRoleMapper;
|
||||
import com.qiaoba.module.system.service.SysUserRoleService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户角色关联 服务层实现
|
||||
*
|
||||
* @author ailanyin
|
||||
* @version 1.0
|
||||
* @since 2023/5/10 13:03
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysUserRoleServiceImpl implements SysUserRoleService {
|
||||
|
||||
private final SysUserRoleMapper sysUserRoleMapper;
|
||||
|
||||
@Override
|
||||
public void insertBatch(List<SysUserRole> list) {
|
||||
Db.saveBatch(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByUserId(String userId) {
|
||||
sysUserRoleMapper.delete(createWrapper(userId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> selectRoleIdsByUserId(String userId) {
|
||||
return sysUserRoleMapper.selectRoleIdsByUserId(userId);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysUserRole> createWrapper(String userId) {
|
||||
QueryWrapper<SysUserRole> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda()
|
||||
.eq(SysUserRole::getUserId, userId);
|
||||
return wrapper;
|
||||
}
|
||||
}
|
@ -1,15 +1,31 @@
|
||||
package com.qiaoba.module.system.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.qiaoba.api.system.entity.SysUser;
|
||||
import com.qiaoba.api.system.entity.SysUserPost;
|
||||
import com.qiaoba.api.system.entity.SysUserRole;
|
||||
import com.qiaoba.api.system.entity.dto.ResetPwdDto;
|
||||
import com.qiaoba.api.system.entity.dto.ResetUserStatusDto;
|
||||
import com.qiaoba.api.system.entity.dto.SysUserDto;
|
||||
import com.qiaoba.api.system.entity.param.SysUserParam;
|
||||
import com.qiaoba.api.system.entity.vo.SysUserVo;
|
||||
import com.qiaoba.common.base.enums.BaseEnum;
|
||||
import com.qiaoba.common.base.exceptions.ServiceException;
|
||||
import com.qiaoba.common.database.entity.PageQuery;
|
||||
import com.qiaoba.common.database.entity.TableDataInfo;
|
||||
import com.qiaoba.common.security.utils.SecurityUtil;
|
||||
import com.qiaoba.module.system.mapper.SysUserMapper;
|
||||
import com.qiaoba.module.system.service.SysUserPostService;
|
||||
import com.qiaoba.module.system.service.SysUserRoleService;
|
||||
import com.qiaoba.module.system.service.SysUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 用户管理 服务层实现
|
||||
@ -19,29 +35,186 @@ import java.util.List;
|
||||
* @since 2023-04-23 20:38:09
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysUserServiceImpl implements SysUserService {
|
||||
|
||||
@Resource
|
||||
private SysUserMapper baseMapper;
|
||||
private final SysUserMapper sysUserMapper;
|
||||
private final SysUserPostService sysUserPostService;
|
||||
private final SysUserRoleService sysUserRoleService;
|
||||
|
||||
@Override
|
||||
public int insert(SysUser sysUser) {
|
||||
return baseMapper.insert(sysUser);
|
||||
public int saveOrUpdate(SysUserDto dto, Boolean isUpdate) {
|
||||
int result = 0;
|
||||
SysUser sysUser = dtoToSysUser(dto, isUpdate);
|
||||
// 检验是否已存在
|
||||
checkAddOrUpdate(sysUser);
|
||||
if (isUpdate) {
|
||||
// 更新sysUser
|
||||
result = sysUserMapper.updateById(sysUser);
|
||||
} else {
|
||||
// 插入sysUser
|
||||
result = sysUserMapper.insert(sysUser);
|
||||
}
|
||||
// 处理角色
|
||||
handleUserRole(sysUser.getUserId(), dto.getRoleIds(), isUpdate);
|
||||
// 处理岗位
|
||||
handleUserPost(sysUser.getUserId(), dto.getPostIds(), isUpdate);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(SysUser sysUser) {
|
||||
return baseMapper.updateById(sysUser);
|
||||
public SysUser selectById(String userId, Boolean hasPassword) {
|
||||
SysUser sysUser = sysUserMapper.selectById(userId);
|
||||
if (Objects.nonNull(sysUser) && !hasPassword) {
|
||||
sysUser.setPassword(null);
|
||||
}
|
||||
return sysUser;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int resetPwd(ResetPwdDto dto) {
|
||||
// todo 加密密码
|
||||
dto.setPassword("123456");
|
||||
SysUser sysUser = BeanUtil.copyProperties(dto, SysUser.class);
|
||||
return sysUserMapper.updateById(sysUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateUserStatus(ResetUserStatusDto dto) {
|
||||
SysUser sysUser = BeanUtil.copyProperties(dto, SysUser.class);
|
||||
return sysUserMapper.updateById(sysUser);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteByIds(List<String> userIds, Boolean isSoftDelete) {
|
||||
if (isSoftDelete) {
|
||||
return sysUserMapper.updateUserDeleteStatus(userIds, BaseEnum.YES.getCode());
|
||||
}
|
||||
return sysUserMapper.deleteBatchIds(userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysUser> selectList(SysUserParam sysUserParam) {
|
||||
return baseMapper.selectList(param2Wrapper(sysUserParam));
|
||||
return sysUserMapper.selectList(param2Wrapper(sysUserParam));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<SysUser> selectPageList(SysUserParam param, PageQuery pageQuery) {
|
||||
return TableDataInfo.build(sysUserMapper.selectPage(pageQuery.build(), param2Wrapper(param)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<SysUserVo> selectVoPageList(SysUserParam param, PageQuery pageQuery) {
|
||||
Page<SysUserVo> page = sysUserMapper.selectVoPageList(pageQuery.build(), param);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleUserRole(String userId, Set<String> roleIds, boolean isUpdate) {
|
||||
if (isUpdate) {
|
||||
sysUserRoleService.deleteByUserId(userId);
|
||||
}
|
||||
if (CollUtil.isEmpty(roleIds)) {
|
||||
return;
|
||||
}
|
||||
List<SysUserRole> list = new ArrayList<>();
|
||||
for (String role : roleIds) {
|
||||
list.add(new SysUserRole(userId, role));
|
||||
}
|
||||
sysUserRoleService.insertBatch(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysUserVo> selectVoList(SysUserParam param) {
|
||||
return sysUserMapper.selectVoList(param);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysUser> param2Wrapper(SysUserParam sysUserParam) {
|
||||
QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
|
||||
wrapper.lambda().like(StrUtil.isNotBlank(sysUserParam.getNickname()), SysUser::getNickname, sysUserParam.getNickname());
|
||||
wrapper.lambda()
|
||||
.orderByAsc(SysUser::getCreateTime)
|
||||
.eq(StrUtil.isNotBlank(sysUserParam.getDeptId()), SysUser::getDeptId, sysUserParam.getDeptId())
|
||||
.eq(StrUtil.isNotBlank(sysUserParam.getIsDelete()), SysUser::getIsDelete, sysUserParam.getIsDelete())
|
||||
.eq(StrUtil.isNotBlank(sysUserParam.getStatus()), SysUser::getStatus, sysUserParam.getStatus())
|
||||
.ge(StrUtil.isNotBlank(sysUserParam.getBeginTime()), SysUser::getCreateTime, sysUserParam.getBeginTime())
|
||||
.le(StrUtil.isNotBlank(sysUserParam.getEndTime()), SysUser::getCreateTime, sysUserParam.getEndTime())
|
||||
.like(StrUtil.isNotBlank(sysUserParam.getNickname()), SysUser::getNickname, sysUserParam.getNickname())
|
||||
.like(StrUtil.isNotBlank(sysUserParam.getPhone()), SysUser::getPhone, sysUserParam.getPhone());
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
private SysUser dtoToSysUser(SysUserDto dto, Boolean isUpdate) {
|
||||
if (StrUtil.isNotBlank(dto.getPassword())) {
|
||||
// todo 加密密码
|
||||
dto.setPassword("123456");
|
||||
}
|
||||
SysUser sysUser = BeanUtil.copyProperties(dto, SysUser.class);
|
||||
if (isUpdate) {
|
||||
sysUser.setUpdateTime(new Date());
|
||||
sysUser.setUpdateUser(SecurityUtil.getLoginUsername());
|
||||
} else {
|
||||
sysUser.setCreateTime(new Date());
|
||||
sysUser.setCreateUser(SecurityUtil.getLoginUsername());
|
||||
}
|
||||
return sysUser;
|
||||
}
|
||||
|
||||
private void checkAddOrUpdate(SysUser sysUser) {
|
||||
if (checkUsernameNotUnique(sysUser)) {
|
||||
throw new ServiceException(StrUtil.format("新增或修改用户'{}'失败,登录账号已存在", sysUser.getUsername()));
|
||||
}
|
||||
if (StrUtil.isNotBlank(sysUser.getPhone()) && checkPhoneNotUnique(sysUser)) {
|
||||
throw new ServiceException(StrUtil.format("新增或修改用户'{}'失败,手机号已存在", sysUser.getUsername()));
|
||||
}
|
||||
if (StrUtil.isNotBlank(sysUser.getEmail()) && checkEmailNotUnique(sysUser)) {
|
||||
throw new ServiceException(StrUtil.format("新增或修改用户'{}'失败,邮箱号已存在", sysUser.getUsername()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验用户名称是否唯一
|
||||
*
|
||||
* @param sysUser 用户信息
|
||||
* @return 结果
|
||||
*/
|
||||
private boolean checkUsernameNotUnique(SysUser sysUser) {
|
||||
return sysUserMapper.checkUsernameUnique(sysUser) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验手机号码是否唯一
|
||||
*
|
||||
* @param sysUser 用户信息
|
||||
* @return 结果
|
||||
*/
|
||||
private boolean checkPhoneNotUnique(SysUser sysUser) {
|
||||
return sysUserMapper.checkPhoneUnique(sysUser) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验email是否唯一
|
||||
*
|
||||
* @param sysUser 用户信息
|
||||
* @return 结果
|
||||
*/
|
||||
private boolean checkEmailNotUnique(SysUser sysUser) {
|
||||
return sysUserMapper.checkEmailUnique(sysUser) > 0;
|
||||
|
||||
}
|
||||
|
||||
private void handleUserPost(String userId, Set<String> postIds, boolean isUpdate) {
|
||||
if (isUpdate) {
|
||||
sysUserPostService.deleteByUserId(userId);
|
||||
}
|
||||
if (CollUtil.isEmpty(postIds)) {
|
||||
return;
|
||||
}
|
||||
List<SysUserPost> list = new ArrayList<>();
|
||||
for (String postId : postIds) {
|
||||
list.add(new SysUserPost(userId, postId));
|
||||
}
|
||||
sysUserPostService.insertBatch(list);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,15 @@
|
||||
<?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.qiaoba.module.system.mapper.SysDeptMapper">
|
||||
|
||||
<select id="checkDeptNameUnique" resultType="int">
|
||||
select count(1) from sys_dept
|
||||
where dept_name = #{deptName} and parent_id = #{parentId}
|
||||
<if test="deptId != null and deptId != ''">and dept_id != #{deptId}</if>
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
@ -0,0 +1,23 @@
|
||||
<?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.qiaoba.module.system.mapper.SysMenuMapper">
|
||||
|
||||
<select id="checkMenuNameUnique" parameterType="com.qiaoba.api.system.entity.SysMenu" resultType="int">
|
||||
select count(1) from sys_menu
|
||||
where menu_name= #{menuName} and parent_id = #{parentId}
|
||||
<if test="menuId != null">
|
||||
and menu_id != #{menuId}
|
||||
</if>
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<select id="selectMenuIdsByRoleId" resultType="string">
|
||||
select m.menu_id
|
||||
from sys_menu m
|
||||
left join sys_role_menu rm on m.menu_id = rm.menu_id
|
||||
where rm.role_id = #{roleId}
|
||||
order by m.parent_id, m.order_num
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,25 @@
|
||||
<?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.qiaoba.module.system.mapper.SysPostMapper">
|
||||
|
||||
<select id="checkPostNameUnique" resultType="int">
|
||||
select count(post_id) from sys_post
|
||||
where post_name = #{postName}
|
||||
<if test="postId != null and postId != ''">
|
||||
and post_id != #{postId}
|
||||
</if>
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<select id="checkPostCodeUnique" resultType="int">
|
||||
select count(post_id) from sys_post
|
||||
where post_code = #{postCode}
|
||||
<if test="postId != null and postId != ''">
|
||||
and post_id != #{postId}
|
||||
</if>
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,25 @@
|
||||
<?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.qiaoba.module.system.mapper.SysRoleMapper">
|
||||
|
||||
<select id="checkRoleNameUnique" parameterType="String" resultType="int">
|
||||
select count(*) from sys_role
|
||||
where role_name = #{roleName} and tenant_id = #{tenantId}
|
||||
<if test="roleId != null and roleId != 0">
|
||||
and role_id != #{roleId}
|
||||
</if>
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<select id="checkRoleKeyUnique" parameterType="String" resultType="int">
|
||||
select count(*) from sys_role
|
||||
where role_key = #{roleKey} and tenant_id = #{tenantId}
|
||||
<if test="roleId != null and roleId != 0">
|
||||
and role_id != #{roleId}
|
||||
</if>
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,17 @@
|
||||
<?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.qiaoba.module.system.mapper.SysRoleMenuMapper">
|
||||
|
||||
<select id="checkMenuExistRole">
|
||||
select count(1) from sys_role_menu where menu_id = #{menuId}
|
||||
</select>
|
||||
|
||||
<delete id="deleteByRoleIds">
|
||||
delete from sys_role_menu where role_id in
|
||||
<foreach collection="list" item="roleId" open="(" separator="," close=")">
|
||||
#{roleId}
|
||||
</foreach>
|
||||
</delete>
|
||||
</mapper>
|
@ -0,0 +1,79 @@
|
||||
<?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.qiaoba.module.system.mapper.SysUserMapper">
|
||||
|
||||
<resultMap type="com.qiaoba.api.system.entity.vo.SysUserVo" id="SysUserVoResult">
|
||||
<id property="userId" column="user_id"/>
|
||||
<result property="deptName" column="dept_name"/>
|
||||
<result property="username" column="username"/>
|
||||
<result property="nickname" column="nickname"/>
|
||||
<result property="email" column="email"/>
|
||||
<result property="phone" column="phone"/>
|
||||
<result property="sex" column="sex"/>
|
||||
<result property="status" column="status"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectUserVo">
|
||||
SELECT u.user_id,u.dept_id,u.username,u.nickname,u.gender,u.phone,u.status,u.email,u.create_time,t2.dept_name
|
||||
FROM sys_user u
|
||||
left join sys_dept t2
|
||||
on u.dept_id = t2.dept_id
|
||||
where u.is_delete = #{param.isDelete}
|
||||
<if test="param.username != null and param.username != ''">
|
||||
AND u.username like concat('%', #{param.username}, '%')
|
||||
</if>
|
||||
<if test="param.nickname != null and param.nickname != ''">
|
||||
AND u.nickname like concat('%', #{param.nickname}, '%')
|
||||
</if>
|
||||
<if test="param.status != null and param.status != ''">
|
||||
AND u.status = #{param.status}
|
||||
</if>
|
||||
<if test="param.deptId != null and param.deptId != ''">
|
||||
AND u.dept_id = #{param.deptId}
|
||||
</if>
|
||||
<if test="param.phone != null and param.phone != ''">
|
||||
AND u.phone like concat('%', #{param.phone}, '%')
|
||||
</if>
|
||||
<if test="param.beginTime != null and param.beginTime != ''">
|
||||
AND u.create_time >= #{param.beginTime}
|
||||
</if>
|
||||
<if test="param.endTime != null and param.endTime != ''">
|
||||
AND u.create_time <= #{param.endTime}
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<select id="selectVoPageList" resultMap="SysUserVoResult">
|
||||
<include refid="selectUserVo"/>
|
||||
</select>
|
||||
|
||||
<select id="selectVoList" resultMap="SysUserVoResult">
|
||||
<include refid="selectUserVo"/>
|
||||
</select>
|
||||
<select id="checkUsernameUnique" resultType="int">
|
||||
select count(*) from sys_user where username = #{username} and is_delete = #{isDelete}
|
||||
<if test="userId != null and userId != ''">and user_id != #{userId}</if>
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<select id="checkPhoneUnique" resultType="int">
|
||||
select count(*) from sys_user where phone = #{phone} and is_delete = #{isDelete}
|
||||
<if test="userId != null and userId != ''">and user_id != #{userId}</if>
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<select id="checkEmailUnique" resultType="int">
|
||||
select count(*) from sys_user where email = #{email} and is_delete = #{isDelete}
|
||||
<if test="userId != null and userId != ''">and user_id != #{userId}</if>
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<update id="updateUserDeleteStatus">
|
||||
update sys_user set is_delete = #{status} where user_id in
|
||||
<foreach collection="list" item="userId" open="(" separator="," close=")">
|
||||
#{userId}
|
||||
</foreach>
|
||||
</update>
|
||||
</mapper>
|
@ -0,0 +1,10 @@
|
||||
<?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.qiaoba.module.system.mapper.SysUserPostMapper">
|
||||
|
||||
<select id="selectPostIdsByUserId" resultType="string">
|
||||
select post_id from sys_user_post where user_id = #{userId}
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,11 @@
|
||||
<?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.qiaoba.module.system.mapper.SysUserRoleMapper">
|
||||
|
||||
<select id="selectRoleIdsByUserId" resultType="string">
|
||||
select role_id from sys_user_role where user_id = #{userId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
Reference in New Issue
Block a user