"""夹具复位(一次性脚本,不属于交付物):让 e2e 从干净状态开始。 1. 清掉测试柜的 Redis 实时键(`device:860000000000001*`) 2. 清掉安全码下发标记(Redis `auth_str:issued:{imei}` + DB `cabinets.auth_str_issued = 0`), 使 ① `auth_str` 能重新下发 8 位安全码(否则平台回 `auth_str already issued`) 3. 结束该柜未结束的充电订单(`active_flag` 是生成列,由 `end_time` 派生,不能直接写), 避免 ⑤ `on` 撞上 `active_flag` 唯一键 """ import pymysql import redis IMEI = '860000000000001' CABINET_ID = 1 r = redis.Redis(host='10.8.0.252', password='Hbhyg731024@', db=6, decode_responses=True) keys = r.keys(f'device:{IMEI}*') + [f'auth_str:issued:{IMEI}'] print('Redis 待删除 key 数:', len(keys)) if keys: print('Redis deleted:', r.delete(*keys)) c = pymysql.connect(host='10.8.0.252', user='root', password='Hbhyg731024@', database='pms_dev', autocommit=True) cur = c.cursor() cur.execute("UPDATE cabinets SET auth_str_issued = 0 WHERE imei = %s", (IMEI,)) print('auth_str_issued 置 0 行数:', cur.rowcount) cur.execute( "UPDATE charge_orders SET end_time = NOW(), status = 2 " "WHERE cabinet_id = %s AND end_time IS NULL", (CABINET_ID,), ) print('结束未完成订单行数:', cur.rowcount) print('剩余 device 键:', r.keys(f'device:{IMEI}*'))