feat: 支持会话内补传资料并保持绑定
This commit is contained in:
@@ -1,14 +1,17 @@
|
||||
from django.contrib import messages
|
||||
from django.utils import timezone
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse
|
||||
from django.views.decorators.http import require_POST
|
||||
|
||||
from agent_core.orchestrator import run_agent
|
||||
from agent_core.results import AgentResult
|
||||
from apps.audit.services import create_audit_log, create_notification_record
|
||||
from apps.documents.models import SubmissionBatch, UploadedDocument
|
||||
from apps.documents.services import append_documents_to_batch
|
||||
from apps.scenarios.services import get_scenario
|
||||
|
||||
from .forms import ChatForm
|
||||
from .forms import ChatForm, ConversationUploadForm
|
||||
from .models import Conversation
|
||||
|
||||
|
||||
@@ -37,6 +40,7 @@ def detail(request, conversation_id: str):
|
||||
batch = SubmissionBatch.objects.filter(batch_id=conversation.batch_id).first()
|
||||
documents = UploadedDocument.objects.filter(batch=batch)
|
||||
form = ChatForm(request.POST or None, documents=documents)
|
||||
upload_form = ConversationUploadForm()
|
||||
result = None
|
||||
audit_log = None
|
||||
active_node = None
|
||||
@@ -97,10 +101,35 @@ def detail(request, conversation_id: str):
|
||||
"node_results": conversation.node_results,
|
||||
"active_node": active_node,
|
||||
"workspace_summary": workspace_summary,
|
||||
"upload_form": upload_form,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@require_POST
|
||||
def upload_documents(request, conversation_id: str):
|
||||
conversation = get_object_or_404(Conversation, conversation_id=conversation_id)
|
||||
batch = get_object_or_404(SubmissionBatch, batch_id=conversation.batch_id)
|
||||
upload_form = ConversationUploadForm(request.POST, request.FILES)
|
||||
if upload_form.is_valid():
|
||||
result = append_documents_to_batch(
|
||||
"document_review",
|
||||
batch,
|
||||
upload_form.cleaned_data["uploaded_files"],
|
||||
)
|
||||
warning_count = len(result["registration_overview_report"]["warnings"])
|
||||
message = "资料已补充到当前资料包。"
|
||||
if warning_count:
|
||||
message += f" 当前有 {warning_count} 条待复核提示。"
|
||||
messages.success(request, message)
|
||||
else:
|
||||
messages.error(
|
||||
request,
|
||||
"补充资料失败:" + " ".join(upload_form.non_field_errors()) if upload_form.non_field_errors() else "补充资料失败。",
|
||||
)
|
||||
return redirect("chat:detail", conversation_id=conversation.conversation_id)
|
||||
|
||||
|
||||
def _persist_notification_records(result: AgentResult, *, web_detail_url: str = "") -> None:
|
||||
payload = result.notification_payload or {}
|
||||
owners = payload.get("owners") or []
|
||||
|
||||
Reference in New Issue
Block a user