{"record":{"id":"8001b9f1925a4a57","repo":"jeecgboot/JeecgBoot","slug":"error-8001b9","errorCode":null,"errorMessage":"离职失败，该用户已不存在","messagePattern":"离职失败，该用户已不存在","errorType":"exception","errorClass":"JeecgBootException","httpStatus":null,"severity":"error","filePath":"jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java","lineNumber":951,"sourceCode":"\t\tthis.userPositionId(sysUser);\n\t\tif(sysUser==null) {\n\t\t\treturn null;\n\t\t}\n\t\tBeanUtils.copyProperties(sysUser, loginUser);\n\t\t// 查询当前登录用户的部门id\n\t\tloginUser.setOrgId(this.getDepartIdByOrCode(sysUser.getOrgCode()));\n\t\t// 查询当前登录用户的角色code（多个逗号分割）\n\t\tloginUser.setRoleCode(this.getJoinRoleCodeByUserId(sysUser.getId()));\n\t\treturn loginUser;\n\t}\n\n    @Override\n    @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)\n    @Transactional(rollbackFor = Exception.class)\n    public void userQuit(String username) {\n        SysUser sysUser = userMapper.getUserByName(username);\n        if(null == sysUser){\n            throw new JeecgBootException(\"离职失败，该用户已不存在\");\n        }\n\t\t// 代码逻辑说明: [QQYUN-3951]租户用户离职重构------------\n\t\tint tenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);\n\t\t//更新用户租户表的状态为离职状态\n\t\tif(tenantId==0){\n\t\t\tthrow new JeecgBootException(\"离职失败，租户不存在\");\n\t\t}\n\t\tLambdaQueryWrapper<SysUserTenant> query = new LambdaQueryWrapper<>();\n\t\tquery.eq(SysUserTenant::getUserId,sysUser.getId());\n\t\tquery.eq(SysUserTenant::getTenantId,tenantId);\n\t\tSysUserTenant userTenant = new SysUserTenant();\n\t\tuserTenant.setStatus(CommonConstant.USER_TENANT_QUIT);\n\t\tuserTenantMapper.update(userTenant,query);\n    }\n\n    @Override\n    public List<SysUser> getQuitList(Integer tenantId) {\n        return userMapper.getTenantQuitList(tenantId);","sourceCodeStart":933,"sourceCodeEnd":969,"githubUrl":"https://github.com/jeecgboot/JeecgBoot/blob/96fb33f5ec68516da0b0147da06b2eb0419e063a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java#L933-L969","documentation":"Thrown by SysUserServiceImpl.userQuit (tenant-user quit/leave). It loads the user by username via userMapper.getUserByName; if null, quit fails because there is no account to mark as quit.","triggerScenarios":"Calling userQuit with a username that does not exist in sys_user (getUserByName returns null).","commonSituations":"Username typo; the user was already hard-deleted; username case mismatch; the logged-in principal's username no longer matches a DB row after a rename; tenant context filters the user out.","solutions":["Verify the username exists in sys_user before calling userQuit.","Ensure the username comes from the authenticated principal rather than free-form input.","Check for case sensitivity and trailing whitespace in the username.","Confirm the user was not deleted by a concurrent admin action."],"exampleFix":"// before\nuserService.userQuit(username); // null user -> throws\n\n// after\nSysUser u = userMapper.getUserByName(username);\nif (u == null) return Result.error(\"用户不存在\");\nuserService.userQuit(username);","handlingStrategy":"validation","validationCode":"SysUser u = userMapper.getUserByName(username);\nif (u == null) return Result.error(\"用户不存在\");\nuserService.userQuit(username);","typeGuard":"boolean userExistsByName(String username) {\n  return userMapper.getUserByName(username) != null;\n}","tryCatchPattern":"try { userService.userQuit(username); }\ncatch (JeecgBootException e) {\n  if (e.getMessage().contains(\"已不存在\")) return Result.error(\"用户不存在或已删除\");\n  throw e;\n}","preventionTips":["Derive username from the authenticated principal.","Existence-check before quit.","Guard against concurrent deletes."],"tags":["user-management","tenant","validation"],"backgroundTag":null,"analyzedSha":"96fb33f5ec68516da0b0147da06b2eb0419e063a","analyzedAt":"2026-08-14T00:04:16.786Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}