Browse Source

修改用户状态

master
Mac 2 months ago
parent
commit
a47a8d40db
  1. 42
      pom.xml
  2. 28
      src/main/java/com/water/watersys/components/GlobalExceptionHandler.java
  3. 167
      src/main/java/com/water/watersys/components/Result.java
  4. 27
      src/main/java/com/water/watersys/components/ResultCodeEnum.java
  5. 55
      src/main/java/com/water/watersys/controller/LoginController.java
  6. 58
      src/main/java/com/water/watersys/controller/UserController.java
  7. 14
      src/main/java/com/water/watersys/controller/textController.java
  8. 27
      src/main/java/com/water/watersys/mapper/UserSysMapper.java
  9. 110
      src/main/java/com/water/watersys/model/domain/UserSys.java
  10. 9
      src/main/java/com/water/watersys/model/dto/ChangePassword.java
  11. 9
      src/main/java/com/water/watersys/model/dto/LoginDto.java
  12. 16
      src/main/java/com/water/watersys/model/vo/UserOv.java
  13. 27
      src/main/java/com/water/watersys/service/UserSysService.java
  14. 85
      src/main/java/com/water/watersys/service/impl/UserSysServiceImpl.java
  15. 29
      src/main/java/com/water/watersys/utils/OpenApiConfig.java
  16. 27
      src/main/java/com/water/watersys/utils/SaTokenConfigure.java
  17. 34
      src/main/resources/application.yml
  18. 22
      src/main/resources/mapper/UserSysMapper.xml

42
pom.xml

@ -61,6 +61,48 @@
<version>3.0.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.6</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot3-starter</artifactId>
<version>1.37.0</version> <!-- 请使用最新版本 -->
</dependency>
<!-- 如果使用Redis集成,添加以下依赖 -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-redis</artifactId>
<version>1.37.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId>
<version>1.31.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.11</version>
</dependency>
</dependencies>
<build>

28
src/main/java/com/water/watersys/components/GlobalExceptionHandler.java

@ -0,0 +1,28 @@
package com.water.watersys.components;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 全局异常拦截鉴权失败不会报错会返回给前端报错原因
* @param e
* @return
*/
@ExceptionHandler
public SaResult handlerException(Exception e) {
e.printStackTrace();
return SaResult.error(e.getMessage());
}
@ExceptionHandler
public SaResult notLoginException(NotLoginException e){
System.out.println(e.getMessage());
e.printStackTrace();
return SaResult.error(e.getMessage());
}
}

167
src/main/java/com/water/watersys/components/Result.java

