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> getPage(@Validated BasePageRequest request) { IPage page = userService.getPage(request); List userResponses = page.getRecords().stream() .map(this::convertToResponse) .collect(Collectors.toList()); PageResult 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 getById(@PathVariable String id) { User user = userService.getById(id); if (user == null) { return Result.notFound("用户不存在"); } return Result.success(convertToResponse(user)); } /** * 创建用户 */ @PostMapping public Result 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 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 delete(@PathVariable String id) { boolean deleted = userService.removeById(id); if (!deleted) { return Result.error("删除失败"); } return Result.success(); } /** * 根据账号查询用户 */ @GetMapping("/account/{account}") public Result 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 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; } }