2025 年 12 月报读 BZ 课程、超过 3 个月未提交考勤(即未上首课)的用户,在 2026 年报读其他课程时,被定时任务 OrderDetailNewSignUpdateTask 判定为拓科(signStatus=3),导致该订单在「新签业绩综合报表」中被计入拓科列,与业务期望不符。
广州东圃校区学生曾语涵(EVIP0120263663556)、廖子欣(EVIP0114755157456),5月新签报读5科,因早前报读BZ项目订单尚未上首课,应归属"新生新签",但系统判定为"旧生拓科",影响学规师5月科数提成。涉及5笔订单需人工修正为"新生新签"类型。
定时任务的子订单 XQ 时间判断逻辑中,「找到上次新生新签单 → 上次新签 > 3个月 → 学生在读」分支直接根据"学生是否在读"的二元结果判定:
同流程中「上次新签 ≤ 3个月」分支已正确实现了"期间有效考勤"的二次判断。> 3个月 分支缺失了这层判断,是本次误判的根本原因。
① 2025-12-15:学生A 新签 BZ 课程(sign_status=1),支付完成,school1.finish_pay_time = 2025-12-15
② 2025-12 ~ 2026-03:学生A 未提交任何考勤(未上首课)
③ 2026-03-20:学生A 再次新签另一课程 → 距上次新签 > 3个月
④ 学生当前状态非 1/2/6(系统将其识别为"在读")
⑤ 现有逻辑:直接判为拓科(signStatus=3)❌
⑥ 期望逻辑:检查期间无有效考勤 → 判为新签延续(signStatus=1)✓
| 分支 | 修复前 | 修复后 |
|---|---|---|
| 上次新签 > 3个月 + 学生在读 + 期间无有效考勤 |
结果G:拓科 signStatus=3 XQ=当前订单时间 |
结果E':新签延续 signStatus=1 XQ=school1.finish_pay_time |
| 上次新签 > 3个月 + 学生在读 + 期间有有效考勤 |
结果G:拓科 signStatus=3 | 结果G:拓科 signStatus=3(不变) |
| 其它全部分支 | 不改动 | |
| 视图/临时表 | 含义 | 本次改动 |
|---|---|---|
school1 | 上次新生新签单记录 | 不改动 |
school2 | 期间无有效考勤的订单名单 | 不改动定义;>3个月分支新增引用 |
school3 | 批次最早支付时间 | 不改动 |
school4 | >3个月订单名单 | 不改动 |
school5 | 辅助条件表 | 不改动 |
prev_student_is_read | 学生在读状态表 | 不改动 |
prev_new_sign_data2 | 结果E 新签延续集 | 新增:>3个月+在读+无考勤 的记录写入 |
prev_new_sign_data3 | 结果G 拓科集 | 移除:>3个月+在读+无考勤 的记录 |
新签业绩综合报表的统计 SQL、维度、指标定义均不调整。报表数据随子订单字段被修正后自然刷新。
| 订单类型 | 修复前归属 | 修复后归属 |
|---|---|---|
| 超3个月未上首课再签单(被误判) | 拓科业绩列 | 新签业绩列 |
| 超3个月已上首课再签单(正确拓科) | 拓科业绩列 | 拓科业绩列(不变) |
| ≤3个月无考勤再签单 | 新签业绩列 | 新签业绩列(不变) |
上线前已被错误写入为拓科、且满足以下全部条件的子订单:
sign_status = 1(原始签单类型为新签)remark 不含 oldClassOrderId(非班级拆单)school1 有记录)school2 口径中)| 字段 | 原值 | 新值 |
|---|---|---|
signStatus | 3(拓科) | 1(新签) |
finish_pay_time_xq | 当前订单 finish_pay_time | school1.finish_pay_time |
| # | 场景 | 上次新签距今 | 学生在读 | 期间考勤 | 期望结果 |
|---|---|---|---|---|---|
| 1 | 续费 | — | — | — | A:signStatus=2 |
| 2 | 班级拆单纯新签 | — | — | — | B:signStatus=1 |
| 3 | 班级拆单拓科 | — | — | — | C:signStatus=3 |
| 4 | 纯新生(无school1)+ 非在读 | — | 否 | — | D:signStatus=1 |
| 5 | 有school1 + >3个月 + 非在读 | >3个月 | 否 | — | D:signStatus=1 |
| 6 | 有school1 + >3个月 + 在读 + 无考勤(本次修复) | >3个月 | 是 | 无 | E':signStatus=1, XQ=school1 |
| 7 | 有school1 + >3个月 + 在读 + 有考勤 | >3个月 | 是 | 有 | G:signStatus=3 |
| 8 | 有school1 + ≤3个月 + 无考勤 | ≤3个月 | — | 无 | E:signStatus=1 |
| 9 | 有school1 + ≤3个月 + 有考勤 | ≤3个月 | — | 有 | F:signStatus=3 |