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