feat: 重构资料包模型与会话绑定主链路

This commit is contained in:
2026-06-04 00:43:13 +08:00
parent ddf5e7d15c
commit d0841e533f
18 changed files with 1000 additions and 263 deletions

View File

@@ -5,18 +5,24 @@ from django.views.decorators.http import require_POST
from apps.scenarios.services import list_scenarios
from .forms import DocumentUploadForm
from .models import UploadedDocument
from .services import create_uploaded_document, index_document
from .models import SubmissionBatch, UploadedDocument
from .services import import_submission_batch, index_document
def document_list(request):
# 列表页只负责展示文档元数据和可执行操作,不处理入库细节
# 资料包页展示批次、会话绑定和关键异常,同时保留文档级明细便于演示
keyword = (request.GET.get("keyword") or "").strip()
batches = SubmissionBatch.objects.all()
if keyword:
batches = batches.filter(product_name__icontains=keyword)
documents = UploadedDocument.objects.all()
status_counts = {
"uploaded": documents.filter(status=UploadedDocument.STATUS_UPLOADED).count(),
"indexed": documents.filter(status=UploadedDocument.STATUS_INDEXED).count(),
"failed": documents.filter(status=UploadedDocument.STATUS_FAILED).count(),
"total": documents.count(),
"pending": batches.filter(import_status=SubmissionBatch.STATUS_PENDING).count(),
"completed": batches.filter(import_status=SubmissionBatch.STATUS_COMPLETED).count(),
"review_required": batches.filter(
import_status=SubmissionBatch.STATUS_REVIEW_REQUIRED
).count(),
"total": batches.count(),
}
processing_pipeline = [
{"title": "原始文件接收", "detail": "校验格式、大小和场景归属后保存原件。"},
@@ -35,6 +41,8 @@ def document_list(request):
"documents/document_list.html",
{
"documents": documents,
"batches": batches,
"keyword": keyword,
"status_counts": status_counts,
"processing_pipeline": processing_pipeline,
"exception_items": exception_items,
@@ -43,12 +51,18 @@ def document_list(request):
def upload(request):
# 上传成功后仅保存文件和元数据,是否入库由用户显式触发
# 上传成功后直接创建资料包并绑定主会话
if request.method == "POST":
form = DocumentUploadForm(request.POST, request.FILES)
if form.is_valid():
create_uploaded_document(form.cleaned_data["scenario_id"], form.cleaned_data["file"])
messages.success(request, "文件已上传,可继续执行入库。")
result = import_submission_batch(
form.cleaned_data["scenario_id"],
[form.cleaned_data["file"]],
)
messages.success(
request,
f"资料包已导入,已绑定会话 {result['conversation_id']}",
)
return redirect("documents:list")
else:
form = DocumentUploadForm()