feat(api): 核心端点 — 接收/驳回/转交/打印/上传/用户/物料/记录CRUD

新增端点:
- POST /tasks/{id}/receive — 确认接收 (PENDING→WIP)
- POST /tasks/{id}/reject  — 品质驳回 + 自动返工
- POST /tasks/{id}/transfer — 完工裂变转交 (多路分支+入库)
- PATCH /tasks/{id}/records — 追加图文记录
- PATCH /products/scan/{sn}/status — 宏观状态定调
- POST /upload/ + GET /upload/files/{name} — 文件上传
- GET /users/ — MOM用户列表
- GET /materials/groups + /materials/items — BOM物料手风琴
- POST /print/preview + /execute — 标签预览/打印
- PUT/DELETE /records/{id} — 记录编辑/删除
- GET /tasks/ 新增 assignee_id 过滤
This commit is contained in:
2026-08-05 14:00:43 +08:00
parent f9e10a7dd1
commit 79583cf8f4
8 changed files with 451 additions and 2 deletions

View File

@ -0,0 +1,48 @@
"""任务记录 CRUD — 编辑 / 删除"""
import json
import uuid
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database import get_db
from app.models.task import TaskRecord
from app.schemas.task import TaskRecordCreate, TaskRecordResponse
router = APIRouter(prefix="/records", tags=["任务记录"])
async def _get_record_or_404(db: AsyncSession, record_id: int) -> TaskRecord:
result = await db.execute(select(TaskRecord).where(TaskRecord.id == record_id))
record = result.scalar_one_or_none()
if not record:
raise HTTPException(status_code=404, detail=f"记录不存在: {record_id}")
return record
@router.put("/{record_id}", response_model=TaskRecordResponse)
async def update_record(
record_id: int,
data: TaskRecordCreate,
db: AsyncSession = Depends(get_db),
):
"""更新任务记录(备注+图片)"""
record = await _get_record_or_404(db, record_id)
record.remark = data.remark or None
record.images = json.dumps(data.images) if data.images else None
await db.commit()
await db.refresh(record)
# 手动反序列化 images
return TaskRecordResponse.model_validate(record)
@router.delete("/{record_id}")
async def delete_record(
record_id: int,
db: AsyncSession = Depends(get_db),
):
"""删除任务记录"""
record = await _get_record_or_404(db, record_id)
await db.delete(record)
await db.commit()
return {"message": "记录已删除"}