paascloud/paascloud-master · warning · UacBizException
UAC10011025
UAC10011025
Error message
ErrorCodeEnum.UAC10011025
What it means
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.
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
Example fix
// before
uacUserService.saveUacUser(user, initPwd, authResDto);
// after
UacUser q = new UacUser();
q.setLoginName(user.getLoginName());
if (uacUserMapper.selectCount(q) > 0) {
throw new BusinessException("登录名已被占用,请更换");
}
uacUserService.saveUacUser(user, initPwd, authResDto); Defensive patterns
Strategy: validation
Validate before calling
UacUser q = new UacUser();
q.setLoginName(loginName);
boolean exists = uacUserMapper.selectCount(q) > 0;
if (exists) { throw new BusinessException("loginName already taken"); } Try / catch
try {
uacUserService.saveUacUser(user, initPwd, authResDto);
} catch (UacBizException e) {
if (e.getCode() == 10011025) { /* duplicate loginName: prompt user */ }
else throw e;
} Prevention
- 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
When it happens
Trigger: Calling saveUacUser (or the REST/MQ wrappers around user registration) with a loginName that already matches an existing row in the uac_user table.
Common situations: 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.
Related errors
AI-assisted analysis of paascloud/paascloud-master@781281a950 (2026-09-10).
Data as JSON: /api/errors/53033817b833c4bd.
Report an issue: GitHub.
Appendix: source
Thrown at paascloud-provider/paascloud-provider-uac/src/main/java/com/paascloud/provider/service/impl/UacUserServiceImpl.java:207
public void saveUacUser(UacUser user, LoginAuthDto loginAuthDto) {
String loginName = user.getLoginName();
Preconditions.checkArgument(!StringUtils.isEmpty(loginName), "用户名不能为空");
Preconditions.checkArgument(user.getGroupId() != null, "组织不能为空");
user.setUpdateInfo(loginAuthDto);
if (user.isNew()) {
String loginPwd = user.getLoginPwd();
Preconditions.checkArgument(!StringUtils.isEmpty(loginPwd), ErrorCodeEnum.UAC10011014.msg());
user.setLoginPwd(Md5Util.encrypt(loginPwd));
// 验证用户名是否存在
UacUser query = new UacUser();
query.setLoginName(loginName);
int count = uacUserMapper.selectCount(query);
if (count > 0) {
throw new UacBizException(ErrorCodeEnum.UAC10011025, loginName);
}
Long userId = super.generateId();
// 1.保存用户信息
user.setId(userId);
user.setLoginName(loginName);
user.setType(UacUserTypeEnum.OPERATE.getKey());
user.setUserSource(UacUserSourceEnum.INSERT.getKey());
// TODO 校验状态是否合法
uacUserMapper.insertSelective(user);
// 2.添加组织关联
UacGroupUser groupUser = new UacGroupUser();
groupUser.setGroupId(user.getGroupId());
groupUser.setUserId(userId);
uacGroupUserService.save(groupUser);
} else {
UacUser uacUser = uacUserMapper.selectByPrimaryKey(user.getId());
Preconditions.checkArgument(uacUser != null, "用户不存在");View on GitHub (pinned to 781281a950)