Files
ccszjs/项目文档.md
renjianbo 12ccebc477 sec
2026-07-18 16:31:27 +08:00

14 KiB
Raw Permalink Blame History

CPP 生长减速预测模型 — 微信小程序

项目概述

本项目是一个微信小程序,实现 CPP(中枢性性早熟)患儿在 GnRHa 治疗期间生长减速风险的预测模型。基于 Logistic 回归算法,根据临床指标计算12个月内发生生长减速的概率,并给出风险分级和临床建议。

与已有的"生长激素缺乏(GHD)预测模型"小程序(szjs)和"瑞来工作"小程序(rlgz)共用同一套 ThinkPHP 5.0 后台和 MySQL 数据库。

┌─────────────────────────────────────────────────┐
│                  微信小程序层                      │
│  cppszjs (CPP预测) │ szjs (GHD预测) │ rlgz (工作) │
└──────────────────────┬──────────────────────────┘
                       │ HTTPS
┌──────────────────────▼──────────────────────────┐
│          ThinkPHP 5.0 后台 (101.43.95.130)        │
│          https://ruilaizipj.com                   │
│  Cppwechat.php │ Ruilaiwechat.php │ Ghdwechat.php │
└──────────────────────┬──────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────┐
│              MySQL (ruilai 数据库)                 │
│  t_sys_cpp_calculate_record                      │
│  t_sys_wechat_calculate_record (GHD)              │
│  t_sys_wechat_user                               │
└─────────────────────────────────────────────────┘

预测模型

公式

logit(p) = -2.8457
    + 0.1198 × (骨龄 × 子宫长)
    + 1.0411 × ln(FSH峰值)
    - 0.4832 × 治疗3月FSH
    - 0.0044 × 基础IGF-1
    + 0.4207 × (LH峰值 / FSH峰值)
    - 0.8303 × 子宫宽

p = exp(logit) / (1 + exp(logit))

输入指标(7项)

字段 说明 范围 单位
name 患者姓名 — —
bone_age 初诊骨龄 5.0–13.0 岁
uterus_length 初诊子宫长 1.0–4.5 cm
uterus_width 初诊子宫宽 0.5–3.5 cm
lh_peak GnRH试验 LH峰值 0.5–90.0 IU/L
fsh_peak GnRH试验 FSH峰值 0.5–25.0 IU/L
fsh_3m 治疗3月后 FSH 0.0–8.0 IU/L
igf1 基础 IGF-1 100–800 ng/mL

风险分级

等级 概率范围 12月实际减速率 颜色 建议
低风险 p < 0.430 29.7% 绿色 #27C2A7 继续常规GnRHa方案,每6个月随访
中风险 0.430 ≤ p ≤ 0.572 51.3% 橙色 #F0A030 缩短随访至3个月,必要时联合rhGH
高风险 p > 0.572 71.2% 红色 #E74C3C 每2-3月密切随访,尽早考虑rhGH联合干预

模型性能

  • AUC: 0.718(Bootstrap 矫正 0.687)
  • Hosmer-Lemeshow P值: 0.909(校准优秀)
  • 样本来源: 227例CPP患儿回顾性队列研究

验证示例

骨龄 子宫长 子宫宽 LH峰 FSH峰 3月FSH IGF-1 概率 风险
10.5 2.4 1.5 13.5 11.8 1.2 292 0.5285 中风险
8.0 2.0 1.2 8.0 10.0 0.8 200 0.38 低风险
12.0 3.5 3.0 50.0 20.0 5.0 600 0.75 高风险

项目结构