@ -0,0 +1,167 @@
package com.water.watersys.components;
import lombok.Getter;
@Getter
public class Result<T> {
private Integer code; // 状态码
private String msg; // 返回消息
private T data; // 返回数据
public Result() {
}
public Result(Integer code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
private static <T> Result<T> build(T data) {
Result<T> result = new Result<>();
if (data != null) {
result.data = data;
}
return result;
}
private static <T> Result<T> build(T data, Integer code, String msg) {
return new Result<>(code, msg, data);
}
private static <T> Result<T> build(T data, ResultCodeEnum resultCodeEnum) {
return new Result<>(resultCodeEnum.getCode(), resultCodeEnum.getMsg(), data);
}
/**
* 200 无参数成功
*/
public static <T> Result<T> success() {
return build(null, ResultCodeEnum.SUCCESS);
}
/**
* 200 有参数成功
*/
public static <T> Result<T> success(T data) {
return build(data, ResultCodeEnum.SUCCESS);
}
/**
* 201 无参创建资源成功
*/
public static <T> Result<T> createSuccess() {
return build(null, ResultCodeEnum.CREATE_SUCCESS);
}
/**
* 201 有参创建资源成功
*/
public static <T> Result<T> createSuccess(T data) {
return build(data, ResultCodeEnum.CREATE_SUCCESS);
}
/**
* 204 删除资源成功无参数
*/
public static <T> Result<T> removeSuccess() {
return build(null, ResultCodeEnum.REMOVE_SUCCESS);
}
/**
* 204 删除资源成功有参数
*/
public static <T> Result<T> removeSuccess(T data) {
return build(data, ResultCodeEnum.REMOVE_SUCCESS);
}
/**
* 400 失败无参数
*/
public static <T> Result<T> fail() {
return build(null, ResultCodeEnum.FAIL);
}
/**
* 400 失败有参数
*/
public static <T> Result<T> fail(T data) {
return build(data, ResultCodeEnum.FAIL);
}
/**
* 401 验证失败无参数
*/
public static <T> Result<T> verificationFail() {
return build(null, ResultCodeEnum.VERIFICATION_FAIL);
}
/**
* 401 验证失败有参数
*/
public static <T> Result<T> verificationFail(T data) {
return build(data, ResultCodeEnum.VERIFICATION_FAIL);
}
/**
* 402 创建资源失败无参
*/
public static <T> Result<T> createFail() {
return build(null, ResultCodeEnum.CREATE_FAIL);
}
public static <T> Result<T> deleteFail() {
return build(null, ResultCodeEnum.REMOVE_FAIL);
}
/**
* 402 创建资源失败有参数
*/
public static <T> Result<T> createFail(T data) {
return build(data, ResultCodeEnum.CREATE_FAIL);
}
/**
* 404 资源不存在
*/
public static <T> Result<T> notFoundFail() {
return build(null, ResultCodeEnum.NOT_FOUND);
}
/**
* 500 服务端错误
*/
public static <T> Result<T> error() {
return build(null, ResultCodeEnum.ERROR);
}
/**
* 500 服务端错误带参
*/
public static <T> Result<T> error(T data) {
return build(data, ResultCodeEnum.ERROR);
}
}

27
src/main/java/com/water/watersys/components/ResultCodeEnum.java

@ -0,0 +1,27 @@
package com.water.watersys.components;
import lombok.Getter;
@Getter
public enum ResultCodeEnum {
SUCCESS(200, "操作成功"),
CREATE_SUCCESS(201, "创建成功"),
REMOVE_SUCCESS(204, "删除成功"),
REMOVE_FAIL(403, "删除失败"),
FAIL(400, "操作失败"),
VERIFICATION_FAIL(401, "验证失败"),
CREATE_FAIL(402, "创建失败"),
NOT_FOUND(404, "资源不存在"),
ERROR(500, "服务器错误");
private final Integer code;
private final String msg;
ResultCodeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
}

55
src/main/java/com/water/watersys/controller/LoginController.java

@ -0,0 +1,55 @@
package com.water.watersys.controller;
import cn.dev33.satoken.stp.StpUtil;
import com.water.watersys.components.Result;
import com.water.watersys.model.domain.UserSys;
import com.water.watersys.model.dto.LoginDto;
import com.water.watersys.service.UserSysService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
@RestController
@CrossOrigin
@Tag(name = "登录注册", description = "用户登录注册")
public class LoginController {
@Resource
private UserSysService userSysService;
@Operation(summary = "登录", description = "登录")
@PostMapping("/login")
public Result<String> login(@RequestBody LoginDto loginDto) {
Integer id = userSysService.login(loginDto);
if (id != 0) {
StpUtil.login(id);
return Result.success(StpUtil.getTokenValue());
}else {
return Result.verificationFail();
}
}
@Operation(summary = "退出登录", description = "退出登录")
@PostMapping("/logout")
public Result logout(){
StpUtil.logout(StpUtil.getLoginId());
return Result.success(StpUtil.getTokenValue());
}
@Operation(summary = "注册", description = "注册")
@PostMapping("/register")
public Result register(@RequestBody UserSys userSys) {
int index = userSysService.register(userSys);
if (index > 0) {
return Result.success(index);
}else {
return Result.createFail();
}
}
}

58
src/main/java/com/water/watersys/controller/UserController.java

@ -0,0 +1,58 @@
package com.water.watersys.controller;
import cn.dev33.satoken.stp.StpUtil;
import com.water.watersys.components.Result;
import com.water.watersys.model.dto.ChangePassword;
import com.water.watersys.model.vo.UserOv;
import com.water.watersys.service.UserSysService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
@RestController
@CrossOrigin
@Tag(name = "用户", description = "用户")
public class UserController {
@Resource
private UserSysService userSysService;
@Operation(summary = "获取用户信息", description = "获取用户信息")
@GetMapping("/user")
public Result<UserOv> user() {
Object loginId = StpUtil.getLoginId();
UserOv userOv = userSysService.getUser((String) loginId);
if (userOv != null) {
return Result.success(userOv);
}else {
return Result.notFoundFail();
}
}
@Operation(summary = "修改用户密码", description = "修改用户密码")
@PutMapping("/changePassword")
public Result<String> changePassword(@RequestBody ChangePassword changePassword) {
String loginId = (String) StpUtil.getLoginId();
Integer id = userSysService.changePassword(changePassword,loginId);
if (id != 0) {
return Result.success();
}else {
return Result.createFail("密码验证失败");
}
}
@Operation(summary = "修改用户状态", description = "修改用户状态")
@PutMapping("/changeUserStatus")
public Result<String> changeUserStatus(Integer status) {
String loginId = (String) StpUtil.getLoginId();
Integer id = userSysService.changeUserStatus(status,loginId);
if (id != 0) {
return Result.success();
}else {
return Result.createFail();
}
}
}

14
src/main/java/com/water/watersys/controller/textController.java

@ -1,14 +0,0 @@
package com.water.watersys.controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@CrossOrigin
public class textController {
@GetMapping("/index")
public String index() {
return "Hello World";
}
}

27
src/main/java/com/water/watersys/mapper/UserSysMapper.java

@ -0,0 +1,27 @@
package com.water.watersys.mapper;
import com.water.watersys.model.domain.UserSys;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.water.watersys.model.vo.UserOv;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
/**
* @author mac
* @description 针对表user_sys的数据库操作Mapper
* @createDate 2025-04-05 23:50:03
* @Entity generator.domain.UserSys
*/
@Mapper
public interface UserSysMapper extends BaseMapper<UserSys> {
@Select("select * from user_sys where id = #{loginId}")
UserOv getUser(String loginId);
@Update("UPDATE user_sys SET password = #{newPassword} WHERE id = #{id}")
Integer changePassword(Integer id, String newPassword);
}

110
src/main/java/com/water/watersys/model/domain/UserSys.java

@ -0,0 +1,110 @@
package com.water.watersys.model.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
/**
*
* @TableName user_sys
*/
@Data
public class UserSys {
/**
*
*/
@TableId(value="id",type = IdType.AUTO )
private Integer id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 手机号
*/
private String phone;
/**
* 地址
*/
private String address;
/**
* 状态 0禁止 1启用
*/
private Integer status;
/**
* 创建时间
*/
private Date createdTime;
/**
* 修改时间
*/
private Date updatedTime;
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
UserSys other = (UserSys) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getUsername() == null ? other.getUsername() == null : this.getUsername().equals(other.getUsername()))
&& (this.getPassword() == null ? other.getPassword() == null : this.getPassword().equals(other.getPassword()))
&& (this.getPhone() == null ? other.getPhone() == null : this.getPhone().equals(other.getPhone()))
&& (this.getAddress() == null ? other.getAddress() == null : this.getAddress().equals(other.getAddress()))
&& (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
&& (this.getCreatedTime() == null ? other.getCreatedTime() == null : this.getCreatedTime().equals(other.getCreatedTime()))
&& (this.getUpdatedTime() == null ? other.getUpdatedTime() == null : this.getUpdatedTime().equals(other.getUpdatedTime()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getUsername() == null) ? 0 : getUsername().hashCode());
result = prime * result + ((getPassword() == null) ? 0 : getPassword().hashCode());
result = prime * result + ((getPhone() == null) ? 0 : getPhone().hashCode());
result = prime * result + ((getAddress() == null) ? 0 : getAddress().hashCode());
result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
result = prime * result + ((getCreatedTime() == null) ? 0 : getCreatedTime().hashCode());
result = prime * result + ((getUpdatedTime() == null) ? 0 : getUpdatedTime().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", username=").append(username);
sb.append(", password=").append(password);
sb.append(", phone=").append(phone);
sb.append(", address=").append(address);
sb.append(", status=").append(status);
sb.append(", createdTime=").append(createdTime);
sb.append(", updatedTime=").append(updatedTime);
sb.append("]");
return sb.toString();
}
}

