Ethscriptions commited on
Commit
b6ec259
·
verified ·
1 Parent(s): e00dc2a

Update pages/monitor_playback.py

Browse files
Files changed (1) hide show
  1. pages/monitor_playback.py +60 -8
pages/monitor_playback.py CHANGED
@@ -41,6 +41,7 @@ CINEMA_ID = os.getenv("CINEMA_ID")
41
  TMS_APP_SECRET = os.getenv("TMS_APP_SECRET")
42
  TMS_TICKET = os.getenv("TMS_TICKET")
43
  TMS_X_SESSION_ID = os.getenv("TMS_X_SESSION_ID")
 
44
 
45
  HALL_ID_MAP = {
46
  "1": "79181753", "2": "87350725", "3": "93340931",
@@ -195,21 +196,16 @@ class WeChatPusher:
195
  errcode = result.get("errcode")
196
 
197
  if errcode == 0:
198
- # 发送成功
199
- # print(f"✅ 微信发送成功 [{user_id}]")
200
- break # 跳出重试循环,处理下一个用户
201
 
202
- # 40001: Token 无效
203
- # 40014: Token 不合法
204
- # 42001: Token 过期
205
  elif errcode in [40001, 40014, 42001]:
206
  print(f"🔄 微信 Token 失效 ({errcode}),正在刷新重试 [{user_id}]...")
207
- continue # 进入下一次循环,强制刷新 Token
208
 
209
  else:
210
  print(f"❌ 微信发送失败 [{user_id}]: {result}")
211
  daily_stats.notify_fails += 1
212
- break # 其他错误(如模板ID错、OpenID错),不重试
213
 
214
  except Exception as e:
215
  print(f"❌ 微信发送异常 [{user_id}]: {e}")
@@ -388,6 +384,7 @@ class TMSAPIManager:
388
 
389
  if not all([TMS_APP_SECRET, TMS_TICKET]): return None
390
 
 
391
  url = f'http://oa.hengdianfilm.com:7080/cinema-api/admin/generateToken?token=hd&murl=?token=hd&murl=ticket={TMS_TICKET}'
392
  headers = {'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0'}
393
  payload = {'appId': 'hd', 'appSecret': TMS_APP_SECRET, 'timeStamp': int(time.time() * 1000)}
@@ -448,6 +445,57 @@ class TMSAPIManager:
448
  daily_stats.api_fails += 1
449
  return None
450
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
451
 
452
  # --- 6. 智能监控主逻辑 ---
453
  class PlaybackMonitor:
@@ -716,6 +764,10 @@ class PlaybackMonitor:
716
  remark = "仅停止播放未撤排程下次检查依然会触发通知。"
717
  notifier.send_idle_alert(hall_name_clean, movie_name, ticket_start_str, count_info, remark)
718
 
 
 
 
 
719
  else:
720
  status_desc += " ✅ [正常 (TMS无排期)]"
721
  self.cleared_sessions.add(unique_key)
 
41
  TMS_APP_SECRET = os.getenv("TMS_APP_SECRET")
42
  TMS_TICKET = os.getenv("TMS_TICKET")
43
  TMS_X_SESSION_ID = os.getenv("TMS_X_SESSION_ID")
44
+ TMS_THEATER_ID = os.getenv("TMS_THEATER_ID") # 新增:影院ID
45
 
46
  HALL_ID_MAP = {
47
  "1": "79181753", "2": "87350725", "3": "93340931",
 
196
  errcode = result.get("errcode")
197
 
198
  if errcode == 0:
199
+ break # 成功
 
 
200
 
 
 
 
201
  elif errcode in [40001, 40014, 42001]:
202
  print(f"🔄 微信 Token 失效 ({errcode}),正在刷新重试 [{user_id}]...")
203
+ continue # 强制刷新 Token
204
 
205
  else:
206
  print(f"❌ 微信发送失败 [{user_id}]: {result}")
207
  daily_stats.notify_fails += 1
208
+ break # 其他错误,不重试
209
 
210
  except Exception as e:
211
  print(f"❌ 微信发送异常 [{user_id}]: {e}")
 
384
 
385
  if not all([TMS_APP_SECRET, TMS_TICKET]): return None
386
 
387
+ # 获取 OA 系统 Token
388
  url = f'http://oa.hengdianfilm.com:7080/cinema-api/admin/generateToken?token=hd&murl=?token=hd&murl=ticket={TMS_TICKET}'
389
  headers = {'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0'}
390
  payload = {'appId': 'hd', 'appSecret': TMS_APP_SECRET, 'timeStamp': int(time.time() * 1000)}
 
445
  daily_stats.api_fails += 1
446
  return None
447
 
448
+ def trigger_schedule_refresh(self):
449
+ """触发 TMS 排期刷新"""
450
+ token = self.get_token()
451
+ if not token or not TMS_THEATER_ID: return
452
+
453
+ try:
454
+ # 动态生成时间戳
455
+ now_tm = time.localtime()
456
+ today_midnight = time.mktime((now_tm.tm_year, now_tm.tm_mon, now_tm.tm_mday, 0, 0, 0, 0, 0, 0))
457
+ start_date = int(today_midnight * 1000)
458
+ end_date = start_date + (24 * 60 * 60 * 1000)
459
+
460
+ url = 'https://tms.hengdianfilm.com/cinema-api/tms/cmd/show/schedule'
461
+ session_id = TMS_X_SESSION_ID or ''
462
+
463
+ headers = {
464
+ 'accept': 'application/json, text/javascript, */*; q=0.01',
465
+ 'content-type': 'application/json; charset=UTF-8',
466
+ 'origin': 'https://tms.hengdianfilm.com',
467
+ 'referer': f'https://tms.hengdianfilm.com/hd/index?Scheduling&THEATER_ID={TMS_THEATER_ID}&DATE={start_date}&PAGE_CAPACITY=20&PAGE_INDEX=1',
468
+ 'token': token, # 这里的 token 由 get_token() 动态获取
469
+ 'user-agent': 'Mozilla/5.0',
470
+ 'x-requested-with': 'XMLHttpRequest',
471
+ 'x-sessionid': session_id
472
+ }
473
+
474
+ params = {
475
+ 'token': 'hd',
476
+ 'murl': 'Scheduling',
477
+ }
478
+
479
+ cookies = {'JSESSIONID': session_id}
480
+
481
+ json_data = {
482
+ 'THEATER_LIST': [
483
+ {
484
+ 'THEATER_ID': int(TMS_THEATER_ID),
485
+ 'START_DATE': start_date,
486
+ 'END_DATE': end_date,
487
+ },
488
+ ],
489
+ }
490
+
491
+ # 发送请求,非阻塞,忽略证书错误
492
+ requests.post(url, params=params, headers=headers, cookies=cookies, json=json_data, timeout=5, verify=False)
493
+ self.logger("🔄 TMS 排期刷新指令已发送")
494
+
495
+ except Exception as e:
496
+ # 刷新失败不影响主程序
497
+ self.logger(f"⚠️ TMS 排期刷新失败: {e}")
498
+
499
 
500
  # --- 6. 智能监控主逻辑 ---
501
  class PlaybackMonitor:
 
764
  remark = "仅停止播放未撤排程下次检查依然会触发通知。"
765
  notifier.send_idle_alert(hall_name_clean, movie_name, ticket_start_str, count_info, remark)
766
 
767
+ # --- NEW: 第一次发现后,触发TMS刷新 ---
768
+ if check_idx == 0:
769
+ self.tms_api.trigger_schedule_refresh()
770
+
771
  else:
772
  status_desc += " ✅ [正常 (TMS无排期)]"
773
  self.cleared_sessions.add(unique_key)