服务时长区间新签/续费/拓科起始课时区分 — 需求原型文档
文档版本 V1.0 · 2026-06-09 · 红色虚线框 = 改造区域标注
学号:EVIP0120549409312
生日:2010-07-01
购物车
购买记录
用户详情
营地报名
其它项目收费
报名管理 +
家庭教育服务-A
21 服务时长
总价9345元
考勤后剩余服务时长(含购物车服务时长):0
中心: 江南大道
购买海星: 请选择
项目类型: 家庭教育服务
项目名称: 家庭教育服务-A
服务方式: 一对一
程度: S9
指导员等级: 请选择
购买服务时长:
请选择
20
21
22
23
24
25
...
指导室类型: 普通指导室
期望服务开始... 📅
项目单价:
🔍 「购买服务时长」下拉项取值示意(根据当前订单场景动态生成)
⚡ 新签场景
起始 20 → 最大 500,步长 2
20、22、24、26 ...
🔄 续费场景(当前展示)
起始 2 → 最大 500,步长 1
20、21、22、23 ...
✕ 拓科场景
起始 = 0
该区间不出现在下拉列表中
加入待缴费
3.2 报名取值逻辑说明
页面入口 :EVIP 管理后台 → 订单管理 → 查找用户 → 进入报名 → 一对一/一对多 tab
「购买服务时长」下拉框的起始课时取值,由原来统一读取「起始服务时长数」,改为根据当前订单的场景(signStatus + isExpandsub)读取对应字段
场景映射表
场景 判断条件 读取字段
新签 signStatus=1 且 isExpandsub=false 新签起始服务时长数
拓科 signStatus=1 且 isExpandsub=true 拓科起始服务时长数
续费 signStatus=2 续费起始服务时长数
可选课时生成规则不变:起始值 → 最大服务时长数,步长为区间差额。任一场景起始值为 0 时,该区间不出现在该场景的可选列表中。
场景判断流程图
签单类型和拓科标识的判断沿用现有规则(首课判断逻辑),不做改动:
字段说明 :
· signStatus:子订单签单类型(字典类型 ORDER_TYPE),1=新签,2=续费
· isExpandsub:是否拓科标识,true=旧生拓科,false=非拓科
· 两者均在下单时自动判定,也可在订单维护管理页面手动修改
场景判断流程图(Mermaid 渲染)
graph TB
A(["报名:选择课程"]) --> B{"该学生是否有历史已支付订单?"}
B -- "无" --> NEW1["纯新生新签"]
B -- "有" --> C{"是否有在读或近3个月内结束的订单?"}
C -- "无(停课超3个月)" --> NEW2["视同新生,新签"]
C -- "有" --> D{"当前下单课程与已有课程是否同科目分类?"}
D -- "同科目" --> E{"该科目下是否已提交考勤?"}
E -- "已考勤" --> RENEW["续费(signStatus=2)"]
E -- "未考勤" --> NEW3["新签"]
D -- "不同科目" --> F{"已有课程是否已考勤且已到下课时间?"}
F -- "已考勤已下课" --> EXPAND["拓科(signStatus=1, isExpandsub=true)"]
F -- "否" --> NEW4["新签"]
NEW1 --> R{"场景→起始课时"}
NEW2 --> R
NEW3 --> R
NEW4 --> R
RENEW --> R
EXPAND --> R
R -- "新签" --> S["读取「新签起始服务时长数」"]
R -- "拓科" --> T{"拓科起始值>0?"}
R -- "续费" --> U["读取「续费起始服务时长数」"]
T -- "是" --> V["读取「拓科起始服务时长数」"]
T -- "否(=0)" --> W["该区间不允许拓科购买"]
✱ 补充:任一场景(新签/续费/拓科)起始值=0时,该场景下不展示该区间
✱ 场景判断以下单时刻的考勤状态为准,下单后补提交的考勤不影响已判定的签单类型
判断节点说明
节点 判断内容 具体规则
B 历史已支付订单 是否纯新生 查询 tb_business_order_detail 中该学生是否有 pay_status≠0 的订单,无记录→纯新生
C 在读/近3月订单 是否停课超3月 无在读订单且无近3月结束订单→视同新生,不管科目都算新签
D 是否同科目分类 当前课程与已有订单科目 通过 tb_business_rel_course_binding 查出当前课程的 binding_id,与已有订单的 binding_id 对比
E 同科目已提交考勤 续费判断依据 同科目分类下有 is_submit=1 的排课记录→续费,否则→新签
F 不同科目已考勤已下课 拓科判断依据 已有课程 is_submit=1 且当前时间≥下课时间→拓科,否则→新签
T 场景起始值判断 是否允许该场景购买 对应场景起始服务时长数 > 0 正常生成可选课时;= 0 该区间不在可选列表中展示
特殊规则
任一场景起始值 = 0 时:该场景下该程度不允许购买
一对三(小组课)报名不区分场景,沿用原有统一逻辑
判断以下单时刻 的考勤状态为准,下单后补提交的考勤不影响已判定的签单类型
不变项
✓ 可选课时生成规则不变(起始→最大,步长=区间差额)
✓ 签单类型判断逻辑本身不做改动
✓ 收费方案设置(阶段3项目区间)不变
✓ 城市最大可购买课时限制(maxEnrollCountTotal)不变
✓ 一对三(小组课)报名不变
✓ 区间启用/停用操作逻辑不变
四、历史数据处理
数据兼容 · 平滑迁移
表结构变更
在 tb_business_fee_class_interval(服务时长区间表)中新增以下三个字段:
字段名 含义 类型
new_sign_start_count新签起始服务时长数 INT
renew_start_count续费起始服务时长数 INT
expand_start_count拓科起始服务时长数 INT
初始化策略
上线时,将 tb_business_fee_class_interval 表中所有服务时长区间记录的新签、续费、拓科起始服务时长数均初始化为当前的起始服务时长数(start_count)值,确保上线前后行为一致。
✓ 原 start_count 字段保留不删除
✓ 不涉及已有数据变更,仅新增字段并初始化