From 3714621173c606c4c58439ed8941100ce9ddea14 Mon Sep 17 00:00:00 2001
From: Codex Assistant <codex@example.com>
Date: 星期三, 05 十一月 2025 15:10:49 +0800
Subject: [PATCH] bug
---
backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java | 174 +++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 125 insertions(+), 49 deletions(-)
diff --git a/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java b/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java
index 6cb95a5..c59c7b8 100644
--- a/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java
+++ b/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java
@@ -19,6 +19,7 @@
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;
@@ -62,8 +63,26 @@
@Autowired
private MessageService messageService;
+ @Autowired
+ private JwtUtil jwtUtil;
+ public ActivityPlayer getMyActivityPlayer(Long activityId) {
+ Long userId = userContextUtil.getCurrentUserId();
+ if (userId == null) {
+ return null;
+ }
+ Optional<Player> playerOpt = playerRepository.findByUserId(userId);
+ if (playerOpt.isEmpty()) {
+ return null;
+ }
+ Player player = playerOpt.get();
+ List<ActivityPlayer> activityPlayers = activityPlayerRepository.findByActivityIdAndPlayerIdOrderByCreateTimeDesc(activityId, player.getId());
+ if (activityPlayers.isEmpty()) {
+ return null;
+ }
+ return activityPlayers.get(0);
+ }
/**
* 鎻愪氦娲诲姩鎶ュ悕
* @param input 鎶ュ悕杈撳叆淇℃伅
@@ -98,28 +117,24 @@
}
log.info("閫夋墜璁板綍澶勭悊鎴愬姛锛岄�夋墜ID: {}", player.getId());
- // 3. 妫�鏌ユ槸鍚﹀凡缁忔姤鍚�
- log.info("妫�鏌ユ槸鍚﹀凡缁忔姤鍚嶏紝娲诲姩ID: {}, 閫夋墜ID: {}", input.getActivityId(), player.getId());
- Optional<ActivityPlayer> existingRegistration = activityPlayerRepository
- .findByActivityIdAndPlayerId(input.getActivityId(), player.getId());
- if (existingRegistration.isPresent()) {
- log.warn("閫夋墜宸茬粡鎶ュ悕杩囨娲诲姩");
- return ActivityRegistrationResponse.error("鎮ㄥ凡缁忔姤鍚嶈繃姝ゆ椿鍔�");
+ // 3. 妫�鏌ユ槸鍚﹀凡缁忔姤鍚嶏紙涓ユ牸闄愬畾鍚屼竴娲诲姩+鍚屼竴閫夋墜锛�
+ log.info("妫�鏌ユ槸鍚﹀瓨鍦ㄦ湁鏁堟姤鍚嶏紙state IN 0,1锛夛紝娲诲姩ID: {}, 閫夋墜ID: {}", input.getActivityId(), player.getId());
+ Long activeOrPendingCount = activityPlayerRepository.countActiveOrPendingByActivityAndPlayer(input.getActivityId(), player.getId());
+ if (activeOrPendingCount != null && activeOrPendingCount > 0) {
+ log.warn("鍚屼竴娲诲姩涓庨�夋墜瀛樺湪寰呭鏍告垨宸查�氳繃鐨勬姤鍚嶈褰曪紝绂佹閲嶅鎻愪氦銆俢ount={}", activeOrPendingCount);
+ return ActivityRegistrationResponse.error("鎮ㄥ湪璇ユ椿鍔ㄥ凡鏈夊緟瀹℃牳鎴栧凡閫氳繃鐨勬姤鍚嶏紝璇峰嬁閲嶅鎻愪氦");
}
- log.info("鏈彂鐜伴噸澶嶆姤鍚�");
+ log.info("鏈彂鐜版湁鏁堟姤鍚嶏紝鍏佽鍒涘缓鏂扮殑鎶ュ悕璁板綍銆�");
- // 4. 鏌ユ壘绗竴闃舵锛屽鏋滄病鏈夊垯浣跨敤娲诲姩鏈韩
+ // 4. 鏌ユ壘绗竴闃舵锛堜弗鏍硷細pid=娲诲姩ID 涓� sort_order=1锛夛紝鏈厤缃垯鎷掔粷鎶ュ悕
log.info("鏌ユ壘娲诲姩鐨勭涓�闃舵锛屾椿鍔↖D: {}", input.getActivityId());
Activity firstStage = activityRepository.findFirstStageByActivityId(input.getActivityId());
- Long stageId;
- if (firstStage != null) {
- stageId = firstStage.getId();
- log.info("鎵惧埌绗竴闃舵锛岄樁娈礗D: {}, 闃舵鍚嶇О: {}", firstStage.getId(), firstStage.getName());
- } else {
- // 濡傛灉娌℃湁鎵惧埌绗竴闃舵锛屼娇鐢ㄦ椿鍔ㄦ湰韬綔涓洪樁娈�
- stageId = input.getActivityId();
- log.info("鏈壘鍒扮涓�闃舵锛屼娇鐢ㄦ椿鍔ㄦ湰韬綔涓洪樁娈碉紝娲诲姩ID: {}", input.getActivityId());
+ if (firstStage == null) {
+ log.warn("鏈壘鍒扮涓�闃舵锛坧id={}, sort_order=1锛夛紝鎷掔粷鎶ュ悕銆傛椿鍔↖D: {}", input.getActivityId(), input.getActivityId());
+ return ActivityRegistrationResponse.error("娲诲姩鏈厤缃涓�闃舵锛屾棤娉曟姤鍚�");
}
+ Long stageId = firstStage.getId();
+ log.info("鎵惧埌绗竴闃舵锛岄樁娈礗D: {}, 闃舵鍚嶇О: {}", firstStage.getId(), firstStage.getName());
// 5. 鍒涘缓鎶ュ悕璁板綍
log.info("寮�濮嬪垱寤烘姤鍚嶈褰�");
@@ -162,16 +177,21 @@
/**
* 鏌ユ壘鎴栧垱寤洪�夋墜璁板綍
+ * 閫昏緫锛�
+ * 1. 鍏堜繚瀛楿ser锛堟牴鎹畃hone鏌ヨ锛屽瓨鍦ㄥ垯鏇存柊锛屽惁鍒欐柊澧烇級
+ * 2. 鍐嶄繚瀛楶layer锛堟牴鎹畊serId鏌ヨ锛屽瓨鍦ㄥ垯鏇存柊锛屽惁鍒欐柊澧烇級
*/
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());
@@ -186,31 +206,28 @@
existingPlayer.setDescription(input.getPlayerInfo().getDescription());
}
- // 鏇存柊鍏宠仈鐨勭敤鎴蜂俊鎭紙濡傛灉瀛樺湪锛�
- updateUserInfo(existingPlayer, input);
-
// BaseEntity浼氳嚜鍔ㄨ缃畊pdateTime
- return playerRepository.save(existingPlayer);
+ Player savedPlayer = playerRepository.save(existingPlayer);
+ log.info("鏇存柊鐜版湁閫夋墜鎴愬姛锛孖D: {}, 濮撳悕: {}, 鐢ㄦ埛ID: {}", savedPlayer.getId(), savedPlayer.getName(), user.getId());
+ return savedPlayer;
}
- // 鍒涘缓鏂伴�夋墜
+ // 閫夋墜涓嶅瓨鍦紝鍒涘缓鏂伴�夋墜
Player newPlayer = new Player();
newPlayer.setName(input.getPlayerInfo().getName());
- newPlayer.setPhone(input.getPlayerInfo().getPhone());
+ // 涓嶅啀璁剧疆phone瀛楁锛宲hone淇℃伅缁熶竴瀛樺偍鍦║ser瀹炰綋涓�
+ // 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浼氳嚜鍔ㄨ缃甤reateTime鍜寀pdateTime
Player savedPlayer = playerRepository.save(newPlayer);
- log.info("鏂伴�夋墜鍒涘缓鎴愬姛锛孖D: {}, 濮撳悕: {}", savedPlayer.getId(), savedPlayer.getName());
+ log.info("鏂伴�夋墜鍒涘缓鎴愬姛锛孖D: {}, 濮撳悕: {}, 鐢ㄦ埛ID: {}", savedPlayer.getId(), savedPlayer.getName(), user.getId());
return savedPlayer;
} catch (Exception e) {
@@ -220,25 +237,83 @@
}
/**
- * 鍒涘缓鎴栨洿鏂扮敤鎴疯褰�
+ * 鍒涘缓鎴栨洿鏂扮敤鎴疯褰曪紙浠呭湪灏忕▼搴忔姤鍚嶆垚鍔熸椂鍒涘缓鏂扮敤鎴凤級
*/
private User createOrUpdateUser(ActivityRegistrationInput input) {
try {
- // 浣跨敤UserService鐨刦indOrCreateUserByPhone鏂规硶
- 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());
- user = userService.save(user);
- log.info("鏇存柊鐢ㄦ埛鐢熸棩淇℃伅鎴愬姛锛岀敤鎴稩D: {}", user.getId());
+ // 鑾峰彇褰撳墠鐢ㄦ埛鐨剋xopenid锛堜粠JWT token涓級
+ String currentWxOpenid = null;
+ try {
+ String token = userContextUtil.getTokenFromRequest();
+ if (token != null && jwtUtil.validateToken(token)) {
+ currentWxOpenid = jwtUtil.getWxOpenidFromToken(token);
+ log.debug("浠嶫WT token涓幏鍙栧埌wxopenid: {}", currentWxOpenid);
+ }
+ } catch (Exception e) {
+ log.warn("鑾峰彇褰撳墠鐢ㄦ埛wxopenid鏃跺彂鐢熷紓甯�: {}", e.getMessage());
}
- return user;
+ // 鍏堟煡鎵剧幇鏈夌敤鎴�
+ 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());
+ }
+
+ // 鏇存柊wxopenid锛堝鏋滃綋鍓峵oken涓寘鍚笖涓嶄负绌猴級
+ if (currentWxOpenid != null && !currentWxOpenid.trim().isEmpty()) {
+ // 妫�鏌ヨ繖涓猳penid鏄惁宸茬粡琚叾浠栫敤鎴蜂娇鐢�
+ 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 {} 宸茶鍏朵粬鐢ㄦ埛浣跨敤锛岀敤鎴稩D: {}", currentWxOpenid, existingUserWithOpenid.get().getId());
+ }
+ }
+
+ user = userService.save(user);
+ log.info("鏇存柊鐜版湁鐢ㄦ埛淇℃伅鎴愬姛锛岀敤鎴稩D: {}", 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());
+ }
+
+ // 璁剧疆wxopenid锛堝鏋滃綋鍓峵oken涓寘鍚笖涓嶄负绌猴級
+ if (currentWxOpenid != null && !currentWxOpenid.trim().isEmpty()) {
+ // 妫�鏌ヨ繖涓猳penid鏄惁宸茬粡琚叾浠栫敤鎴蜂娇鐢�
+ Optional<User> existingUserWithOpenid = userService.findByWxOpenid(currentWxOpenid);
+ if (existingUserWithOpenid.isEmpty()) {
+ newUser.setWxOpenid(currentWxOpenid);
+ log.info("涓烘柊鐢ㄦ埛璁剧疆wxopenid: {}", currentWxOpenid);
+ } else {
+ log.warn("wxopenid {} 宸茶鍏朵粬鐢ㄦ埛浣跨敤锛岀敤鎴稩D: {}", currentWxOpenid, existingUserWithOpenid.get().getId());
+ }
+ }
+
+ newUser = userService.save(newUser);
+ log.info("涓哄皬绋嬪簭鎶ュ悕鎴愬姛鍒涘缓鏂扮敤鎴凤紝鐢ㄦ埛ID: {}", newUser.getId());
+ return newUser;
+ }
} catch (Exception e) {
log.error("鍒涘缓鎴栨洿鏂扮敤鎴疯褰曟椂鍙戠敓閿欒", e);
throw new RuntimeException("鍒涘缓鎴栨洿鏂扮敤鎴疯褰曞け璐�", e);
@@ -322,16 +397,17 @@
Player player = playerOpt.get();
- // 鏌ユ壘璇ョ帺瀹跺湪鎸囧畾娲诲姩涓殑鎶ュ悕璁板綍
- Optional<ActivityPlayer> activityPlayerOpt = activityPlayerRepository
- .findByActivityIdAndPlayerId(activityId, player.getId());
+ // 鏌ユ壘璇ョ帺瀹跺湪鎸囧畾娲诲姩涓殑鎶ュ悕璁板綍锛堣幏鍙栨渶鏂扮殑锛�
+ List<ActivityPlayer> activityPlayers = activityPlayerRepository
+ .findByActivityIdAndPlayerIdOrderByCreateTimeDesc(activityId, player.getId());
- if (!activityPlayerOpt.isPresent()) {
+ if (activityPlayers.isEmpty()) {
log.info("鐜╁ {} 鏈湪娲诲姩 {} 涓姤鍚�", player.getId(), activityId);
return null;
}
- ActivityPlayer activityPlayer = activityPlayerOpt.get();
+ // 鑾峰彇鏈�鏂扮殑鎶ュ悕璁板綍
+ ActivityPlayer activityPlayer = activityPlayers.get(0);
// 鏋勫缓鍝嶅簲瀵硅薄
PlayerRegistrationResponse response = new PlayerRegistrationResponse();
--
Gitblit v1.8.0