diff --git a/backend/src/main/java/com/stdproject/common/PageRequest.java b/backend/src/main/java/com/stdproject/common/PageRequest.java index 8495a86..136817c 100644 --- a/backend/src/main/java/com/stdproject/common/PageRequest.java +++ b/backend/src/main/java/com/stdproject/common/PageRequest.java @@ -4,7 +4,7 @@ import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import lombok.Data; - +import java.util.List; /** * 分页查询请求类 @@ -43,6 +43,11 @@ public class PageRequest { */ private String keyword; + /** + * 条件过滤器 + */ + private List filters; + /** * 获取偏移量 * @@ -69,4 +74,4 @@ public class PageRequest { public boolean isDesc() { return "desc".equalsIgnoreCase(orderDirection); } -} \ No newline at end of file +} diff --git a/backend/src/main/java/com/stdproject/controller/AppMenuController.java b/backend/src/main/java/com/stdproject/controller/AppMenuController.java index ae8c164..417dd6c 100644 --- a/backend/src/main/java/com/stdproject/controller/AppMenuController.java +++ b/backend/src/main/java/com/stdproject/controller/AppMenuController.java @@ -1,5 +1,6 @@ package com.stdproject.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -87,8 +88,10 @@ public class AppMenuController { @Operation(summary = "获取菜单树形结构") @GetMapping("/tree") @OperationLog(type = "06", module = "菜单管理", description = "获取菜单树形结构") - public Result> getMenuTree() { + public Result> getMenuTree(@RequestParam String appId,@RequestParam String name) { QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StrUtil.isNotBlank(appId),"app_id", appId); + queryWrapper.like(StrUtil.isNotBlank(name),"name", name); queryWrapper.orderByAsc("parentid", "orderno"); List allMenus = appMenuService.list(queryWrapper); diff --git a/backend/src/main/java/com/stdproject/controller/AppOrganizationController.java b/backend/src/main/java/com/stdproject/controller/AppOrganizationController.java index aed968e..ca61aaf 100644 --- a/backend/src/main/java/com/stdproject/controller/AppOrganizationController.java +++ b/backend/src/main/java/com/stdproject/controller/AppOrganizationController.java @@ -1,5 +1,6 @@ package com.stdproject.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -53,9 +54,11 @@ public class AppOrganizationController { @Operation(summary = "查询部门列表") @GetMapping("/getDepartmentList") @OperationLog(type = "06", module = "组织管理", description = "查询部门列表") - public Result> getDepartmentList(@RequestParam String parentid, @RequestParam String keystr) { + public Result> getDepartmentList(@RequestParam String appId, @RequestParam String orgtype, + @RequestParam String parentid, @RequestParam String keystr) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("orgtype", "02"); + queryWrapper.eq(StrUtil.isNotBlank(appId), "app_id", appId); + queryWrapper.eq(StrUtil.isNotBlank(orgtype), "orgtype", orgtype); queryWrapper.eq("parentid", parentid); queryWrapper.eq("isvaild", "1"); if (StringUtils.hasText(keystr)) { diff --git a/backend/src/main/java/com/stdproject/controller/AppRoleController.java b/backend/src/main/java/com/stdproject/controller/AppRoleController.java index 6f660a9..710c43d 100644 --- a/backend/src/main/java/com/stdproject/controller/AppRoleController.java +++ b/backend/src/main/java/com/stdproject/controller/AppRoleController.java @@ -1,5 +1,6 @@ package com.stdproject.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -41,32 +42,33 @@ public class AppRoleController { @Autowired private IAppRoleService appRoleService; - + @Autowired private IAppRoleMenuService appRoleMenuService; - + @Autowired private IAppRoleUserService appRoleUserService; @Operation(summary = "分页查询角色列表") - @PostMapping("/page") + @PostMapping("/page/{appId}") @OperationLog(type = "06", module = "角色管理", description = "分页查询角色列表") - public Result> page(@RequestBody @Valid PageRequest pageRequest) { + public Result> page(@Parameter(description = "用户ID") @PathVariable String appId, + @RequestBody @Valid PageRequest pageRequest) { Page page = new Page<>(pageRequest.getCurrent(), pageRequest.getSize()); QueryWrapper queryWrapper = new QueryWrapper<>(); - + queryWrapper.eq(StrUtil.isNotBlank(appId),"app_id",appId); // 关键字搜索 if (StringUtils.hasText(pageRequest.getKeyword())) { queryWrapper.and(wrapper -> wrapper - .like("rolename", pageRequest.getKeyword()) - .or().like("rolecode", pageRequest.getKeyword()) - .or().like("description", pageRequest.getKeyword()) + .like("rolename", pageRequest.getKeyword()) + .or().like("rolecode", pageRequest.getKeyword()) + .or().like("description", pageRequest.getKeyword()) ); } - + // 只查询有效的角色 queryWrapper.eq("isvaild", "1"); - + // 排序 if (StringUtils.hasText(pageRequest.getOrderBy())) { if ("asc".equalsIgnoreCase(pageRequest.getOrderDirection())) { @@ -77,7 +79,7 @@ public class AppRoleController { } else { queryWrapper.orderByAsc("rolecode"); } - + IPage result = appRoleService.page(page, queryWrapper); return Result.success(result); } @@ -89,7 +91,7 @@ public class AppRoleController { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("isvaild", "1"); queryWrapper.orderByAsc("rolecode"); - + List roles = appRoleService.list(queryWrapper); return Result.success(roles); } @@ -101,6 +103,7 @@ public class AppRoleController { AppRole role = appRoleService.getById(id); return Result.success(role); } + @Operation(summary = "新增角色") @PostMapping @OperationLog(type = "01", module = "角色管理", description = "新增角色") @@ -133,6 +136,7 @@ public class AppRoleController { /** * 获取最大的角色编号 + * * @return 最大角色编号 */ private String getMaxRoleCode() { @@ -154,7 +158,7 @@ public class AppRoleController { if (existRole == null) { return Result.error("角色不存在"); } - + // 如果修改了角色名称,检查新名称是否已被其他角色使用 if (!existRole.getRolename().equals(appRole.getRolename())) { QueryWrapper nameQuery = new QueryWrapper<>(); @@ -183,29 +187,27 @@ public class AppRoleController { if (userCount > 0) { return Result.error("存在用户关联此角色,无法删除"); } - + // 软删除:设置为无效 AppRole role = appRoleService.getById(id); if (role != null) { role.setIsvaild("0"); role.setLastmodifydate(LocalDateTime.now()); boolean success = appRoleService.updateById(role); - + if (success) { // 同时删除角色菜单关联 QueryWrapper menuQuery = new QueryWrapper<>(); menuQuery.eq("roleid", id); appRoleMenuService.remove(menuQuery); } - + return success ? Result.success("删除成功") : Result.error("删除失败"); } - + return Result.error("角色不存在"); } - - @Operation(summary = "根据角色类型查询角色列表") @GetMapping("/type/{type}") @OperationLog(type = "06", module = "角色管理", description = "根据角色类型查询角色列表") @@ -213,7 +215,7 @@ public class AppRoleController { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("type", type); queryWrapper.eq("isvaild", "1"); - queryWrapper.orderByAsc("rolecode"); + queryWrapper.orderByAsc("rolecode"); List roles = appRoleService.list(queryWrapper); return Result.success(roles); } @@ -224,18 +226,18 @@ public class AppRoleController { public Result assignMenus( @Parameter(description = "角色ID") @PathVariable String roleId, @RequestBody List menuIds) { - + // 检查角色是否存在 AppRole role = appRoleService.getById(roleId); if (role == null || !"1".equals(role.getIsvaild())) { return Result.error("角色不存在或已禁用"); } - + // 先删除原有的菜单权限 QueryWrapper deleteQuery = new QueryWrapper<>(); deleteQuery.eq("roleid", roleId); appRoleMenuService.remove(deleteQuery); - + // 添加新的菜单权限 if (menuIds != null && !menuIds.isEmpty()) { List roleMenus = menuIds.stream().map(menuId -> { @@ -245,11 +247,11 @@ public class AppRoleController { roleMenu.setAppId(role.getAppId()); return roleMenu; }).collect(Collectors.toList()); - + boolean success = appRoleMenuService.saveBatch(roleMenus); return success ? Result.success("权限分配成功") : Result.error("权限分配失败"); } - + return Result.success("权限分配成功"); } @@ -259,12 +261,12 @@ public class AppRoleController { public Result> getRoleMenus(@Parameter(description = "角色ID") @PathVariable String roleId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("roleid", roleId); - + List roleMenus = appRoleMenuService.list(queryWrapper); List menuIds = roleMenus.stream() - .map(AppRoleMenu::getMenuid) - .collect(Collectors.toList()); - + .map(AppRoleMenu::getMenuid) + .collect(Collectors.toList()); + return Result.success(menuIds); } @@ -274,18 +276,18 @@ public class AppRoleController { public Result assignUsers( @Parameter(description = "角色ID") @PathVariable String roleId, @RequestBody List userIds) { - + // 检查角色是否存在 AppRole role = appRoleService.getById(roleId); if (role == null || !"1".equals(role.getIsvaild())) { return Result.error("角色不存在或已禁用"); } - + // 先删除原有的用户角色关联 QueryWrapper deleteQuery = new QueryWrapper<>(); deleteQuery.eq("roleid", roleId); appRoleUserService.remove(deleteQuery); - + // 添加新的用户角色关联 if (userIds != null && !userIds.isEmpty()) { List roleUsers = userIds.stream().map(userId -> { @@ -295,11 +297,11 @@ public class AppRoleController { roleUser.setAppId(role.getAppId()); return roleUser; }).collect(Collectors.toList()); - + boolean success = appRoleUserService.saveBatch(roleUsers); return success ? Result.success("用户分配成功") : Result.error("用户分配失败"); } - + return Result.success("用户分配成功"); } @@ -309,12 +311,12 @@ public class AppRoleController { public Result> getRoleUsers(@Parameter(description = "角色ID") @PathVariable String roleId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("roleid", roleId); - + List roleUsers = appRoleUserService.list(queryWrapper); List userIds = roleUsers.stream() - .map(AppRoleUser::getUserid) - .collect(Collectors.toList()); - + .map(AppRoleUser::getUserid) + .collect(Collectors.toList()); + return Result.success(userIds); } -} \ No newline at end of file +} diff --git a/backend/src/main/java/com/stdproject/controller/AppUserController.java b/backend/src/main/java/com/stdproject/controller/AppUserController.java index 15ceb55..cc82f8f 100644 --- a/backend/src/main/java/com/stdproject/controller/AppUserController.java +++ b/backend/src/main/java/com/stdproject/controller/AppUserController.java @@ -1,10 +1,12 @@ package com.stdproject.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.stdproject.common.OperationLog; import com.stdproject.common.PageRequest; +import com.stdproject.common.QueryWrapperBuilder; import com.stdproject.common.Result; import com.stdproject.entity.AppUser; import com.stdproject.service.IAppUserService; @@ -37,22 +39,25 @@ public class AppUserController { private IAppUserService appUserService; @Operation(summary = "分页查询用户列表") - @PostMapping("/page") + @PostMapping("/page/{orgId}/{appId}") @OperationLog(type = "06", module = "用户管理", description = "分页查询用户列表") - public Result> page(@RequestBody @Valid PageRequest pageRequest) { + public Result> page(@Parameter(description = "用户ID") @PathVariable String orgId, + @Parameter(description = "用户ID") @PathVariable String appId, + @RequestBody @Valid PageRequest pageRequest) { Page page = new Page<>(pageRequest.getCurrent(), pageRequest.getSize()); QueryWrapper queryWrapper = new QueryWrapper<>(); - + queryWrapper.eq(StrUtil.isNotBlank(orgId),"orgid",orgId); + queryWrapper.eq(StrUtil.isNotBlank(appId),"app_id",appId); // 关键字搜索 if (StringUtils.hasText(pageRequest.getKeyword())) { queryWrapper.and(wrapper -> wrapper - .like("username", pageRequest.getKeyword()) - .or().like("nickname", pageRequest.getKeyword()) - .or().like("email", pageRequest.getKeyword()) - .or().like("phone", pageRequest.getKeyword()) + .like("username", pageRequest.getKeyword()) + .or().like("nickname", pageRequest.getKeyword()) + .or().like("email", pageRequest.getKeyword()) + .or().like("phone", pageRequest.getKeyword()) ); } - + // 排序 if (StringUtils.hasText(pageRequest.getOrderBy())) { if ("asc".equalsIgnoreCase(pageRequest.getOrderDirection())) { @@ -63,7 +68,7 @@ public class AppUserController { } else { queryWrapper.orderByDesc("lastmodifydate"); } - + IPage result = appUserService.page(page, queryWrapper); return Result.success(result); } @@ -101,7 +106,7 @@ public class AppUserController { if (existUser != null) { return Result.error("用户名已存在"); } - + // 设置默认值 if (!StringUtils.hasText(appUser.getStatus())) { appUser.setStatus("1"); // 默认有效 @@ -112,12 +117,12 @@ public class AppUserController { if (appUser.getFailednum() == null) { appUser.setFailednum(0); } - + // 密码加密 if (StringUtils.hasText(appUser.getPassword())) { appUser.setPassword(PasswordUtils.encodePassword(appUser.getPassword())); } - + appUser.setLastmodifydate(LocalDateTime.now()); boolean success = appUserService.save(appUser); return success ? Result.success("新增成功") : Result.error("新增失败"); @@ -132,7 +137,7 @@ public class AppUserController { if (existUser == null) { return Result.error("用户不存在"); } - + // 如果修改了用户名,检查新用户名是否已被其他用户使用 if (!existUser.getUsername().equals(appUser.getUsername())) { AppUser userWithSameName = appUserService.findByUsername(appUser.getUsername()); @@ -140,7 +145,7 @@ public class AppUserController { return Result.error("用户名已被其他用户使用"); } } - + // 如果传入了新密码,进行加密 if (StringUtils.hasText(appUser.getPassword())) { appUser.setPassword(PasswordUtils.encodePassword(appUser.getPassword())); @@ -149,7 +154,7 @@ public class AppUserController { // 如果没有传入密码,保持原密码不变 appUser.setPassword(existUser.getPassword()); } - + appUser.setLastmodifydate(LocalDateTime.now()); boolean success = appUserService.updateById(appUser); return success ? Result.success("修改成功") : Result.error("修改失败"); @@ -181,17 +186,17 @@ public class AppUserController { if (user == null) { return Result.error("用户不存在"); } - + // 验证旧密码 if (!PasswordUtils.matches(request.getOldPassword(), user.getPassword())) { return Result.error("原密码错误"); } - + // 更新新密码 user.setPassword(PasswordUtils.encodePassword(request.getNewPassword())); user.setPwdresettime(LocalDateTime.now()); user.setLastmodifydate(LocalDateTime.now()); - + boolean success = appUserService.updateById(user); return success ? Result.success("密码修改成功") : Result.error("密码修改失败"); } @@ -206,12 +211,12 @@ public class AppUserController { if (user == null) { return Result.error("用户不存在"); } - + // 重置密码 user.setPassword(PasswordUtils.encodePassword(request.getNewPassword())); user.setPwdresettime(LocalDateTime.now()); user.setLastmodifydate(LocalDateTime.now()); - + boolean success = appUserService.updateById(user); return success ? Result.success("密码重置成功") : Result.error("密码重置失败"); } @@ -226,10 +231,10 @@ public class AppUserController { if (user == null) { return Result.error("用户不存在"); } - + user.setStatus(status); user.setLastmodifydate(LocalDateTime.now()); - + boolean success = appUserService.updateById(user); String message = "1".equals(status) ? "启用成功" : "禁用成功"; return success ? Result.success(message) : Result.error("操作失败"); @@ -242,11 +247,11 @@ public class AppUserController { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("orgid", orgId); queryWrapper.orderByDesc("lastmodifydate"); - + List users = appUserService.list(queryWrapper); // 不返回密码信息 users.forEach(user -> user.setPassword(null)); - + return Result.success(users); } @@ -254,24 +259,42 @@ public class AppUserController { * 密码修改请求类 */ public static class PasswordUpdateRequest { + private String oldPassword; private String newPassword; - + // getters and setters - public String getOldPassword() { return oldPassword; } - public void setOldPassword(String oldPassword) { this.oldPassword = oldPassword; } - public String getNewPassword() { return newPassword; } - public void setNewPassword(String newPassword) { this.newPassword = newPassword; } + public String getOldPassword() { + return oldPassword; + } + + public void setOldPassword(String oldPassword) { + this.oldPassword = oldPassword; + } + + public String getNewPassword() { + return newPassword; + } + + public void setNewPassword(String newPassword) { + this.newPassword = newPassword; + } } /** * 密码重置请求类 */ public static class PasswordResetRequest { + private String newPassword; - + // getters and setters - public String getNewPassword() { return newPassword; } - public void setNewPassword(String newPassword) { this.newPassword = newPassword; } + public String getNewPassword() { + return newPassword; + } + + public void setNewPassword(String newPassword) { + this.newPassword = newPassword; + } } -} \ No newline at end of file +}