D:\wj\cppszjs\
├── app.js                          # 小程序入口,全局数据与工具方法
├── app.json                        # 页面路由、窗口配置、TabBar
├── app.wxss                        # 全局样式
├── project.config.json             # 微信开发者工具配置
├── package.json                    # npm 依赖
├── Cppwechat.php                   # 后端控制器(本地备份,已部署到服务器)
├── 项目文档.md                      # 本文档
├── 公式.txt                         # GHD公式参考(旧版)
├── 生长减速预测模型系统.xlsx         # 临床模型原始数据
├── CPP生长减速统计分析报告(6.24).docx # 临床统计分析报告
│
├── pages/
│   ├── home/                       # 主页(工具入口 + 资讯列表)
│   │   ├── home.js
│   │   ├── home.wxml
│   │   └── home.wxss
│   ├── cppDeceleration/            # ★ CPP预测计算器(核心页面)
│   │   ├── cppDeceleration.js      # 计算逻辑 + 表单验证 + API调用
│   │   ├── cppDeceleration.wxml    # 输入表单 + 结果弹窗
│   │   ├── cppDeceleration.wxss    # 风险等级颜色样式
│   │   └── cppDeceleration.json    # 页面配置(引用van-overlay组件)
│   ├── order/                      # 历史记录列表
│   │   └── order.js
│   ├── my/                         # 个人中心(微信登录)
│   │   └── my.js
│   ├── grocur/                     # 生长曲线图
│   ├── sexChart/                   # 性发育图表
│   ├── heightSdsCalculator/        # 身高SDS计算器
│   ├── tarhei/                     # 遗传靶身高计算
│   ├── igfrefer/                   # IGF-1参考值
│   ├── ghdCalculator/              # GHD预测计算器(从szjs继承)
│   ├── tool/                       # 共享样式 tool.wxss
│   ├── guanyu/                     # 关于页面
│   ├── webpage/                    # 网页容器
│   ├── news/                       # 资讯页
│   └── image/                      # 图标资源
│
├── component/                      # 组件
├── miniprogram/                    # npm 构建输出
├── utils/                          # 工具函数
└── subPackages/                    # 分包

核心文件说明

前端:cppDeceleration 页面

pages/cppDeceleration/cppDeceleration.js — 计算器逻辑

  • 7个表单字段的双向绑定(handleInput)
  • 登录状态检查(checkLogin)
  • 表单验证(validateForm),范围校验与前端模型中一致
  • 调用 /app/Cppwechat/calculate 接口
  • 结果展示:概率百分比 + 风险等级(颜色区分) + 临床建议
  • 支持重置、查看历史记录、关闭弹窗

pages/cppDeceleration/cppDeceleration.wxml — 界面模板

  • 7个输入组(form-group),每个包含标签、参考范围提示、输入框
  • 使用 van-overlay 组件展示结果弹窗
  • 弹窗内容:预测概率(大字)、风险等级(彩色)、临床建议、AUC免责声明
  • 底部"开始预测"(红色)和"重置"按钮

pages/cppDeceleration/cppDeceleration.wxss — 样式

  • 复用 tool.wxss 共享样式
  • 风险等级三色:.risk-low(绿)、.risk-mid(橙)、.risk-high(红)

后端:Cppwechat.php

部署位置: /www/wwwroot/code/application/app/controller/Cppwechat.php

方法 路由 说明
calculate POST /app/Cppwechat/calculate 接收7项指标,计算概率,返回风险分级
selectRecordList POST /app/Cppwechat/selectRecordList 分页查询历史记录
deleteRecord POST /app/Cppwechat/deleteRecord 删除指定记录
wechatLogin POST /app/Cppwechat/wechatLogin 微信登录(code+encryptedData+iv)
selectRealtimeInfoList POST /app/Cppwechat/selectRealtimeInfoList 分页查询资讯列表
getToken POST /app/Cppwechat/getToken 获取认证 Token
getUserBaseInfo POST /app/Cppwechat/getUserBaseInfo 获取用户基本信息

数据库

表名: t_sys_cpp_calculate_record

