diff --git a/main/manager-api/src/main/java/xiaozhi/modules/admin/contrloler/AdminController.java b/main/manager-api/src/main/java/xiaozhi/modules/admin/contrloler/AdminController.java new file mode 100644 index 00000000..ee46f2eb --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/admin/contrloler/AdminController.java @@ -0,0 +1,84 @@ +package xiaozhi.modules.admin.contrloler; + + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.page.PageData; +import xiaozhi.common.utils.Result; +import xiaozhi.common.validator.ValidatorUtils; +import xiaozhi.modules.sys.dto.AdminPageUserDTO; +import xiaozhi.modules.sys.service.SysUserService; +import xiaozhi.modules.sys.vo.AdminPageUserVO; + +import java.util.Map; + +/** + * 管理员控制层 + * + * @author zjy + * @since 2025-3-25 + */ +@AllArgsConstructor +@RestController +@RequestMapping("/admin") +@Tag(name = "管理员管理") +public class AdminController { + private final SysUserService sysUserService; + + @GetMapping("/users") + @Operation(summary = "分页查找用户") + @RequiresPermissions("sys:role:superAdmin") + @Parameters({ + @Parameter(name = "mobile", description = "用户手机号码", required = true), + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), + }) + public Result> pageUser( + @Parameter(hidden = true) @RequestParam Map params) { + AdminPageUserDTO dto = new AdminPageUserDTO(); + dto.setMobile((String) params.get("mobile")); + dto.setLimit((String) params.get(Constant.LIMIT)); + dto.setPage((String) params.get("pages")); + + ValidatorUtils.validateEntity(dto); + PageData page = sysUserService.page(dto); + return new Result>().ok(page); + } + + @PutMapping("/users/{id}") + @Operation(summary = "重置密码") + @RequiresPermissions("sys:role:superAdmin") + public Result update( + @PathVariable Long id) { + String password = sysUserService.resetPassword(id); + return new Result().ok(password); + } + + @DeleteMapping("/users/{id}") + @Operation(summary = "用户删除") + @RequiresPermissions("sys:role:superAdmin") + public Result delete(@PathVariable Long id) { + sysUserService.delete(new Long[]{id}); + return new Result<>(); + } + + @GetMapping("/device/all") + @Operation(summary = "分页查找设备") + @RequiresPermissions("sys:role:superAdmin") + @Parameters({ + @Parameter(name = "keywords", description = "用户手机号码", required = true), + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), + }) + public Result pageDevice( + @Parameter(hidden = true) @RequestParam Map params) { + //TODO 等设备功能模块写好 + return new Result().error(600,"等设备功能模块写好"); + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java new file mode 100644 index 00000000..8c0ab77c --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/AdminPageUserDTO.java @@ -0,0 +1,25 @@ +package xiaozhi.modules.sys.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +/** + * 管理员分页用户的参数DTO + * @author zjy + * @since 2025-3-21 + */ +@Data +@Schema(description = "音色分页参数") +public class AdminPageUserDTO { + + + @Schema(description = "手机号码") + private String mobile; + + @Schema(description = "页数") + private String page; + + @Schema(description = "显示列数") + private String limit; +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java index 08179409..f8f609dc 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java @@ -1,9 +1,12 @@ package xiaozhi.modules.sys.service; +import xiaozhi.common.page.PageData; import xiaozhi.common.service.BaseService; +import xiaozhi.modules.sys.dto.AdminPageUserDTO; import xiaozhi.modules.sys.dto.PasswordDTO; import xiaozhi.modules.sys.dto.SysUserDTO; import xiaozhi.modules.sys.entity.SysUserEntity; +import xiaozhi.modules.sys.vo.AdminPageUserVO; /** @@ -19,5 +22,30 @@ public interface SysUserService extends BaseService { void delete(Long[] ids); + /** + * 验证是否允许修改密码更改 + * @param userId 用户id + * @param passwordDTO 验证密码的参数 + */ void changePassword(Long userId, PasswordDTO passwordDTO); + + /** + * 直接修改密码,不需要验证 + * @param userId 用户id + * @param password 密码 + */ + void changePasswordDirectly(Long userId, String password); + + /** + * 重置密码 + * @param userId 用户id + * @return 随机生成符合规范的密码 + */ + String resetPassword(Long userId); + /** + * 管理员分页用户信息 + * @param dto 分页查找参数 + * @return 用户列表分页数据 + */ + PageData page(AdminPageUserDTO dto); } diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java index 17d1939c..f1a1ad60 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java @@ -1,23 +1,28 @@ package xiaozhi.modules.sys.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import xiaozhi.common.constant.Constant; import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.exception.RenException; +import xiaozhi.common.page.PageData; import xiaozhi.common.service.impl.BaseServiceImpl; import xiaozhi.common.utils.ConvertUtils; import xiaozhi.modules.security.password.PasswordUtils; import xiaozhi.modules.sys.dao.SysUserDao; +import xiaozhi.modules.sys.dto.AdminPageUserDTO; import xiaozhi.modules.sys.dto.PasswordDTO; import xiaozhi.modules.sys.dto.SysUserDTO; import xiaozhi.modules.sys.entity.SysUserEntity; import xiaozhi.modules.sys.enums.SuperAdminEnum; import xiaozhi.modules.sys.service.SysUserService; +import xiaozhi.modules.sys.vo.AdminPageUserVO; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -80,9 +85,11 @@ public class SysUserServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); return baseDao.selectCount(queryWrapper); } + @Override + public PageData page(AdminPageUserDTO dto) { + Map params = new HashMap(); + params.put(Constant.PAGE, dto.getPage()); + params.put(Constant.LIMIT,dto.getLimit()); + IPage page = baseDao.selectPage( + getPage(params, "id", true), + //定义查询条件 + new QueryWrapper() + //必须按照手机号码查找 + .eq(StringUtils.isNotBlank(dto.getMobile()),"username",dto.getMobile())); + List list = page.getRecords().stream().map(user -> { + AdminPageUserVO adminPageUserVO = new AdminPageUserVO(); + adminPageUserVO.setUserid(user.getId().toString()); + adminPageUserVO.setMobile(user.getUsername()); + //TODO 2. 等设备功能写好,获取对应数据 + adminPageUserVO.setDeviceCount("0"); + return adminPageUserVO; + }).toList(); + return new PageData<>(list, page.getTotal()); + } private boolean isStrongPassword(String password) { // 弱密码的正则表达式 @@ -120,4 +166,19 @@ public class SysUserServiceImpl extends BaseServiceImpl