From cd4e26608b01cbc376760d96e2eab5d0a796f0b0 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期二, 28 七月 2026 10:14:04 +0800
Subject: [PATCH] 合并监控
---
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 156 insertions(+), 11 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index 3f9784c..9788e50 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.controller;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import javax.annotation.Resource;
@@ -8,9 +9,14 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.chargingPile.api.model.Site;
+import com.ruoyi.common.core.constant.MsgConstants;
+import com.ruoyi.common.core.utils.HttpUtils;
+import com.ruoyi.common.core.utils.MsgUtil;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.annotation.Logical;
import com.ruoyi.other.api.domain.TUserSite;
import com.ruoyi.other.api.feignClient.RoleSiteClient;
import com.ruoyi.other.api.feignClient.UserSiteClient;
@@ -20,8 +26,6 @@
import com.ruoyi.system.query.GetSysUserList;
import com.ruoyi.system.query.ShopUserStart;
import com.ruoyi.system.service.*;
-import io.seata.core.context.RootContext;
-import io.seata.spring.annotation.GlobalTransactional;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ArrayUtils;
@@ -49,6 +53,9 @@
@RequestMapping("/user")
@Api(tags = "用户信息")
public class SysUserController extends BaseController {
+ private static final String RESET_PWD_CODE_KEY = "system:user:resetPwd:code:";
+ private static final String RESET_PWD_LIMIT_KEY = "system:user:resetPwd:limit:";
+
@Resource
private ISysUserService userService;
@@ -81,6 +88,9 @@
@Resource
private SiteClient siteClient;
+
+ @Resource
+ private RedisService redisService;
@@ -89,6 +99,7 @@
/**
* 获取用户列表
*/
+ @RequiresPermissions(value = {"/systemUserManagement", "/roleManagement/info"}, logical = Logical.OR)
@GetMapping("/list")
@ApiOperation(value = "获取系统用户列表", tags = {"管理后台-系统用户管理", "管理后台-角色管理"})
public AjaxResult list(GetSysUserList getSysUserList) {
@@ -109,10 +120,10 @@
/**
* 新增用户
*/
+ @RequiresPermissions(value = {"/systemUserManagement/add"}, logical = Logical.OR)
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping("/add")
@ApiOperation(value = "添加系统用户", tags = {"管理后台-系统用户管理"})
- @GlobalTransactional(rollbackFor = Exception.class)//分布式事务
public AjaxResult add(@RequestBody SysUser user) {
user.setUserName(user.getPhonenumber());
if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){
@@ -127,6 +138,7 @@
user.setCreateBy(SecurityUtils.getUsername());
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
user.setRoleType(1);
+ user.setPassWordUpdate(new Date());
userService.insertUser(user);
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setRoleId(user.getRoleId());
@@ -145,6 +157,7 @@
}
+ @RequiresPermissions(value = {"/systemUserManagement/add", "/systemUserManagement/update"}, logical = Logical.OR)
@GetMapping("/verifyUserNameRepeat/{username}")
@ApiOperation(value = "校验账号是否重复", tags = {"管理后台-系统用户管理"})
public AjaxResult verifyUserNameRepeat(@PathVariable String username){
@@ -156,6 +169,9 @@
return success();
}
+
+
+ @RequiresPermissions(value = {"/systemUserManagement/update"}, logical = Logical.OR)
@GetMapping("/getRoleSiteName/{roleId}")
@ApiOperation(value = "获取角色对应的站点名称", tags = {"管理后台-系统用户管理"})
public AjaxResult<List<String>> getRoleSiteName(@PathVariable Integer roleId){
@@ -200,10 +216,10 @@
/**
* 修改用户
*/
+ @RequiresPermissions(value = {"/systemUserManagement/update"}, logical = Logical.OR)
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PutMapping("/update")
@ApiOperation(value = "编辑系统用户", tags = {"管理后台-系统用户管理"})
- @GlobalTransactional(rollbackFor = Exception.class)//分布式事务
public AjaxResult edit(@Validated @RequestBody SysUser user) {
user.setUserName(user.getPhonenumber());
if(!org.springframework.util.StringUtils.hasLength(user.getNickName())){
@@ -244,7 +260,15 @@
user.setUpdateBy(SecurityUtils.getUsername());
user.setUpdateTime(new Date());
userService.updateUser(user);
-
+
+ //删除旧的角色数据,添加新的角色
+ userRoleService.remove(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, user.getUserId()));
+ //添加新的角色数据
+ SysUserRole userRole = new SysUserRole();
+ userRole.setUserId(user.getUserId());
+ userRole.setRoleId(user.getRoleId());
+ userRoleService.save(userRole);
+
//删除旧的站点数据后添加新的
userSiteClient.delUserSite(user.getUserId());
List<Integer> siteIds = user.getSiteIds();
@@ -264,6 +288,7 @@
/**
* 删除用户
*/
+ @RequiresPermissions(value = {"/systemUserManagement/del"}, logical = Logical.OR)
@Log(title = "用户管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{userIds}")
@ApiOperation(value = "删除系统用户", tags = {"管理后台-系统用户管理"})
@@ -277,6 +302,7 @@
+ @RequiresPermissions(value = {"/systemUserManagement/forbidden"}, logical = Logical.OR)
@PostMapping("/shopUserStart")
@ApiOperation(value = "账号管理--禁用/启用", tags = {"管理后台-系统用户管理"})
public AjaxResult shopUserStart(@RequestBody ShopUserStart shopUserStart) {
@@ -420,6 +446,7 @@
sysUser.setNickName(companyUserListVo.getNickName());
sysUser.setCreateBy(SecurityUtils.getUsername());
sysUser.setCreateTime(new Date());
+ sysUser.setPassWordUpdate(new Date());
userService.insertUser(sysUser);
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setRoleId(20l);
@@ -455,6 +482,7 @@
sysUser.setObjectId(dto.getRepairId());
sysUser.setUserName(add.getPhonenumber());
sysUser.setNickName(add.getPhonenumber());
+ sysUser.setPassWordUpdate(new Date());
userService.insertUser(sysUser);
userIds.add(sysUser.getUserId().intValue());
}
@@ -475,7 +503,7 @@
public R<LoginUser> info(@PathVariable("username") String username) {
SysUser sysUser = userService.selectUserByUserName(username);
if (StringUtils.isNull(sysUser)) {
- return R.fail("用户名或密码错误");
+ return R.fail("用户名/密码错误");
}
// 角色集合
Set<String> roles = permissionService.getRolePermission(sysUser);
@@ -485,7 +513,6 @@
sysUserVo.setSysUser(sysUser);
sysUserVo.setRoles(roles);
sysUserVo.setPermissions(permissions);
-
return R.ok(sysUserVo);
}
@@ -525,17 +552,134 @@
/**
+ * 发送重置密码验证码
+ */
+ @RequiresPermissions(value = {"/systemUserManagement/reset_passwords"}, logical = Logical.OR)
+ @PostMapping("/resetPwd/sendCode")
+ @ApiOperation(value = "发送重置密码验证码", tags = {"管理后台-系统用户管理"})
+ public AjaxResult sendResetPwdCode(@RequestBody Map<String, Object> params) {
+ Long userId = parseLong(params.get("userId"));
+ if (userId == null) {
+ return AjaxResult.error("用户不存在");
+ }
+ SysUser user = userService.selectUserById(userId);
+ if (user == null) {
+ return AjaxResult.error("用户不存在");
+ }
+ userService.checkUserAllowed(user);
+ userService.checkUserDataScope(userId);
+ if (StringUtils.isEmpty(user.getPhonenumber())) {
+ return AjaxResult.error("当前用户未维护手机号");
+ }
+
+ String limitKey = RESET_PWD_LIMIT_KEY + userId;
+ if (Boolean.TRUE.equals(redisService.hasKey(limitKey))) {
+ return AjaxResult.error("验证码发送过于频繁,请30秒后再试");
+ }
+
+ String code = MsgUtil.createCode();
+ String reqStr = MsgUtil.codeMsg(user.getPhonenumber(), code);
+ HttpUtils.post(MsgConstants.SEND_URL, reqStr);
+
+ redisService.setCacheObject(RESET_PWD_CODE_KEY + userId, code, 5L, TimeUnit.MINUTES);
+ redisService.setCacheObject(limitKey, "1", 30L, TimeUnit.SECONDS);
+ return AjaxResult.success("验证码已发送");
+ }
+
+ /**
* 重置密码
*/
+ @RequiresPermissions(value = {"/systemUserManagement/reset_passwords"}, logical = Logical.OR)
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PutMapping("/resetPwd")
@ApiOperation(value = "重置密码", tags = {"管理后台-系统用户管理"})
- public AjaxResult resetPwd(@RequestBody SysUser user) {
+ public AjaxResult resetPwd(@RequestBody Map<String, Object> params) {
+ Long userId = parseLong(params.get("userId"));
+ String password = parseString(params.get("password"));
+ String code = parseString(params.get("code"));
+ if (userId == null) {
+ return AjaxResult.error("用户不存在");
+ }
+ if (StringUtils.isEmpty(password)) {
+ return AjaxResult.error("请输入新密码");
+ }
+ if (StringUtils.isEmpty(code)) {
+ return AjaxResult.error("请输入验证码");
+ }
+
+ SysUser user = userService.selectUserById(userId);
+ if (user == null) {
+ return AjaxResult.error("用户不存在");
+ }
userService.checkUserAllowed(user);
- userService.checkUserDataScope(user.getUserId());
- user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
+ userService.checkUserDataScope(userId);
+
+ String cacheCode = redisService.getCacheObject(RESET_PWD_CODE_KEY + userId);
+ if (StringUtils.isEmpty(cacheCode)) {
+ return AjaxResult.error("验证码已过期,请重新获取验证码");
+ }
+ if (!code.equals(cacheCode)) {
+ return AjaxResult.error("验证码错误");
+ }
+
+ user.setPassword(SecurityUtils.encryptPassword(password));
user.setUpdateBy(SecurityUtils.getUsername());
- return toAjax(userService.resetPwd(user));
+ int result = userService.resetPwd(user);
+ redisService.deleteObject(RESET_PWD_CODE_KEY + userId);
+ return toAjax(result);
+ }
+
+ /**
+ * 重置操作密码
+ */
+ @RequiresPermissions(value = {"/systemUserManagement/reset_passwords"}, logical = Logical.OR)
+ @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+ @PutMapping("/resetOperationPwd")
+ @ApiOperation(value = "重置操作密码", tags = {"管理后台-系统用户管理"})
+ public AjaxResult resetOperationPwd(@RequestBody Map<String, Object> params) {
+ Long userId = parseLong(params.get("userId"));
+ String operationPassword = parseString(params.get("operationPassword"));
+ String code = parseString(params.get("code"));
+ if (userId == null) {
+ return AjaxResult.error("用户不存在");
+ }
+ if (StringUtils.isEmpty(operationPassword)) {
+ return AjaxResult.error("请输入新操作密码");
+ }
+ if (StringUtils.isEmpty(code)) {
+ return AjaxResult.error("请输入验证码");
+ }
+
+ SysUser user = userService.selectUserById(userId);
+ if (user == null) {
+ return AjaxResult.error("用户不存在");
+ }
+ userService.checkUserAllowed(user);
+ userService.checkUserDataScope(userId);
+
+ String cacheCode = redisService.getCacheObject(RESET_PWD_CODE_KEY + userId);
+ if (StringUtils.isEmpty(cacheCode)) {
+ return AjaxResult.error("验证码已过期,请重新获取验证码");
+ }
+ if (!code.equals(cacheCode)) {
+ return AjaxResult.error("验证码错误");
+ }
+
+ user.setOperationPassword(SecurityUtils.encryptPassword(operationPassword));
+ user.setUpdateBy(SecurityUtils.getUsername());
+ int result = userService.updateUser(user);
+ redisService.deleteObject(RESET_PWD_CODE_KEY + userId);
+ return toAjax(result);
+ }
+ private Long parseLong(Object value) {
+ if (value == null || StringUtils.isEmpty(String.valueOf(value))) {
+ return null;
+ }
+ return Long.valueOf(String.valueOf(value));
+ }
+
+ private String parseString(Object value) {
+ return value == null ? null : String.valueOf(value);
}
/**
@@ -699,6 +843,7 @@
if(null == user.getRoleType()){
user.setRoleType(1);
}
+ user.setPassWordUpdate(new Date());
userService.insertUser(user);
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setRoleId(user.getRoleId());
--
Gitblit v1.7.1