jutor_write / dashboard_service.py
youngtsai's picture
"作業題目": assignment_data["metadata"]["topic"],
6cc56bb
raw
history blame
5.62 kB
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"