9
src/main/java/com/water/watersys/model/dto/ChangePassword.java

@ -0,0 +1,9 @@
package com.water.watersys.model.dto;
import lombok.Data;
@Data
public class ChangePassword {
private String oldPassword;
private String newPassword;
}

9
src/main/java/com/water/watersys/model/dto/LoginDto.java

@ -0,0 +1,9 @@
package com.water.watersys.model.dto;
import lombok.Data;
@Data
public class LoginDto {
private String username;
private String password;
}

16
src/main/java/com/water/watersys/model/vo/UserOv.java

@ -0,0 +1,16 @@
package com.water.watersys.model.vo;
import lombok.Data;
import java.util.Date;
@Data
public class UserOv {
private Integer id;
private String username;
private String phone;
private String address;
private Integer status;
private Date createdTime;
private Date updatedTime;
}

27
src/main/java/com/water/watersys/service/UserSysService.java

@ -0,0 +1,27 @@
package com.water.watersys.service;
import com.water.watersys.model.domain.UserSys;
import com.baomidou.mybatisplus.extension.service.IService;
import com.water.watersys.model.dto.ChangePassword;
import com.water.watersys.model.dto.LoginDto;
import com.water.watersys.model.vo.UserOv;
import org.springframework.stereotype.Service;
/**
* @author mac
* @description 针对表user_sys的数据库操作Service
* @createDate 2025-04-05 23:50:03
*/
@Service
public interface UserSysService extends IService<UserSys> {
int register(UserSys userSys);
Integer login(LoginDto loginDto);
UserOv getUser(String loginId);
Integer changePassword(ChangePassword changePassword, String loginId);
Integer changeUserStatus(Integer status, String loginId);
}

