feat:增加密码管理接口

This commit is contained in:
2025-06-12 14:02:17 +08:00
parent 7ca52c0537
commit d119e7aee8
30 changed files with 335 additions and 32 deletions

View File

@@ -3,7 +3,7 @@ package com.cxx.admin.controller;
import com.cxx.admin.service.AccountService;
import com.cxx.common.ReadView;
import com.cxx.common.WriteView;
import com.cxx.admin.dto.user.AccountDto;
import com.cxx.common.dto.AccountDto;
import com.fasterxml.jackson.annotation.JsonView;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;

View File

@@ -1,7 +1,7 @@
package com.cxx.admin.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.cxx.common.dto.user.SessionDto;
import com.cxx.common.dto.SessionDto;
import com.cxx.admin.service.SessionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;

View File

@@ -1,33 +0,0 @@
package com.cxx.admin.controller;
import com.cxx.admin.service.UserService;
import com.cxx.common.ReadView;
import com.cxx.common.WriteView;
import com.cxx.common.dto.user.UserDto;
import com.fasterxml.jackson.annotation.JsonView;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
@Tag(name = "用户管理")
public class UserController {
@Resource
private UserService userService;
@Operation(summary = "查询用户")
@GetMapping("/{id}")
public @JsonView(ReadView.class) UserDto queryUser(@PathVariable("id") Long id) {
return userService.queryUser(id);
}
@Operation(summary = "更新用户")
@PutMapping("/{id}")
public Boolean updateUser(@PathVariable("id") Long id,
@JsonView(WriteView.class) @Validated @RequestBody UserDto userDto) {
return userService.updateUser(id, userDto);
}
}

View File

@@ -1,6 +1,6 @@
package com.cxx.admin.dao;
import com.cxx.admin.dto.user.AccountDto;
import com.cxx.common.dto.AccountDto;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

View File

@@ -1,42 +0,0 @@
package com.cxx.admin.dto.user;
import com.cxx.common.PlainView;
import com.cxx.common.ReadView;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonView;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
@JsonView(PlainView.class)
public class AccountDto {
@Schema(description = "id")
@JsonView(ReadView.class)
private Long id;
@Schema(description = "账户名称")
@NotBlank(message = "账户名称不能为空")
private String accountName;
@Schema(description = "密码")
@NotBlank(message = "密码不能为空")
private String password;
@Schema(description = "用户名称")
@NotBlank(message = "用户名称不能为空")
private String username;
@Schema(description = "账户状态")
@JsonView(ReadView.class)
private Integer state;
@Schema(description = "创建日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@JsonView(ReadView.class)
private Date date;
}

View File

@@ -1,36 +0,0 @@
package com.cxx.admin.dto.user;
import com.cxx.common.PlainView;
import com.cxx.common.ReadView;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonView;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
@JsonView(PlainView.class)
public class UserSummaryDto {
@Schema(description = "id")
@JsonView(ReadView.class)
private Long id;
@Schema(description = "id")
@JsonView(ReadView.class)
private String accountName;
@Schema(description = "用户名称")
@NotBlank(message = "用户名称不能为空")
private String username;
@Schema(description = "账户状态")
private Integer state;
@Schema(description = "创建日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDateTime date;
}

View File

@@ -1,7 +1,7 @@
package com.cxx.admin.service;
import com.cxx.admin.dto.user.AccountDto;
import com.cxx.common.dto.AccountDto;
import com.cxx.common.entity.Account;
import java.util.List;

View File

@@ -1,6 +1,6 @@
package com.cxx.admin.service;
import com.cxx.common.dto.user.SessionDto;
import com.cxx.common.dto.SessionDto;
public interface SessionService {
SessionDto create(String name, String password);

View File

@@ -1,10 +0,0 @@
package com.cxx.admin.service;
import com.cxx.common.dto.user.UserDto;
public interface UserService {
UserDto queryUser(Long id);
Boolean updateUser(Long id, UserDto userDto);
}

View File

@@ -3,9 +3,9 @@ package com.cxx.admin.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cxx.admin.dao.AccountDao;
import com.cxx.admin.service.AccountService;
import com.cxx.admin.dto.user.AccountDto;
import com.cxx.admin.dao.AccountDao;
import com.cxx.common.dto.AccountDto;
import com.cxx.common.entity.Account;
import com.cxx.common.entity.User;
import com.cxx.common.mapper.AccountMapper;

View File

@@ -5,9 +5,9 @@ import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cxx.common.dto.user.SessionDto;
import com.cxx.admin.service.SessionService;
import com.cxx.common.dto.user.UserDto;
import com.cxx.common.dto.SessionDto;
import com.cxx.common.dto.UserDto;
import com.cxx.common.entity.Account;
import com.cxx.common.entity.User;
import com.cxx.common.mapper.AccountMapper;

View File

@@ -1,53 +0,0 @@
package com.cxx.admin.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cxx.admin.service.AccountService;
import com.cxx.admin.service.UserService;
import com.cxx.common.dto.user.UserDto;
import com.cxx.common.entity.User;
import com.cxx.common.mapper.UserMapper;
import com.cxx.framework.web.CustomException;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Resource
private AccountService accountService;
@Override
public UserDto queryUser(Long id) {
User user = userMapper.selectById(id);
if (user == null) {
throw new CustomException("未查询到该用户");
}
UserDto userDto = new UserDto();
BeanUtils.copyProperties(user, userDto);
userDto.setAccountName(accountService.queryAccountByUserId(id).getAccountName());
return userDto;
}
@Override
public Boolean updateUser(Long id, UserDto userDto) {
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
if (!userMapper.exists(queryWrapper.eq(User::getId, id))) {
throw new CustomException("该用户不存在");
}
queryWrapper.clear();
if (userMapper.exists(queryWrapper.eq(User::getUsername, userDto.getUsername()).ne(User::getId, id))) {
throw new CustomException("该用户已经存在");
}
User user = new User();
BeanUtils.copyProperties(userDto, user);
user.setId(id);
return userMapper.updateById(user) == 1;
}
}

View File

@@ -6,7 +6,7 @@ spring:
name: @project.artifactId@
version: @project.version@
profiles:
active: dev
active: prod
servlet:
multipart:
max-file-size: 10MB

View File

@@ -1,7 +1,7 @@
<?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.cxx.admin.dao.AccountDao">
<select id="queryAccount" resultType="com.cxx.admin.dto.user.AccountDto">
<select id="queryAccount" resultType="com.cxx.common.dto.AccountDto">
SELECT b.id AS id,
b.account_name AS accountName,
a.username AS username,