diff --git a/app/app/data.py b/app/app/data.py index e67d213..b76a3e6 100644 --- a/app/app/data.py +++ b/app/app/data.py @@ -2732,7 +2732,76 @@ def register_course_summary_texts( reasons, proposed_line = auto_register_reasons(normalized, classnotes_path, accounts_path) if reasons: - raise ValueError(";".join(reasons)) + saved = save_course_summary_markdown(summaries_root, normalized) + duplicate_tasks = create_course_summary_duplicate_review_tasks( + tasks_path, + summaries_root, + target_key=course_summary_duplicate_key(normalized), + ) + task = create_course_summary_review_task( + tasks_path, + normalized, + proposed_line, + reasons, + str(saved.get("path") or ""), + ) + seen_source_ids.add(source_id) + seen_semantic_keys.add(semantic_key) + state["seen_source_ids"] = sorted(seen_source_ids) + state["seen_semantic_keys"] = sorted(seen_semantic_keys) + state.setdefault("batches", []).append( + { + "batch_id": f"manual-{datetime.now().strftime('%Y%m%d%H%M%S')}-{sha1_text(source_id, 8)}", + "received_at": now, + "window": {"source": "admin_register", "submitted_at": now}, + "students": [normalized["student"]], + "result": { + "received": 1, + "saved": 1 if saved.get("added") else 0, + "auto_registered": 0, + "review_pending": 1, + "duplicates": 0, + "rejected": 0, + }, + } + ) + state["batches"] = state["batches"][-200:] + write_course_summary_state(state_path, state) + log_id = append_operation_log( + operation_logs_path, + "课程小结登记", + "待审核", + source_id=source_id, + student=normalized["student"], + teacher=normalized.get("teacher", ""), + subject=normalized.get("subject", ""), + proposed_line=proposed_line, + reasons=reasons, + task_id=str(task.get("id") or ""), + saved_path=str(saved.get("path") or ""), + ) + result["saved"] += 1 if saved.get("added") else 0 + result["review_pending"] += 1 + result["operation_log_ids"].append(log_id) + if duplicate_tasks["created"]: + scan_log_id = append_operation_log( + operation_logs_path, + "重复小结扫描", + "待审核", + source_id=source_id, + student=normalized["student"], + created_tasks=duplicate_tasks["created"], + ) + result["operation_log_ids"].append(scan_log_id) + result["items"].append( + { + "source_id": source_id, + "status": "review_pending", + "task_id": task.get("id"), + "reasons": reasons, + } + ) + continue saved = save_course_summary_markdown(summaries_root, normalized) duplicate_tasks = create_course_summary_duplicate_review_tasks( diff --git a/app/app/static/admin.js b/app/app/static/admin.js index 5a6034e..2c281a0 100644 --- a/app/app/static/admin.js +++ b/app/app/static/admin.js @@ -1060,7 +1060,7 @@ async function confirmRegister(type, statusNode, url, onSuccess) { body: JSON.stringify({ lines: state.standardLines }), }); if (type === "course_summary") { - statusNode.textContent = `已接收 ${data.received} 条;自动登记 ${data.auto_registered} 条;重复 ${data.duplicates} 条;舍弃 ${data.rejected} 条`; + statusNode.textContent = `已接收 ${data.received} 条;自动登记 ${data.auto_registered} 条;待审核 ${data.review_pending} 条;重复 ${data.duplicates} 条;舍弃 ${data.rejected} 条`; } else { statusNode.textContent = `已登记 ${data.registered} 条;备份 ${data.backup_id}`; }