85
src/main/java/com/water/watersys/service/impl/UserSysServiceImpl.java

@ -0,0 +1,85 @@
package com.water.watersys.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.water.watersys.model.domain.UserSys;
import com.water.watersys.mapper.UserSysMapper;
import com.water.watersys.model.dto.ChangePassword;
import com.water.watersys.model.dto.LoginDto;
import com.water.watersys.model.vo.UserOv;
import com.water.watersys.service.UserSysService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.util.Objects;
/**
* @author mac
* @description 针对表user_sys的数据库操作Service实现
* @createDate 2025-04-05 23:50:03
*/
@Service
public class UserSysServiceImpl extends ServiceImpl<UserSysMapper, UserSys>
implements UserSysService {
@Resource
private UserSysMapper userSysMapper;
@Override
public int register(UserSys userSys) {
String password = DigestUtils.md5DigestAsHex(userSys.getPassword().getBytes());
userSys.setPassword(password);
return userSysMapper.insert(userSys);
}
@Override
public Integer login(LoginDto loginDto) {
QueryWrapper<UserSys> userSysQueryWrapper = new QueryWrapper<>();
String password = DigestUtils.md5DigestAsHex(loginDto.getPassword().getBytes());
userSysQueryWrapper.eq("password", password);
userSysQueryWrapper.eq("username", loginDto.getUsername());
UserSys userSys = userSysMapper.selectOne(userSysQueryWrapper);
if (userSys == null) {
return 0;
}else if (userSys.getStatus() == 0){
return 0;
}else {
return userSys.getId();
}
}
@Override
public UserOv getUser(String loginId) {
return userSysMapper.getUser(loginId);
}
@Override
public Integer changePassword(ChangePassword changePassword, String loginId) {
UserSys userSys = userSysMapper.selectById(loginId);
String password = userSys.getPassword();
if (Objects.equals(password, DigestUtils.md5DigestAsHex(changePassword.getOldPassword().getBytes()))) {
String newPassword = changePassword.getNewPassword();
changePassword.setNewPassword(DigestUtils.md5DigestAsHex(newPassword.getBytes()));
return userSysMapper.changePassword(userSys.getId(),changePassword.getNewPassword());
}else {
return 0;
}
}
@Override
public Integer changeUserStatus(Integer status, String loginId) {
LambdaUpdateWrapper<UserSys> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper
.eq(UserSys::getId, loginId) // 条件:id = loginId
.set(UserSys::getStatus, status); // 设置新的 status 值
return userSysMapper.update(null, lambdaUpdateWrapper);
}
}

