sxwz2.0/src/main/java/com/kexue/skills/controller/SysUserController.java
wangzhiwei 59a44f9c53 feat(skills): 新增技能包解析和标题获取功能
- 添加了CmsContentController的getTitle接口用于获取内容标题
- 实现了CmsContentService的getTitle方法支持内容标题查询
- 新增SkillZipParser工具类支持ZIP和RAR格式技能包解析
- 集成snakeyaml和sevenzipjbinding依赖处理YAML配置和压缩文件
- 实现SkillGenService的uploadSkillV2方法支持本地技能包上传
- 在SysUserController中增强token验证逻辑确保登录状态检查
- 支持从技能包中提取MD文件内容并自动生成YAML描述结构
2026-03-17 18:06:03 +08:00

246 lines
9.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.kexue.skills.controller;
import com.kexue.skills.annotation.RequireAuth;
import com.kexue.skills.entity.SysUser;
import com.kexue.skills.entity.dto.SysUserDto;
import com.kexue.skills.entity.request.ResetPasswordDto;
import com.kexue.skills.entity.request.ResetPwdDto;
import com.kexue.skills.entity.request.AdminResetPasswordDto;
import com.kexue.skills.exception.BizException;
import com.kexue.skills.service.SysUserService;
import org.springframework.web.bind.annotation.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import javax.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import com.kexue.skills.common.CacheManager;
import com.github.pagehelper.PageInfo;
import com.kexue.skills.common.CommonResult;
import com.kexue.skills.entity.base.IdDto;
import com.kexue.skills.entity.request.LoginUserDto;
import org.redisson.api.RedissonClient;
/**
* (SysUser)表控制层
*
* @author 王志维
* @since 2025-02-21 23:01:48
*/
@RestController
@RequestMapping("api/sysUser")
@Tag(name = "用户管理 Api")
@CrossOrigin(origins = "*")
public class SysUserController {
/**
* 服务对象
*/
@Resource
private SysUserService sysUserService;
/**
* Redisson客户端
*/
@Resource
private RedissonClient redissonClient;
/**
* 分页查询
*
* @param queryDto 筛选条件
* @return 查询结果
*/
@PostMapping("/getPageList")
@Operation(summary = "查询分页列表", description = "查询分页列表")
public CommonResult<PageInfo<SysUser>> getPageList(@RequestBody SysUserDto queryDto) {
return CommonResult.success(sysUserService.getPageList(queryDto));
}
/**
* 通过主键查询单条数据
*
* @param id 主键
* @return 单条数据
*/
@PostMapping("queryById/{id}")
@Operation(summary = "通过ID查询用户", description = "通过ID查询用户")
public CommonResult<SysUser> queryById(@PathVariable("id") Long id) {
return CommonResult.success(sysUserService.queryById(id));
}
/**
* 新增数据
*
* @param SysUser 实体
* @return 新增结果
*/
@PostMapping("/insert")
@Operation(summary = "新增用户", description = "新增用户")
public CommonResult<SysUser> insert(@RequestBody SysUser SysUser) {
return CommonResult.success(sysUserService.insert(SysUser));
}
/**
* 编辑数据
*
* @param SysUser 实体
* @return 编辑结果
*/
@PostMapping("/update")
@Operation(summary = "更新用户", description = "更新用户")
public CommonResult<SysUser> update(@RequestBody SysUser SysUser) {
return CommonResult.success(sysUserService.update(SysUser));
}
/**
* 删除数据
*
* @param id
* @return 删除数据
*/
@PostMapping("deleteById/{id}")
@Operation(summary = "通过ID删除用户", description = "通过ID删除用户")
public CommonResult<Boolean> deleteById(@PathVariable("id") Long id) {
return CommonResult.success(sysUserService.deleteById(id));
}
@PostMapping("deleteByIdDto")
@Operation(summary = "通过ID删除用户", description = "通过ID删除用户")
public CommonResult<Boolean> deleteByIdDto(@RequestBody IdDto idDto) {
return CommonResult.success(sysUserService.deleteById(idDto.getId()));
}
@PostMapping("/resetPassword")
@Operation(summary = "管理员帮助用户重置密码", description = "管理员帮助用户重置密码")
@RequireAuth
public CommonResult<Boolean> resetPasswordByAdmin(@RequestBody ResetPasswordDto resetPasswordDto, HttpServletRequest request) {
// 从请求头中获取token
String token = request.getHeader("Authorization");
if (token == null || token.isEmpty()) {
throw new BizException("请先登录认证后操作");
}
// 从缓存中获取当前登录用户
String username = CacheManager.getUsernameFromToken(token);
if (username == null) {
throw new BizException("无效的token请重新登录");
}
SysUser adminUser = sysUserService.getByUsername(username);
if (adminUser == null) {
throw new BizException("管理员不存在");
}
boolean result = sysUserService.resetPasswordByAdmin(resetPasswordDto);
return CommonResult.success(result);
}
/**
* 重置密码管理员专用通过用户ID
*
* @param resetPwdDto 重置密码请求参数
* @param request HTTP请求
* @return 重置结果
*/
@PostMapping("/resetPwd")
@Operation(summary = "重置密码管理员专用通过用户ID", description = "重置密码管理员专用通过用户ID")
@RequireAuth
public CommonResult<Boolean> resetPwd(@RequestBody ResetPwdDto resetPwdDto, HttpServletRequest request) {
// 从请求头中获取token
String token = request.getHeader("Authorization");
if (token == null || token.isEmpty()) {
throw new BizException("请先登录认证后操作");
}
// 从缓存中获取当前登录用户
String username = CacheManager.getUsernameFromToken(token);
if (username == null) {
throw new BizException("无效的token请重新登录");
}
SysUser adminUser = sysUserService.getByUsername(username);
if (adminUser == null) {
throw new BizException("管理员不存在");
}
// 调用服务层方法重置密码
boolean result = sysUserService.resetPwd(resetPwdDto.getUserId(), resetPwdDto.getNewPassword(), username);
return CommonResult.success(result);
}
/**
* 重置密码(管理员专用,通过用户名或手机号)
*
* @param resetPasswordDto 重置密码请求参数
* @param request HTTP请求
* @return 重置结果
*/
@PostMapping("/resetPasswordByUsernameOrPhone")
@Operation(summary = "重置密码(管理员专用,通过用户名或手机号)", description = "重置密码(管理员专用,通过用户名或手机号,无需旧密码)")
@RequireAuth
public CommonResult<Boolean> resetPasswordByUsernameOrPhone(@RequestBody AdminResetPasswordDto resetPasswordDto, HttpServletRequest request) {
// 从请求头中获取token
String token = request.getHeader("Authorization");
if (token == null || token.isEmpty()) {
throw new BizException("请先登录认证后操作");
}
// 从缓存中获取当前登录用户
String username = CacheManager.getUsernameFromToken(token);
if (username == null) {
throw new BizException("无效的token请重新登录");
}
SysUser adminUser = sysUserService.getByUsername(username);
if (adminUser == null) {
throw new BizException("管理员不存在");
}
// 调用服务层方法重置密码
boolean result = sysUserService.resetPasswordByUsernameOrPhone(resetPasswordDto.getUsernameOrPhone(), resetPasswordDto.getNewPassword(), username);
return CommonResult.success(result);
}
/**
* 获取当前登录用户信息
*
* @param request HTTP请求
* @return 当前登录用户信息
*/
@GetMapping("/currentUser")
@Operation(summary = "获取当前登录用户信息", description = "获取当前登录用户信息")
@RequireAuth
public CommonResult<LoginUserDto> currentUser(HttpServletRequest request) {
// 从请求头中获取token
String token = request.getHeader("Authorization");
if (token == null || token.isEmpty()) {
throw new BizException("请先登录认证后操作");
}
// 使用Sa-Token检查token是否有效
try {
cn.dev33.satoken.stp.StpUtil.checkLogin();
} catch (Exception e) {
throw new BizException("无效的token请重新登录");
}
// 从Redis缓存中获取LoginUser对象
String loginUserJson = (String)redissonClient.getBucket("loginUser:" + token).get();
if (loginUserJson == null || loginUserJson.isEmpty()) {
throw new BizException("无效的token请重新登录");
}
// 解析JSON字符串为LoginUser对象
com.kexue.skills.entity.request.LoginUser loginUser = cn.hutool.json.JSONUtil.toBean(loginUserJson, com.kexue.skills.entity.request.LoginUser.class);
// 转换为LoginUserDto
LoginUserDto loginUserDto = new LoginUserDto();
loginUserDto.setToken(loginUser.getToken());
loginUserDto.setUserInfo(loginUser.getUserInfo());
loginUserDto.setFavorites(loginUser.getFavorites());
loginUserDto.setHistory(loginUser.getHistory());
loginUserDto.setCreate(loginUser.getCreate());
loginUserDto.setHas(loginUser.getHas());
return CommonResult.success(loginUserDto);
}
}