服务时长区间新签/续费/拓科起始课时区分 — 需求原型文档

文档版本 V1.0 · 2026-06-09 · 红色虚线框 = 改造区域标注

一、需求背景

业务痛点 · 核心目标 · 改动前后对比

1.1 业务背景

在三大考前及日常运营中,不同场景对起始购买课时有差异化要求:

当前系统「服务时长区间设置」中每个程度只有一个「起始服务时长数」,三种场景共用同一套起始课时,无法分别控制。

1.2 核心目标

支持同一服务时长区间配置中,新签、续费、拓科分别拥有独立的起始购买课时数,使运营可按场景灵活调整门槛。

三场景独立配置 三场景均可设0禁购 判断逻辑不变 一对三不涉及

二、需求内容

改造范围 · 三场景取值规则

2.1 配置表改造

在「项目管理 → 收费管理 → 服务时长区间设置」的编辑弹窗中,将程度配置表原有的「起始服务时长数」一列拆分为三列,运营可为每个程度(J1~J3, S1~S12)分别配置三种场景的起始课时。

2.2 报名取值规则

场景判断条件读取字段
新签signStatus=1 且 isExpandsub=false新签起始服务时长数
拓科signStatus=1 且 isExpandsub=true拓科起始服务时长数
续费signStatus=2续费起始服务时长数

当任一场景起始值 = 0 时,该场景下不展示该区间(购买服务时长下拉列表不出现该区间)。

signStatus + isExpandsub 三场景=0禁购 一对三不区分 判断逻辑沿用

三、涉及改动

3.1-A 列表页(不变) · 3.1-B 新增/修改弹窗(拆为三列) · 3.2 报名页取值逻辑
3.1 服务时长区间设置 — 列表页(不变)
首页 / 服务时长区间设置
服务时长区间名:
状态:
城市:
单选 操作 服务时长区间名称 备注 状态 添加时间 城市
修改 停用 删除广州 DQK 项目课时区间启用2026-01-30 16:06:10广州
修改 停用 删除=2~100服务时长启用2025-12-31 11:36:07广州
修改 停用 删除卓越学习心法家长项目课时区间启用2025-07-10 15:46:09广州
修改 停用 删除=8服务时长启用2024-06-20 18:50:52广州,深圳
修改 停用 删除广州奇趣寒假服务时长方案启用2024-06-20 18:50:52广州
修改 停用 删除广州8~60服务时长启用2024-06-20 18:50:52广州,广州成长
当前显示 1 到 10 条,共 58 条记录 第一页 上一页 of 6 下一页 最后一页

3.1-A 列表页 — 不变

页面入口:EVIP 管理后台 → 项目管理 → 收费管理 → 服务时长区间设置

✓ 筛选项(服务时长区间名称 / 状态 / 城市)不变
✓ 表格列(单选 / 操作 / 区间名称 / 备注 / 状态 / 添加时间 / 城市)不变
✓ 「新增」/「修改」/「停用」/「删除」操作不变
✓ 分页与排序逻辑不变

本页面仅作为入口展示,本次需求不涉及列表页任何改动。点击「新增」或「修改」打开详情弹窗(见下方 3.1-B)。

上下文说明

区域是否改动
列表页否—保持原样
新增/修改弹窗是—程度配置表拆分三列
3.1-B 服务时长区间设置 — 新增/修改弹窗(程度配置表拆分为三列)

3.1-B 弹窗改动说明

入口:列表页 → 点击「新增」或「修改」

将「起始服务时长数」1列 → 拆分为 3 列(新签 / 续费 / 拓科)

列变化

原列名拆分后
起始服务时长数新签起始服务时长数 + 续费起始服务时长数 + 拓科起始服务时长数

其它列(程度、最大服务时长数、区间差额)及弹窗顶部表单(服务时长区间名、城市、备注)、列表页均不做改动。

字段规则

字段类型规则
新签起始服务时长数非负整数必填,≥ 0;= 0 时新签场景不展示该区间
续费起始服务时长数非负整数必填,≥ 0;= 0 时续费场景不展示该区间
拓科起始服务时长数非负整数必填,≥ 0;= 0 时拓科场景不展示该区间
最大服务时长数整数不变
区间差额整数不变

不变项

✓ 弹窗顶部表单(区间名、城市、备注)不变
✓ 最大服务时长数、区间差额不变
✓ 区间启用/停用操作逻辑不变
3.2 用户报名 — 起始课时取值逻辑变更(三路分支)
首页 / 进入报名
吴源华
电话:13631315931
就读学校:广州培文外国语中学
学号:EVIP0120549409312
生日:2010-07-01
程度:S10
用户状态:结束服务 3 个月内
一对一/一对多
一对三
报名管理 +
家庭教育服务-A 21 服务时长 总价9345元 考勤后剩余服务时长(含购物车服务时长):0
中心:
购买海星:
项目类型:
项目名称:
服务方式:
程度:
指导员姓名: 不选指导员
指导员等级:
购买服务时长:
指导室类型:
期望服务开始... 📅
项目单价:
🔍 「购买服务时长」下拉项取值示意(根据当前订单场景动态生成)
⚡ 新签场景
起始 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 该区间不在可选列表中展示

特殊规则

不变项

✓ 可选课时生成规则不变(起始→最大,步长=区间差额)
✓ 签单类型判断逻辑本身不做改动
✓ 收费方案设置(阶段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 字段保留不删除
✓ 不涉及已有数据变更,仅新增字段并初始化

五、权限变更

权限说明
✓ 本次需求无权限变更
✓ 沿用现有项目管理模块和订单管理模块的操作权限