CREATE TABLE t_sys_cpp_calculate_record (
  id varchar(32) NOT NULL PRIMARY KEY,       -- MD5 唯一ID
  uid int(11) NOT NULL,                       -- 用户ID
  name varchar(32) DEFAULT NULL,              -- 患者姓名
  bone_age decimal(5,2) DEFAULT NULL,         -- 初诊骨龄
  uterus_length decimal(5,2) DEFAULT NULL,    -- 初诊子宫长
  uterus_width decimal(5,2) DEFAULT NULL,     -- 初诊子宫宽
  lh_peak decimal(6,2) DEFAULT NULL,          -- LH峰值
  fsh_peak decimal(6,2) DEFAULT NULL,         -- FSH峰值
  fsh_3m decimal(5,2) DEFAULT NULL,           -- 治疗3月FSH
  igf1 decimal(7,2) DEFAULT NULL,             -- 基础IGF-1
  calculate_result decimal(6,4) DEFAULT NULL, -- 预测概率
  risk_level varchar(10) DEFAULT NULL,        -- 风险等级
  create_time datetime DEFAULT NULL,          -- 创建时间
  KEY idx_uid (uid),
  KEY idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

API 接口规范

所有接口的通用规范:

  • 请求方式: POST
  • Content-Type: application/x-www-form-urlencoded
  • 响应格式: JSON { erro: 0|-1, msg: "..." }
  • 成功: erro = 0
  • 失败: erro = -1,具体原因见 msg

POST /app/Cppwechat/calculate

计算生长减速预测概率。

请求参数:

参数 必填 类型 说明
uid 是 int 用户ID
name 是 string 患者姓名
bone_age 是 float 初诊骨龄(5.0-13.0)
uterus_length 是 float 初诊子宫长(1.0-4.5)
uterus_width 是 float 初诊子宫宽(0.5-3.5)
lh_peak 是 float LH峰值(0.5-90.0)
fsh_peak 是 float FSH峰值(0.5-25.0)
fsh_3m 是 float 治疗3月FSH(0.0-8.0)
igf1 是 float 基础IGF-1(100-800)

成功响应:

{
  "erro": 0,
  "msg": "计算成功",
  "calculate_result": 0.5285,
  "risk_level": "中风险",
  "suggestion": "建议缩短随访间隔至3个月,关注GV下降趋势,必要时联合rhGH。"
}

POST /app/Cppwechat/selectRecordList

分页查询历史计算记录。

请求参数:

参数 必填 类型 说明
uid 是 int 用户ID
page 否 int 页码(默认1)
page_size 否 int 每页条数(默认30)

成功响应:

{
  "erro": 0,
  "msg": "查询成功",
  "lists": [...],
  "lastPage": 3,
  "currentPage": 1
}

POST /app/Cppwechat/deleteRecord

删除指定记录。

请求参数:

参数 必填 类型 说明
uid 是 int 用户ID
id 是 string 记录ID

POST /app/Cppwechat/wechatLogin

微信登录。

请求参数:

参数 必填 类型 说明
code 是 string wx.login() 返回的 code
encryptedData 是 string wx.getUserInfo() 加密数据
iv 是 string 加密偏移量

成功响应:

{
  "erro": 0,
  "msg": "登录成功",
  "uid": 123
}

与 szjs (GHD预测) 小程序的差异

项目 szjs (GHD) cppszjs (CPP)
预测目标 GHD风险 CPP生长减速风险
输入指标数 3项 7项
核心页面 ghdCalculator cppDeceleration
后端控制器 Ruilaiwechat Cppwechat
数据库表 t_sys_wechat_calculate_record t_sys_cpp_calculate_record
主题色 蓝色系 红色系 #C94A3A
AppID wx0847525a15342a46 wxa75a76964ae7ce73(待更换)
公式 logit = -5.908 + 0.008×IGF + 2.146×LH + 0.286×子宫厚度 logit = -2.8457 + 0.1198×交互项 + 1.0411×ln(FSH) + ...
AUC 未标注 0.718

待完成事项

  1. [重要] 更换 AppID: project.config.json 中的 appid 目前为 wxa75a76964ae7ce73(szjs 的 AppID),需在微信公众平台注册新小程序后更换
  2. [重要] 更新主页: pages/home/home.wxml 仍显示"生长激素缺乏预测模型"标题和"GHD预测计算",应改为 CPP 相关品牌
  3. [重要] 更新主页 API: pages/home/home.js 仍调用 app/Ruilaiwechat/selectRealtimeInfoList,应改为 app/Cppwechat/selectRealtimeInfoList
  4. [可选] 清理冗余页面: ghdCalculator、tool、news 等页面从 szjs 继承,如不需要可移除
  5. [安全] 后端 Debug 模式: 服务器 app_debug=true 存在安全风险
  6. [安全] 数据库编码: charset=utf8 应升级为 utf8mb4
  7. [运维] PHP 版本: PHP 5.6 已 EOL,建议升级

服务器信息

项目 值
服务器 IP 101.43.95.130
后端域名 https://ruilaizipj.com
项目根目录 /www/wwwroot/code
PHP 版本 5.6 (FastCGI via /tmp/php-cgi-56.sock)
Web 服务器 Nginx (宝塔面板)
数据库 MySQL,库名 ruilai,前缀 t_sys_
后台管理 https://www.ruilaizipj.com/adminghd/login
管理账号 13212345678 / 123456

开发与发布

本地开发

  1. 用微信开发者工具打开 D:\wj\cppszjs
  2. 修改代码后即可在模拟器中预览
  3. 如使用 npm 组件,需在工具中执行"构建 npm"

发布流程

  1. 在微信公众平台注册小程序,获取正式 AppID
  2. 修改 project.config.json 中的 appid
  3. 在微信公众平台配置服务器域名白名单:https://ruilaizipj.com
  4. 在微信开发者工具中点击"上传",填写版本号和备注
  5. 登录微信公众平台,在"版本管理"中提交审核
  6. 审核通过后发布上线