5.8 KiB
5.8 KiB
医助复诊跟进(接诊率 / 触达节点 / 到期标红 / 到期弹窗)线上部署步骤
日期:2026-10-15。对应方案:assistant-revisit-reach-reminder-2026-10-12.md。代码在分支 tongji-10-12(工作区尚未提交)。本地 phpstudy 环境已完成 SQL 执行、全量快照初始化与真库交叉验证。
0. 发布前
- 提交并推送
tongji-10-12,按团队流程合并到master。 - 本地没有 Node,前端必须在有 Node 的机器或 CI 上构建:
cd admin && npm install && npm run lint && npm run type-check && npm run build
npm run build 会把 dist 复制到 server/public/admin(admin/scripts/release.mjs),生产 API 地址取 admin/.env.production 的 https://admin.zhenyangtang.com.cn/。构建产物随后端代码一起发布。
- 确认
server/config/project.php两个开关的上线取值(文件随代码发布):revisit_reach.toast_enabled:仓库当前为true(本地测试用)。建议上线首日改为false,由主管先用诊单列表「复诊到期」chip 清理存量,再改为true;改配置不需要发版。revisit_reach.wecom_enabled:保持false,企微推送命令会空跑。revisit_rate.default_inherit_mode:保持exclude,复诊接诊率页面与自动分配沿用原口径。
- 线上 PHP 必须 8.0+,且所有 php-fpm/php-cgi 工作进程都已加载
pdo_mysql(本地曾出现单个 worker 未加载扩展导致接口间歇性报 could not find driver,重启 PHP 进程即可)。
1. 数据库(先于代码执行)
先备份:
mysqldump -u<user> -p zyt zyt_tcm_prescription_order zyt_tcm_diagnosis_assign_log zyt_tcm_diagnosis_auto_assign_log zyt_dev_crontab zyt_system_menu zyt_system_role_menu > backup_before_revisit_reach.sql
按序执行 server/sql/1.9.20261012/01~10(无自动迁移器):
for f in server/sql/1.9.20261012/*.sql; do mysql -u<user> -p --default-character-set=utf8mb4 zyt < "$f" || break; done
| 文件 | 内容 | 幂等 |
|---|---|---|
| 01 | zyt_tcm_prescription_order 覆盖索引 idx_diag_del_fs_ct |
否,重复执行报 1061 可忽略 |
| 02 / 03 | 快照表 zyt_tcm_diagnosis_revisit_due、流水表 ..._log |
是 |
| 04 | 定时任务:全量 08:30、增量 */30 | 是 |
| 05 | 弹窗 6 个按钮权限,自动授予已有「中医诊单」权限的角色 | 是 |
| 06 | zyt_tcm_diagnosis_assign_log 新增 inherit_visit_slot 两列(代码查询依赖,必须先于代码) |
否 |
| 07 | zyt_tcm_diagnosis_auto_assign_log 新增 visit2_rate_new_assign / rate_version(自动分配命令依赖) |
否 |
| 08 | 「数据统计 → 复诊到期跟进」页面与流水权限,不自动授权 | 是 |
| 09 | 定时任务:企微 daily 09:00、tick */30(wecom_enabled=false 时空跑) |
是 |
| 10 | 个人业绩页「我的复诊接诊率」权限,自动授予已有个人业绩页的角色 | 是 |
本地 MySQL 5.7 已验证 10 个文件全部执行成功。
2. 发布代码
- 同步
server/(含public/admin构建产物)到服务器;无新增 Composer 依赖。 - 重载 php-fpm 刷新 opcache;执行
php think clear清理运行时缓存。 - 后台权限缓存按管理员单独缓存 1 小时,菜单 SQL 执行后最多 1 小时生效,或让相关账号重新登录。
3. 初始化与定时任务
cd /path/to/server
php think tcm:revisit-due-scan --mode=full --dry-run # 先看耗时与候选数(本地 4721 张诊单约 20 秒)
php think tcm:revisit-due-scan --mode=full # 正式初始化快照
php think tcm:backfill-inherit-visit-slot --dry-run # 继承诊次快照回填预览
php think tcm:backfill-inherit-visit-slot # 正式回填
php think tcm:auto-assign-pending --dry-run # 两套口径分档对照,确认默认仍为旧口径(v1)
确认系统 cron 每分钟触发 php think crontab(既有约定);后台「系统设置 → 定时任务」应出现 4 条新任务,首次 last_time 为空只登记下次执行时间。
4. 验收清单
- 诊单列表「复诊节点」列显示第 N 诊、开药天数与来源、预计复诊日、状态 chip;到期未挂号/过号整行标红;顶部「复诊到期 N」角标与筛选后列表条数一致;只读详情页显示同一信息。
- 以持有到期患者的医助登录,右下角出现汇总卡;延迟、已联系、人工关闭、去挂号四个动作可用;挂号成功后卡片与红行同时消失。
- 「数据统计 → 复诊到期跟进」主管视图可筛选、导出、看流水;非授权角色打不开。
- 「复诊接诊率」页面默认数字与上线前一致(原口径);切换「新口径」后出现继承数等列。
- 自动分配 dry-run 的 v1 分档与上线前一致。
- 个人业绩页出现「我的复诊接诊率」卡片(二中心医助),非二中心显示「暂无数据」。
5. 回滚
- 前端:恢复上一版
server/public/admin。 - 后端:回退代码并重载 php-fpm;新表、新列、新索引保留无害,不需要回滚 SQL。
- 定时任务:后台把 4 条新任务
status改为停止,或UPDATE zyt_dev_crontab SET status=2 WHERE command IN ('tcm:revisit-due-scan','tcm:revisit-due-notify')。 - 只想关弹窗:
revisit_reach.toast_enabled=false,不需要发版。
6. 已知事项
server/app/mcp/catalog/generated.php已重生成,顺带暴露 4 个尚无审核条目的tcm.followupAudio/*只读接口(既有缺口,AiMcpUnitTest只计数不失败)。- 首次全量初始化会把历史逾期患者一次性置为到期,弹窗数量会很多,建议先关弹窗清存量。
- 本地验证中修正了一处口径:下单当天及更早的面诊不算这笔药的复诊(
revisit_reach.appointment_min_gap_days,默认 1)。