package com.railway.web.controller.system; import com.railway.common.annotation.Log; import com.railway.common.constant.Constants; import com.railway.common.core.controller.BaseController; import com.railway.common.core.domain.AjaxResult; import com.railway.common.core.domain.entity.SysRole; import com.railway.common.core.domain.entity.SysUser; import com.railway.common.core.domain.model.LoginUser; import com.railway.common.core.page.TableDataInfo; import com.railway.common.core.redis.RedisCache; import com.railway.common.enums.BusinessType; import com.railway.common.utils.SecurityUtils; import com.railway.common.utils.StringUtils; import com.railway.framework.web.service.TokenService; import com.railway.system.service.ISysFileService; import com.railway.system.service.ISysRoleService; import com.railway.system.service.ISysUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import java.util.Arrays; import java.util.List; import org.apache.commons.collections4.CollectionUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; /** * 个人信息 业务处理 * * @author railway */ @Api(tags = "系统管理 - 个人信息") @RestController @RequestMapping("/system/user/profile") public class SysProfileController extends BaseController { private final ISysUserService userService; private final ISysRoleService roleService; private final TokenService tokenService; private final ISysFileService sysFileService; private final RedisCache redisCache; public SysProfileController(ISysUserService userService, ISysRoleService roleService, TokenService tokenService, ISysFileService sysFileService, RedisCache redisCache) { this.userService = userService; this.roleService = roleService; this.tokenService = tokenService; this.sysFileService = sysFileService; this.redisCache = redisCache; } /** * 个人信息 */ @ApiOperation(value = "获取个人信息", response = AjaxResult.class) @GetMapping public AjaxResult profile() { LoginUser loginUser = getLoginUser(); SysUser user = loginUser.getUser(); List roleIds = roleService.selectRoleListByUserId(user.getUserId()); user.setRoleIds(roleIds.toArray(new Long[0])); List roles = roleService.selectRolesByUserId(user.getUserId()); user.setRoles(roles); AjaxResult ajax = AjaxResult.success(user); ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); return ajax; } /** * 获取用户所选要查看数据的车间 */ @ApiOperation(value = "获取用户所选要查看数据的车间", response = TableDataInfo.class) @GetMapping("/getSelectedDept") public AjaxResult getSelectedDept() { LoginUser loginUser = getLoginUser(); List deptIds = redisCache.getCacheList(getCacheKey(loginUser.getUserId())); AjaxResult ajax = AjaxResult.success(); if(CollectionUtils.isNotEmpty(deptIds)) { ajax.put("selectedDeptIds", deptIds); } return ajax; } /** * 更新用户所选要查看数据的车间 */ @ApiOperation(value = "更新用户所选要查看数据的车间", response = AjaxResult.class) @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/putSelectedDept/{userIds}") public AjaxResult putSelectedDept(@PathVariable Long[] userIds) { LoginUser loginUser = getLoginUser(); redisCache.setCacheList(getCacheKey(loginUser.getUserId()), Arrays.asList(userIds)); return AjaxResult.success(); } /** * 设置cache key * * @param configKey 参数键 * @return 缓存键key */ private String getCacheKey(Long configKey) { return Constants.LEADER_VIEW_DEPT_KEY + configKey; } /** * 修改用户 */ @ApiOperation(value = "修改用户", response = AjaxResult.class) @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult updateProfile(@RequestBody SysUser user) { AjaxResult result = userService.checkUserUnique(user); if (StringUtils.isNotNull(result)) { return result; } LoginUser loginUser = getLoginUser(); SysUser sysUser = loginUser.getUser(); user.setUserId(sysUser.getUserId()); user.setPassword(null); if (userService.updateUserProfile(user) > 0) { // 更新缓存用户信息 sysUser.setNickName(user.getNickName()); sysUser.setPhone(user.getPhone()); sysUser.setEmail(user.getEmail()); sysUser.setSex(user.getSex()); tokenService.setLoginUser(loginUser); return AjaxResult.success(); } return AjaxResult.error("修改个人信息异常,请联系管理员"); } /** * 重置密码 */ @ApiOperation(value = "修改密码", response = AjaxResult.class) @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping("/updatePwd") public AjaxResult updatePwd(String oldPassword, String newPassword) { LoginUser loginUser = getLoginUser(); String userName = loginUser.getUsername(); String password = loginUser.getPassword(); if (!SecurityUtils.matchesPassword(oldPassword, password)) { return AjaxResult.error("修改密码失败,旧密码错误"); } if (SecurityUtils.matchesPassword(newPassword, password)) { return AjaxResult.error("新密码不能与旧密码相同"); } if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) { // 更新缓存用户密码 loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword)); tokenService.setLoginUser(loginUser); return AjaxResult.success(); } return AjaxResult.error("修改密码异常,请联系管理员"); } /** * 头像上传 */ @ApiOperation(value = "头像上传", response = AjaxResult.class) @Log(title = "用户头像", businessType = BusinessType.UPDATE) @PostMapping("/avatar") public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception { if (!file.isEmpty()) { LoginUser loginUser = getLoginUser(); String avatar = sysFileService.uploadFile(file); if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) { AjaxResult ajax = AjaxResult.success(); ajax.put("imgUrl", avatar); // 更新缓存用户头像 loginUser.getUser().setAvatar(avatar); tokenService.setLoginUser(loginUser); return ajax; } } return AjaxResult.error("上传图片异常,请联系管理员"); } }