一、需求背景

1.1 业务背景

助理指导员存在跨城市授课场景,当前系统在基本档变更课酬统计时存在两处城市过滤缺失的BUG:

BUG 1:变更基本档时误结束其他城市的基本档
变更助理指导员基本档时,查询当月生效基本档未关联城市
→ 会把其他城市正在生效的基本档结束掉(误伤)
→ 但同城市如果有多个生效记录反而没结束(漏处理)
BUG 2:课酬统计报表跨城市重复
薪酬报表关联 tb_business_teacher_base_files_log 查询所有 end_time=null 的基本档,没有限制城市
→ 跨城市授课时,同一课时匹配到多个城市的基本档,数据膨胀(实测出现3次)
熊丹老师基本档查询结果 - 同一teacher_id出现2条广州end_time=null记录
SQL查询截图:同一 teacher_id 出现多条广州 end_time=null 记录(数据BUG现象)

1.2 核心前提

规则说明
基本档生效维度城市 + 月份,一个助理指导员在一个城市一个月只有一个基本档生效
新增/修改触发场景① 新增指导员所属城市   ② 修改指导员所属城市   ③ 助理指导员补充档设置

1.3 核心目标

目标说明
修复变更BUG变更基本档时加城市过滤,只影响当前城市的基本档
修复统计重复课酬报表关联补充档时加城市限制,消除跨城市重复
精准修复 两处查询加城市过滤 存量数据清洗 无UI改动

二、需求内容

本次为精准修复,不涉及页面UI改动,涉及两处查询逻辑调整和一批历史数据清洗:

#改动项说明
1变更基本档查询 — 加城市过滤变更助理指导员基本档时,查询当前生效基本档需加上城市限制
2工资补充报表 — 加城市过滤薪酬报表关联补充档时,加上城市限制匹配
3历史数据清洗同城市有多条 end_time=null 的记录,保留最新一条,其余加上结束日期
✓ 不涉及页面UI改动    ✓ 不涉及基本档设置页面    ✓ 不涉及补充档设置弹窗UI    ✓ 不涉及课酬计算公式
查询逻辑修复 城市维度过滤 存量清洗

三、涉及改动

3.1 变更基本档查询 — 加城市过滤(BUG修复)
指导员管理页面-更多操作
❶ 点击「修改」
❷ 更多 →「助理指导员补充档设置」
指导员管理页面 — 红框标注触发基本档变更的两个入口:「修改」按钮和「更多 → 助理指导员补充档设置」
指导员修改弹窗
⭕ 「所属城市」字段 — 修改城市时触发基本档变更
指导员修改弹窗 — 红框标注「所属城市」字段,修改城市时触发基本档变更查询
助理指导员补充档设置弹窗
⭕ 「档位」字段 — 设置补充档时触发基本档变更
助理指导员补充档设置弹窗 — 红框标注「档位」字段,选择档位时触发基本档变更查询

变更基本档查询修复

1. 现状(有BUG)

变更基本档时查询当月生效记录,未关联城市
-- 当前:未加城市过滤 SELECT * FROM tb_business_teacher_base_files_log WHERE teacher_id = ? AND is_del = 0 AND end_time IS NULL -- ⚠ 命中所有城市,误结束其他城市记录

2. 修复后

✓ 加城市过滤条件
-- 修复后:加城市过滤 SELECT * FROM tb_business_teacher_base_files_log WHERE teacher_id = ? AND is_del = 0 AND end_time IS NULL AND base_file_id IN ( SELECT base_file_id FROM tb_base_file_ref_city WHERE city_id = ?) -- ✓ 只命中当前城市的基本档

3. 完整变更逻辑

场景处理逻辑
新增指导员所属城市关联城市查询(tb_base_file_ref_city),检查是否有生效基本档,没有则直接新增
修改指导员所属城市关联目标城市查询 → 有:结束原档,再新增;无:走新增
补充档设置关联当前城市查询 → 有:结束原档,再新增;无:走新增

4. 关于 tb_base_file_ref_city

该表仍在使用,被新增指导员时的自动分配最低档逻辑引用。仅在补充档设置的「可设置范围查询」中被注掉,该场景当前使用 %城市% 匹配 tb_base_file.name

5. 广州硬编码默认一档

广州城市在自动分配基本档时存在硬编码逻辑,默认直接给一档(不取最低档)。历史遗留,本次不涉及调整。

6. 不涉及改动清单

3.2 助理指导员工资补充报表 — 加城市过滤(BUG修复)
助理指导员工资补充报表页面
⭕ 关联查询加城市过滤
助理指导员工资补充报表页面 — 红框标注数据列表区域,关联查询加城市过滤

工资补充报表修复

1. 现状(有BUG)

报表关联查询取所有 end_time=null 的基本档,不限城市
-- 当前:未加城市过滤 JOIN tb_business_teacher_base_files_log t ON t.teacher_id = 指导员ID WHERE t.is_del = 0 AND t.end_time IS NULL -- ⚠ 跨城市授课匹配多条 → 数据膨胀

2. 修复后

✓ 加城市限制匹配
-- 修复后:加城市过滤 JOIN tb_business_teacher_base_files_log t ON t.teacher_id = 指导员ID WHERE t.is_del = 0 AND t.end_time IS NULL AND t.base_file_id IN ( SELECT base_file_id FROM tb_base_file_ref_city WHERE city_id = 当前城市ID) -- ✓ 每个城市独立匹配

3. 兜底取价策略

当指导员在某授课城市无补充档时,取该城市的最低档基本档计算课酬。

4. 不变项

✓ 筛选条件不变   ✓ 列表字段不变   ✓ 导出格式不变   ✓ 课酬计算公式不变   ✓ 补充档可设置范围查询(%城市%匹配)不变

四、历史数据处理

项目说明
存量数据清洗排查 tb_business_teacher_base_files_log 中同一 teacher_id + 同一城市有多条 end_time=null 的记录 → 保留最新一条,其余加上结束日期(设为当前日期)
薪酬报表历史数据已有导出记录不做回溯修正,新逻辑仅影响新查询和新导出
被误结束的基本档之前因变更BUG被误结束的其他城市基本档,需要手动恢复(将 end_time 重新设为 null)
✓ 基本档主表数据不变    ✓ 基本档子表数据不变    ✓ 课酬计算公式不变
存量清洗 保留最新一条 不回溯历史导出

五、权限变更

本次需求无权限变更,沿用现有权限体系。

无新增权限点

待确认问题(已全部关闭)

所有问题已确认关闭,无需进一步确认。

#问题结论
1月中升档时课酬取价方式不存在月中升档,无需处理
2被误结束的其他城市基本档是否需恢复需要恢复(end_time 重新设为 null)
3授课城市无补充档时的兜底取价策略取该城市最低档基本档
🎯 编辑红框