| | |
| | | import com.rongyichuang.media.service.MediaV2Service; |
| | | import com.rongyichuang.media.dto.MediaSaveInput; |
| | | import com.rongyichuang.message.service.MessageService; |
| | | import com.rongyichuang.auth.util.JwtUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | |
| | | @Autowired |
| | | private MessageService messageService; |
| | | |
| | | @Autowired |
| | | private JwtUtil jwtUtil; |
| | | |
| | | |
| | | public ActivityPlayer getMyActivityPlayer(Long activityId) { |
| | |
| | | |
| | | /** |
| | | * 查找或创建选手记录 |
| | | * 逻辑: |
| | | * 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) { |
| | |
| | | String phone = input.getPlayerInfo().getPhone(); |
| | | String name = input.getPlayerInfo().getName(); |
| | | |
| | | // 获取当前用户的wxopenid(从JWT token中) |
| | | String currentWxOpenid = null; |
| | | try { |
| | | String token = userContextUtil.getTokenFromRequest(); |
| | | if (token != null && jwtUtil.validateToken(token)) { |
| | | currentWxOpenid = jwtUtil.getWxOpenidFromToken(token); |
| | | log.debug("从JWT token中获取到wxopenid: {}", currentWxOpenid); |
| | | } |
| | | } catch (Exception e) { |
| | | log.warn("获取当前用户wxopenid时发生异常: {}", e.getMessage()); |
| | | } |
| | | |
| | | // 先查找现有用户 |
| | | Optional<User> existingUserOpt = userService.findByPhone(phone); |
| | | |
| | |
| | | // 更新用户的生日信息 |
| | | if (input.getPlayerInfo().getBirthDate() != null) { |
| | | user.setBirthday(input.getPlayerInfo().getBirthDate()); |
| | | } |
| | | |
| | | // 更新wxopenid(如果当前token中包含且不为空) |
| | | if (currentWxOpenid != null && !currentWxOpenid.trim().isEmpty()) { |
| | | // 检查这个openid是否已经被其他用户使用 |
| | | Optional<User> existingUserWithOpenid = userService.findByWxOpenid(currentWxOpenid); |
| | | if (existingUserWithOpenid.isEmpty() || existingUserWithOpenid.get().getId().equals(user.getId())) { |
| | | user.setWxOpenid(currentWxOpenid); |
| | | log.info("更新用户wxopenid: {}", currentWxOpenid); |
| | | } else { |
| | | log.warn("wxopenid {} 已被其他用户使用,用户ID: {}", currentWxOpenid, existingUserWithOpenid.get().getId()); |
| | | } |
| | | } |
| | | |
| | | user = userService.save(user); |
| | |
| | | newUser.setBirthday(input.getPlayerInfo().getBirthDate()); |
| | | } |
| | | |
| | | // 设置wxopenid(如果当前token中包含且不为空) |
| | | if (currentWxOpenid != null && !currentWxOpenid.trim().isEmpty()) { |
| | | // 检查这个openid是否已经被其他用户使用 |
| | | Optional<User> existingUserWithOpenid = userService.findByWxOpenid(currentWxOpenid); |
| | | if (existingUserWithOpenid.isEmpty()) { |
| | | newUser.setWxOpenid(currentWxOpenid); |
| | | log.info("为新用户设置wxopenid: {}", currentWxOpenid); |
| | | } else { |
| | | log.warn("wxopenid {} 已被其他用户使用,用户ID: {}", currentWxOpenid, existingUserWithOpenid.get().getId()); |
| | | } |
| | | } |
| | | |
| | | newUser = userService.save(newUser); |
| | | log.info("为小程序报名成功创建新用户,用户ID: {}", newUser.getId()); |
| | | return newUser; |