From 8337c34fcc761d07acaad796d10f3e12e9bbe2d1 Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期日, 05 十月 2025 08:56:04 +0800
Subject: [PATCH] feat: 微信项目详情支持阶段评分时间轴
---
backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java | 135 +++++++++++++++++++++++++++++++++++---------
1 files changed, 107 insertions(+), 28 deletions(-)
diff --git a/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java b/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
index a0ad78b..c5254f0 100644
--- a/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
+++ b/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
@@ -16,6 +16,8 @@
import com.rongyichuang.common.dto.PageResponse;
import com.rongyichuang.rating.entity.RatingScheme;
import com.rongyichuang.rating.repository.RatingSchemeRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
@@ -37,6 +39,8 @@
@Service
@Transactional
public class ActivityService {
+
+ private static final Logger log = LoggerFactory.getLogger(ActivityService.class);
@Autowired
private ActivityRepository activityRepository;
@@ -67,16 +71,44 @@
page = activityRepository.findByPidOrderByCreateTimeDesc(0L, pageable);
}
+ // 璋冭瘯锛氭墦鍗板垎椤靛師濮嬫椿鍔ㄧ殑鎶ュ悕鎴鏃堕棿
+ try {
+ log.info("鍒嗛〉鏌ヨ姣旇禌鍒楄〃锛氭�绘暟={}, 褰撳墠椤�={}, 姣忛〉={}", page.getTotalElements(), page.getNumber(), page.getSize());
+ page.getContent().stream().limit(10).forEach(a ->
+ log.info("Activity(id={}, name={}) signupDeadline={}, matchTime={}", a.getId(), a.getName(), a.getSignupDeadline(), a.getMatchTime())
+ );
+ } catch (Exception e) {
+ log.warn("鎵撳嵃娲诲姩鎶ュ悕鎴鏃堕棿鏃ュ織澶辫触: {}", e.getMessage());
+ }
+
List<ActivityResponse> content = page.getContent().stream()
.map(activity -> {
ActivityResponse response = new ActivityResponse(activity);
- // 璁剧疆鍙傝禌浜烘暟锛堝鏍搁�氳繃鐨勬姤鍚嶆暟閲忥級
- Long playerCountLong = activityPlayerRepository.countByActivityId(activity.getId());
- int playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
+ // 璁剧疆鍙傝禌浜烘暟锛堝彧缁熻绗竴闃舵鐨勫鏍搁�氳繃瀛﹀憳浜烘暟锛�
+ int playerCount = 0;
+ Activity firstStage = activityRepository.findFirstStageByActivityId(activity.getId());
+ if (firstStage != null) {
+ // 濡傛灉鏈夌涓�闃舵锛岀粺璁$涓�闃舵鐨勫鏍搁�氳繃浜烘暟
+ Long playerCountLong = activityPlayerRepository.countByStageIdAndState(firstStage.getId(), 1);
+ playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
+ } else {
+ // 濡傛灉娌℃湁闃舵锛岀粺璁℃椿鍔ㄦ湰韬殑瀹℃牳閫氳繃浜烘暟
+ Long playerCountLong = activityPlayerRepository.countByActivityIdAndState(activity.getId(), 1);
+ playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
+ }
response.setPlayerCount(playerCount);
return response;
})
.collect(Collectors.toList());
+
+ // 璋冭瘯锛氭墦鍗拌繑鍥炵粰鍓嶇鐨勫搷搴斿璞′腑鐨勬姤鍚嶆埅姝�
+ try {
+ content.stream().limit(10).forEach(r ->
+ log.info("Response(id={}, name={}) signupDeadline={}, matchTime={}", r.getId(), r.getName(), r.getSignupDeadline(), r.getMatchTime())
+ );
+ } catch (Exception e) {
+ log.warn("鎵撳嵃ActivityResponse鏃ュ織澶辫触: {}", e.getMessage());
+ }
return new PageResponse<>(content, page.getTotalElements(), page.getNumber(), page.getSize());
}
@@ -176,6 +208,9 @@
// 淇濆瓨姣旇禌
activity = activityRepository.save(activity);
+ // 璁板綍鏃ュ織浠ヤ究璋冭瘯
+ log.info("淇濆瓨姣旇禌鎴愬姛锛屾瘮璧汭D: {}, 姣旇禌鍚嶇О: {}", activity.getId(), activity.getName());
+
// 濡傛灉鏄瘮璧涗笖鏈夐樁娈典俊鎭紝淇濆瓨闃舵
if (input.isMainActivity() && input.getStages() != null && !input.getStages().isEmpty()) {
saveActivityStages(activity.getId(), input.getStages());
@@ -255,7 +290,11 @@
stage.setRatingSchemeId(activity.getRatingSchemeId());
}
- activityRepository.save(stage);
+ // 淇濆瓨闃舵骞惰幏鍙栬嚜澧濱D
+ stage = activityRepository.save(stage);
+
+ // 璁板綍鏃ュ織浠ヤ究璋冭瘯
+ log.info("淇濆瓨闃舵鎴愬姛锛岄樁娈礗D: {}, 闃舵鍚嶇О: {}", stage.getId(), stage.getName());
}
}
@@ -264,14 +303,20 @@
*/
private void saveActivityJudges(Long activityId, List<ActivityJudgeInput> judgeInputs) {
if (judgeInputs == null || judgeInputs.isEmpty()) {
+ log.info("娌℃湁璇勫闇�瑕佷繚瀛橈紝姣旇禌ID: {}", activityId);
return;
}
+
+ log.info("寮�濮嬩繚瀛樿瘎濮旓紝姣旇禌ID: {}, 璇勫鏁伴噺: {}", activityId, judgeInputs.size());
// 鑾峰彇姣旇禌鐨勬墍鏈夐樁娈碉紙濡傛灉鏈夌殑璇濓級
List<Activity> stages = activityRepository.findByPidAndStateOrderByCreateTimeAsc(activityId, 1);
// 淇濆瓨璇勫鍏宠仈
for (ActivityJudgeInput judgeInput : judgeInputs) {
+ log.info("澶勭悊璇勫: ID={}, 濮撳悕={}, 闃舵IDs={}",
+ judgeInput.getJudgeId(), judgeInput.getJudgeName(), judgeInput.getStageIds());
+
// 鍏堝垹闄よ璇勫鐨勭幇鏈夊叧鑱�
activityJudgeRepository.deleteByActivityIdAndJudgeId(activityId, judgeInput.getJudgeId());
@@ -280,12 +325,14 @@
if (stages.isEmpty()) {
// 姣旇禌娌℃湁闃舵锛岀洿鎺ュ叧鑱斿埌姣旇禌锛坰tage_id涓簄ull琛ㄧず鎵�鏈夐樁娈碉級
ActivityJudge activityJudge = new ActivityJudge(activityId, judgeInput.getJudgeId(), null);
- activityJudgeRepository.save(activityJudge);
+ activityJudge = activityJudgeRepository.save(activityJudge);
+ log.info("淇濆瓨璇勫鍏宠仈鎴愬姛: 姣旇禌ID={}, 璇勫ID={}, 闃舵ID=null", activityId, judgeInput.getJudgeId());
} else {
// 涓烘瘡涓樁娈靛垱寤哄叧鑱�
for (Activity stage : stages) {
ActivityJudge activityJudge = new ActivityJudge(activityId, judgeInput.getJudgeId(), stage.getId());
- activityJudgeRepository.save(activityJudge);
+ activityJudge = activityJudgeRepository.save(activityJudge);
+ log.info("淇濆瓨璇勫鍏宠仈鎴愬姛: 姣旇禌ID={}, 璇勫ID={}, 闃舵ID={}", activityId, judgeInput.getJudgeId(), stage.getId());
}
}
} else {
@@ -294,7 +341,8 @@
// 濡傛灉stageId绛変簬褰撳墠姣旇禌ID锛岃〃绀鸿瘎濮旇礋璐f暣涓瘮璧涳紝stage_id璁句负null
Long actualStageId = stageId.equals(activityId) ? null : stageId;
ActivityJudge activityJudge = new ActivityJudge(activityId, judgeInput.getJudgeId(), actualStageId);
- activityJudgeRepository.save(activityJudge);
+ activityJudge = activityJudgeRepository.save(activityJudge);
+ log.info("淇濆瓨璇勫鍏宠仈鎴愬姛: 姣旇禌ID={}, 璇勫ID={}, 闃舵ID={}", activityId, judgeInput.getJudgeId(), actualStageId);
}
}
}
@@ -332,39 +380,23 @@
// 鑾峰彇鎵�鏈夌姸鎬佷负1鐨勬椿鍔�
List<Activity> allActivities = activityRepository.findByStateOrderByPidAscNameAsc(1);
- // 杩囨护锛氬彧淇濈暀姣旇禌闃舵锛坧id>0锛�
+ // 杩囨护锛氬彧淇濈暀涓绘瘮璧涳紙pid=0锛�
List<Activity> filteredActivities = allActivities.stream()
- .filter(activity -> activity.getPid() > 0)
+ .filter(activity -> activity.getPid() == 0)
.collect(Collectors.toList());
- // 杞崲涓篈ctivityResponse锛屽寘鍚埗姣旇禌淇℃伅
+ // 杞崲涓篈ctivityResponse
List<ActivityResponse> result = filteredActivities.stream()
.map(activity -> {
ActivityResponse response = new ActivityResponse(activity);
- // 璁剧疆鍙傝禌浜烘暟锛堝鏍搁�氳繃鐨勬姤鍚嶆暟閲忥級
+ // 璁剧疆鍙傝禌浜烘暟锛堟墍鏈夐樁娈电殑鎶ュ悕鏁伴噺鎬诲拰锛�
Long playerCountLong = activityPlayerRepository.countByActivityId(activity.getId());
int playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
response.setPlayerCount(playerCount);
- // 璁剧疆鐖舵瘮璧涗俊鎭�
- Optional<Activity> parentOpt = activityRepository.findById(activity.getPid());
- if (parentOpt.isPresent()) {
- Activity parent = parentOpt.get();
- response.setParent(new ActivityResponse(parent));
- }
-
return response;
})
- .sorted((a, b) -> {
- // 鍏堟寜鐖舵瘮璧涘悕绉版帓搴忥紝鍐嶆寜闃舵鍚嶇О鎺掑簭
- if (a.getParent() != null && b.getParent() != null) {
- int parentCompare = a.getParent().getName().compareTo(b.getParent().getName());
- if (parentCompare != 0) {
- return parentCompare;
- }
- }
- return a.getName().compareTo(b.getName());
- })
+ .sorted((a, b) -> a.getName().compareTo(b.getName()))
.collect(Collectors.toList());
return result;
@@ -388,6 +420,53 @@
}
/**
+ * 鑾峰彇鎵�鏈夋瘮璧涢樁娈碉紙鐢ㄤ簬璇勫椤甸潰涓嬫媺閫夋嫨锛�
+ * 杩斿洖鎵�鏈夌姸鎬佷负1涓攑id>0鐨勬瘮璧涢樁娈�
+ */
+ public List<ActivityResponse> findAllStagesForSelection() {
+ // 鑾峰彇鎵�鏈夌姸鎬佷负1鐨勬椿鍔�
+ List<Activity> allActivities = activityRepository.findByStateOrderByPidAscNameAsc(1);
+
+ // 鍒嗙涓绘瘮璧涘拰闃舵
+ Map<Long, Activity> parentActivitiesMap = allActivities.stream()
+ .filter(activity -> activity.getPid() == 0)
+ .collect(Collectors.toMap(Activity::getId, activity -> activity));
+
+ // 杩囨护锛氬彧淇濈暀姣旇禌闃舵锛坧id>0锛�
+ List<Activity> filteredStages = allActivities.stream()
+ .filter(activity -> activity.getPid() > 0)
+ .collect(Collectors.toList());
+
+ // 杞崲涓篈ctivityResponse
+ List<ActivityResponse> result = filteredStages.stream()
+ .map(activity -> {
+ ActivityResponse response = new ActivityResponse(activity);
+ // 璁剧疆鍙傝禌浜烘暟锛堝鏍搁�氳繃鐨勬姤鍚嶆暟閲忥級
+ Long playerCountLong = activityPlayerRepository.countByActivityId(activity.getId());
+ int playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
+ response.setPlayerCount(playerCount);
+
+ // 鎵嬪姩璁剧疆parent淇℃伅
+ Activity parentActivity = parentActivitiesMap.get(activity.getPid());
+ if (parentActivity != null) {
+ ActivityResponse parentResponse = new ActivityResponse(parentActivity);
+ response.setParent(parentResponse);
+ }
+
+ return response;
+ })
+ .sorted((a, b) -> {
+ // 鍏堟寜鐖舵瘮璧汭D鎺掑簭锛屽啀鎸夐樁娈靛悕绉版帓搴�
+ int pidCompare = Long.compare(a.getPid(), b.getPid());
+ if (pidCompare != 0) return pidCompare;
+ return a.getName().compareTo(b.getName());
+ })
+ .collect(Collectors.toList());
+
+ return result;
+ }
+
+ /**
* 缁熻姣旇禌鏁伴噺
*/
public long countActiveActivities() {
--
Gitblit v1.8.0