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/ActivityPlayerDetailService.java | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 202 insertions(+), 21 deletions(-)
diff --git a/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerDetailService.java b/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerDetailService.java
index 00413de..df96807 100644
--- a/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerDetailService.java
+++ b/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerDetailService.java
@@ -1,20 +1,27 @@
package com.rongyichuang.player.service;
import com.rongyichuang.player.dto.response.*;
+import com.rongyichuang.player.dto.response.RegionInfoResponse;
import com.rongyichuang.rating.dto.response.RatingItemResponse;
import com.rongyichuang.rating.entity.RatingScheme;
import com.rongyichuang.rating.repository.RatingSchemeRepository;
import com.rongyichuang.common.entity.Media;
import com.rongyichuang.common.enums.MediaTargetType;
import com.rongyichuang.common.repository.MediaRepository;
+import com.rongyichuang.common.dto.response.MediaResponse;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
+import jakarta.persistence.Query;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
import java.util.stream.Collectors;
/**
@@ -30,6 +37,9 @@
private final MediaRepository mediaRepository;
private final RatingSchemeRepository ratingSchemeRepository;
+
+ @Value("${app.media-url}")
+ private String mediaBaseUrl;
public ActivityPlayerDetailService(MediaRepository mediaRepository,
RatingSchemeRepository ratingSchemeRepository) {
@@ -45,51 +55,172 @@
public ActivityPlayerDetailResponse getDetailForRating(Long activityPlayerId) {
log.info("鑾峰彇鎶ュ悕璇︽儏鐢ㄤ簬璇勫垎锛宎ctivityPlayerId: {}", activityPlayerId);
- // 鏌ヨ鍩烘湰淇℃伅
+ // 鏌ヨ鍩烘湰淇℃伅锛屽寘鍚尯鍩熶俊鎭�
String sql = """
- SELECT ap.id, ap.description, ap.activity_id,
- p.id as player_id, p.name as player_name, p.phone, p.description as player_desc,
- a.name as activity_name, a.rating_scheme_id
+ SELECT ap.id as ap_id, ap.description as ap_description, ap.activity_id, ap.region_id, ap.stage_id,
+ ap.project_name, ap.feedback, ap.state as ap_state,
+ p.id as player_id, p.name as player_name, u.phone, p.description as player_desc,
+ p.gender, u.birthday, p.education, p.introduction, u.id as user_id,
+ u.name as user_name, u.phone as user_phone,
+ a.name as activity_name, a.rating_scheme_id,
+ r.id as region_id, r.name as region_name, r.full_path as region_path
FROM t_activity_player ap
JOIN t_player p ON p.id = ap.player_id
+ JOIN t_user u ON u.id = p.user_id
JOIN t_activity a ON a.id = ap.activity_id
+ LEFT JOIN t_region r ON r.id = ap.region_id
WHERE ap.id = ?
""";
@SuppressWarnings("unchecked")
- List<Object[]> results = em.createNativeQuery(sql)
- .setParameter(1, activityPlayerId)
- .getResultList();
+ Query query = em.createNativeQuery(sql);
+ query.setParameter(1, activityPlayerId);
+
+ // 浣跨敤 Tuple 鏉ヨ幏鍙栧懡鍚嶅瓧娈�
+ query.unwrap(org.hibernate.query.NativeQuery.class).setTupleTransformer(
+ (tuple, aliases) -> {
+ Map<String, Object> result = new HashMap<>();
+ for (int i = 0; i < aliases.length; i++) {
+ result.put(aliases[i], tuple[i]);
+ }
+ return result;
+ }
+ );
+
+ @SuppressWarnings("unchecked")
+ List<Map<String, Object>> results = query.getResultList();
if (results.isEmpty()) {
log.warn("鏈壘鍒版姤鍚嶈褰曪紝activityPlayerId: {}", activityPlayerId);
return null;
}
- Object[] row = results.get(0);
+ Map<String, Object> row = results.get(0);
ActivityPlayerDetailResponse response = new ActivityPlayerDetailResponse();
response.setId(activityPlayerId);
- response.setDescription(row[1] != null ? row[1].toString() : "");
- response.setActivityName(row[7] != null ? row[7].toString() : "");
+ response.setDescription(row.get("ap_description") != null ? row.get("ap_description").toString() : "");
+ response.setProjectName(row.get("project_name") != null ? row.get("project_name").toString() : "");
+ response.setFeedback(row.get("feedback") != null ? row.get("feedback").toString() : "");
+
+ Object stateObj = row.get("ap_state");
+ if (stateObj != null) {
+ if (stateObj instanceof Number) {
+ response.setState(((Number) stateObj).intValue());
+ } else {
+ log.warn("鐘舵�佺被鍨嬩笉鍖归厤: {}, 绫诲瀷: {}", stateObj, stateObj.getClass().getName());
+ response.setState(Integer.valueOf(stateObj.toString()));
+ }
+ } else {
+ response.setState(0);
+ }
+ response.setActivityName(row.get("activity_name") != null ? row.get("activity_name").toString() : "");
+
+ // 璁剧疆闃舵ID
+ Object stageIdObj = row.get("stage_id");
+ if (stageIdObj != null) {
+ if (stageIdObj instanceof Number) {
+ response.setStageId(((Number) stageIdObj).longValue());
+ } else {
+ log.warn("闃舵ID绫诲瀷涓嶅尮閰�: {}, 绫诲瀷: {}", stageIdObj, stageIdObj.getClass().getName());
+ response.setStageId(Long.valueOf(stageIdObj.toString()));
+ }
+ } else {
+ response.setStageId(null);
+ }
// 鏋勫缓瀛﹀憳淇℃伅
PlayerInfoResponse playerInfo = new PlayerInfoResponse();
- playerInfo.setId(row[3] != null ? ((Number) row[3]).longValue() : null);
- playerInfo.setName(row[4] != null ? row[4].toString() : "");
- playerInfo.setPhone(row[5] != null ? row[5].toString() : "");
- playerInfo.setDescription(row[6] != null ? row[6].toString() : "");
+ Object playerIdObj = row.get("player_id");
+ if (playerIdObj != null) {
+ if (playerIdObj instanceof Number) {
+ playerInfo.setId(((Number) playerIdObj).longValue());
+ } else {
+ log.warn("瀛﹀憳ID绫诲瀷涓嶅尮閰�: {}, 绫诲瀷: {}", playerIdObj, playerIdObj.getClass().getName());
+ playerInfo.setId(Long.valueOf(playerIdObj.toString()));
+ }
+ } else {
+ playerInfo.setId(null);
+ }
+ playerInfo.setName(row.get("player_name") != null ? row.get("player_name").toString() : "");
+ playerInfo.setPhone(row.get("phone") != null ? row.get("phone").toString() : "");
+ playerInfo.setDescription(row.get("player_desc") != null ? row.get("player_desc").toString() : "");
+
+ Object genderObj = row.get("gender");
+ if (genderObj != null) {
+ if (genderObj instanceof Number) {
+ playerInfo.setGender(((Number) genderObj).intValue());
+ } else {
+ log.warn("鎬у埆绫诲瀷涓嶅尮閰�: {}, 绫诲瀷: {}", genderObj, genderObj.getClass().getName());
+ playerInfo.setGender(Integer.valueOf(genderObj.toString()));
+ }
+ } else {
+ playerInfo.setGender(null);
+ }
+
+ Object birthdayObj = row.get("birthday");
+ playerInfo.setBirthday(birthdayObj != null ?
+ (birthdayObj instanceof java.sql.Date ? ((java.sql.Date) birthdayObj).toString() : birthdayObj.toString()) : null);
+ Object educationObj = row.get("education");
+ log.info("璋冭瘯锛氫粠鏁版嵁搴撴煡璇㈠埌鐨別ducation鍊�: {}", educationObj);
+ playerInfo.setEducation(educationObj != null ? educationObj.toString() : "");
+ playerInfo.setIntroduction(row.get("introduction") != null ? row.get("introduction").toString() : "");
- // 鏌ヨ瀛﹀憳澶村儚锛堜娇鐢ㄦ灇涓惧父閲忚〃绀哄鍛樺ご鍍忕被鍨嬶級
- if (playerInfo.getId() != null) {
+ // 鏋勫缓鍖哄煙淇℃伅
+ Object regionIdObj = row.get("region_id");
+ if (regionIdObj != null) {
+ RegionInfoResponse regionInfo = new RegionInfoResponse();
+ if (regionIdObj instanceof Number) {
+ regionInfo.setId(((Number) regionIdObj).longValue());
+ } else {
+ log.warn("鍖哄煙ID绫诲瀷涓嶅尮閰�: {}, 绫诲瀷: {}", regionIdObj, regionIdObj.getClass().getName());
+ regionInfo.setId(Long.valueOf(regionIdObj.toString()));
+ }
+ regionInfo.setName(row.get("region_name") != null ? row.get("region_name").toString() : "");
+ regionInfo.setFullPath(row.get("region_path") != null ? row.get("region_path").toString() : "");
+ response.setRegionInfo(regionInfo);
+ log.info("鎵惧埌鍖哄煙淇℃伅: {}", regionInfo.getName());
+ }
+
+ // 鏋勫缓鐢ㄦ埛淇℃伅瀵硅薄锛屽寘鍚ご鍍�
+ Object userIdObj = row.get("user_id");
+ log.info("璋冭瘯锛氫粠鏌ヨ缁撴灉涓幏鍙栫殑user_id: {}", userIdObj);
+ if (userIdObj != null) {
+ Long userId;
+ if (userIdObj instanceof Number) {
+ userId = ((Number) userIdObj).longValue();
+ } else {
+ userId = Long.valueOf(userIdObj.toString());
+ }
+ log.info("璋冭瘯锛氳В鏋愬悗鐨剈serId: {}", userId);
+
+ // 鍒涘缓PlayerUserInfo瀵硅薄
+ PlayerUserInfoResponse userInfo = new PlayerUserInfoResponse();
+ userInfo.setUserId(userId);
+ userInfo.setName(row.get("user_name") != null ? row.get("user_name").toString() : "");
+ userInfo.setPhone(row.get("user_phone") != null ? row.get("user_phone").toString() : "");
+
+ // 鏌ヨ鐢ㄦ埛澶村儚
List<Media> avatarMedias = mediaRepository.findByTargetTypeAndTargetIdAndState(
- MediaTargetType.STUDENT_AVATAR.getValue(), playerInfo.getId(), 1);
+ MediaTargetType.USER_AVATAR.getValue(), userId, 1);
+ log.info("璋冭瘯锛氭煡璇㈠埌鐨勫ご鍍忓獟浣撴暟閲�: {}", avatarMedias.size());
if (!avatarMedias.isEmpty()) {
Media avatar = avatarMedias.get(0);
- String avatarUrl = avatar.getPath();
+ String avatarUrl = buildFullMediaUrl(avatar.getPath());
+ userInfo.setAvatarUrl(avatarUrl);
+ userInfo.setAvatar(convertToMediaResponse(avatar));
+ // 鍚屾璧嬪�煎埌 playerInfo锛屼究浜庡墠绔洿鎺ヤ娇鐢� playerInfo.avatarUrl
playerInfo.setAvatarUrl(avatarUrl);
- log.info("鎵惧埌瀛﹀憳澶村儚: {}", avatarUrl);
+ playerInfo.setAvatar(convertToMediaResponse(avatar));
+ log.info("鎵惧埌鐢ㄦ埛澶村儚: {}", avatarUrl);
+ } else {
+ log.info("璋冭瘯锛氭湭鎵惧埌鐢ㄦ埛澶村儚锛寀serId: {}, targetType: {}", userId, MediaTargetType.USER_AVATAR.getValue());
}
+
+ playerInfo.setUserInfo(userInfo);
+ } else {
+ log.warn("璋冭瘯锛歶ser_id涓簄ull");
}
+
response.setPlayerInfo(playerInfo);
// 鏌ヨ鎻愪氦鐨勮祫鏂欙紙浣跨敤鏋氫妇甯搁噺琛ㄧず鍙傝禌鎶ュ悕璧勬枡绫诲瀷锛�
@@ -102,7 +233,8 @@
log.info("鎵惧埌鎻愪氦璧勬枡 {} 涓�", submissionFiles.size());
// 鏌ヨ璇勫垎妯℃澘
- Long ratingSchemeId = row[8] != null ? ((Number) row[8]).longValue() : null;
+ Object ratingSchemeIdObj = row.get("rating_scheme_id");
+ Long ratingSchemeId = ratingSchemeIdObj != null ? ((Number) ratingSchemeIdObj).longValue() : null;
if (ratingSchemeId != null) {
RatingFormResponse ratingForm = buildRatingForm(ratingSchemeId);
response.setRatingForm(ratingForm);
@@ -118,10 +250,14 @@
SubmissionMediaResponse response = new SubmissionMediaResponse();
response.setId(media.getId());
response.setName(media.getName());
- response.setUrl(media.getPath());
+ response.setPath(media.getPath());
+ response.setUrl(buildFullMediaUrl(media.getPath()));
+ response.setFullUrl(buildFullMediaUrl(media.getPath()));
+ response.setFullThumbUrl(buildFullMediaUrl(media.getThumbPath()));
response.setFileExt(media.getFileExt());
response.setFileSize(media.getFileSize() != null ? media.getFileSize().longValue() : null);
response.setMediaType(media.getMediaType());
+ response.setThumbUrl(buildFullMediaUrl(media.getThumbPath()));
return response;
}
@@ -155,4 +291,49 @@
return response;
}
+
+ /**
+ * 杞崲濯掍綋鏂囦欢涓篗ediaResponse
+ */
+ private MediaResponse convertToMediaResponse(Media media) {
+ MediaResponse response = new MediaResponse();
+ response.setId(media.getId());
+ response.setName(media.getName());
+ response.setPath(media.getPath());
+ response.setFileSize(media.getFileSize());
+ response.setFileExt(media.getFileExt());
+ response.setThumbPath(media.getThumbPath());
+ response.setDuration(media.getDuration());
+ response.setDescription(media.getDescription());
+ response.setTargetType(media.getTargetType());
+ response.setTargetId(media.getTargetId());
+ response.setMediaType(media.getMediaType());
+
+ // 璁剧疆瀹屾暣URL
+ response.setFullUrl(buildFullMediaUrl(media.getPath()));
+ response.setFullThumbUrl(buildFullMediaUrl(media.getThumbPath()));
+
+ return response;
+ }
+
+ private String buildFullMediaUrl(String path) {
+ if (!StringUtils.hasText(path)) {
+ return null;
+ }
+
+ // 濡傛灉宸茬粡鏄畬鏁碪RL锛岀洿鎺ヨ繑鍥�
+ if (path.startsWith("http://") || path.startsWith("https://")) {
+ return path;
+ }
+
+ // 濡傛灉娌℃湁閰嶇疆mediaBaseUrl锛岃繑鍥炲師璺緞
+ if (!StringUtils.hasText(mediaBaseUrl)) {
+ return path;
+ }
+
+ // 鎷兼帴瀹屾暣URL
+ String baseUrl = mediaBaseUrl.endsWith("/") ? mediaBaseUrl : mediaBaseUrl + "/";
+ String relativePath = path.startsWith("/") ? path.substring(1) : path;
+ return baseUrl + relativePath;
+ }
}
\ No newline at end of file
--
Gitblit v1.8.0