自动注册开钱包问题
This commit is contained in:
1 parent
ef4bc42ddb
commit
44c5e38a34
2 files changed
+32
-55
No files matched your search
+21
-27
@@ -27,6 +27,7 @@ import com.bsd.pjcloud.admin.api.vo.SysDeptInvitePreviewVO;
|
||||
import com.bsd.pjcloud.admin.mapper.SysDeptInviteMapper;
|
||||
import com.bsd.pjcloud.admin.mapper.SysUserMapper;
|
||||
import com.bsd.pjcloud.admin.mapper.SysUserRoleMapper;
|
||||
import com.bsd.pjcloud.admin.handler.UserWalletCreateEvent;
|
||||
import com.bsd.pjcloud.admin.service.SysDeptInviteService;
|
||||
import com.bsd.pjcloud.admin.service.SysDeptService;
|
||||
import com.bsd.pjcloud.admin.service.SysMessageService;
|
||||
@@ -34,30 +35,30 @@ import com.bsd.pjcloud.admin.service.SysRoleService;
|
||||
import com.bsd.pjcloud.admin.service.SysUserIdentityService;
|
||||
import com.bsd.pjcloud.admin.utils.flow.FlowUtil;
|
||||
import com.bsd.pjcloud.admin.utils.flow.dto.UserApplyFlowDto;
|
||||
import com.bsd.pjcloud.common.core.constant.CommonRoleConstant;
|
||||
import com.bsd.pjcloud.common.core.constant.enums.MerchantAttrEnum;
|
||||
import com.bsd.pjcloud.common.core.exception.ErrorCodes;
|
||||
import com.bsd.pjcloud.common.core.util.MsgUtils;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.data.resolver.ParamResolver;
|
||||
import com.bsd.pjcloud.common.data.tenant.TenantContextHolder;
|
||||
import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum;
|
||||
import com.bsd.pjcloud.wallet.api.feign.RemoteMchService;
|
||||
import com.bsd.pjcloud.wallet.api.feign.RemoteWalletService;
|
||||
import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.context.request.RequestAttributes;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.Optional;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -79,7 +80,7 @@ public class SysDeptInviteServiceImpl extends ServiceImpl<SysDeptInviteMapper, S
|
||||
private final SysRoleService sysRoleService;
|
||||
private final SysUserIdentityService sysUserIdentityService;
|
||||
private final RemoteMchService remoteMchService;
|
||||
private final RemoteWalletService remoteWalletService;
|
||||
private final ApplicationEventPublisher applicationEventPublisher;
|
||||
private final FlowUtil flowUtil;
|
||||
private final SysMessageService sysMessageService;
|
||||
|
||||
@@ -365,18 +366,19 @@ public class SysDeptInviteServiceImpl extends ServiceImpl<SysDeptInviteMapper, S
|
||||
sysUser.setPasswordExpireFlag(UserExpireEnum.NORMAL.getCode());
|
||||
sysUserMapper.insert(sysUser);
|
||||
|
||||
List<SysRole> roleList = sysRoleService.list();
|
||||
String walletAutoCreate = ParamResolver.getStr("WALLET_AUTO_CREATE");
|
||||
String userDefaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE");
|
||||
List<Long> roleIds = roleList.stream()
|
||||
.filter(v -> ObjectUtil.equals(v.getRoleCode(), walletAutoCreate)
|
||||
|| ObjectUtil.equals(v.getRoleCode(), userDefaultRole))
|
||||
.map(SysRole::getRoleId)
|
||||
.toList();
|
||||
for (Long roleId : roleIds) {
|
||||
// 与后台新增用户一致:固定 GENERAL_USER + WALLET_AUTO_CREATE(按角色编码,避免参数配置漂移)
|
||||
List<String> roleCodes = List.of(CommonRoleConstant.DEFAULT_USER, CommonRoleConstant.AUTO_CREATE_WALLET);
|
||||
List<SysRole> defaultRoles = Optional.ofNullable(sysRoleService.findRolesByCodes(roleCodes))
|
||||
.orElseGet(Collections::emptyList);
|
||||
Map<String, Long> roleIdByCode = defaultRoles.stream()
|
||||
.collect(Collectors.toMap(SysRole::getRoleCode, SysRole::getRoleId, (a, b) -> a));
|
||||
if (!roleIdByCode.keySet().containsAll(roleCodes)) {
|
||||
throw new IllegalStateException("默认用户角色配置不完整,请联系管理员配置 GENERAL_USER / WALLET_AUTO_CREATE");
|
||||
}
|
||||
for (String code : roleCodes) {
|
||||
SysUserRole userRole = new SysUserRole();
|
||||
userRole.setUserId(sysUser.getUserId());
|
||||
userRole.setRoleId(roleId);
|
||||
userRole.setRoleId(roleIdByCode.get(code));
|
||||
sysUserRoleMapper.insert(userRole);
|
||||
}
|
||||
|
||||
@@ -389,17 +391,9 @@ public class SysDeptInviteServiceImpl extends ServiceImpl<SysDeptInviteMapper, S
|
||||
return R.ok(true, "注册成功,请等待审核通过后再登录");
|
||||
}
|
||||
|
||||
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
|
||||
CompletableFuture.runAsync(() -> {
|
||||
try {
|
||||
RequestContextHolder.setRequestAttributes(requestAttributes);
|
||||
remoteWalletService.createWallet(sysUser.getUserId());
|
||||
remoteWalletService.userChange(sysUser.getUserId(), Boolean.FALSE);
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.error("|{}|创建用户钱包失败error:|{}|", TAG, e.getMessage());
|
||||
}
|
||||
});
|
||||
// 事务提交后再异步开钱包(带租户),避免 CompletableFuture 抢跑读不到新用户/丢租户头
|
||||
applicationEventPublisher.publishEvent(
|
||||
new UserWalletCreateEvent(sysUser.getUserId(), TenantContextHolder.getTenantId()));
|
||||
// 保留验证码供前端立即短信登录(登录时再消费)
|
||||
return R.ok(true, "注册成功");
|
||||
}
|
||||
|
||||
+11
-28
@@ -895,13 +895,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
}).forEach(SysUserPost::insert);
|
||||
}
|
||||
|
||||
// 创建用户默认钱包
|
||||
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
|
||||
CompletableFuture.runAsync(() -> {
|
||||
RequestContextHolder.setRequestAttributes(requestAttributes);
|
||||
remoteWalletService.createWallet(userDto.getUserId());
|
||||
remoteWalletService.userChange(userDto.getUserId(), Boolean.FALSE);
|
||||
});
|
||||
// 保存后补建默认钱包(幂等);提交后再异步执行,避免事务内/丢租户
|
||||
applicationEventPublisher.publishEvent(
|
||||
new UserWalletCreateEvent(userDto.getUserId(), TenantContextHolder.getTenantId()));
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@@ -1044,13 +1040,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
sysUser.setDeptId(defaultDeptIdLong);
|
||||
}
|
||||
baseMapper.insert(sysUser);
|
||||
// 如果角色为空,赋默认角色
|
||||
// 如果角色为空,赋默认角色(与后台新增一致:GENERAL_USER + WALLET_AUTO_CREATE)
|
||||
if (CollUtil.isEmpty(userDto.getRole())) {
|
||||
List<SysRole> roleList = sysRoleService.list();
|
||||
String walletAutoCreate = ParamResolver.getStr("WALLET_AUTO_CREATE");
|
||||
String userDefaultRole = ParamResolver.getStr("USER_DEFAULT_ROLE");
|
||||
List<Long> roleIds = roleList.stream().filter(v -> ObjectUtil.equals(v.getRoleCode(), walletAutoCreate) || ObjectUtil.equals(v.getRoleCode(), userDefaultRole)).map(SysRole::getRoleId).toList();
|
||||
userDto.setRole(roleIds);
|
||||
userDto.setRole(getNonAdminNewUserRoleIds());
|
||||
}
|
||||
// 插入用户角色关系表
|
||||
userDto.getRole().stream().map(roleId -> {
|
||||
@@ -1060,19 +1052,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
return userRole;
|
||||
}).forEach(sysUserRoleMapper::insert);
|
||||
|
||||
// 创建用户默认钱包、保证线程header
|
||||
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
|
||||
CompletableFuture.runAsync(() -> {
|
||||
try {
|
||||
RequestContextHolder.setRequestAttributes(requestAttributes);
|
||||
// 创建钱包
|
||||
remoteWalletService.createWallet(sysUser.getUserId());
|
||||
// 通知钱包
|
||||
remoteWalletService.userChange(sysUser.getUserId(), Boolean.FALSE);
|
||||
} catch (Exception e) {
|
||||
log.error("|{}|创建用户钱包失败error:|{}|", TAG, e.getMessage());
|
||||
}
|
||||
});
|
||||
// 事务提交后再异步开钱包(带租户),避免 CompletableFuture 抢跑/丢租户
|
||||
applicationEventPublisher.publishEvent(
|
||||
new UserWalletCreateEvent(sysUser.getUserId(), TenantContextHolder.getTenantId()));
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1401,8 +1383,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
cache.evict(detail.getUsername());
|
||||
}
|
||||
if (isConsent) {
|
||||
// 创建用户默认钱包
|
||||
remoteWalletService.createWallet(detail.getUserId());
|
||||
// 审批事务提交后再开钱包,避免事务内远程调用读到未提交状态/丢租户
|
||||
applicationEventPublisher.publishEvent(
|
||||
new UserWalletCreateEvent(detail.getUserId(), TenantContextHolder.getTenantId()));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
Reference in new issue
Block a user