From ea9b12465c90fc72c40f3bd87c90785dfc2984e2 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期三, 30 四月 2025 14:57:23 +0800
Subject: [PATCH] 基础代码

---
 src/main/java/com/cl/controller/UserController.java |  219 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 219 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/cl/controller/UserController.java b/src/main/java/com/cl/controller/UserController.java
new file mode 100644
index 0000000..5633681
--- /dev/null
+++ b/src/main/java/com/cl/controller/UserController.java
@@ -0,0 +1,219 @@
+package com.cl.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cl.common.constant.DelFlagConstant;
+import com.cl.common.constant.StatusConstant;
+import com.cl.common.context.BaseContext;
+import com.cl.common.exception.user.LoginErrorException;
+import com.cl.common.exception.user.UserException;
+import com.cl.common.result.Result;
+import com.cl.pojo.dto.AddUserDTO;
+import com.cl.pojo.dto.EditUserDTO;
+import com.cl.pojo.dto.LoginDTO;
+import com.cl.pojo.dto.PasswordDTO;
+import com.cl.pojo.entity.User;
+
+import com.cl.pojo.vo.UserVO;
+import com.cl.service.UserService;
+import com.cl.service.impl.TokenBlacklistService;
+import com.cl.util.BCryptPasswordEncoder;
+import com.cl.util.JwtUtil;
+import com.cl.util.LoginAttemptService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+@RestController
+@RequestMapping("/user")
+@Slf4j
+@Api(tags = "用户")
+public class UserController {
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private LoginAttemptService loginAttemptService;
+
+    @Autowired
+    private TokenBlacklistService blacklistService;
+
+
+    /**
+     * 登录
+     */
+    @PostMapping("/login")
+    @ApiOperation("用户登录")
+    public Result<Map<String,String>> login(@RequestBody @Valid LoginDTO dto) {
+        //校验该手机号登录失败是否锁定
+        boolean locked = loginAttemptService.isLocked(dto.getPhone());
+        if (locked) {
+            throw new LoginErrorException("连续登录失败,请稍后再试");
+        }
+        //校验手机号是否存在
+        User user = userService.getOne(new LambdaQueryWrapper<User>()
+                .eq(User::getPhone, dto.getPhone())
+                .eq(User::getDelFlag, DelFlagConstant.UNDELETE));
+
+        if (user == null) {
+            throw new LoginErrorException("用户不存在");
+        }
+
+        if (!Objects.equals(user.getStatus(), StatusConstant.ENABLE)){
+            throw new LoginErrorException("该账号已被冻结");
+        }
+        //校验密码是否正确
+        if (!BCryptPasswordEncoder.matches(dto.getPassword(), user.getPassword())) {
+            //失败
+            //将手机号加入线程中记录
+            loginAttemptService.recordFailedAttempt(dto.getPhone());
+            throw new LoginErrorException("登录失败,手机号/密码错误");
+        }
+        //成功
+        loginAttemptService.clearAttempts(dto.getPhone());
+        //token加密
+        Map<String, Object> claims=new HashMap<>();
+        claims.put("phone", dto.getPhone());
+        claims.put("id", user.getId());
+        String token = JwtUtil.createJWT(claims);
+        Map<String,String> map=new HashMap<>();
+        map.put("token", token);
+        map.put("is_first",user.getIsFirst().toString());
+        if (1==user.getIsFirst()){
+            User user1 = new User();
+            user1.setId(user.getId());
+            user1.setIsFirst(0);
+            userService.updateById(user1);
+        }
+        return Result.success(map);
+    }
+    /**
+     * 退出登录
+     */
+    @PostMapping("/logout")
+    @ApiOperation("退出登录")
+    public Result<String> logout(@RequestHeader("Authorization") String token) {
+        // 1. 将令牌加入黑名单
+        blacklistService.addToBlacklist(token);
+        return Result.success("退出成功");
+    }
+    /**
+     * 修改密码
+     */
+    @PutMapping("/password")
+    @ApiOperation("修改密码")
+    public Result<String> password(@RequestBody @Valid PasswordDTO passwordDTO,
+                                   @RequestHeader("Authorization") String token) {
+        userService.password(passwordDTO,token);
+        return Result.success("修改成功");
+    }
+    /**
+     * 添加
+     */
+    @PostMapping("/addUser")
+    @ApiOperation("添加用户")
+    public Result<String> addUser(@RequestBody @Valid AddUserDTO addUserDTO) {
+        userService.addUser(addUserDTO);
+        return Result.success("添加成功");
+    }
+
+    /**
+     * 用户列表查询
+     */
+    @GetMapping("/pageList")
+    @ApiOperation("用户分页查询")
+    public Result<IPage<UserVO>>  selectPageUser(@RequestParam(value = "pageNum",defaultValue = "1")Integer pageNum,
+                                                 @RequestParam(value = "pageSize",defaultValue = "10")Integer pageSize,
+                                                 @RequestParam(value = "name",required = false)String name,
+                                                 @RequestParam(value = "phone",required = false)String phone){
+        IPage<User> page = new Page<>(pageNum, pageSize);
+        IPage<UserVO> iPage=userService.pageList(page,name,phone);
+        return Result.success(iPage);
+    }
+    /**
+     * 用户回显
+     */
+    @GetMapping("/read/{id}")
+    @ApiOperation("查看用户(编辑回显)")
+    public Result<UserVO> read(@PathVariable("id")Integer id){
+        if (id==1){
+            throw new UserException("管理员账号,不可操作");
+        }
+        User user = userService.getById(id);
+        UserVO userVO=new UserVO();
+        BeanUtils.copyProperties(user,userVO);
+        return Result.success(userVO);
+    }
+    /**
+     * 编辑用户
+     */
+    @PutMapping("/editUser")
+    @ApiOperation("编辑用户")
+    public Result<String> editUser(@RequestBody @Valid EditUserDTO editUserDTO) {
+        if (editUserDTO.getId()==1){
+            throw new UserException("管理员账号,不可操作");
+        }
+        userService.editUser(editUserDTO);
+        return Result.success("修改成功");
+    }
+    /**
+     * 冻结/解冻
+     */
+    @PutMapping("/frozen/{id}")
+    @ApiOperation("冻结/解冻")
+    public Result<String> frozen(@PathVariable("id") Integer id) {
+        if (id==1){
+            throw new UserException("管理员账号,不可操作");
+        }
+        userService.frozen(id);
+        return Result.success("修改成功");
+    }
+
+    /**
+     * 删除
+     */
+    @DeleteMapping("/delete/{id}")
+    @ApiOperation("删除用户")
+    public Result<String> deleteUser(@PathVariable("id")Integer id){
+        if (id==1){
+            throw new UserException("管理员账号,不可操作");
+        }
+        LambdaQueryWrapper<User> queryWrapper=new LambdaQueryWrapper<>();
+        queryWrapper.eq(User::getId,id);
+        queryWrapper.eq(User::getDelFlag,DelFlagConstant.UNDELETE);
+        User user = userService.getOne(queryWrapper);
+        if (null==user){
+            throw new UserException("用户不存在");
+        }
+        user.setDelFlag(DelFlagConstant.DELETE);
+        user.setUpdateBy(BaseContext.getCurrentUser().getId());
+        user.setUpdateTime(LocalDateTime.now());
+        userService.updateById(user);
+        return Result.success("删除成功");
+    }
+    /**
+     * 重置密码
+     */
+    @PutMapping("/resetPassword/{id}")
+    @ApiOperation("重置密码")
+    public Result<String> resetPassword(@PathVariable("id")Integer id){
+        if (id==1){
+            throw new UserException("管理员账号,不可操作");
+        }
+        userService.resetPassword(id);
+        return Result.success("删除成功");
+    }
+
+}

--
Gitblit v1.7.1