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, "topic": assignment_data["metadata"]["topic"], "assignment_type": assignment_data["assignment_type"], "submission_count": submission_count, "creation_date": assignment_data["timestamp"], "deadline": assignment_data["metadata"].get("submission_deadline") } dashboard_data.append(dashboard_item) # 按創建日期降序排序 dashboard_data.sort(key=lambda x: x["creation_date"], 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_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"], "學生姓名": 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", {}).get("content", {}) if isinstance(content, str): content = json.loads(content) output_table = content.get("chinese_full_paragraph_evaluate_output_table", []) for item in output_table: if item.get("架構") == "綜合評分": return item.get("評分", "N/A") except Exception as e: print(f"提取分數時出錯:{str(e)}") print(f"提交數據:{submission_data}") return "N/A"