权限与安全: - 为全部 51 个 handler 端点添加 require_permission 权限检查 - 修复 CAS 预约操作中 doctor_id 为 None 时使用 Uuid::nil() 的问题 状态机修复: - 预约初始状态从 "scheduled" 改为 "pending"(匹配设计规格) - 排班状态从 "active" 改为 "enabled" - 咨询会话添加 waiting→active 自动触发(首条消息时) - 新增 create_session 端点和 DTO 数据完整性: - doctor_profile 表添加 name 列(entity + migration + service) - lab_report/health_trend 的 json 列改为 json_binary(支持 GIN 索引) - 添加关键索引:patient.id_number UNIQUE、patient_tag UNIQUE、 doctor_schedule 唯一排班槽位、health_trend、doctor_profile.name - 随访记录完成后自动检查 next_follow_up_date 创建后续任务 事件总线: - 实现 10 种核心事件发布(patient/appointment/follow_up/consultation/lab_report) - 实现 workflow.task.completed 和 message.sent 事件订阅框架 种子数据: - 实现 seed_tenant_health(8 个默认患者标签) - 实现 soft_delete_tenant_data(16 张表级联软删除)
40 lines
1.4 KiB
Rust
40 lines
1.4 KiB
Rust
use erp_core::events::EventBus;
|
|
|
|
pub fn register_handlers(bus: &EventBus) {
|
|
// workflow.task.completed → 更新随访任务状态
|
|
let (mut workflow_rx, _wf_handle) = bus.subscribe_filtered("workflow.task.".to_string());
|
|
tokio::spawn(async move {
|
|
loop {
|
|
match workflow_rx.recv().await {
|
|
Some(event) if event.event_type == "workflow.task.completed" => {
|
|
tracing::info!(
|
|
event_id = %event.id,
|
|
"健康模块收到工作流任务完成事件"
|
|
);
|
|
// 后续可通过 db 连接更新 follow_up_task 状态
|
|
}
|
|
Some(_) => {}
|
|
None => break,
|
|
}
|
|
}
|
|
});
|
|
|
|
// message.sent → 联动咨询会话 last_message_at
|
|
let (mut msg_rx, _msg_handle) = bus.subscribe_filtered("message.".to_string());
|
|
tokio::spawn(async move {
|
|
loop {
|
|
match msg_rx.recv().await {
|
|
Some(event) if event.event_type == "message.sent" => {
|
|
tracing::info!(
|
|
event_id = %event.id,
|
|
"健康模块收到消息发送事件"
|
|
);
|
|
// 后续可通过 db 连接更新 consultation_session.last_message_at
|
|
}
|
|
Some(_) => {}
|
|
None => break,
|
|
}
|
|
}
|
|
});
|
|
}
|