员工岗位可重新启用;调价认空运航线;会话存档跳号补拉;陆运报价按车型列回填

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
linmianxun
2026-10-28 19:48:47 +08:00
co-authored by Cursor
parent 2b528758b4
commit 56ba8e93b5
62 changed files with 2960 additions and 793 deletions
@@ -278,6 +278,83 @@ def _poll_by_scan_users(
return merged
def _merge_records_by_seq(
*batches: Sequence[dict[str, Any]],
min_seq: int = 0,
) -> list[dict[str, Any]]:
"""按 seq 去重合并多页;同 seq 后写覆盖。只保留 seq > min_seq。"""
by_seq: dict[int, dict[str, Any]] = {}
for batch in batches:
for rec in batch or ():
seq = _record_seq(rec)
if seq <= min_seq:
continue
by_seq[seq] = dict(rec)
return [by_seq[s] for s in sorted(by_seq)]
def _backfill_room_seq_gap(
api: WshotoOpenClient,
*,
room: str,
last_seq: int,
rows: list[dict[str, Any]],
page_size: int,
lookback: int,
clock: Callable[[], float],
) -> list[dict[str, Any]]:
"""
增量结果跳号时,用时间窗补中间漏掉的消息。
现网:游标 9892,管家增量只回撤回 9899,把「解散群」9898 永久跨过。
若本页最小 seq > last_seq+1,再打一枪时间窗,按 seq 合并后返回。
补洞失败则原样返回(调用方仍按本页 max 推进,故补洞要尽量成功)。
"""
if last_seq <= 0 or not rows:
return rows
page_seqs = [_record_seq(r) for r in rows if _record_seq(r) > 0]
if not page_seqs:
return rows
min_page = min(page_seqs)
if min_page <= last_seq + 1:
return rows
now_i = int(clock())
window = min(max(60, int(lookback or 0)), _NEW_ROOM_LOOKBACK_SEC)
logger.warning(
"微盛房间增量跳号 chat=%s last=%s min_page=%s,时间窗补洞 window=%ss",
room,
last_seq,
min_page,
window,
)
try:
fill = api.list_group_messages(
userid="",
target_id=room,
last_seq=0,
page_size=page_size,
msg_time_start=now_i - window,
msg_time_end=now_i,
)
except WshotoError as exc:
logger.warning(
"微盛房间补洞失败 chat=%s code=%s msg=%s",
room,
exc.code,
exc.msg,
)
return rows
merged = _merge_records_by_seq(rows, fill or [], min_seq=last_seq)
if len(merged) > len(rows):
logger.info(
"微盛房间补洞成功 chat=%s added=%s total=%s",
room,
len(merged) - len(rows),
len(merged),
)
return merged
def _poll_by_rooms(
api: WshotoOpenClient,
*,
@@ -341,6 +418,17 @@ def _poll_by_rooms(
polled += 1
if not is_room_hot(room):
cold_polled += 1
# 增量若跳号:管家有时先吐出撤回等高 seq,游标一步跨过中间正文
# (现网:解散群 seq=9898 被撤回 9899 推过去后永远听不见)。跳号则时间窗补洞。
rows = _backfill_room_seq_gap(
api,
room=room,
last_seq=last,
rows=list(rows or []),
page_size=page_size,
lookback=lookback,
clock=clock,
)
max_seq = last
for rec in rows:
seq = _record_seq(rec)