153 lines
4.7 KiB
Java
153 lines
4.7 KiB
Java
package com.emotion.controller;
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.emotion.common.BasePageRequest;
|
|
import com.emotion.common.PageResult;
|
|
import com.emotion.common.Result;
|
|
import com.emotion.dto.request.UserCreateRequest;
|
|
import com.emotion.dto.request.UserUpdateRequest;
|
|
import com.emotion.dto.response.UserResponse;
|
|
import com.emotion.entity.User;
|
|
import com.emotion.service.UserService;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.validation.annotation.Validated;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import javax.validation.Valid;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* 用户控制器
|
|
*
|
|
* @author emotion-museum
|
|
* @date 2025-07-22
|
|
*/
|
|
@RestController
|
|
@RequestMapping("/user")
|
|
public class UserController {
|
|
|
|
@Autowired
|
|
private UserService userService;
|
|
|
|
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
/**
|
|
* 分页查询用户
|
|
*/
|
|
@GetMapping("/page")
|
|
public Result<PageResult<UserResponse>> getPage(@Validated BasePageRequest request) {
|
|
IPage<User> page = userService.getPage(request);
|
|
List<UserResponse> userResponses = page.getRecords().stream()
|
|
.map(this::convertToResponse)
|
|
.collect(Collectors.toList());
|
|
|
|
PageResult<UserResponse> pageResult = new PageResult<>();
|
|
pageResult.setCurrent(page.getCurrent());
|
|
pageResult.setSize(page.getSize());
|
|
pageResult.setTotal(page.getTotal());
|
|
pageResult.setPages(page.getPages());
|
|
pageResult.setRecords(userResponses);
|
|
|
|
return Result.success(pageResult);
|
|
}
|
|
|
|
/**
|
|
* 根据ID获取用户信息
|
|
*/
|
|
@GetMapping("/{id}")
|
|
public Result<UserResponse> getById(@PathVariable String id) {
|
|
User user = userService.getById(id);
|
|
if (user == null) {
|
|
return Result.notFound("用户不存在");
|
|
}
|
|
return Result.success(convertToResponse(user));
|
|
}
|
|
|
|
/**
|
|
* 创建用户
|
|
*/
|
|
@PostMapping
|
|
public Result<UserResponse> create(@Valid @RequestBody UserCreateRequest request) {
|
|
User user = userService.createUser(
|
|
request.getAccount(),
|
|
request.getUsername(),
|
|
request.getPassword(),
|
|
request.getEmail(),
|
|
request.getPhone()
|
|
);
|
|
return Result.success(convertToResponse(user));
|
|
}
|
|
|
|
/**
|
|
* 更新用户
|
|
*/
|
|
@PutMapping("/{id}")
|
|
public Result<UserResponse> update(@PathVariable String id, @Valid @RequestBody UserUpdateRequest request) {
|
|
User user = new User();
|
|
BeanUtils.copyProperties(request, user);
|
|
user.setId(id);
|
|
|
|
boolean updated = userService.updateById(user);
|
|
if (!updated) {
|
|
return Result.error("更新失败");
|
|
}
|
|
|
|
User updatedUser = userService.getById(id);
|
|
return Result.success(convertToResponse(updatedUser));
|
|
}
|
|
|
|
/**
|
|
* 删除用户
|
|
*/
|
|
@DeleteMapping("/{id}")
|
|
public Result<Void> delete(@PathVariable String id) {
|
|
boolean deleted = userService.removeById(id);
|
|
if (!deleted) {
|
|
return Result.error("删除失败");
|
|
}
|
|
return Result.success();
|
|
}
|
|
|
|
/**
|
|
* 根据账号查询用户
|
|
*/
|
|
@GetMapping("/account/{account}")
|
|
public Result<UserResponse> getByAccount(@PathVariable String account) {
|
|
User user = userService.getByAccount(account);
|
|
if (user == null) {
|
|
return Result.notFound("用户不存在");
|
|
}
|
|
return Result.success(convertToResponse(user));
|
|
}
|
|
|
|
/**
|
|
* 统计用户数量
|
|
*/
|
|
@GetMapping("/count/status/{status}")
|
|
public Result<Long> countByStatus(@PathVariable Integer status) {
|
|
Long count = userService.countByStatus(status);
|
|
return Result.success(count);
|
|
}
|
|
|
|
/**
|
|
* 转换为响应对象
|
|
*/
|
|
private UserResponse convertToResponse(User user) {
|
|
UserResponse response = new UserResponse();
|
|
BeanUtils.copyProperties(user, response);
|
|
response.setId(user.getId());
|
|
if (user.getCreateTime() != null) {
|
|
response.setCreateTime(user.getCreateTime().format(DATE_TIME_FORMATTER));
|
|
}
|
|
if (user.getUpdateTime() != null) {
|
|
response.setUpdateTime(user.getUpdateTime().format(DATE_TIME_FORMATTER));
|
|
}
|
|
if (user.getLastActiveTime() != null) {
|
|
response.setLastActiveTime(user.getLastActiveTime().format(DATE_TIME_FORMATTER));
|
|
}
|
|
return response;
|
|
}
|
|
} |