29
src/main/java/com/water/watersys/utils/OpenApiConfig.java

@ -0,0 +1,29 @@
package com.water.watersys.utils;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OpenApiConfig {
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.addServersItem(new Server().url("http://localhost:8080").description("Local Development Server"))
.info(new Info()
.title("API文档")
.version("1.0")
.description("Spring Boot 3.4.4 应用API文档")
.contact(new Contact()
.name("开发者")
.email("319906174@qq.com"))
.license(new License()
.name("Apache 2.0")
.url("http://localhost:8080")));
}
}

27
src/main/java/com/water/watersys/utils/SaTokenConfigure.java

@ -0,0 +1,27 @@
package com.water.watersys.utils;
import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {
// 注册 Sa-Token 拦截器,打开注解式鉴权功能
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册 Sa-Token 拦截器,校验规则为 StpUtil.checkLogin() 登录校验。
registry.addInterceptor(new SaInterceptor(handler -> StpUtil.checkLogin()))
.addPathPatterns("/**")
.excludePathPatterns(
"/login/**",
"/swagger-ui/**",
"/swagger-resources/**",
"/v2/api-docs",
"/v3/api-docs/**",
"/webjars/**",
"/doc.html" // 如果是Knife4j
);
}
}

34
src/main/resources/application.yml

@ -3,6 +3,36 @@ server:
spring:
datasource:
url: jdbc:mysql://124.70.102.7:3306
username: lifei
url: jdbc:mysql://124.70.102.7:3306/water_sys
username: root
password: li319906174.
data:
redis:
port: 6379
host: 124.70.102.7
database: 0
sa-token:
# token?? (????cookie??)
token-name: satoken
# token??????s ??30?
timeout: 2592000
# token????? (???????????token??) ??: ?
# ???????????? (?true???????, ?false?????????)
is-concurrent: true
# ?????????????????token (?true?????????token, ?false?????????token)
is-share: true
# token??
token-style: uuid
# ????????
is-log: true
springdoc:
api-docs:
path: /v3/api-docs # ??????
swagger-ui:
path: /swagger-ui.html
url: /v3/api-docs # ????????

22
src/main/resources/mapper/UserSysMapper.xml

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.water.watersys.mapper.UserSysMapper">
<resultMap id="BaseResultMap" type="com.water.watersys.model.domain.UserSys">
<id property="id" column="id" />
<result property="username" column="username" />
<result property="password" column="password" />
<result property="phone" column="phone" />
<result property="address" column="address" />
<result property="status" column="status" />
<result property="createdTime" column="created_time" />
<result property="updatedTime" column="updated_time" />
</resultMap>
<sql id="Base_Column_List">
id,username,password,phone,address,status,
created_time,updated_time
</sql>
</mapper>
Loading…
Cancel
Save