package com.controller; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import com.annotation.IgnoreAuth; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.entity.TokenEntity; import com.entity.UsersEntity; import com.service.TokenService; import com.service.UsersService; import com.utils.CommonUtil; import com.utils.MPUtil; import com.utils.PageUtils; import com.utils.R; import com.utils.ValidatorUtils; /** * 登录相关 */ @RequestMapping("users") // 定义请求路径的基础 URL 为 "users" @RestController // 标明该类是一个控制器,返回的对象直接作为 JSON 响应 public class UsersController { @Autowired // 自动注入 UsersService 依赖 private UsersService userService; @Autowired // 自动注入 TokenService 依赖 private TokenService tokenService; /** * 登录 */ @IgnoreAuth // 忽略认证,允许未登录用户访问 @PostMapping(value = "/login") // 处理 POST 请求,路径为 "users/login" public R login(String username, String password, String captcha, HttpServletRequest request) { // 根据用户名查询用户 UsersEntity user = userService.selectOne(new EntityWrapper().eq("username", username)); // 检查用户是否存在且密码是否匹配 if(user == null || !user.getPassword().equals(password)) { return R.error("账号或密码不正确"); // 返回错误信息 } // 生成用户的 token String token = tokenService.generateToken(user.getId(), username, "users", user.getRole()); return R.ok().put("token", token); // 返回成功信息和 token } /** * 注册 */ @IgnoreAuth // 忽略认证,允许未登录用户访问 @PostMapping(value = "/register") // 处理 POST 请求,路径为 "users/register" public R register(@RequestBody UsersEntity user) { // 校验用户是否已存在 if(userService.selectOne(new EntityWrapper().eq("username", user.getUsername())) != null) { return R.error("用户已存在"); // 返回用户已存在的错误信息 } userService.insert(user); // 插入新用户 return R.ok(); // 返回成功信息 } /** * 退出 */ @GetMapping(value = "logout") // 处理 GET 请求,路径为 "users/logout" public R logout(HttpServletRequest request) { request.getSession().invalidate(); // 使 session 失效,用户登出 return R.ok("退出成功"); // 返回成功信息 } /** * 密码重置 */ @IgnoreAuth // 忽略认证,允许未登录用户访问 @RequestMapping(value = "/resetPass") // 处理请求,路径为 "users/resetPass" public R resetPass(String username, HttpServletRequest request){ // 根据用户名查询用户 UsersEntity user = userService.selectOne(new EntityWrapper().eq("username", username)); if(user == null) { return R.error("账号不存在"); // 返回账号不存在的错误信息 } user.setPassword("123456"); // 将用户密码重置为 "123456" userService.update(user, null); // 更新用户信息 return R.ok("密码已重置为:123456"); // 返回成功信息 } /** * 列表 */ @RequestMapping("/page") // 处理请求,路径为 "users/page" public R page(@RequestParam Map params, UsersEntity user) { EntityWrapper ew = new EntityWrapper(); // 创建查询条件 // 调用服务层方法查询分页数据 PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params)); return R.ok().put("data", page); // 返回查询结果 } /** * 列表 */ @RequestMapping("/list") // 处理请求,路径为 "users/list" public R list(UsersEntity user) { EntityWrapper ew = new EntityWrapper(); // 创建查询条件 ew.allEq(MPUtil.allEQMapPre(user, "user")); // 添加所有相等条件 return R.ok().put("data", userService.selectListView(ew)); // 返回查询结果 } /** * 信息 */ @RequestMapping("/info/{id}") // 处理请求,路径为 "users/info/{id}" public R info(@PathVariable("id") String id) { UsersEntity user = userService.selectById(id); // 根据 ID 查找用户 return R.ok().put("data", user); // 返回用户信息 } /** * 获取用户的 session 用户信息 */ @RequestMapping("/session") // 处理请求,路径为 "users/session" public R getCurrUser(HttpServletRequest request) { Long id = (Long) request.getSession().getAttribute("userId"); // 从 session 中获取用户 ID UsersEntity user = userService.selectById(id); // 根据 ID 查找用户 return R.ok().put("data", user); // 返回用户信息 } /** * 保存 */ @PostMapping("/save") // 处理 POST 请求,路径为 "users/save" public R save(@RequestBody UsersEntity user) { // 校验用户是否已存在 if(userService.selectOne(new EntityWrapper().eq("username", user.getUsername())) != null) { return R.error("用户已存在"); // 返回用户已存在的错误信息 } userService.insert(user); // 插入新用户 return R.ok(); // 返回成功信息 } /** * 修改 */ @RequestMapping("/update") // 处理请求,路径为 "users/update" public R update(@RequestBody UsersEntity user) { // 校验用户是否已存在 UsersEntity u = userService.selectOne(new EntityWrapper().eq("username", user.getUsername())); if(u != null && u.getId() != user.getId() && u.getUsername().equals(user.getUsername())) { return R.error("用户名已存在。"); // 返回用户名已存在的错误信息 } userService.updateById(user); // 更新用户信息 return R.ok(); // 返回成功信息 } /** * 删除 */ @RequestMapping("/delete") // 处理请求,路径为 "users/delete" public R delete(@RequestBody Long[] ids) { userService.deleteBatchIds(Arrays.asList(ids)); // 批量删除用户 return R.ok(); // 返回成功信息 } }