fix(status): ignore promotion edit warnings

This commit is contained in:
chengma
2026-07-20 10:52:32 +08:00
parent b3d9857b3e
commit 9c4224286a
10 changed files with 253 additions and 14 deletions
+38
View File
@@ -18,6 +18,7 @@ from .config import make_slug
DEFAULT_BUSY_TIMEOUT_MS = 5000
PRODUCT_STATUS_FEATURE_INTRODUCED_AT = "2026-07-18T16:34:37"
LEGACY_PRODUCT_STATUS_DEFAULT_NOTE = "历史批次默认按架上商品处理(未实时检测)"
LEGACY_PROMOTION_STATUS_REPAIR_NOTE = "历史商品状态修正:促销编辑提示不属于商品状态异常"
VALID_BATCH_FIELDS = {
"source_files_json",
"status",
@@ -501,6 +502,7 @@ def init_db(path=None, conn=None) -> None:
_ensure_task_product_status_columns(database)
_ensure_task_delete_columns(database)
_migrate_legacy_product_status_defaults(database)
_repair_legacy_promotion_status_defaults(database)
_ensure_image_studio_project_suite_columns(database)
_ensure_image_studio_project_draft_columns(database)
_ensure_image_studio_job_recovery_columns(database)
@@ -578,6 +580,42 @@ def _migrate_legacy_product_status_defaults(database):
)
def _repair_legacy_promotion_status_defaults(database):
"""Repair only legacy unknown snapshots caused by a known benign warning."""
rows = database.execute(
"""
SELECT tasks.id, tasks.product_status_note
FROM tasks
INNER JOIN batches ON batches.id = tasks.batch_id
WHERE tasks.product_status = 'unknown'
AND tasks.deleted_at IS NULL
AND batches.deleted_at IS NULL
AND batches.created_at < ?
""",
(PRODUCT_STATUS_FEATURE_INTRODUCED_AT,),
).fetchall()
task_ids = [
int(row["id"])
for row in rows
if product_status.is_promotion_edit_restriction_note(row["product_status_note"])
]
if not task_ids:
return
placeholders = ", ".join("?" for _task_id in task_ids)
database.execute(
f"""
UPDATE tasks
SET product_status = 'normal',
product_status_note = ?,
updated_at = ?
WHERE id IN ({placeholders})
""",
(LEGACY_PROMOTION_STATUS_REPAIR_NOTE, _now(), *task_ids),
)
def _ensure_image_studio_project_suite_columns(database):
columns = {
row["name"]