From b35c3f8db223b3b3a783e32fa3260c1e4fea02c7 Mon Sep 17 00:00:00 2001 From: chenbowen Date: Fri, 16 Jan 2026 15:04:29 +0800 Subject: [PATCH 1/3] =?UTF-8?q?1.=20=E8=B0=83=E6=95=B4=20username=20?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=80=BB=E8=BE=91=202.=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=20eban=20=E5=9B=9E=E8=B0=83=E7=99=BB=E5=BD=95=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iwork/impl/IWorkSyncProcessorImpl.java | 6 +++--- .../service/oauth2/EbanOAuth2ServiceImpl.java | 21 ++++++++++++------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/integration/iwork/impl/IWorkSyncProcessorImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/integration/iwork/impl/IWorkSyncProcessorImpl.java index c49f1b63..1c7a8b14 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/integration/iwork/impl/IWorkSyncProcessorImpl.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/integration/iwork/impl/IWorkSyncProcessorImpl.java @@ -330,7 +330,7 @@ public class IWorkSyncProcessorImpl implements IWorkSyncProcessor { } boolean inactive = isInactiveUser(user.getStatus()); String username = resolveUsername(user); - if (StrUtil.isBlank(username)) { + if (username == null) { logSkip("人员", user.getId(), "缺少工号与登录账号,跳过同步"); result.increaseSkipped(); continue; @@ -785,8 +785,8 @@ public class IWorkSyncProcessorImpl implements IWorkSyncProcessor { if (StrUtil.isNotBlank(user.getLoginid())) { return user.getLoginid().trim(); } - String workcode = resolveWorkcode(user); - return StrUtil.isNotBlank(workcode) ? workcode : null; + // loginid 为空也继续同步,username 设为空字符串,不再回退工号 + return ""; } /** diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/oauth2/EbanOAuth2ServiceImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/oauth2/EbanOAuth2ServiceImpl.java index fe41228f..91b2a107 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/oauth2/EbanOAuth2ServiceImpl.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/oauth2/EbanOAuth2ServiceImpl.java @@ -72,16 +72,21 @@ public class EbanOAuth2ServiceImpl implements EbanOAuth2Service { throw exception(AUTH_LOGIN_EBAN_TOKEN_INVALID); } - String workcode = StrUtil.trim(StrUtil.blankToDefault(userInfo.getLoginName(), userInfo.getUsername())); - if (StrUtil.isBlank(workcode)) { - log.error("E办OAuth2用户信息缺少工号(loginName),无法匹配账号: {}", JSONUtil.toJsonStr(userInfo)); - throw exception(AUTH_LOGIN_EBAN_TOKEN_INVALID); + String loginName = StrUtil.trim(userInfo.getLoginName()); + AdminUserDO user = null; + if (StrUtil.isNotBlank(loginName)) { + user = userService.getUserByUsername(loginName); } - - AdminUserDO user = userService.getUserByWorkcode(workcode); + // 若未匹配到,再尝试用工号匹配(工号为空则不匹配) if (user == null) { - createLoginLog(null, workcode, LoginLogTypeEnum.LOGIN_SOCIAL, LoginResultEnum.BAD_CREDENTIALS); - log.warn("E办OAuth2用户工号未在系统中找到对应账号: {}", workcode); + String workcode = StrUtil.trim(StrUtil.blankToDefault(userInfo.getLoginName(), userInfo.getUsername())); + if (StrUtil.isNotBlank(workcode)) { + user = userService.getUserByWorkcode(workcode); + } + } + if (user == null) { + createLoginLog(null, loginName, LoginLogTypeEnum.LOGIN_SOCIAL, LoginResultEnum.BAD_CREDENTIALS); + log.warn("E办OAuth2 用户未找到匹配账号,loginName={} workcode={}", loginName, userInfo.getUsername()); throw exception(AUTH_LOGIN_EBAN_USER_NOT_SYNC); } From c71ac5dbd305124dbb5f2fdd1a86ef8d794bda9d Mon Sep 17 00:00:00 2001 From: ranke <213539@qq.com> Date: Fri, 16 Jan 2026 16:17:52 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8E=88=E6=9D=83=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=9D=83=E9=99=90=E5=8F=AF=E9=80=89=E4=B8=8D=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E9=80=89=E9=A1=B9.=20http://172.16.46.63:315?= =?UTF-8?q?60/index.php=3Fm=3Dtask&f=3Dview&taskID=3D707?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20260116角色权限增加菜单是否显示字段.sql | 4 +++ .../src/main/resources/logback-spring.xml | 4 +++ .../controller/admin/auth/AuthController.java | 14 ++++++++ .../permission/PermissionController.java | 21 +++++++++--- .../PermissionAssignRoleMenuItemReqVO.java | 22 ++++++++++++ .../PermissionAssignRoleMenuReqVO.java | 4 +-- .../dal/dataobject/permission/RoleMenuDO.java | 5 +++ .../service/permission/PermissionService.java | 19 +++++++++++ .../permission/PermissionServiceImpl.java | 34 +++++++++++++++++++ 9 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 sql/dm/20260116角色权限增加菜单是否显示字段.sql create mode 100644 zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuItemReqVO.java diff --git a/sql/dm/20260116角色权限增加菜单是否显示字段.sql b/sql/dm/20260116角色权限增加菜单是否显示字段.sql new file mode 100644 index 00000000..a2ff62d4 --- /dev/null +++ b/sql/dm/20260116角色权限增加菜单是否显示字段.sql @@ -0,0 +1,4 @@ +ALTER TABLE "SYSTEM_ROLE_MENU" ADD COLUMN "SHOW_MENU" BIT DEFAULT ('1') NOT NULL; +COMMENT ON COLUMN "SYSTEM_ROLE_MENU"."SHOW_MENU" IS '是否显示菜单'; + +CREATE INDEX "IDX_SYSTEM_ROLE_ID_AND_MENU_ID" ON "SYSTEM_ROLE_MENU"(ROLE_ID,MENU_ID); \ No newline at end of file diff --git a/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml b/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml index 0e551414..1decca4a 100644 --- a/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml +++ b/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml @@ -73,4 +73,8 @@ + + + + diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/auth/AuthController.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/auth/AuthController.java index ca3fb848..08430f4d 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/auth/AuthController.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/auth/AuthController.java @@ -12,6 +12,7 @@ import com.zt.plat.module.system.controller.admin.auth.vo.*; import com.zt.plat.module.system.convert.auth.AuthConvert; import com.zt.plat.module.system.dal.dataobject.permission.MenuDO; import com.zt.plat.module.system.dal.dataobject.permission.RoleDO; +import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO; import com.zt.plat.module.system.dal.dataobject.user.AdminUserDO; import com.zt.plat.module.system.enums.logger.LoginLogTypeEnum; import com.zt.plat.module.system.service.auth.AdminAuthService; @@ -33,7 +34,9 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import static com.zt.plat.framework.common.pojo.CommonResult.success; @@ -126,7 +129,18 @@ public class AuthController { // 1.3 获得菜单列表 Set menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId)); List menuList = menuService.getMenuList(menuIds); + Set roleMenuList = permissionService.getByRoleIdAndMenuIds(roleIds, menuIds); + Map roleMenuMap = new HashMap<>(roleMenuList.size()); + for (RoleMenuDO roleMenu : roleMenuList) { + roleMenuMap.put(roleMenu.getMenuId(), roleMenu); + } menuList = menuService.filterDisableMenus(menuList); + for (MenuDO menu : menuList) { + RoleMenuDO roleMenu = roleMenuMap.get(menu.getId()); + if (roleMenu != null && roleMenu.getShowMenu() != null && !roleMenu.getShowMenu()) { + menu.setVisible(false); + } + } // 2. 拼接结果返回 return success(AuthConvert.INSTANCE.convert(user, roles, menuList)); diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/PermissionController.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/PermissionController.java index f34ec982..d84bc342 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/PermissionController.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/PermissionController.java @@ -6,11 +6,13 @@ import com.zt.plat.framework.common.enums.CommonStatusEnum; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.util.collection.CollectionUtils; import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleDataScopeReqVO; +import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuItemReqVO; import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO; import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionUserSupervisionRespVO; import com.zt.plat.module.system.dal.dataobject.permission.MenuDO; import com.zt.plat.module.system.dal.dataobject.permission.RoleDO; +import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO; import com.zt.plat.module.system.dal.dataobject.user.AdminUserDO; import com.zt.plat.module.system.enums.permission.MenuTypeEnum; import com.zt.plat.module.system.service.permission.MenuService; @@ -57,8 +59,16 @@ public class PermissionController { @Parameter(name = "roleId", description = "角色编号", required = true) @GetMapping("/list-role-menus") @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") - public CommonResult> getRoleMenuList(Long roleId) { - return success(permissionService.getRoleMenuListByRoleId(roleId)); + public CommonResult> getRoleMenuList(Long roleId) { + Set menuIds = permissionService.getRoleMenuListByRoleId(roleId); + Set menuList = permissionService.getByRoleIdAndMenuIds(Collections.singleton(roleId), menuIds); + Set result = menuList.stream().map(menu -> { + PermissionAssignRoleMenuItemReqVO reqVO = new PermissionAssignRoleMenuItemReqVO(); + reqVO.setId(menu.getMenuId()); + reqVO.setShowMenu(menu.getShowMenu()); + return reqVO; + }).collect(Collectors.toSet()); + return success(result); } @PostMapping("/assign-role-menu") @@ -66,10 +76,13 @@ public class PermissionController { @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") public CommonResult assignRoleMenu(@Validated @RequestBody PermissionAssignRoleMenuReqVO reqVO) { // 开启多租户的情况下,需要过滤掉未开通的菜单 - tenantService.handleTenantMenu(menuIds -> reqVO.getMenuIds().removeIf(menuId -> !CollUtil.contains(menuIds, menuId))); + tenantService.handleTenantMenu(menuIds -> reqVO.getMenus().removeIf(menu -> !CollUtil.contains(menuIds, menu.getId()))); // 执行菜单的分配 - permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds()); + permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenus().stream().map(PermissionAssignRoleMenuItemReqVO::getId).collect(Collectors.toSet())); + + // 更新菜单的显示状态 + permissionService.updateMenuDisplay(reqVO.getRoleId(), reqVO.getMenus()); return success(true); } diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuItemReqVO.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuItemReqVO.java new file mode 100644 index 00000000..0d038266 --- /dev/null +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuItemReqVO.java @@ -0,0 +1,22 @@ +package com.zt.plat.module.system.controller.admin.permission.vo.permission; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + + +@Schema(description = "管理后台 - 赋予角色菜单--菜单列表 Request VO") +@Data +public class PermissionAssignRoleMenuItemReqVO { + + @Schema(description = "菜单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "菜单ID不能为空") + private Long id; + + @Schema(description = "是否显示菜单,默认显示(true)") + private Boolean showMenu = true; + + @Schema(description = "是否显示菜单按钮是否点击过(避免大量更新数据,只更新点击过的)") + private Boolean showMenuChanged = false; + +} diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java index 533314b9..5425d548 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java @@ -15,7 +15,7 @@ public class PermissionAssignRoleMenuReqVO { @NotNull(message = "角色编号不能为空") private Long roleId; - @Schema(description = "菜单编号列表", example = "1,3,5") - private Set menuIds = Collections.emptySet(); // 兜底 + @Schema(description = "菜单编列表") + private Set menus = Collections.emptySet(); // 兜底 } diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/dal/dataobject/permission/RoleMenuDO.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/dal/dataobject/permission/RoleMenuDO.java index ca462cb7..354c4746 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/dal/dataobject/permission/RoleMenuDO.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/dal/dataobject/permission/RoleMenuDO.java @@ -33,4 +33,9 @@ public class RoleMenuDO extends TenantBaseDO { */ private Long menuId; + /** + * 是否显示菜单 + */ + private Boolean showMenu = true; + } diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java index 69a4857c..7a23c24e 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java @@ -1,6 +1,8 @@ package com.zt.plat.module.system.service.permission; import com.zt.plat.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO; +import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuItemReqVO; +import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO; import com.zt.plat.module.system.enums.permission.DataScopeEnum; import java.util.Collection; @@ -153,4 +155,21 @@ public interface PermissionService { */ DataScopeEnum getUserDataPermissionLevel(Long userId); + /** + * 更新菜单是否显示 + * + * @param roleId 用户编号 + * @param menus 包含菜单编号和是否显示的Bean List + * @return + */ + void updateMenuDisplay(Long roleId, Set menus); + + /** + * 根据角色ID和菜单IDS批量查询 + * + * @param ids + * @return + */ + Set getByRoleIdAndMenuIds(Set roleIds, Set ids); + } diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java index 52265633..ce302e9e 100644 --- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java +++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java @@ -6,6 +6,8 @@ import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; import com.baomidou.dynamic.datasource.annotation.DSTransactional; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Suppliers; import com.google.common.collect.Sets; @@ -14,6 +16,7 @@ import com.zt.plat.framework.common.enums.CommonStatusEnum; import com.zt.plat.framework.common.util.collection.CollectionUtils; import com.zt.plat.framework.datapermission.core.annotation.DataPermission; import com.zt.plat.framework.tenant.core.context.DeptContextHolder; +import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuItemReqVO; import com.zt.plat.module.system.dal.dataobject.permission.MenuDO; import com.zt.plat.module.system.dal.dataobject.permission.RoleDO; import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO; @@ -485,4 +488,35 @@ public class PermissionServiceImpl implements PermissionService { return SpringUtil.getBean(getClass()); } + /** + * 更新菜单是否显示 + * + * @param roleId 用户编号 + * @param menus 包含菜单编号和是否显示的Bean List + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateMenuDisplay(Long roleId, Set menus) { + for (PermissionAssignRoleMenuItemReqVO menu : menus) { + if (menu.getShowMenuChanged()) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(RoleMenuDO::getRoleId, roleId).eq(RoleMenuDO::getMenuId, menu.getId()).set(RoleMenuDO::getShowMenu, menu.getShowMenu()); + roleMenuMapper.update(updateWrapper); + } + } + } + + @Override + public Set getByRoleIdAndMenuIds(Set roleIds, Set ids) { + Set result = new HashSet<>(ids.size()); + for (Long roleId : roleIds) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(RoleMenuDO::getRoleId, roleId).in(!ids.isEmpty(),RoleMenuDO::getMenuId, ids); + result.addAll(roleMenuMapper.selectList(queryWrapper)); + } + return result; + } + + } From 00cdf5bc0c080d5fa26a916cdee1c147d623e6bf Mon Sep 17 00:00:00 2001 From: ranke <213539@qq.com> Date: Fri, 16 Jan 2026 16:18:27 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=8F=96=E6=B6=88sql=E7=9A=84=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/logback-spring.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml b/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml index 1decca4a..10e5f4ab 100644 --- a/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml +++ b/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml @@ -73,8 +73,8 @@ - - - + + +