This commit is contained in:
2023-05-10 17:17:26 +08:00
parent 0af829c451
commit 076a8aed70
91 changed files with 3837 additions and 108 deletions

View File

@ -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));
}
}

View File

@ -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\"}}]}";
}
}

View File

@ -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;
}
}

View File

@ -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);
}*/
}

View File

@ -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));
}
}

View File

@ -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();
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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()));
}
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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 &gt;= #{param.beginTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
AND u.create_time &lt;= #{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>

View File

@ -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>

View File

@ -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>