jeecgboot/JeecgBoot · warning · JeecgBootBizTipException

管理员已拒绝您加入租户,请联系租户管理员

Error message

管理员已拒绝您加入租户,请联系租户管理员

What it means

Thrown during the 'apply to join tenant' flow when an existing SysUserTenant relation is found with status USER_TENANT_REFUSE — an admin previously rejected the user's join request. JeecgBootBizTipException is used so the message is shown verbatim. This is a hard stop; the user cannot self-rejoin without admin action.

Source

Thrown at jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java:243

    @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
    public Integer joinTenantByHouseNumber(SysTenant sysTenant, String userId) {
        LambdaQueryWrapper<SysTenant> query = new LambdaQueryWrapper<>();
        query.eq(SysTenant::getHouseNumber,sysTenant.getHouseNumber());
        SysTenant one = this.getOne(query);
        //需要返回租户id(用于前台更新缓存),返回0则代表当前租户门牌号不存在
        if(null == one){
            return 0;
        }else{
            LambdaQueryWrapper<SysUserTenant> relationQuery = new LambdaQueryWrapper<>();
            relationQuery.eq(SysUserTenant::getTenantId,one.getId());
            relationQuery.eq(SysUserTenant::getUserId,userId);
            SysUserTenant relation = userTenantMapper.selectOne(relationQuery);
            if(relation != null){
                String msg = "";
                if(CommonConstant.USER_TENANT_UNDER_REVIEW.equals(relation.getStatus())){
                    msg = ",状态:审核中";
                }else if(CommonConstant.USER_TENANT_REFUSE.equals(relation.getStatus())){
                    throw new JeecgBootBizTipException("管理员已拒绝您加入租户,请联系租户管理员");
                }else if(CommonConstant.USER_TENANT_QUIT.equals(relation.getStatus())){
                    msg = ",状态:已离职";
                }
                throw new JeecgBootBizTipException("您已是该租户成员"+msg);
            }
            //用户加入门牌号审核中状态
            SysUserTenant tenant = new SysUserTenant();
            tenant.setTenantId(one.getId());
            tenant.setUserId(userId);
            tenant.setStatus(CommonConstant.USER_TENANT_UNDER_REVIEW);
            userTenantMapper.insert(tenant);

            // QQYUN-4526【应用】组织加入通知
            sendMsgForApplyJoinTenant(userId, one);
            return tenant.getTenantId();
        }
    }

View on GitHub (pinned to 96fb33f5ec)

Solutions

  1. Contact the tenant administrator to re-issue an invitation or reset the relation status.
  2. Admin can delete the refused SysUserTenant row so the user can submit a fresh application.
  3. Admin can update the relation status to under-review to re-open the application.
  4. If the refusal was erroneous, admin flips status to normal/active to admit the user.

Example fix

// No caller-side fix; this is a policy gate. Admin action required.
// Admin reset example (DB or service layer):
// UPDATE sys_tenant_user_relation SET status = 'underReview' WHERE user_id=? AND tenant_id=?;
Defensive patterns

Strategy: try-catch

Try / catch

try {
    sysTenantService.applyJoinTenant(tenantId);
} catch (JeecgBootBizTipException e) {
    if (e.getMessage().contains("已拒绝")) {
        return Result.error("您的申请已被拒绝,请联系租户管理员");
    }
    throw e;
}

Prevention

When it happens

Trigger: A user applies to join a tenant (the method that builds the under-review relation) but a prior relation row already exists with status = refuse. The branch throws immediately rather than re-creating the application.

Common situations: User was rejected, then immediately tries to apply again; admin rejected then the user retries from another client; stale 'refuse' row not cleared after a policy change.

Related errors


AI-assisted analysis of jeecgboot/JeecgBoot@96fb33f5ec (2026-08-14). Data as JSON: /api/errors/448004e6b1644dd0. Report an issue: GitHub.