修正評審評分資訊的 BUG
This commit is contained in:
@@ -1006,9 +1006,9 @@ export class JudgeService extends DatabaseServiceBase {
|
||||
UNION ALL
|
||||
|
||||
SELECT DISTINCT
|
||||
a.id,
|
||||
a.name,
|
||||
'app' as type,
|
||||
t.id,
|
||||
t.name,
|
||||
'team' as type,
|
||||
'team' as participant_type,
|
||||
COALESCE(js.total_score, 0) as score,
|
||||
CASE
|
||||
@@ -1017,12 +1017,11 @@ export class JudgeService extends DatabaseServiceBase {
|
||||
END as status,
|
||||
js.submitted_at,
|
||||
t.name as team_name,
|
||||
CONCAT(t.name, ' - ', a.name) as display_name
|
||||
FROM apps a
|
||||
INNER JOIN competition_teams ct ON a.team_id = ct.team_id
|
||||
LEFT JOIN teams t ON a.team_id = t.id
|
||||
LEFT JOIN app_judge_scores js ON a.id = js.app_id AND js.judge_id = ?
|
||||
WHERE ct.competition_id = ? AND a.is_active = 1
|
||||
t.name as display_name
|
||||
FROM teams t
|
||||
INNER JOIN competition_teams ct ON t.id = ct.team_id
|
||||
LEFT JOIN app_judge_scores js ON js.app_id = CONCAT('team_', t.id) AND js.judge_id = ?
|
||||
WHERE ct.competition_id = ? AND t.is_active = 1
|
||||
|
||||
ORDER BY display_name
|
||||
`;
|
||||
@@ -3888,19 +3887,41 @@ export class ScoringService extends DatabaseServiceBase {
|
||||
const judgeCount = judgesResult[0]?.judge_count || 0;
|
||||
console.log('🔍 評審數量:', judgeCount);
|
||||
|
||||
// 獲取競賽的參賽APP數量
|
||||
const appsResult = await DatabaseServiceBase.safeQuery(`
|
||||
SELECT COUNT(DISTINCT ca.app_id) as app_count
|
||||
FROM competition_apps ca
|
||||
WHERE ca.competition_id = ?
|
||||
// 獲取競賽類型
|
||||
const competitionResult = await DatabaseServiceBase.safeQuery(`
|
||||
SELECT type FROM competitions WHERE id = ?
|
||||
`, [competitionId]);
|
||||
|
||||
const appCount = appsResult[0]?.app_count || 0;
|
||||
console.log('🔍 參賽APP數量:', appCount);
|
||||
const competitionType = competitionResult[0]?.type || 'individual';
|
||||
console.log('🔍 競賽類型:', competitionType);
|
||||
|
||||
// 如果沒有評審或APP關聯,嘗試從其他方式獲取
|
||||
let participantCount = 0;
|
||||
|
||||
if (competitionType === 'team') {
|
||||
// 團隊競賽:獲取參賽團隊數量
|
||||
const teamsResult = await DatabaseServiceBase.safeQuery(`
|
||||
SELECT COUNT(DISTINCT ct.team_id) as team_count
|
||||
FROM competition_teams ct
|
||||
WHERE ct.competition_id = ?
|
||||
`, [competitionId]);
|
||||
|
||||
participantCount = teamsResult[0]?.team_count || 0;
|
||||
console.log('🔍 參賽團隊數量:', participantCount);
|
||||
} else {
|
||||
// 個人競賽:獲取參賽APP數量
|
||||
const appsResult = await DatabaseServiceBase.safeQuery(`
|
||||
SELECT COUNT(DISTINCT ca.app_id) as app_count
|
||||
FROM competition_apps ca
|
||||
WHERE ca.competition_id = ?
|
||||
`, [competitionId]);
|
||||
|
||||
participantCount = appsResult[0]?.app_count || 0;
|
||||
console.log('🔍 參賽APP數量:', participantCount);
|
||||
}
|
||||
|
||||
// 如果沒有評審或參賽者關聯,嘗試從其他方式獲取
|
||||
let finalJudgeCount = judgeCount;
|
||||
let finalAppCount = appCount;
|
||||
let finalParticipantCount = participantCount;
|
||||
|
||||
if (judgeCount === 0) {
|
||||
// 嘗試從 judges 表獲取所有評審
|
||||
@@ -3909,25 +3930,60 @@ export class ScoringService extends DatabaseServiceBase {
|
||||
console.log('🔍 使用所有評審數量:', finalJudgeCount);
|
||||
}
|
||||
|
||||
if (appCount === 0) {
|
||||
// 嘗試從 apps 表獲取所有APP
|
||||
const allAppsResult = await DatabaseServiceBase.safeQuery('SELECT COUNT(*) as app_count FROM apps');
|
||||
finalAppCount = allAppsResult[0]?.app_count || 0;
|
||||
console.log('🔍 使用所有APP數量:', finalAppCount);
|
||||
if (participantCount === 0) {
|
||||
if (competitionType === 'team') {
|
||||
// 嘗試從 teams 表獲取所有團隊
|
||||
const allTeamsResult = await DatabaseServiceBase.safeQuery('SELECT COUNT(*) as team_count FROM teams');
|
||||
finalParticipantCount = allTeamsResult[0]?.team_count || 0;
|
||||
console.log('🔍 使用所有團隊數量:', finalParticipantCount);
|
||||
} else {
|
||||
// 嘗試從 apps 表獲取所有APP
|
||||
const allAppsResult = await DatabaseServiceBase.safeQuery('SELECT COUNT(*) as app_count FROM apps');
|
||||
finalParticipantCount = allAppsResult[0]?.app_count || 0;
|
||||
console.log('🔍 使用所有APP數量:', finalParticipantCount);
|
||||
}
|
||||
}
|
||||
|
||||
// 獲取已完成的評分數量
|
||||
const completedResult = await DatabaseServiceBase.safeQuery(`
|
||||
SELECT COUNT(*) as completed_count
|
||||
FROM judge_scores js
|
||||
WHERE js.competition_id = ?
|
||||
`, [competitionId]);
|
||||
let completedResult;
|
||||
if (competitionType === 'team') {
|
||||
// 團隊競賽:查詢團隊評分記錄
|
||||
completedResult = await DatabaseServiceBase.safeQuery(`
|
||||
SELECT COUNT(*) as completed_count
|
||||
FROM app_judge_scores js
|
||||
WHERE js.app_id LIKE 'team_%'
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM competition_teams ct
|
||||
WHERE ct.competition_id = ?
|
||||
AND js.app_id = CONCAT('team_', ct.team_id)
|
||||
)
|
||||
`, [competitionId]);
|
||||
} else {
|
||||
// 個人競賽:查詢應用評分記錄
|
||||
completedResult = await DatabaseServiceBase.safeQuery(`
|
||||
SELECT COUNT(*) as completed_count
|
||||
FROM app_judge_scores js
|
||||
WHERE js.app_id NOT LIKE 'team_%'
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM competition_apps ca
|
||||
WHERE ca.competition_id = ?
|
||||
AND ca.app_id = js.app_id
|
||||
)
|
||||
`, [competitionId]);
|
||||
}
|
||||
|
||||
const completed = completedResult[0]?.completed_count || 0;
|
||||
const total = finalJudgeCount * finalAppCount;
|
||||
const total = finalJudgeCount * finalParticipantCount;
|
||||
const percentage = total > 0 ? Math.min(Math.round((completed / total) * 100), 100) : 0;
|
||||
|
||||
console.log('🔍 評分進度結果:', { completed, total, percentage });
|
||||
console.log('🔍 評分進度結果:', {
|
||||
completed,
|
||||
total,
|
||||
percentage,
|
||||
judgeCount: finalJudgeCount,
|
||||
participantCount: finalParticipantCount,
|
||||
competitionType
|
||||
});
|
||||
|
||||
return {
|
||||
completed,
|
||||
|
Reference in New Issue
Block a user