Spaces:
Sleeping
Sleeping
File size: 5,622 Bytes
5957456 6cc56bb 5957456 6cc56bb 5957456 653c3a3 5957456 653c3a3 5957456 653c3a3 5957456 653c3a3 5957456 653c3a3 5957456 653c3a3 5957456 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
import json
from datetime import datetime, timezone
import pytz
class DashboardService:
def __init__(self, assignment_service, submission_service):
self.assignment_service = assignment_service
self.submission_service = submission_service
def get_dashboard_data(self, user_id):
assignments = self.assignment_service.get_user_assignments(user_id)
dashboard_data = []
for assignment_id, assignment_info in assignments.items():
assignment_data = self.assignment_service.get_assignment(assignment_id)
submission_ids = assignment_data.get("submission_ids", [])
submission_count = len(submission_ids)
dashboard_item = {
# "assignment_id": assignment_id,
"作業題目": assignment_data["metadata"]["topic"],
"類型": assignment_data["assignment_type"],
"回傳數量": submission_count,
"建立時間": assignment_data["timestamp"],
"截止時間": assignment_data["metadata"].get("submission_deadline")
}
dashboard_data.append(dashboard_item)
# 按創建日期降序排序
dashboard_data.sort(key=lambda x: x["建立時間"], reverse=True)
return dashboard_data
def get_assignment_details(self, assignment_id):
assignment_data = self.assignment_service.get_assignment(assignment_id)
submission_ids = assignment_data.get("submission_ids", [])
submissions = []
for submission_id in submission_ids:
submission_data = self.submission_service.get_submission_from_gcs(submission_id)
if submission_data:
submissions.append({
"submission_id": submission_id,
"student_id": submission_data["student_id"],
"student_email": submission_data.get("student_email", "未提供"),
"student_name": submission_data["student_name"],
"submission_date": submission_data["timestamp"]
})
return {
"assignment_data": assignment_data,
"submissions": submissions
}
def get_submission_details(self, submission_id):
submission_data = self.submission_service.get_submission_from_gcs(submission_id)
if not submission_data:
return {"error": "找不到提交記錄"}
assignment_data = self.assignment_service.get_assignment(submission_data["assignment_id"])
return {
"submission_data": submission_data,
"assignment_data": assignment_data
}
def get_all_submissions(self, user_id):
assignments = self.assignment_service.get_user_assignments(user_id)
all_submissions = []
for assignment_id, assignment_info in assignments.items():
assignment_data = self.assignment_service.get_assignment(assignment_id)
submission_ids = assignment_data.get("submission_ids", [])
for submission_id in submission_ids:
submission_data = self.submission_service.get_submission_from_gcs(submission_id)
if submission_data:
score = self.extract_score(submission_data)
all_submissions.append({
"作業名稱": assignment_data["metadata"]["topic"],
"作業類型": assignment_data["assignment_type"],
# "學生_id": submission_data["student_id"],
"學生Email": submission_data.get("student_email", "未提供"),
"學生姓名": submission_data["student_name"],
"繳交日期": submission_data["timestamp"],
"分數": score
})
all_submissions.sort(key=lambda x: x["繳交日期"], reverse=True)
return all_submissions
def extract_score(self, submission_data):
try:
content = submission_data.get("submission_data", {})
if isinstance(content, str):
content = json.loads(content)
if not isinstance(content, dict):
print(f"內容格式不正確:{type(content)}")
return "N/A"
content = content.get("content", {})
if isinstance(content, str):
content = json.loads(content)
output_tables = content.get("chinese_full_paragraph_refine_output_table", [])
print(f"output_tables: {output_tables}") # 調試輸出
last_score = "N/A"
# 只取最後一個「綜合評分」
for table in reversed(output_tables):
print(f"檢查 table: {table}") # 調試輸出
if isinstance(table, str):
try:
table = json.loads(table)
except json.JSONDecodeError:
continue
if isinstance(table, dict) and table.get("架構") == "綜合評分":
last_score = table.get("評分", "N/A")
print(f"找到最後的評分: {last_score}") # 調試輸出
break
return last_score
except json.JSONDecodeError as e:
print(f"JSON 解析錯誤:{str(e)}")
except Exception as e:
print(f"提取分數時出錯:{str(e)}")
print(f"提交數據:{submission_data}")
return "N/A"
|