fix(application-form-fill): 新附件先汇总再填表

This commit is contained in:
2026-06-07 20:15:08 +08:00
parent 0ccd69d3f4
commit 57f9181d58
2 changed files with 78 additions and 1 deletions

View File

@@ -10,7 +10,7 @@ from django.utils import timezone
from .file_summary.skills.attachment_reader import AttachmentReaderSkill
from .file_summary.workflow import create_file_summary_batch, start_file_summary_workflow
from .llm import LLMConfigurationError, LLMRequestError, generate_reply, stream_reply
from .models import Conversation, FileAttachment, FileSummaryBatch, Message
from .models import Conversation, FileAttachment, FileSummaryBatch, FileSummaryBatchAttachment, Message
from .application_form_fill.workflow import (
create_application_form_fill_batch,
find_latest_successful_summary_batch as find_latest_successful_form_fill_summary_batch,
@@ -231,6 +231,8 @@ def stream_message(conversation: Conversation, content: str):
if route.starts_application_form_fill:
source_summary_batch = find_latest_successful_form_fill_summary_batch(conversation)
if source_summary_batch and not _summary_covers_active_attachments(conversation, source_summary_batch):
source_summary_batch = None
if not source_summary_batch:
if not _has_active_attachments(conversation):
reply_content = "请先在当前对话右侧上传需要填表的产品资料或压缩包,我会先自动汇总再继续生成申报模板。"
@@ -480,6 +482,20 @@ def _has_active_attachments(conversation: Conversation) -> bool:
)
def _summary_covers_active_attachments(conversation: Conversation, batch: FileSummaryBatch) -> bool:
active_ids = set(
FileAttachment.objects.filter(conversation=conversation, is_active=True)
.exclude(upload_status=FileAttachment.UploadStatus.DELETED)
.values_list("id", flat=True)
)
if not active_ids:
return True
bound_ids = set(
FileSummaryBatchAttachment.objects.filter(batch=batch).values_list("attachment_id", flat=True)
)
return active_ids.issubset(bound_ids)
def _format_attachment_reader_reply(attachments: list[dict[str, object]], message: str) -> str:
if not attachments:
return message or "当前对话没有可读取的附件。"