#!/usr/bin/env python3 """Complete UAT delivery-schedule business dates before S3/S4 rebuilds.""" from __future__ import annotations import argparse import json from apply_sql_file import connect TENANTS = (838257186181189, 838257212780613, 838257237606469) def apply() -> dict[str, int]: conn = connect() counts: dict[str, int] = {} try: conn.begin() with conn.cursor() as cursor: for index, tenant_id in enumerate(TENANTS): cursor.execute( """ UPDATE srm_polist_ds SET requestdate = DATE_SUB(NOW(), INTERVAL (5 + MOD(Id, 20)) DAY), submitdate = DATE_ADD( DATE_SUB(NOW(), INTERVAL (5 + MOD(Id, 20)) DAY), INTERVAL (1 + MOD(Id, 3)) DAY ), lastsentdate = DATE_ADD( DATE_SUB(NOW(), INTERVAL (5 + MOD(Id, 20)) DAY), INTERVAL (1 + MOD(Id, 3)) DAY ), sentqty = ROUND(schedqty * %s, 5), lastsentqty = ROUND(schedqty * %s, 5), restqty = GREATEST(schedqty - ROUND(schedqty * %s, 5), 0), status = 'S', remarks = CASE WHEN IFNULL(remarks,'') LIKE '%%UAT_GENERATOR:交货计划已发布%%' THEN remarks ELSE CONCAT( CASE WHEN IFNULL(remarks,'')='' THEN '' ELSE CONCAT(remarks, ';') END, 'UAT_GENERATOR:交货计划已发布' ) END, updateuser = 'UAT_GENERATOR', updatetime = NOW() WHERE tenant_id = %s AND isactive = 1 """, ( ("0.85", "0.70", "0.92")[index], ("0.85", "0.70", "0.92")[index], ("0.85", "0.70", "0.92")[index], tenant_id, ), ) counts[str(tenant_id)] = cursor.rowcount conn.commit() except Exception: conn.rollback() raise finally: conn.close() return counts def main() -> int: parser = argparse.ArgumentParser() parser.add_argument("--apply", action="store_true") args = parser.parse_args() result = {"mode": "dry-run", "tenants": list(TENANTS)} if args.apply: result = {"mode": "apply", "updated": apply()} print(json.dumps(result, ensure_ascii=False, indent=2)) return 0 if __name__ == "__main__": raise SystemExit(main())