package cc.mrbird.febs.system.controller; 
 | 
  
 | 
import cc.mrbird.febs.common.annotation.ControllerEndpoint; 
 | 
import cc.mrbird.febs.common.controller.BaseController; 
 | 
import cc.mrbird.febs.common.entity.FebsResponse; 
 | 
import cc.mrbird.febs.common.entity.QueryRequest; 
 | 
import cc.mrbird.febs.common.exception.FebsException; 
 | 
import cc.mrbird.febs.common.utils.Md5Util; 
 | 
import cc.mrbird.febs.system.entity.User; 
 | 
import cc.mrbird.febs.system.service.IUserService; 
 | 
import com.baomidou.mybatisplus.core.toolkit.StringPool; 
 | 
import com.wuwenze.poi.ExcelKit; 
 | 
import lombok.RequiredArgsConstructor; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.authz.annotation.RequiresPermissions; 
 | 
import org.springframework.validation.annotation.Validated; 
 | 
import org.springframework.web.bind.annotation.*; 
 | 
  
 | 
import javax.servlet.http.HttpServletResponse; 
 | 
import javax.validation.Valid; 
 | 
import javax.validation.constraints.NotBlank; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
/** 
 | 
 * @author MrBird 
 | 
 */ 
 | 
@Slf4j 
 | 
@Validated 
 | 
@RestController 
 | 
@RequiredArgsConstructor 
 | 
@RequestMapping("user") 
 | 
public class UserController extends BaseController { 
 | 
  
 | 
    private final IUserService userService; 
 | 
  
 | 
    @GetMapping("{username}") 
 | 
    public User getUser(@NotBlank(message = "{required}") @PathVariable String username) { 
 | 
        return this.userService.findUserDetailList(username); 
 | 
    } 
 | 
  
 | 
    @GetMapping("check/{username}") 
 | 
    public boolean checkUserName(@NotBlank(message = "{required}") @PathVariable String username, String userId) { 
 | 
        return this.userService.findByName(username) == null || StringUtils.isNotBlank(userId); 
 | 
    } 
 | 
  
 | 
    @GetMapping("list") 
 | 
    @RequiresPermissions("user:view") 
 | 
    public FebsResponse userList(User user, QueryRequest request) { 
 | 
        Map<String, Object> dataTable = getDataTable(this.userService.findUserDetailList(user, request)); 
 | 
        return new FebsResponse().success().data(dataTable); 
 | 
    } 
 | 
  
 | 
    @PostMapping 
 | 
    @RequiresPermissions("user:add") 
 | 
    @ControllerEndpoint(operation = "新增用户", exceptionMessage = "新增用户失败") 
 | 
    public FebsResponse addUser(@Valid User user) { 
 | 
        this.userService.createUser(user); 
 | 
        return new FebsResponse().success(); 
 | 
    } 
 | 
  
 | 
    @GetMapping("delete/{userIds}") 
 | 
    @RequiresPermissions("user:delete") 
 | 
    @ControllerEndpoint(operation = "删除用户", exceptionMessage = "删除用户失败") 
 | 
    public FebsResponse deleteUsers(@NotBlank(message = "{required}") @PathVariable String userIds) { 
 | 
        String[] ids = userIds.split(StringPool.COMMA); 
 | 
        this.userService.deleteUsers(ids); 
 | 
        return new FebsResponse().success(); 
 | 
    } 
 | 
  
 | 
    @PostMapping("update") 
 | 
    @RequiresPermissions("user:update") 
 | 
    @ControllerEndpoint(operation = "修改用户", exceptionMessage = "修改用户失败") 
 | 
    public FebsResponse updateUser(@Valid User user) { 
 | 
        if (user.getUserId() == null) { 
 | 
            throw new FebsException("用户ID为空"); 
 | 
        } 
 | 
        this.userService.updateUser(user); 
 | 
        return new FebsResponse().success(); 
 | 
    } 
 | 
  
 | 
    @PostMapping("password/reset/{usernames}") 
 | 
    @RequiresPermissions("user:password:reset") 
 | 
    @ControllerEndpoint(exceptionMessage = "重置用户密码失败") 
 | 
    public FebsResponse resetPassword(@NotBlank(message = "{required}") @PathVariable String usernames) { 
 | 
        String[] usernameArr = usernames.split(StringPool.COMMA); 
 | 
        this.userService.resetPassword(usernameArr); 
 | 
        return new FebsResponse().success(); 
 | 
    } 
 | 
  
 | 
    @PostMapping("password/update") 
 | 
    @ControllerEndpoint(exceptionMessage = "修改密码失败") 
 | 
    public FebsResponse updatePassword( 
 | 
            @NotBlank(message = "{required}") String oldPassword, 
 | 
            @NotBlank(message = "{required}") String newPassword) { 
 | 
        User user = getCurrentUser(); 
 | 
        if (!StringUtils.equals(user.getPassword(), Md5Util.encrypt(user.getUsername(), oldPassword))) { 
 | 
            throw new FebsException("原密码不正确"); 
 | 
        } 
 | 
        userService.updatePassword(user.getUsername(), newPassword); 
 | 
        return new FebsResponse().success(); 
 | 
    } 
 | 
  
 | 
    @GetMapping("avatar/{image}") 
 | 
    @ControllerEndpoint(exceptionMessage = "修改头像失败") 
 | 
    public FebsResponse updateAvatar(@NotBlank(message = "{required}") @PathVariable String image) { 
 | 
        User user = getCurrentUser(); 
 | 
        this.userService.updateAvatar(user.getUsername(), image); 
 | 
        return new FebsResponse().success(); 
 | 
    } 
 | 
  
 | 
    @PostMapping("theme/update") 
 | 
    @ControllerEndpoint(exceptionMessage = "修改系统配置失败") 
 | 
    public FebsResponse updateTheme(String theme, String isTab) { 
 | 
        User user = getCurrentUser(); 
 | 
        this.userService.updateTheme(user.getUsername(), theme, isTab); 
 | 
        return new FebsResponse().success(); 
 | 
    } 
 | 
  
 | 
    @PostMapping("profile/update") 
 | 
    @ControllerEndpoint(exceptionMessage = "修改个人信息失败") 
 | 
    public FebsResponse updateProfile(User user) throws FebsException { 
 | 
        User currentUser = getCurrentUser(); 
 | 
        user.setUserId(currentUser.getUserId()); 
 | 
        this.userService.updateProfile(user); 
 | 
        return new FebsResponse().success(); 
 | 
    } 
 | 
  
 | 
    @GetMapping("excel") 
 | 
    @RequiresPermissions("user:export") 
 | 
    @ControllerEndpoint(exceptionMessage = "导出Excel失败") 
 | 
    public void export(QueryRequest queryRequest, User user, HttpServletResponse response) { 
 | 
        List<User> users = this.userService.findUserDetailList(user, queryRequest).getRecords(); 
 | 
        ExcelKit.$Export(User.class, response).downXlsx(users, false); 
 | 
    } 
 | 
} 
 |