longz
2026-08-11 2a3c3cdbf2398695d61633e072f98ee2757e9e27
backend/src/main/java/com/sinata/appointment/service/SysRoleManageApplicationService.java
@@ -119,11 +119,13 @@
    @Transactional(rollbackFor = Exception.class)
    public Map<String, Object> create(RoleManageCreateRequest req) {
        String roleName = req.getRoleName().trim();
        validateRoleNameUnique(roleName, null);
        String code = generateUniqueRoleCode();
        SysRole r = new SysRole();
        r.setRoleCode(code);
        r.setRoleName(req.getRoleName().trim());
        r.setRemark(trimToNull(req.getRemark()));
        r.setRoleName(roleName);
        r.setRemark(trimToEmpty(req.getRemark()));
        sysRoleMapper.insert(r);
        SysRole fresh = sysRoleMapper.selectById(r.getId());
        if (fresh == null || !StringUtils.hasText(fresh.getUuid())) {
@@ -139,8 +141,10 @@
    @Transactional(rollbackFor = Exception.class)
    public void update(Long id, RoleManageUpdateRequest req) {
        SysRole r = loadActiveWithUuid(id, req.getUuid());
        r.setRoleName(req.getRoleName().trim());
        r.setRemark(trimToNull(req.getRemark()));
        String roleName = req.getRoleName().trim();
        validateRoleNameUnique(roleName, id);
        r.setRoleName(roleName);
        r.setRemark(trimToEmpty(req.getRemark()));
        sysRoleMapper.updateById(r);
        replaceRoleMenus(id, req.getMenuIds());
    }
@@ -239,6 +243,20 @@
        throw new BizException(BizErrorCode.AUTH_FORBIDDEN, "无法生成唯一角色编码");
    }
    private void validateRoleNameUnique(String roleName, Long excludeRoleId) {
        LambdaQueryWrapper<SysRole> query =
                new LambdaQueryWrapper<SysRole>()
                        .eq(SysRole::getDelFlag, 0)
                        .eq(SysRole::getRoleName, roleName);
        if (excludeRoleId != null) {
            query.ne(SysRole::getId, excludeRoleId);
        }
        long exists = sysRoleMapper.selectCount(query);
        if (exists > 0) {
            throw new BizException(BizErrorCode.AUTH_INVALID_CREDENTIALS, "角色名称已存在");
        }
    }
    private static String trimToNull(String s) {
        if (!StringUtils.hasText(s)) {
            return null;
@@ -246,4 +264,8 @@
        String t = s.trim();
        return t.isEmpty() ? null : t;
    }
    private static String trimToEmpty(String s) {
        return s == null ? "" : s.trim();
    }
}