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

  1. Check loginName availability with a selectCount query (or the user-exists API) before calling saveUacUser
  2. Catch UacBizException and check getCode()==10011025, then prompt the user to choose a different loginName
  3. Make registration idempotent: on duplicate, fetch the existing user and treat it as success if it belongs to the same source
  4. 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

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)