JhHardwareWRS_BackPoint/scripts/migrate_multi_person_reports.py
2026-06-24 15:19:14 +08:00

58 lines
2.1 KiB
Python

from pathlib import Path
import sys
from sqlalchemy import text
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))
from app.database import engine # noqa: E402
def _column_exists(conn, table_name: str, column_name: str) -> bool:
return bool(conn.execute(
text("""
SELECT COUNT(*)
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name = :table_name
AND column_name = :column_name
"""),
{"table_name": table_name, "column_name": column_name},
).scalar_one())
def main() -> None:
with engine.begin() as conn:
if not _column_exists(conn, "production_report_items", "operator_count"):
conn.execute(text("""
ALTER TABLE production_report_items
ADD COLUMN operator_count DECIMAL(10, 2) NOT NULL DEFAULT 1 AFTER stamping_method
"""))
if not _column_exists(conn, "production_reports", "is_multi_person_assistant"):
conn.execute(text("""
ALTER TABLE production_reports
ADD COLUMN is_multi_person_assistant TINYINT(1) NOT NULL DEFAULT 0 AFTER auto_submit_reason
"""))
if not _column_exists(conn, "production_reports", "multi_person_source_report_id"):
conn.execute(text("""
ALTER TABLE production_reports
ADD COLUMN multi_person_source_report_id BIGINT NULL AFTER is_multi_person_assistant
"""))
conn.execute(text("""
UPDATE production_report_items item
JOIN products product
ON product.attendance_point_name = item.attendance_point_name
AND product.project_no = item.project_no
AND product.product_name = item.product_name
AND product.process_name = IFNULL(item.process_name, '')
AND product.device_no = ''
SET item.operator_count = product.operator_count
WHERE item.operator_count IS NULL OR item.operator_count <= 1
"""))
print("multi person report columns migrated")
if __name__ == "__main__":
main()