From 9af2c277033957c095d1090c8e6f77e54b86172f Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期四, 02 七月 2026 16:58:59 +0800
Subject: [PATCH] 新增企业用户充电分析功能页(包含充电明细);新增系统用户管理中的重置操作密码功能;在角色管理中增加独立合作商角色;角色管理中的添加角色操作新增数据驾驶舱和视频监控入口(需在角色管理员有按钮权限控制)。

---
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java |   93 ++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 89 insertions(+), 4 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 849327f..d94a6e6 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,8 +9,12 @@
 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;
@@ -48,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;
 
@@ -80,6 +88,9 @@
     
     @Resource
     private SiteClient siteClient;
+
+    @Resource
+    private RedisService redisService;
     
     
     
@@ -541,18 +552,92 @@
 
 
     /**
+     * 发送重置密码验证码
+     */
+    @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);
+    }
+
+    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);
     }
 
     /**

--
Gitblit v1.7.1