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