i更新
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
# 医助复诊跟进(接诊率 / 触达节点 / 到期标红 / 到期弹窗)线上部署步骤
|
||||
|
||||
日期:2026-10-15。对应方案:`assistant-revisit-reach-reminder-2026-10-12.md`。代码在分支 `tongji-10-12`(工作区尚未提交)。本地 phpstudy 环境已完成 SQL 执行、全量快照初始化与真库交叉验证。
|
||||
|
||||
## 0. 发布前
|
||||
|
||||
1. 提交并推送 `tongji-10-12`,按团队流程合并到 `master`。
|
||||
2. 本地没有 Node,前端必须在有 Node 的机器或 CI 上构建:
|
||||
|
||||
```bash
|
||||
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/`。构建产物随后端代码一起发布。
|
||||
|
||||
3. 确认 `server/config/project.php` 两个开关的上线取值(文件随代码发布):
|
||||
- `revisit_reach.toast_enabled`:仓库当前为 `true`(本地测试用)。建议上线首日改为 `false`,由主管先用诊单列表「复诊到期」chip 清理存量,再改为 `true`;改配置不需要发版。
|
||||
- `revisit_reach.wecom_enabled`:保持 `false`,企微推送命令会空跑。
|
||||
- `revisit_rate.default_inherit_mode`:保持 `exclude`,复诊接诊率页面与自动分配沿用原口径。
|
||||
4. 线上 PHP 必须 8.0+,且所有 php-fpm/php-cgi 工作进程都已加载 `pdo_mysql`(本地曾出现单个 worker 未加载扩展导致接口间歇性报 could not find driver,重启 PHP 进程即可)。
|
||||
|
||||
## 1. 数据库(先于代码执行)
|
||||
|
||||
先备份:
|
||||
|
||||
```bash
|
||||
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`(无自动迁移器):
|
||||
|
||||
```bash
|
||||
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. 发布代码
|
||||
|
||||
1. 同步 `server/`(含 `public/admin` 构建产物)到服务器;无新增 Composer 依赖。
|
||||
2. 重载 php-fpm 刷新 opcache;执行 `php think clear` 清理运行时缓存。
|
||||
3. 后台权限缓存按管理员单独缓存 1 小时,菜单 SQL 执行后最多 1 小时生效,或让相关账号重新登录。
|
||||
|
||||
## 3. 初始化与定时任务
|
||||
|
||||
```bash
|
||||
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. 验收清单
|
||||
|
||||
1. 诊单列表「复诊节点」列显示第 N 诊、开药天数与来源、预计复诊日、状态 chip;到期未挂号/过号整行标红;顶部「复诊到期 N」角标与筛选后列表条数一致;只读详情页显示同一信息。
|
||||
2. 以持有到期患者的医助登录,右下角出现汇总卡;延迟、已联系、人工关闭、去挂号四个动作可用;挂号成功后卡片与红行同时消失。
|
||||
3. 「数据统计 → 复诊到期跟进」主管视图可筛选、导出、看流水;非授权角色打不开。
|
||||
4. 「复诊接诊率」页面默认数字与上线前一致(原口径);切换「新口径」后出现继承数等列。
|
||||
5. 自动分配 dry-run 的 v1 分档与上线前一致。
|
||||
6. 个人业绩页出现「我的复诊接诊率」卡片(二中心医助),非二中心显示「暂无数据」。
|
||||
|
||||
## 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)。
|
||||
Reference in New Issue
Block a user