feat: 同步本地未提交的前后端更新(plan/quality/material/inspection/production 等模块)

This commit is contained in:
2026-06-20 18:19:06 +08:00
parent 970afe10b4
commit db3945c263
19 changed files with 1681 additions and 961 deletions

View File

@@ -9,7 +9,7 @@ from app.models.quality import QcTask, QcTaskItem, QcDefect
from app.schemas.quality import (
QcTaskCreate, QcTaskUpdate, QcTaskOut,
QcTaskItemCreate, QcTaskItemUpdate, QcTaskItemOut,
QcDefectCreate, QcDefectUpdate, QcDefectOut,
QcDefectCreate, QcDefectUpdate, QcDefectOut, QcDefectBulkSave,
)
from app.schemas.common import Response, PageResponse
from app.services.auth_service import get_current_user
@@ -158,6 +158,41 @@ async def create_defect(body: QcDefectCreate, db: AsyncSession = Depends(get_db)
return Response.ok(QcDefectOut.model_validate(defect))
@router.get("/defects/by-coil/{coil_no}", response_model=Response[list[QcDefectOut]])
async def list_defects_by_coil(coil_no: str, db: AsyncSession = Depends(get_db), _=Depends(get_current_user)):
r = await db.execute(
select(QcDefect)
.where(QcDefect.coil_no == coil_no, QcDefect.del_flag == 0)
.order_by(QcDefect.seq_no.asc().nulls_last(), QcDefect.id.asc())
)
return Response.ok([QcDefectOut.model_validate(d) for d in r.scalars()])
@router.post("/defects/bulk-save", response_model=Response[list[QcDefectOut]])
async def bulk_save_defects(body: QcDefectBulkSave, db: AsyncSession = Depends(get_db), _=Depends(get_current_user)):
"""按卷号替换全部缺陷记录(软删旧记录后批量插入)"""
coil_no = body.coil_no
# 软删旧记录
old = await db.execute(select(QcDefect).where(QcDefect.coil_no == coil_no, QcDefect.del_flag == 0))
for d in old.scalars():
d.del_flag = 1
# 插入新记录
saved: list[QcDefect] = []
for idx, item in enumerate(body.defects, start=1):
data = item.model_dump()
data["coil_no"] = coil_no
if not data.get("seq_no"):
data["seq_no"] = idx
# 自动算长度
if data.get("start_position") is not None and data.get("end_position") is not None and not data.get("length_val"):
data["length_val"] = round(float(data["end_position"]) - float(data["start_position"]), 3)
d = QcDefect(**data)
db.add(d)
saved.append(d)
await db.flush()
return Response.ok([QcDefectOut.model_validate(d) for d in saved])
@router.put("/defects/{defect_id}", response_model=Response[QcDefectOut])
async def update_defect(defect_id: int, body: QcDefectUpdate, db: AsyncSession = Depends(get_db), _=Depends(get_current_user)):
r = await db.execute(select(QcDefect).where(QcDefect.id == defect_id, QcDefect.del_flag == 0))