{"record":{"id":"53033817b833c4bd","repo":"paascloud/paascloud-master","slug":"uac10011025","errorCode":"UAC10011025","errorMessage":"ErrorCodeEnum.UAC10011025","messagePattern":"ErrorCodeEnum\\.UAC10011025","errorType":"error_code","errorClass":"UacBizException","httpStatus":null,"severity":"warning","filePath":"paascloud-provider/paascloud-provider-uac/src/main/java/com/paascloud/provider/service/impl/UacUserServiceImpl.java","lineNumber":207,"sourceCode":"\tpublic void saveUacUser(UacUser user, LoginAuthDto loginAuthDto) {\n\n\t\tString loginName = user.getLoginName();\n\n\t\tPreconditions.checkArgument(!StringUtils.isEmpty(loginName), \"用户名不能为空\");\n\t\tPreconditions.checkArgument(user.getGroupId() != null, \"组织不能为空\");\n\n\t\tuser.setUpdateInfo(loginAuthDto);\n\t\tif (user.isNew()) {\n\t\t\tString loginPwd = user.getLoginPwd();\n\t\t\tPreconditions.checkArgument(!StringUtils.isEmpty(loginPwd), ErrorCodeEnum.UAC10011014.msg());\n\n\t\t\tuser.setLoginPwd(Md5Util.encrypt(loginPwd));\n\t\t\t// 验证用户名是否存在\n\t\t\tUacUser query = new UacUser();\n\t\t\tquery.setLoginName(loginName);\n\t\t\tint count = uacUserMapper.selectCount(query);\n\t\t\tif (count > 0) {\n\t\t\t\tthrow new UacBizException(ErrorCodeEnum.UAC10011025, loginName);\n\t\t\t}\n\t\t\tLong userId = super.generateId();\n\t\t\t// 1.保存用户信息\n\t\t\tuser.setId(userId);\n\t\t\tuser.setLoginName(loginName);\n\t\t\tuser.setType(UacUserTypeEnum.OPERATE.getKey());\n\t\t\tuser.setUserSource(UacUserSourceEnum.INSERT.getKey());\n\t\t\t// TODO 校验状态是否合法\n\t\t\tuacUserMapper.insertSelective(user);\n\n\t\t\t// 2.添加组织关联\n\t\t\tUacGroupUser groupUser = new UacGroupUser();\n\t\t\tgroupUser.setGroupId(user.getGroupId());\n\t\t\tgroupUser.setUserId(userId);\n\t\t\tuacGroupUserService.save(groupUser);\n\t\t} else {\n\t\t\tUacUser uacUser = uacUserMapper.selectByPrimaryKey(user.getId());\n\t\t\tPreconditions.checkArgument(uacUser != null, \"用户不存在\");","sourceCodeStart":189,"sourceCodeEnd":225,"githubUrl":"https://github.com/paascloud/paascloud-master/blob/781281a9503332ed3cef44ea618349d14230a127/paascloud-provider/paascloud-provider-uac/src/main/java/com/paascloud/provider/service/impl/UacUserServiceImpl.java#L189-L225","documentation":"UacBizException with ErrorCodeEnum.UAC10011025 (\"用户已存在, loginName=%\") is thrown by UacUserServiceImpl.saveUacUser when creating a new user whose loginName already exists in the uac_user table. The service queries uacUserMapper.selectCount with the given loginName and aborts the insert if count > 0, because loginName must be unique.","triggerScenarios":"Calling saveUacUser (or the REST/MQ wrappers around user registration) with a loginName that already matches an existing row in the uac_user table.","commonSituations":"Duplicate user registration (double form submit), re-running an import/seed script without idempotency, re-registering a deleted-but-soft-retained account, or a client retrying after a timeout when the first request actually succeeded.","solutions":["Check loginName availability with a selectCount query (or the user-exists API) before calling saveUacUser","Catch UacBizException and check getCode()==10011025, then prompt the user to choose a different loginName","Make registration idempotent: on duplicate, fetch the existing user and treat it as success if it belongs to the same source","Uniqueness-enforce loginName at the DB level (unique index) so races cannot create duplicates"],"exampleFix":"// before\nuacUserService.saveUacUser(user, initPwd, authResDto);\n// after\nUacUser q = new UacUser();\nq.setLoginName(user.getLoginName());\nif (uacUserMapper.selectCount(q) > 0) {\n    throw new BusinessException(\"登录名已被占用，请更换\");\n}\nuacUserService.saveUacUser(user, initPwd, authResDto);","handlingStrategy":"validation","validationCode":"UacUser q = new UacUser();\nq.setLoginName(loginName);\nboolean exists = uacUserMapper.selectCount(q) > 0;\nif (exists) { throw new BusinessException(\"loginName already taken\"); }","typeGuard":null,"tryCatchPattern":"try {\n    uacUserService.saveUacUser(user, initPwd, authResDto);\n} catch (UacBizException e) {\n    if (e.getCode() == 10011025) { /* duplicate loginName: prompt user */ }\n    else throw e;\n}","preventionTips":["Pre-check loginName availability before submit and again on server side","Add a unique index on login_name in uac_user","Debounce/deduplicate form submissions client-side"],"tags":["duplicate-record","user-management","business-exception"],"backgroundTag":"resource-already-exists","analyzedSha":"781281a9503332ed3cef44ea618349d14230a127","analyzedAt":"2026-09-10T10:59:02.070Z","contentChangedAt":"2026-09-10T10:59:02.070Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}