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 | 431 +++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 376 insertions(+), 55 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 85464e6..c59c7b8 100644
--- a/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java
+++ b/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java
@@ -8,6 +8,8 @@
import com.rongyichuang.player.entity.Player;
import com.rongyichuang.player.repository.ActivityPlayerRepository;
import com.rongyichuang.player.repository.PlayerRepository;
+import com.rongyichuang.activity.repository.ActivityRepository;
+import com.rongyichuang.activity.entity.Activity;
import com.rongyichuang.common.entity.Media;
import com.rongyichuang.common.repository.MediaRepository;
import com.rongyichuang.common.enums.MediaTargetType;
@@ -16,6 +18,8 @@
import com.rongyichuang.user.service.UserService;
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;
@@ -42,6 +46,9 @@
private PlayerRepository playerRepository;
@Autowired
+ private ActivityRepository activityRepository;
+
+ @Autowired
private MediaRepository mediaRepository;
@Autowired
@@ -53,8 +60,29 @@
@Autowired
private MediaV2Service mediaV2Service;
+ @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 鎶ュ悕杈撳叆淇℃伅
@@ -89,21 +117,30 @@
}
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());
+ 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("寮�濮嬪垱寤烘姤鍚嶈褰�");
ActivityPlayer activityPlayer = new ActivityPlayer();
activityPlayer.setActivityId(input.getActivityId());
- activityPlayer.setStageId(input.getActivityId()); // 鏍规嵁鏂囨。锛氬鏋滄瘮璧涙湭瀹氫箟闃舵锛宻tage_id璁句负activity_id
+ activityPlayer.setStageId(stageId); // 缁戝畾鍒扮涓�闃舵鎴栨椿鍔ㄦ湰韬�
activityPlayer.setPlayerId(player.getId());
activityPlayer.setRegionId(input.getRegionId());
activityPlayer.setProjectName(input.getProjectName()); // 璁剧疆椤圭洰鍚嶇О
@@ -114,18 +151,19 @@
ActivityPlayer savedActivityPlayer = activityPlayerRepository.save(activityPlayer);
log.info("鎶ュ悕璁板綍鍒涘缓鎴愬姛锛孖D: {}", savedActivityPlayer.getId());
- // 5. 淇濆瓨鍏朵粬濯掍綋鏂囦欢锛堝吋瀹规棫鐗堟湰锛�
+ // 6. 淇濆瓨鍏朵粬濯掍綋鏂囦欢锛堝吋瀹规棫鐗堟湰锛�
if (input.getMediaFiles() != null && !input.getMediaFiles().isEmpty()) {
saveMediaFiles(savedActivityPlayer.getId(), input.getMediaFiles());
}
- // 6. 淇濆瓨澶村儚濯掍綋璁板綍
+ // 7. 淇濆瓨澶村儚濯掍綋璁板綍
if (input.getPlayerInfo().getAvatarMediaId() != null && !input.getPlayerInfo().getAvatarMediaId().trim().isEmpty()) {
savePlayerAvatarMedia(player.getId(), input.getPlayerInfo().getAvatarMediaId());
}
- // 7. 淇濆瓨闄勪欢濯掍綋璁板綍
+ // 8. 淇濆瓨闄勪欢濯掍綋璁板綍
if (input.getAttachmentMediaIds() != null && !input.getAttachmentMediaIds().isEmpty()) {
+ log.info("寮�濮嬩繚瀛橀檮浠跺獟浣撹褰曪紝鎶ュ悕ID: {}, 闄勪欢鏁伴噺: {}", savedActivityPlayer.getId(), input.getAttachmentMediaIds().size());
saveAttachmentMediaRecords(savedActivityPlayer.getId(), input.getAttachmentMediaIds());
}
@@ -139,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());
@@ -163,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) {
@@ -197,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);
@@ -299,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();
@@ -329,26 +428,248 @@
}
/**
- * 淇濆瓨瀛﹀憳澶村儚
- * 鍙傝�僯udge妯″潡鐨勫疄鐜帮紝灏嗗凡涓婁紶鐨勫ご鍍忓獟浣撴枃浠跺叧鑱斿埌瀛﹀憳
+ * 瀹℃牳閫氳繃
+ */
+ public Boolean approveActivityPlayer(Long activityPlayerId, String feedback) {
+ try {
+ Optional<ActivityPlayer> activityPlayerOpt = activityPlayerRepository.findById(activityPlayerId);
+ if (!activityPlayerOpt.isPresent()) {
+ throw new RuntimeException("鎶ュ悕璁板綍涓嶅瓨鍦�");
+ }
+
+ ActivityPlayer activityPlayer = activityPlayerOpt.get();
+ activityPlayer.setState(1); // 1=瀹℃牳閫氳繃
+ activityPlayer.setFeedback(feedback);
+ activityPlayerRepository.save(activityPlayer);
+
+ // 鍒涘缓瀹℃牳閫氳繃娑堟伅
+ messageService.createApprovalMessage(
+ activityPlayerId,
+ activityPlayer.getPlayerId(),
+ activityPlayer.getProjectName()
+ );
+
+ log.info("瀹℃牳閫氳繃鎴愬姛锛宎ctivityPlayerId: {}", activityPlayerId);
+ return true;
+ } catch (Exception e) {
+ log.error("瀹℃牳閫氳繃澶辫触锛宎ctivityPlayerId: {}", activityPlayerId, e);
+ throw new RuntimeException("瀹℃牳閫氳繃澶辫触", e);
+ }
+ }
+
+ /**
+ * 瀹℃牳椹冲洖
+ */
+ public Boolean rejectActivityPlayer(Long activityPlayerId, String feedback) {
+ try {
+ Optional<ActivityPlayer> activityPlayerOpt = activityPlayerRepository.findById(activityPlayerId);
+ if (!activityPlayerOpt.isPresent()) {
+ throw new RuntimeException("鎶ュ悕璁板綍涓嶅瓨鍦�");
+ }
+
+ ActivityPlayer activityPlayer = activityPlayerOpt.get();
+ activityPlayer.setState(2); // 2=瀹℃牳椹冲洖
+ activityPlayer.setFeedback(feedback);
+ activityPlayerRepository.save(activityPlayer);
+
+ // 鍒涘缓瀹℃牳椹冲洖娑堟伅
+ messageService.createRejectionMessage(
+ activityPlayerId,
+ activityPlayer.getPlayerId(),
+ activityPlayer.getProjectName()
+ );
+
+ log.info("瀹℃牳椹冲洖鎴愬姛锛宎ctivityPlayerId: {}", activityPlayerId);
+ return true;
+ } catch (Exception e) {
+ log.error("瀹℃牳椹冲洖澶辫触锛宎ctivityPlayerId: {}", activityPlayerId, e);
+ throw new RuntimeException("瀹℃牳椹冲洖澶辫触", e);
+ }
+ }
+
+ /**
+ * 鏇存柊鎶ュ悕淇℃伅
+ */
+ public ActivityRegistrationResponse updateActivityRegistration(Long activityPlayerId, ActivityRegistrationInput input) {
+ try {
+ log.info("寮�濮嬫洿鏂版姤鍚嶄俊鎭紝鎶ュ悕ID: {}", activityPlayerId);
+
+ // 1. 鏌ユ壘鐜版湁鎶ュ悕璁板綍
+ Optional<ActivityPlayer> activityPlayerOpt = activityPlayerRepository.findById(activityPlayerId);
+ if (!activityPlayerOpt.isPresent()) {
+ throw new RuntimeException("鎶ュ悕璁板綍涓嶅瓨鍦�");
+ }
+
+ ActivityPlayer activityPlayer = activityPlayerOpt.get();
+
+ // 2. 鏇存柊閫夋墜淇℃伅
+ Player player = playerRepository.findById(activityPlayer.getPlayerId()).orElse(null);
+ if (player != null) {
+ player.setName(input.getPlayerInfo().getName());
+ if (input.getPlayerInfo().getGender() != null) {
+ player.setGender(input.getPlayerInfo().getGender());
+ }
+ if (input.getPlayerInfo().getEducation() != null) {
+ player.setEducation(input.getPlayerInfo().getEducation());
+ }
+ if (input.getPlayerInfo().getIntroduction() != null) {
+ player.setIntroduction(input.getPlayerInfo().getIntroduction());
+ }
+ if (input.getPlayerInfo().getDescription() != null) {
+ player.setDescription(input.getPlayerInfo().getDescription());
+ }
+ playerRepository.save(player);
+
+ // 鏇存柊鐢ㄦ埛淇℃伅
+ updateUserInfo(player, input);
+ }
+
+ // 3. 鏇存柊鎶ュ悕璁板綍鍩烘湰淇℃伅
+ if (input.getProjectName() != null) {
+ activityPlayer.setProjectName(input.getProjectName());
+ }
+ if (input.getDescription() != null) {
+ activityPlayer.setDescription(input.getDescription());
+ }
+ if (input.getRegionId() != null) {
+ activityPlayer.setRegionId(input.getRegionId());
+ }
+
+ activityPlayerRepository.save(activityPlayer);
+
+ // 4. 澶勭悊澶村儚鏇存柊
+ if (input.getPlayerInfo().getAvatarMediaId() != null && !input.getPlayerInfo().getAvatarMediaId().isEmpty()) {
+ // 淇濆瓨鏂板ご鍍�
+ savePlayerAvatarMedia(player.getId(), input.getPlayerInfo().getAvatarMediaId());
+ }
+
+ // 5. 澶勭悊姣旇禌鍥剧墖鍜岃棰戞洿鏂�
+ if (input.getMediaFiles() != null) {
+ // 鍒犻櫎鏃х殑姣旇禌鍥剧墖鍜岃棰戣褰�
+ deleteOldSubmissionMedia(activityPlayerId);
+ // 淇濆瓨鏂扮殑姣旇禌鍥剧墖鍜岃棰�
+ saveMediaFiles(activityPlayerId, input.getMediaFiles());
+ }
+
+ // 6. 澶勭悊闄勪欢鏇存柊
+ if (input.getAttachmentMediaIds() != null) {
+ // 鍒犻櫎鏃ч檮浠惰褰�
+ deleteOldAttachmentMedia(activityPlayerId);
+ // 淇濆瓨鏂伴檮浠�
+ saveAttachmentMediaRecords(activityPlayerId, input.getAttachmentMediaIds());
+ }
+
+ log.info("鏇存柊鎶ュ悕淇℃伅鎴愬姛锛屾姤鍚岻D: {}", activityPlayerId);
+
+ ActivityRegistrationResponse response = new ActivityRegistrationResponse();
+ response.setSuccess(true);
+ response.setMessage("鏇存柊鎶ュ悕淇℃伅鎴愬姛");
+ response.setRegistrationId(activityPlayerId);
+ response.setPlayerId(player.getId());
+ response.setUserId(player.getUserId());
+ response.setActivityPlayerId(activityPlayerId);
+
+ return response;
+
+ } catch (Exception e) {
+ log.error("鏇存柊鎶ュ悕淇℃伅澶辫触锛屾姤鍚岻D: {}", activityPlayerId, e);
+ throw new RuntimeException("鏇存柊鎶ュ悕淇℃伅澶辫触: " + e.getMessage(), e);
+ }
+ }
+
+
+
+ /**
+ * 鍒犻櫎鏃х殑姣旇禌鍥剧墖鍜岃棰戣褰�
+ */
+ private void deleteOldSubmissionMedia(Long activityPlayerId) {
+ try {
+ List<Media> oldSubmissionMedia = mediaRepository.findByTargetTypeAndTargetIdAndState(
+ MediaTargetType.ACTIVITY_PLAYER_SUBMISSION.getValue(), activityPlayerId, 1);
+ for (Media media : oldSubmissionMedia) {
+ media.setState(0); // 璁剧疆涓哄垹闄ょ姸鎬�
+ mediaRepository.save(media);
+ }
+ log.info("鍒犻櫎鏃ф瘮璧涘浘鐗�/瑙嗛璁板綍鎴愬姛锛屾姤鍚岻D: {}, 鍒犻櫎鏁伴噺: {}", activityPlayerId, oldSubmissionMedia.size());
+ } catch (Exception e) {
+ log.error("鍒犻櫎鏃ф瘮璧涘浘鐗�/瑙嗛璁板綍澶辫触锛屾姤鍚岻D: {}", activityPlayerId, e);
+ }
+ }
+
+ /**
+ * 鍒犻櫎鏃х殑闄勪欢濯掍綋璁板綍
+ */
+ private void deleteOldAttachmentMedia(Long activityPlayerId) {
+ try {
+ List<Media> oldAttachments = mediaRepository.findByTargetTypeAndTargetIdAndState(
+ 5, activityPlayerId, 1); // target_type=5 鏄檮浠�
+ for (Media oldAttachment : oldAttachments) {
+ oldAttachment.setState(0); // 璁剧疆涓哄垹闄ょ姸鎬�
+ mediaRepository.save(oldAttachment);
+ }
+ log.info("鍒犻櫎鏃ч檮浠惰褰曟垚鍔燂紝鎶ュ悕ID: {}, 鍒犻櫎鏁伴噺: {}", activityPlayerId, oldAttachments.size());
+ } catch (Exception e) {
+ log.error("鍒犻櫎鏃ч檮浠惰褰曞け璐ワ紝鎶ュ悕ID: {}", activityPlayerId, e);
+ }
+ }
+
+ /**
+ * 鏇存柊瀹℃牳鎰忚
+ */
+ public Boolean updateFeedback(Long activityPlayerId, String feedback) {
+ try {
+ Optional<ActivityPlayer> activityPlayerOpt = activityPlayerRepository.findById(activityPlayerId);
+ if (!activityPlayerOpt.isPresent()) {
+ throw new RuntimeException("鎶ュ悕璁板綍涓嶅瓨鍦�");
+ }
+
+ ActivityPlayer activityPlayer = activityPlayerOpt.get();
+ activityPlayer.setFeedback(feedback);
+ activityPlayerRepository.save(activityPlayer);
+
+ log.info("鏇存柊瀹℃牳鎰忚鎴愬姛锛宎ctivityPlayerId: {}", activityPlayerId);
+ return true;
+ } catch (Exception e) {
+ log.error("鏇存柊瀹℃牳鎰忚澶辫触锛宎ctivityPlayerId: {}", activityPlayerId, e);
+ throw new RuntimeException("鏇存柊瀹℃牳鎰忚澶辫触", e);
+ }
+ }
+
+ /**
+ * 淇濆瓨鐢ㄦ埛澶村儚
+ * 灏嗗凡涓婁紶鐨勫ご鍍忓獟浣撴枃浠跺叧鑱斿埌鐢ㄦ埛
*/
private void savePlayerAvatar(Long playerId, Long avatarMediaId) {
try {
- // 鏌ユ壘鐜版湁鐨勫ご鍍忚褰曞苟鍒犻櫎锛堢‘淇濅竴涓鍛樺彧鏈変竴涓ご鍍忥級
- mediaRepository.deleteByTargetTypeAndTargetId(MediaTargetType.STUDENT_AVATAR.getValue(), playerId);
+ // 鑾峰彇player瀵瑰簲鐨勭敤鎴稩D
+ Optional<Player> playerOpt = playerRepository.findById(playerId);
+ if (!playerOpt.isPresent()) {
+ log.warn("鏈壘鍒板鍛樿褰曪紝瀛﹀憳ID: {}", playerId);
+ return;
+ }
+
+ Player player = playerOpt.get();
+ Long userId = player.getUserId();
+ if (userId == null) {
+ log.warn("瀛﹀憳鏈叧鑱旂敤鎴凤紝瀛﹀憳ID: {}", playerId);
+ return;
+ }
+
+ // 鏌ユ壘鐜版湁鐨勫ご鍍忚褰曞苟鍒犻櫎锛堢‘淇濅竴涓敤鎴峰彧鏈変竴涓ご鍍忥級
+ mediaRepository.deleteByTargetTypeAndTargetId(MediaTargetType.USER_AVATAR.getValue(), userId);
// 鏇存柊濯掍綋鏂囦欢鐨則arget淇℃伅
Media avatarMedia = mediaRepository.findById(avatarMediaId).orElse(null);
if (avatarMedia != null) {
- avatarMedia.setTargetType(MediaTargetType.STUDENT_AVATAR.getValue());
- avatarMedia.setTargetId(playerId);
+ avatarMedia.setTargetType(MediaTargetType.USER_AVATAR.getValue());
+ avatarMedia.setTargetId(userId);
mediaRepository.save(avatarMedia);
- log.info("瀛﹀憳澶村儚淇濆瓨鎴愬姛锛屽鍛業D: {}, 濯掍綋ID: {}", playerId, avatarMediaId);
+ log.info("鐢ㄦ埛澶村儚淇濆瓨鎴愬姛锛岀敤鎴稩D: {}, 濯掍綋ID: {}", userId, avatarMediaId);
} else {
log.warn("鏈壘鍒板ご鍍忓獟浣撴枃浠讹紝濯掍綋ID: {}", avatarMediaId);
}
} catch (Exception e) {
- log.error("淇濆瓨瀛﹀憳澶村儚鏃跺彂鐢熼敊璇紝瀛﹀憳ID: {}, 濯掍綋ID: {}", playerId, avatarMediaId, e);
+ log.error("淇濆瓨鐢ㄦ埛澶村儚鏃跺彂鐢熼敊璇紝瀛﹀憳ID: {}, 濯掍綋ID: {}", playerId, avatarMediaId, e);
}
}
@@ -385,7 +706,7 @@
MediaSaveInput input = new MediaSaveInput();
input.setTargetType("player");
input.setTargetId(playerId);
- input.setUrl(avatarMediaId); // COS璺緞
+ input.setPath(avatarMediaId); // COS璺緞
input.setFileName("avatar.jpg"); // 榛樿澶村儚鏂囦欢鍚�
input.setFileExt("jpg"); // 鏂囦欢鎵╁睍鍚�
input.setFileSize(0L); // 鏂囦欢澶у皬鏆傛椂璁句负0
@@ -411,7 +732,7 @@
MediaSaveInput input = new MediaSaveInput();
input.setTargetType("activity_player");
input.setTargetId(activityPlayerId);
- input.setUrl(mediaId); // COS璺緞
+ input.setPath(mediaId); // COS璺緞
input.setFileName("attachment"); // 榛樿闄勪欢鏂囦欢鍚�
input.setFileExt("jpg"); // 鏂囦欢鎵╁睍鍚�
input.setFileSize(0L); // 鏂囦欢澶у皬鏆傛椂璁句负0
--
Gitblit v1.8.0