8.1 KiB
8.1 KiB
陪伴员待接单问题诊断和解决方案
📋 问题描述
用户反馈:管理师派单给陪伴员后,陪伴员在"待接单"页面看不到订单
具体场景:
- 管理师在派单页面选择陪伴员(ID=10096)并派单
- 派单后前端显示"派单成功"
- 但陪伴员登录后在"待接单"页面看不到这个订单
🔍 技术分析
1. 派单逻辑(ManagerController.assignOrder)
派单时的操作:
// 更新订单信息
updateWrapper.set(com.peidu.entity.Order::getTeacherId, teacherId) // 设置陪伴员ID
.set(com.peidu.entity.Order::getStatus, 1); // 设置状态为1(待接单)
预期结果:
teacher_id = 10096status = 1(待接单)pay_status = 1(已支付)
2. 陪伴员查询逻辑(TeacherServiceImpl.getPendingOrders)
查询条件:
wrapper.eq(Order::getTeacherId, teacherId); // teacher_id = 陪伴员ID
wrapper.eq(Order::getStatus, 1); // status = 1 (待接单)
wrapper.eq(Order::getPayStatus, 1); // pay_status = 1 (已支付)
wrapper.eq(Order::getDeleted, 0); // deleted = 0 (未删除)
3. 前端获取teacherId的方式
前端代码(pending-orders.vue):
const userInfo = uni.getStorageSync('userInfo')
// 🔥 关键:优先使用teacherId,如果没有则使用id或userId
this.teacherId = userInfo.teacherId || userInfo.id || userInfo.userId
🎯 可能的原因
原因1:前端获取的teacherId不正确 ⚠️ (概率70%)
问题描述:
- 前端从
userInfo中获取teacherId - 如果
userInfo.teacherId为空,会使用userInfo.id(这是user.id,不是teacher.id) - 导致查询时使用了错误的ID
验证方法:
- 在陪伴员端打开控制台
- 查看日志中的
[待接单] 陪伴员ID:输出 - 确认这个ID是否等于数据库中的
teacher.id
原因2:派单时数据库更新失败 ⚠️ (概率20%)
问题描述:
- 虽然后端日志显示"派单成功"
- 但数据库中的
teacher_id和status可能没有真正更新 - 这可能是由于MyBatis-Plus的逻辑删除机制导致的
验证方法: 运行SQL查询订单306的实际状态
原因3:登录接口未返回teacherId ⚠️ (概率10%)
问题描述:
- 登录接口只返回了
user信息 - 没有查询
teacher表并返回teacherId
验证方法:
查看登录接口的实现,确认是否返回了 teacherId
🔧 诊断步骤
步骤1:运行SQL检查订单状态
请在数据库中运行以下SQL,并提供查询结果:
-- 1. 查看最近派单的订单(假设派给了陪伴员ID=10096)
SELECT
id,
order_no,
teacher_id,
status,
pay_status,
service_date,
time_slot,
create_time,
update_time,
CASE
WHEN teacher_id IS NULL THEN '❌ 未分配陪伴员'
WHEN status != 1 THEN '❌ 状态不是1(待接单)'
WHEN pay_status != 1 THEN '❌ 未支付'
ELSE '✅ 符合条件'
END as check_result
FROM `order`
WHERE teacher_id = 10096
ORDER BY update_time DESC
LIMIT 10;
-- 2. 查看陪伴员10096应该能看到的待接单订单
SELECT
id,
order_no,
teacher_id,
status,
pay_status,
service_date,
time_slot,
create_time,
update_time
FROM `order`
WHERE teacher_id = 10096
AND status = 1
AND pay_status = 1
AND deleted = 0
ORDER BY create_time DESC;
-- 3. 查看teacher表中ID=10096的陪伴员信息
SELECT
id as teacher_id,
user_id,
name,
real_name,
phone,
audit_status
FROM teacher
WHERE id = 10096;
步骤2:检查前端控制台日志
请在陪伴员端执行以下操作:
- 打开微信开发者工具
- 切换到"控制台"标签
- 清空控制台日志
- 进入"待接单"页面
- 查看控制台输出,找到以下关键信息:
[待接单] 用户信息:- 查看完整的 userInfo 对象[待接单] 陪伴员ID:- 查看前端获取的 teacherId[待接单] API响应:- 查看后端返回的数据
步骤3:检查后端控制台日志
请在后端控制台查看:
-
派单时的日志:
=== 派单接口被调用 ===派单前订单信息:更新后订单验证:
-
查询待接单订单时的日志:
- 查找包含
getPendingOrders的日志 - 查看查询参数和查询结果
- 查找包含
💡 临时解决方案
如果确认是前端获取 teacherId 的问题,可以使用以下临时方案:
方案A:手动设置teacherId
在陪伴员端的 pending-orders.vue 中:
onLoad() {
const userInfo = uni.getStorageSync('userInfo')
// 🔥 临时方案:手动设置teacherId
this.teacherId = 10096 // 替换为实际的陪伴员ID
console.log('[待接单] 陪伴员ID:', this.teacherId)
this.loadList()
}
方案B:调用接口获取teacherId
async loadTeacherId() {
const userInfo = uni.getStorageSync('userInfo')
// 如果已有teacherId,直接使用
if (userInfo.teacherId) {
this.teacherId = userInfo.teacherId
return
}
// 否则,调用接口查询
try {
const res = await teacherApi.getTeacherInfo({ userId: userInfo.id })
if (res.code === 200 && res.data) {
this.teacherId = res.data.id
// 保存到本地存储
userInfo.teacherId = res.data.id
uni.setStorageSync('userInfo', userInfo)
}
} catch (error) {
console.error('[待接单] 获取teacherId失败:', error)
}
}
🎯 根本解决方案
方案1:修复登录接口(推荐)
在登录接口中查询 teacher 表并返回 teacherId:
后端修改(登录接口):
// 登录成功后,查询teacher信息
Teacher teacher = teacherService.lambdaQuery()
.eq(Teacher::getUserId, user.getId())
.one();
if (teacher != null) {
userInfo.put("teacherId", teacher.getId());
userInfo.put("teacherName", teacher.getTeacherName());
}
方案2:添加专门的接口获取teacherId
后端新增接口:
@ApiOperation("根据userId获取teacherId")
@GetMapping("/teacher/getByUserId")
public Result<Map<String, Object>> getTeacherByUserId(@RequestParam Long userId) {
Teacher teacher = teacherService.lambdaQuery()
.eq(Teacher::getUserId, userId)
.one();
if (teacher == null) {
return Result.error("未找到陪伴员信息");
}
Map<String, Object> data = new HashMap<>();
data.put("teacherId", teacher.getId());
data.put("teacherName", teacher.getTeacherName());
return Result.success(data);
}
前端调用:
async getTeacherId() {
const userInfo = uni.getStorageSync('userInfo')
const res = await teacherApi.getTeacherByUserId({ userId: userInfo.id })
if (res.code === 200 && res.data) {
this.teacherId = res.data.teacherId
// 保存到本地存储
userInfo.teacherId = res.data.teacherId
uni.setStorageSync('userInfo', userInfo)
}
}
📝 下一步行动
立即执行
- 运行SQL检查 - 运行步骤1中的3个SQL查询
- 查看前端日志 - 按步骤2的指引查看控制台
- 查看后端日志 - 按步骤3的指引查看后端控制台
根据诊断结果
- 如果SQL查询结果显示订单状态正确 → 问题在前端,使用方案A或B
- 如果SQL查询结果显示订单状态不正确 → 问题在派单逻辑,需要修复派单接口
- 如果teacher表中没有user_id映射 → 需要修复数据关联
🔍 需要用户提供的信息
请提供以下信息以便进一步诊断:
-
SQL查询结果:
- 查询1的结果(最近派单的订单)
- 查询2的结果(符合条件的待接单订单)
- 查询3的结果(陪伴员信息)
-
前端控制台日志:
[待接单] 用户信息:的完整输出[待接单] 陪伴员ID:的值[待接单] API响应:的完整输出
-
后端控制台日志:
- 派单时的完整日志
- 查询待接单订单时的日志
创建时间:2026-01-26
状态:等待用户提供诊断信息