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/SysRoleController.java | 124 +++++++++++++++++++++++++++++++++++++++--
1 files changed, 118 insertions(+), 6 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
index a73f98b..c82449f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
@@ -3,7 +3,9 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import javax.management.relation.Role;
@@ -61,6 +63,11 @@
@RequestMapping("/role")
@Api(tags = "角色模块")
public class SysRoleController extends BaseController {
+ private static final String INDEPENDENT_PARTNER_ROLE_NAME = "独立合作商";
+ private static final String INDEPENDENT_PARTNER_ROLE_KEY = "independent_partner";
+ private static final String OWN_SITE_NAME = "自有电站";
+ private static final String SYSTEM_ROLE_REMARK = "系统内置角色";
+
@Resource
private ISysRoleService roleService;
@@ -84,6 +91,88 @@
@Resource
private SiteClient siteClient;
+ private void ensureIndependentPartnerRole() {
+ SysRole role = roleService.getOne(new LambdaQueryWrapper<SysRole>()
+ .eq(SysRole::getRoleKey, INDEPENDENT_PARTNER_ROLE_KEY)
+ .eq(SysRole::getDelFlag, 0)
+ .last("LIMIT 1"));
+ if (role == null) {
+ role = roleService.getOne(new LambdaQueryWrapper<SysRole>()
+ .eq(SysRole::getRoleName, INDEPENDENT_PARTNER_ROLE_NAME)
+ .eq(SysRole::getDelFlag, 0)
+ .last("LIMIT 1"));
+ }
+ if (role != null) {
+ return;
+ }
+
+ SysRole newRole = new SysRole();
+ newRole.setRoleName(INDEPENDENT_PARTNER_ROLE_NAME);
+ newRole.setRoleKey(INDEPENDENT_PARTNER_ROLE_KEY);
+ newRole.setDataScope("5");
+ newRole.setStatus("0");
+ newRole.setDelFlag("0");
+ newRole.setRemark(SYSTEM_ROLE_REMARK);
+ newRole.setCreateBy(SecurityUtils.getUsername());
+ newRole.setCreateTime(new Date());
+ Set<Long> menuIds = getIndependentPartnerMenuIds();
+ newRole.setMenuIds(menuIds.toArray(new Long[0]));
+ roleService.insertRole(newRole);
+ }
+
+ private Set<Long> getIndependentPartnerMenuIds() {
+ List<SysMenus> menus = menuMapper.getAll();
+ Set<Long> menuIds = new HashSet<>();
+ Set<Long> rootIds = new HashSet<>();
+ for (SysMenus menu : menus) {
+ String path = menu.getPath() == null ? "" : menu.getPath();
+ String menuName = menu.getMenuName() == null ? "" : menu.getMenuName();
+ if ("standingPile".equals(path) || "order".equals(path)
+ || menuName.contains("站桩管理") || menuName.contains("订单管理")) {
+ rootIds.add(menu.getMenuId());
+ }
+ }
+ for (Long rootId : rootIds) {
+ collectMenuTreeIds(rootId, menus, menuIds);
+ }
+ return menuIds;
+ }
+
+ private void collectMenuTreeIds(Long menuId, List<SysMenus> menus, Set<Long> menuIds) {
+ if (menuId == null || menuIds.contains(menuId)) {
+ return;
+ }
+ menuIds.add(menuId);
+ for (SysMenus menu : menus) {
+ if (menuId.equals(menu.getParentId())) {
+ collectMenuTreeIds(menu.getMenuId(), menus, menuIds);
+ }
+ }
+ }
+
+ private boolean isIndependentPartnerRole(SysRole role) {
+ return role != null && (INDEPENDENT_PARTNER_ROLE_KEY.equals(role.getRoleKey())
+ || INDEPENDENT_PARTNER_ROLE_NAME.equals(role.getRoleName()));
+ }
+
+ private boolean isSystemBuiltinRole(SysRole role) {
+ return role != null && (role.isAdmin() || isIndependentPartnerRole(role));
+ }
+
+ private void fillRoleV2Info(SysRole role) {
+ if (role == null) {
+ return;
+ }
+ boolean partnerRole = isIndependentPartnerRole(role);
+ role.setPartnerRole(partnerRole);
+ role.setSystemRole(isSystemBuiltinRole(role));
+ if (partnerRole) {
+ role.setSiteNames(Arrays.asList(OWN_SITE_NAME));
+ if (StringUtils.isEmpty(role.getRemark())) {
+ role.setRemark(SYSTEM_ROLE_REMARK);
+ }
+ }
+ }
@@ -102,6 +191,7 @@
@GetMapping("/listPage")
@ApiOperation(value = "获取角色列表", tags = {"管理后台-角色管理"})
public AjaxResult listPage(String name, BasePage basePage) {
+ ensureIndependentPartnerRole();
PageInfo<SysRole> pageInfo = new PageInfo<>(basePage.getPageCurr(), basePage.getPageSize());
LambdaQueryWrapper<SysRole> wrapper = new LambdaQueryWrapper<SysRole>().eq(SysRole::getStatus, 0).eq(SysRole::getDelFlag, 0);
if (StringUtils.isNotEmpty(name)) {
@@ -118,6 +208,7 @@
}
long count = sysUserRoleService.count(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getRoleId, record.getRoleId()));
record.setNumber(count);
+ fillRoleV2Info(record);
}
return AjaxResult.success(page);
}
@@ -169,6 +260,9 @@
RoleInfoVo roleInfoVo = new RoleInfoVo();
roleInfoVo.setRoleId(role.getRoleId());
roleInfoVo.setRoleName(role.getRoleName());
+ roleInfoVo.setRoleKey(role.getRoleKey());
+ roleInfoVo.setPartnerRole(isIndependentPartnerRole(role));
+ roleInfoVo.setSystemRole(isSystemBuiltinRole(role));
// 获取当前角色的菜单id
List<Long> menusId = sysRoleMenuMapper.selectList(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, id)).stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList());
if (menusId.size() == 0) {
@@ -194,12 +288,20 @@
}
roleInfoVo.setMenus(menusId);
roleInfoVo.setRemark(role.getRemark());
- List<Integer> siteIds = roleSiteClient.getSiteIds(role.getRoleId()).getData();
- if (null != siteIds && siteIds.size() > 0) {
- List<Site> sites = siteClient.getSiteByIds(siteIds).getData();
- List<String> siteNames = sites.stream().map(Site::getName).collect(Collectors.toList());
- roleInfoVo.setSiteNames(siteNames);
- roleInfoVo.setSiteIds(siteIds);
+ if (isIndependentPartnerRole(role)) {
+ roleInfoVo.setSiteNames(Arrays.asList(OWN_SITE_NAME));
+ roleInfoVo.setSiteIds(new ArrayList<>());
+ if (StringUtils.isEmpty(roleInfoVo.getRemark())) {
+ roleInfoVo.setRemark(SYSTEM_ROLE_REMARK);
+ }
+ } else {
+ List<Integer> siteIds = roleSiteClient.getSiteIds(role.getRoleId()).getData();
+ if (null != siteIds && siteIds.size() > 0) {
+ List<Site> sites = siteClient.getSiteByIds(siteIds).getData();
+ List<String> siteNames = sites.stream().map(Site::getName).collect(Collectors.toList());
+ roleInfoVo.setSiteNames(siteNames);
+ roleInfoVo.setSiteIds(siteIds);
+ }
}
return AjaxResult.success(roleInfoVo);
}
@@ -209,6 +311,10 @@
@PostMapping("/roleUpdate")
@ApiOperation(value = "编辑角色", tags = {"管理后台-角色管理"})
public AjaxResult roleUpdate(@Validated @RequestBody RoleUpdateDto dto) {
+ SysRole oldRole = roleService.selectRoleById(dto.getRoleId());
+ if (isSystemBuiltinRole(oldRole)) {
+ return AjaxResult.error("系统内置角色不可编辑");
+ }
SysRole role = new SysRole();
role.setRoleName(dto.getRoleName());
SysRole one = roleService.getOne(new LambdaQueryWrapper<SysRole>().eq(SysRole::getRoleName, dto.getRoleName()));
@@ -269,6 +375,12 @@
@DeleteMapping("/{roleIds}")
@ApiOperation(value = "删除角色", tags = {"管理后台-角色管理"})
public AjaxResult remove(@PathVariable Long[] roleIds) {
+ for (Long roleId : roleIds) {
+ SysRole role = roleService.selectRoleById(roleId);
+ if (isSystemBuiltinRole(role)) {
+ return AjaxResult.error("系统内置角色不可删除");
+ }
+ }
return toAjax(roleService.deleteRoleByIds(roleIds));
}
--
Gitblit v1.7.1