| | |
| | | |
| | | /** |
| | | * 查找或创建选手记录 |
| | | * 逻辑: |
| | | * 1. 先保存User(根据phone查询,存在则更新,否则新增) |
| | | * 2. 再保存Player(根据userId查询,存在则更新,否则新增) |
| | | */ |
| | | private Player findOrCreatePlayer(ActivityRegistrationInput input) { |
| | | try { |
| | | // 先根据手机号查找现有选手 |
| | | String phone = input.getPlayerInfo().getPhone(); |
| | | Optional<Player> existingPlayerOpt = playerRepository.findByPhone(phone); |
| | | // 1. 先创建或更新用户记录 |
| | | User user = createOrUpdateUser(input); |
| | | |
| | | // 2. 根据userId查找现有选手 |
| | | Optional<Player> existingPlayerOpt = playerRepository.findByUserId(user.getId()); |
| | | |
| | | if (existingPlayerOpt.isPresent()) { |
| | | // 选手存在,更新选手信息 |
| | | Player existingPlayer = existingPlayerOpt.get(); |
| | | // 更新选手信息 |
| | | existingPlayer.setName(input.getPlayerInfo().getName()); |
| | | if (input.getPlayerInfo().getGender() != null) { |
| | | existingPlayer.setGender(input.getPlayerInfo().getGender()); |
| | |
| | | existingPlayer.setDescription(input.getPlayerInfo().getDescription()); |
| | | } |
| | | |
| | | // 更新关联的用户信息(如果存在) |
| | | updateUserInfo(existingPlayer, input); |
| | | |
| | | // BaseEntity会自动设置updateTime |
| | | return playerRepository.save(existingPlayer); |
| | | Player savedPlayer = playerRepository.save(existingPlayer); |
| | | log.info("更新现有选手成功,ID: {}, 姓名: {}, 用户ID: {}", savedPlayer.getId(), savedPlayer.getName(), user.getId()); |
| | | return savedPlayer; |
| | | } |
| | | |
| | | // 创建新选手 |
| | | // 选手不存在,创建新选手 |
| | | Player newPlayer = new Player(); |
| | | newPlayer.setName(input.getPlayerInfo().getName()); |
| | | newPlayer.setPhone(input.getPlayerInfo().getPhone()); |
| | | // 不再设置phone字段,phone信息统一存储在User实体中 |
| | | // newPlayer.setPhone(input.getPlayerInfo().getPhone()); // 已废弃 |
| | | newPlayer.setGender(input.getPlayerInfo().getGender()); |
| | | newPlayer.setEducation(input.getPlayerInfo().getEducation()); |
| | | newPlayer.setIntroduction(input.getPlayerInfo().getIntroduction()); |
| | | newPlayer.setDescription(input.getPlayerInfo().getDescription()); |
| | | newPlayer.setRoleId(1L); // 默认角色ID为1(学员角色) |
| | | newPlayer.setState(1); // 1表示有效状态 |
| | | |
| | | // 创建或关联用户记录 |
| | | User user = createOrUpdateUser(input); |
| | | newPlayer.setUserId(user.getId()); |
| | | |
| | | // BaseEntity会自动设置createTime和updateTime |
| | | Player savedPlayer = playerRepository.save(newPlayer); |
| | | log.info("新选手创建成功,ID: {}, 姓名: {}", savedPlayer.getId(), savedPlayer.getName()); |
| | | log.info("新选手创建成功,ID: {}, 姓名: {}, 用户ID: {}", savedPlayer.getId(), savedPlayer.getName(), user.getId()); |
| | | return savedPlayer; |
| | | |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 创建或更新用户记录 |
| | | * 创建或更新用户记录(仅在小程序报名成功时创建新用户) |
| | | */ |
| | | private User createOrUpdateUser(ActivityRegistrationInput input) { |
| | | try { |
| | | // 使用UserService的findOrCreateUserByPhone方法 |
| | | User user = userService.findOrCreateUserByPhone( |
| | | input.getPlayerInfo().getPhone(), |
| | | input.getPlayerInfo().getName(), |
| | | null // 不设置密码,使用默认密码 |
| | | ); |
| | | String phone = input.getPlayerInfo().getPhone(); |
| | | String name = input.getPlayerInfo().getName(); |
| | | |
| | | // 更新用户的生日信息 |
| | | if (input.getPlayerInfo().getBirthDate() != null) { |
| | | user.setBirthday(input.getPlayerInfo().getBirthDate()); |
| | | // 先查找现有用户 |
| | | Optional<User> existingUserOpt = userService.findByPhone(phone); |
| | | |
| | | if (existingUserOpt.isPresent()) { |
| | | // 用户存在,更新信息 |
| | | User user = existingUserOpt.get(); |
| | | user.setName(name); |
| | | |
| | | // 更新用户的生日信息 |
| | | if (input.getPlayerInfo().getBirthDate() != null) { |
| | | user.setBirthday(input.getPlayerInfo().getBirthDate()); |
| | | } |
| | | |
| | | user = userService.save(user); |
| | | log.info("更新用户生日信息成功,用户ID: {}", user.getId()); |
| | | log.info("更新现有用户信息成功,用户ID: {}", user.getId()); |
| | | return user; |
| | | } else { |
| | | // 用户不存在,创建新用户(仅在小程序报名成功时) |
| | | log.info("用户不存在,为小程序报名成功创建新用户,手机号: {}", phone); |
| | | |
| | | User newUser = new User(); |
| | | newUser.setName(name); |
| | | newUser.setPhone(phone); |
| | | newUser.setPassword(userService.getPasswordEncoder().encode("123456")); // 默认密码 |
| | | |
| | | // 设置生日信息 |
| | | if (input.getPlayerInfo().getBirthDate() != null) { |
| | | newUser.setBirthday(input.getPlayerInfo().getBirthDate()); |
| | | } |
| | | |
| | | newUser = userService.save(newUser); |
| | | log.info("为小程序报名成功创建新用户,用户ID: {}", newUser.getId()); |
| | | return newUser; |
| | | } |
| | | |
| | | return user; |
| | | } catch (Exception e) { |
| | | log.error("创建或更新用户记录时发生错误", e); |
| | | throw new RuntimeException("创建或更新用户记录失败", e); |