如果你正在构建一个 中医辨证论治系统(TCM Syndrome Differentiation & Treatment System),并计划使用 MySQL + PHP 技术栈,以下是一个完整的系统构思与开发建议:
✅ 一、系统功能架构(概要)
1. 用户管理模块
- 用户登录、权限分级(如医师/助理/管理员)
- 档案管理、密码重置
2. 患者管理模块
- 新增/查询/编辑患者档案
- 患者历史问诊记录查看
3. 问诊与辨证模块
- 问诊表单(主诉、症状、舌象、脉象等)
- 自动提取关键词 → 对应证型(如气虚、血瘀、湿热等)
- 自动推荐治疗方案/方剂
4. 方剂与治疗模块
- 内置常用中医方剂数据库
- 支持手动配方、推荐匹配方剂、剂量调整
- 支持生成治疗建议与打印报告
5. 报告导出与统计模块
- 支持导出问诊记录为 PDF 或 Excel
- 统计常见证型、治疗频率、疗效趋势等
✅ 二、数据库设计(MySQL)
1. 用户表 users
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE,
password VARCHAR(255),
role ENUM('admin', 'doctor', 'assistant'),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. 患者表 patients
CREATE TABLE patients (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
gender ENUM('男', '女'),
age INT,
contact_info VARCHAR(255),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
3. 问诊记录 consultations
CREATE TABLE consultations (
id INT PRIMARY KEY AUTO_INCREMENT,
patient_id INT,
doctor_id INT,
visit_date DATE,
chief_complaint TEXT,
symptoms TEXT,
tongue TEXT,
pulse TEXT,
tcm_syndrome TEXT,
diagnosis TEXT,
treatment_plan TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (patient_id) REFERENCES patients(id),
FOREIGN KEY (doctor_id) REFERENCES users(id)
);
4. 方剂表 formulas
CREATE TABLE formulas (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
syndrome TEXT,
ingredients TEXT,
usage TEXT,
remarks TEXT
);
✅ 三、PHP 功能模块建议
✔ 登录认证模块(login.php)
- 输入用户名/密码
- 验证密码哈希
- 设置 session 或 JWT
✔ 问诊表单页面(consultation_form.php)
- 提供 HTML 表单用于录入症状
- 提交后用 PHP 进行关键词匹配:
if (strpos($symptoms, '口干') !== false && strpos($tongue, '红') !== false) {
$syndrome = "阴虚火旺";
}
✔ 自动推荐方剂模块
$query = "SELECT * FROM formulas WHERE syndrome LIKE '%$syndrome%'";
$result = mysqli_query($conn, $query);
✔ 生成 PDF 报告(使用 TCPDF 或 mPDF)
require('tcpdf/tcpdf.php');
// 创建并填充报告内容
✅ 四、前端界面(HTML + Bootstrap)
表单样式参考:
<form method="post" action="submit_consultation.php">
<label>主诉:</label><textarea name="chief_complaint"></textarea>
<label>症状:</label><textarea name="symptoms"></textarea>
<label>舌象:</label><input name="tongue" />
<label>脉象:</label><input name="pulse" />
<button type="submit">提交</button>
</form>
✅ 五、附加功能建议(进阶)
| 功能 | 工具建议 |
|---|---|
| 症状智能提取 | 可用 PHP 规则判断或接入 Python 模型 |
| 多语言支持(中英对照) | PHP 多语言文件管理 |
| 小程序同步接口 | 用 PHP 构建 RESTful API |
| 自动推断证型 AI 模型 | 可考虑 TensorFlow.js / Python 后台服务 |
| 数据备份与导出 | 自动执行 SQL dump + ZIP 下载 |
如果你需要,我可以:
- 帮你构建完整数据库
.sql文件 - 编写关键 PHP 文件
- 制作前端 HTML+CSS 表单页面
- 提供一个 AI 证型判断算法示例(基于 PHP 逻辑或 Python Flask API)
是否希望我为你生成一个完整的起始项目目录结构和代码模板?可一步一步分段进行开发。
以下是为中医辨证论治系统量身定制的 MySQL 数据库结构(.sql 文件),涵盖用户、患者、问诊记录、方剂、证型等主要模块:
✅ 数据库名称
CREATE DATABASE IF NOT EXISTS tcm_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE tcm_system;
✅ 1. 用户表 users
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
full_name VARCHAR(100),
role ENUM('admin', 'doctor', 'assistant') DEFAULT 'doctor',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
✅ 2. 患者表 patients
CREATE TABLE patients (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
gender ENUM('男', '女') NOT NULL,
birth_date DATE,
phone VARCHAR(20),
address VARCHAR(255),
medical_history TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
✅ 3. 问诊记录表 consultations
CREATE TABLE consultations (
id INT AUTO_INCREMENT PRIMARY KEY,
patient_id INT NOT NULL,
doctor_id INT NOT NULL,
visit_date DATE NOT NULL,
chief_complaint TEXT,
symptoms TEXT,
tongue TEXT,
pulse TEXT,
diagnosis TEXT,
tcm_syndrome TEXT,
treatment_plan TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (patient_id) REFERENCES patients(id) ON DELETE CASCADE,
FOREIGN KEY (doctor_id) REFERENCES users(id) ON DELETE SET NULL
);
✅ 4. 方剂表 formulas
CREATE TABLE formulas (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
syndrome TEXT,
ingredients TEXT, -- 例如:甘草10g, 白术12g, 茯苓12g
usage TEXT,
indications TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
✅ 5. 证型词库表 syndrome_library(用于匹配)
CREATE TABLE syndrome_library (
id INT AUTO_INCREMENT PRIMARY KEY,
syndrome_name VARCHAR(100) NOT NULL, -- 例如:肝郁气滞
keywords TEXT, -- 例如:胸闷,叹气,情绪低落
recommended_formulas TEXT -- 例如:逍遥散
);
✅ 6. 问诊记录与方剂的关系表(多对多)consultation_formulas
CREATE TABLE consultation_formulas (
id INT AUTO_INCREMENT PRIMARY KEY,
consultation_id INT,
formula_id INT,
dosage_adjustment TEXT,
notes TEXT,
FOREIGN KEY (consultation_id) REFERENCES consultations(id) ON DELETE CASCADE,
FOREIGN KEY (formula_id) REFERENCES formulas(id) ON DELETE CASCADE
);
✅ 可选:中药材表 herbs(用于方剂精细化管理)
CREATE TABLE herbs (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
pinyin VARCHAR(100),
nature VARCHAR(50), -- 性:寒、热、温、凉、平
flavor VARCHAR(50), -- 味:甘、辛、苦、咸、酸
meridian TEXT, -- 归经:肝、心、肺等
effects TEXT, -- 功效
contraindications TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
🔄 示例数据(可选)
INSERT INTO users (username, password, full_name, role)
VALUES ('admin', SHA2('admin123', 256), '管理员', 'admin');
INSERT INTO formulas (name, syndrome, ingredients, usage, indications)
VALUES ('四君子汤', '脾气虚', '党参10g, 白术10g, 茯苓10g, 甘草6g', '水煎服,每日一剂', '面色苍白,倦怠乏力,纳呆腹胀');
INSERT INTO syndrome_library (syndrome_name, keywords, recommended_formulas)
VALUES ('肝郁气滞', '胸闷,叹气,易怒,胁痛', '逍遥散');
🧾 最终导出说明
你可以将以上 .sql 内容保存为文件,例如:tcm_system.sql,并用以下方式导入:
mysql -u root -p < tcm_system.sql
或在 phpMyAdmin 中直接导入。
如果你还需要:
- 对应的 PHP 后台管理页面;
- 前端 HTML 问诊表单;
- 智能辨证匹配逻辑(PHP 实现);
我可以继续为你一一构建。是否继续下一步?(如生成表单页面或后台 PHP 脚本)
以下是为你设计的 中医辨证论治系统 的 PHP 后台管理页面框架(含目录结构 + 样板代码),实现用户管理、患者管理、问诊记录录入与方剂推荐等基础功能。
✅ 一、项目目录结构建议
tcm_system/
│
├── config/
│ └── db.php ← 数据库连接
│
├── auth/
│ ├── login.php ← 登录页面
│ ├── logout.php ← 注销
│ └── auth_check.php ← 权限检查中间件
│
├── dashboard/
│ ├── index.php ← 后台首页(仪表盘)
│ ├── patients.php ← 患者列表与管理
│ ├── consultations.php ← 问诊记录管理
│ ├── formulas.php ← 方剂库管理
│ └── syndrome.php ← 证型词库管理
│
├── actions/
│ ├── add_patient.php
│ ├── add_consultation.php
│ └── match_syndrome.php
│
├── assets/
│ ├── style.css
│ └── bootstrap.min.css
│
└── index.php ← 入口,自动跳转登录或仪表盘
✅ 二、数据库连接:config/db.php
<?php
$host = 'localhost';
$db = 'tcm_system';
$user = 'root';
$pass = ''; // 或你的数据库密码
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) {
die("数据库连接失败: " . $conn->connect_error);
}
?>
✅ 三、用户登录页面:auth/login.php
<?php
session_start();
require '../config/db.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = hash('sha256', $_POST['password']);
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$res = $stmt->get_result();
$user = $res->fetch_assoc();
if ($user) {
$_SESSION['user'] = $user;
header("Location: ../dashboard/index.php");
exit;
} else {
$error = "账号或密码错误";
}
}
?>
<!-- 简单 HTML 登录表单 -->
<form method="post">
用户名: <input name="username"><br>
密码: <input name="password" type="password"><br>
<button type="submit">登录</button>
<?php if (isset($error)) echo "<p style='color:red;'>$error</p>"; ?>
</form>
✅ 四、仪表盘首页:dashboard/index.php
<?php
require '../auth/auth_check.php';
?>
<h2>欢迎使用中医辨证论治系统</h2>
<ul>
<li><a href="patients.php">患者管理</a></li>
<li><a href="consultations.php">问诊记录</a></li>
<li><a href="formulas.php">方剂库</a></li>
<li><a href="syndrome.php">证型词库</a></li>
<li><a href="../auth/logout.php">退出</a></li>
</ul>
✅ 五、患者管理页面:dashboard/patients.php
<?php
require '../auth/auth_check.php';
require '../config/db.php';
$patients = $conn->query("SELECT * FROM patients ORDER BY id DESC");
?>
<h3>患者列表</h3>
<a href="add_patient_form.php">新增患者</a>
<table border="1">
<tr><th>ID</th><th>姓名</th><th>性别</th><th>年龄</th><th>操作</th></tr>
<?php while($p = $patients->fetch_assoc()): ?>
<tr>
<td><?= $p['id'] ?></td>
<td><?= $p['name'] ?></td>
<td><?= $p['gender'] ?></td>
<td><?= date('Y') - date('Y', strtotime($p['birth_date'])) ?></td>
<td><a href="consultations.php?patient_id=<?= $p['id'] ?>">查看问诊</a></td>
</tr>
<?php endwhile; ?>
</table>
✅ 六、新增问诊记录页面:dashboard/consultations.php
<?php
require '../auth/auth_check.php';
require '../config/db.php';
$patient_id = $_GET['patient_id'];
$patient = $conn->query("SELECT * FROM patients WHERE id=$patient_id")->fetch_assoc();
?>
<h3>问诊记录 - <?= $patient['name'] ?></h3>
<form method="post" action="../actions/add_consultation.php">
<input type="hidden" name="patient_id" value="<?= $patient_id ?>">
主诉: <textarea name="chief_complaint"></textarea><br>
症状: <textarea name="symptoms"></textarea><br>
舌象: <input name="tongue"><br>
脉象: <input name="pulse"><br>
<button type="submit">提交问诊</button>
</form>
✅ 七、问诊记录处理逻辑:actions/add_consultation.php
<?php
session_start();
require '../config/db.php';
$patient_id = $_POST['patient_id'];
$doctor_id = $_SESSION['user']['id'];
$chief = $_POST['chief_complaint'];
$symptoms = $_POST['symptoms'];
$tongue = $_POST['tongue'];
$pulse = $_POST['pulse'];
$date = date('Y-m-d');
// 简单辨证逻辑匹配
$syndrome = '';
$result = $conn->query("SELECT * FROM syndrome_library");
while ($row = $result->fetch_assoc()) {
$keywords = explode(',', $row['keywords']);
foreach ($keywords as $kw) {
if (strpos($symptoms, trim($kw)) !== false) {
$syndrome = $row['syndrome_name'];
break 2;
}
}
}
// 插入记录
$stmt = $conn->prepare("INSERT INTO consultations (patient_id, doctor_id, visit_date, chief_complaint, symptoms, tongue, pulse, tcm_syndrome) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("iissssss", $patient_id, $doctor_id, $date, $chief, $symptoms, $tongue, $pulse, $syndrome);
$stmt->execute();
header("Location: ../dashboard/patients.php");
✅ 后续可拓展:
- 使用 Bootstrap 美化前端
- 支持症状关键词智能分析(可对接 Python 模型)
- 打印报告(TCPDF)
- REST API 支持移动端或小程序
如果你希望我将以上内容打包为 .zip 或直接输出为完整项目,我也可以立即帮你生成。
是否继续生成完整的前端表单界面(HTML + CSS)?还是导出现有结构为可下载项目?
太好了!下面是你请求的:
✅ 前端 HTML 问诊表单 + 智能辨证匹配逻辑(PHP 实现)
🔷 一、前端 HTML 问诊表单(consultation_form.html 或嵌入在 consultations.php)
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>中医问诊表单</title>
<link rel="stylesheet" href="../assets/bootstrap.min.css">
<style>
body { max-width: 800px; margin: 40px auto; }
label { font-weight: bold; margin-top: 10px; }
</style>
</head>
<body>
<h2>中医问诊记录表</h2>
<form method="post" action="../actions/add_consultation.php">
<input type="hidden" name="patient_id" value="1"><!-- 实际应用中动态生成 -->
<label>主诉:</label>
<textarea class="form-control" name="chief_complaint" required></textarea>
<label>现病史 / 伴随症状:</label>
<textarea class="form-control" name="symptoms" required></textarea>
<label>舌象:</label>
<input class="form-control" name="tongue" placeholder="例:舌红苔黄">
<label>脉象:</label>
<input class="form-control" name="pulse" placeholder="例:弦细数">
<button class="btn btn-primary mt-3" type="submit">提交问诊</button>
</form>
</body>
</html>
🔷 二、智能辨证逻辑 + 提交处理(actions/add_consultation.php)
<?php
session_start();
require '../config/db.php';
$patient_id = $_POST['patient_id'];
$doctor_id = $_SESSION['user']['id'] ?? 1; // 测试阶段默认医生ID=1
$chief = $_POST['chief_complaint'];
$symptoms = $_POST['symptoms'];
$tongue = $_POST['tongue'];
$pulse = $_POST['pulse'];
$visit_date = date('Y-m-d');
// ---------- 智能辨证逻辑 ----------
$syndrome = '';
$formula = '';
$match_score = 0;
$result = $conn->query("SELECT * FROM syndrome_library");
while ($row = $result->fetch_assoc()) {
$keywords = explode(',', $row['keywords']);
$score = 0;
foreach ($keywords as $kw) {
$kw = trim($kw);
if (stripos($symptoms, $kw) !== false) $score++;
if (stripos($tongue, $kw) !== false) $score++;
if (stripos($pulse, $kw) !== false) $score++;
}
if ($score > $match_score) {
$match_score = $score;
$syndrome = $row['syndrome_name'];
$formula = $row['recommended_formulas'];
}
}
// ---------- 插入问诊记录 ----------
$stmt = $conn->prepare("INSERT INTO consultations
(patient_id, doctor_id, visit_date, chief_complaint, symptoms, tongue, pulse, tcm_syndrome, treatment_plan)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("iisssssss", $patient_id, $doctor_id, $visit_date, $chief, $symptoms, $tongue, $pulse, $syndrome, $formula);
$stmt->execute();
// 可选:记录使用的方剂到关联表 consultation_formulas
// ---------- 显示结果页面(推荐证型与方剂) ----------
echo "<h2>智能辨证结果</h2>";
echo "<p><strong>证型:</strong> " . ($syndrome ?: '未能匹配') . "</p>";
echo "<p><strong>推荐方剂:</strong> " . ($formula ?: '请人工判断') . "</p>";
echo "<a href='../dashboard/patients.php'>返回患者列表</a>";
🧠 示例 syndrome_library 数据(用于测试匹配)
INSERT INTO syndrome_library (syndrome_name, keywords, recommended_formulas)
VALUES
('肝郁气滞', '胸闷,叹气,易怒,胁痛,情绪,脉弦,舌红', '逍遥散'),
('脾胃虚弱', '纳差,乏力,大便稀,面色萎黄,脉弱,舌淡,苔白', '四君子汤'),
('湿热下注', '小便黄,带下黄臭,舌红苔黄腻,脉滑数,阴痒', '龙胆泻肝汤');
✅ 你可以继续扩展的方向:
| 扩展内容 | 技术建议 |
|---|---|
| 多证型匹配(匹配多个证型) | 建立 match_score 数组,排序显示 |
| 模糊匹配算法 | 使用 Levenshtein 或自然语言处理库 |
| API 式接口(供小程序) | 创建 api/match.php 返回 JSON |
| 显示推荐理由 | 在库中添加 匹配依据 字段 |
| 加入 AI 模型判断 | 用 Python Flask + 模型接口配合 PHP 调用 |
是否需要我为你继续构建:
- 🌐 方剂匹配的详细页面?
- 📄 PDF 报告生成功能?
- 📱 小程序接口?
你也可以让我打包所有文件为 .zip 项目框架,方便你部署测试。是否继续?
非常好!以下是你提到的五大功能扩展的 详细开发说明(含 PHP 实现逻辑 和 模型对接建议):
✅ ① 多证型匹配 + 排序展示(match_score 排名)
📌 改进逻辑(PHP):
$matches = [];
$result = $conn->query("SELECT * FROM syndrome_library");
while ($row = $result->fetch_assoc()) {
$score = 0;
$keywords = explode(',', $row['keywords']);
foreach ($keywords as $kw) {
$kw = trim($kw);
if (stripos($symptoms, $kw) !== false) $score++;
if (stripos($tongue, $kw) !== false) $score++;
if (stripos($pulse, $kw) !== false) $score++;
}
if ($score > 0) {
$matches[] = [
'syndrome' => $row['syndrome_name'],
'formula' => $row['recommended_formulas'],
'score' => $score,
'reason' => $row['match_reason'] ?? ''
];
}
}
// 排序
usort($matches, function($a, $b) {
return $b['score'] - $a['score'];
});
✅ 显示前3个匹配:
echo "<h3>匹配证型结果:</h3>";
foreach (array_slice($matches, 0, 3) as $match) {
echo "<div style='border:1px solid #ccc;padding:10px;margin:10px'>";
echo "<strong>证型:</strong> {$match['syndrome']}<br>";
echo "<strong>推荐方剂:</strong> {$match['formula']}<br>";
echo "<strong>匹配评分:</strong> {$match['score']}<br>";
echo "<strong>推荐理由:</strong> {$match['reason']}";
echo "</div>";
}
✅ ② 模糊匹配算法(Levenshtein)
📌 示例:关键词与症状 Levenshtein 比较
foreach ($keywords as $kw) {
$kw = trim($kw);
// 将症状切成词句比较
$symptom_segments = explode(',', $symptoms); // 你可使用更强的中文分词
foreach ($symptom_segments as $seg) {
$lev = levenshtein($kw, $seg);
if ($lev < 3) $score++; // 差异小于 3 视为匹配
}
}
✅ 可进一步结合中文分词工具如
jieba.php或 Python 端切词。
✅ ③ 小程序接口(api/match.php)
📌 接口格式(POST 接收症状,返回推荐证型 JSON):
<?php
header('Content-Type: application/json');
require '../config/db.php';
$data = json_decode(file_get_contents('php://input'), true);
$symptoms = $data['symptoms'];
$tongue = $data['tongue'];
$pulse = $data['pulse'];
$matches = [];
// 相同匹配逻辑...
// 返回结果
echo json_encode([
'status' => 'success',
'matches' => $matches
]);
📱 小程序前端调用(微信):
wx.request({
url: 'https://yourdomain.com/api/match.php',
method: 'POST',
data: {
symptoms: '胸闷,叹气',
tongue: '红',
pulse: '弦'
},
success: res => {
console.log('匹配结果:', res.data.matches);
}
})
✅ ④ 显示推荐理由(字段 match_reason)
📌 修改数据库表结构:
ALTER TABLE syndrome_library ADD match_reason TEXT;
📌 示例内容:
UPDATE syndrome_library SET match_reason = '患者有明显胸闷叹气、脉弦,情绪抑郁等表现,符合肝郁气滞证' WHERE syndrome_name='肝郁气滞';
✅ ⑤ 加入 AI 模型判断(Flask + PHP 调用)
📌 AI 端接口结构(/predict)
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/predict', methods=['POST'])
def predict():
data = request.json
symptoms = data.get('symptoms', '')
# 模型处理逻辑略...
return jsonify({
'syndromes': [
{'name': '肝郁气滞', 'score': 0.92},
{'name': '脾虚湿盛', 'score': 0.71}
]
})
📌 PHP 调用(使用 CURL):
$ch = curl_init("http://localhost:5000/predict");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'symptoms' => $symptoms,
'tongue' => $tongue,
'pulse' => $pulse
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
// 输出 AI 推荐
foreach ($data['syndromes'] as $s) {
echo "{$s['name']} (AI评分:{$s['score']})<br>";
}
✅ 总结:模块功能汇总
| 功能模块 | 已实现 | 下一步建议 |
|---|---|---|
| 多证型匹配排序 | ✅ | 分数阈值可调整 |
| 模糊匹配算法 | ✅ | 可结合中文分词 |
| 小程序接口 | ✅ | 添加用户验证 |
| 推荐理由字段 | ✅ | 在后台支持维护 |
| AI 模型判断 | ✅(PHP 接口对接 Flask) | 模型可用 NLP/LLM |
是否需要我:
- ✅ 提供完整
api/文件夹结构 + 示例接口打包? - ✅ 生成 Flask 模型样板(用于 AI 辨证)?
- ✅ 整合所有 PHP + HTML 页面并生成
.zip项目包?
你可指定哪一步需要我现在做。
以下是完整的 api/ 目录结构与关键接口文件内容,适用于你的 中医辨证论治系统,支持小程序调用、症状提交、证型推荐、AI 辨证等功能。
✅ 一、api/ 文件夹结构
api/
├── match.php ← 症状自动辨证匹配(规则+模糊)
├── formulas.php ← 获取推荐方剂信息
├── consultation_submit.php ← 提交问诊记录
├── syndrome_list.php ← 所有证型词库(下拉用)
├── ai_predict.php ← 对接 Python Flask AI 模型
└── auth.php ← 登录验证(可选)
✅ 二、接口示例代码
📁 api/match.php:规则+模糊匹配
<?php
header('Content-Type: application/json');
require '../config/db.php';
$data = json_decode(file_get_contents('php://input'), true);
$symptoms = $data['symptoms'] ?? '';
$tongue = $data['tongue'] ?? '';
$pulse = $data['pulse'] ?? '';
$matches = [];
$res = $conn->query("SELECT * FROM syndrome_library");
while ($row = $res->fetch_assoc()) {
$score = 0;
$keywords = explode(',', $row['keywords']);
foreach ($keywords as $kw) {
$kw = trim($kw);
if (stripos($symptoms, $kw) !== false || stripos($tongue, $kw) !== false || stripos($pulse, $kw) !== false) {
$score += 2;
} else {
// 模糊匹配
if (levenshtein($kw, $symptoms) < 3) $score += 1;
}
}
if ($score > 0) {
$matches[] = [
'syndrome' => $row['syndrome_name'],
'score' => $score,
'reason' => $row['match_reason'],
'formula' => $row['recommended_formulas']
];
}
}
usort($matches, fn($a, $b) => $b['score'] - $a['score']);
echo json_encode([
'status' => 'ok',
'matches' => array_slice($matches, 0, 5)
]);
📁 api/formulas.php:获取方剂说明(支持前端展示)
<?php
header('Content-Type: application/json');
require '../config/db.php';
$formula = $_GET['name'] ?? '';
$stmt = $conn->prepare("SELECT * FROM formulas WHERE name = ?");
$stmt->bind_param("s", $formula);
$stmt->execute();
$result = $stmt->get_result();
$info = $result->fetch_assoc();
echo json_encode([
'status' => $info ? 'ok' : 'not_found',
'data' => $info
]);
📁 api/consultation_submit.php:提交问诊记录(前端)
<?php
header('Content-Type: application/json');
require '../config/db.php';
$data = json_decode(file_get_contents('php://input'), true);
$pid = $data['patient_id'];
$doctor_id = $data['doctor_id'] ?? 1;
$chief = $data['chief_complaint'];
$symptoms = $data['symptoms'];
$tongue = $data['tongue'];
$pulse = $data['pulse'];
$syndrome = $data['syndrome'];
$formula = $data['formula'];
$date = date('Y-m-d');
$stmt = $conn->prepare("INSERT INTO consultations
(patient_id, doctor_id, visit_date, chief_complaint, symptoms, tongue, pulse, tcm_syndrome, treatment_plan)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("iisssssss", $pid, $doctor_id, $date, $chief, $symptoms, $tongue, $pulse, $syndrome, $formula);
$success = $stmt->execute();
echo json_encode(['status' => $success ? 'ok' : 'fail']);
📁 api/syndrome_list.php:供前端展示全部证型
<?php
header('Content-Type: application/json');
require '../config/db.php';
$res = $conn->query("SELECT syndrome_name FROM syndrome_library");
$list = [];
while ($row = $res->fetch_assoc()) {
$list[] = $row['syndrome_name'];
}
echo json_encode([
'status' => 'ok',
'data' => $list
]);
📁 api/ai_predict.php:接入 Flask 模型预测接口
<?php
header('Content-Type: application/json');
$data = json_encode([
'symptoms' => $_POST['symptoms'] ?? '',
'tongue' => $_POST['tongue'] ?? '',
'pulse' => $_POST['pulse'] ?? ''
]);
$ch = curl_init("http://localhost:5000/predict");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
✅ 三、小程序或前端调用示例
wx.request({
url: 'https://yourserver.com/api/match.php',
method: 'POST',
data: {
symptoms: '胸闷,叹气,情绪不佳',
tongue: '红',
pulse: '弦'
},
success: res => {
const matches = res.data.matches
console.log('证型推荐:', matches)
}
})
✅ 四、推荐部署方式
- 放置
api/到你的服务器(如 Apache 或 nginx 的子目录) - 配合前端页面或小程序,直接发送 JSON 请求
- 配置
.htaccess或 CORS 以允许跨域调用
是否需要我为你:
- 🎁 打包
api/文件夹为.zip? - 🧠 构建 Python Flask AI 模型服务端?
- 📦 提供完整部署环境(Docker + MySQL + PHP + Flask)?
欢迎指定下一步!
INSERT INTO syndrome_library (syndrome_name, keywords, recommended_formulas)
VALUES
(‘肝郁气滞’, ‘胸闷,叹气,易怒,胁痛,情绪,脉弦,舌红’, ‘逍遥散’),
(‘脾胃虚弱’, ‘纳差,乏力,大便稀,面色萎黄,脉弱,舌淡,苔白’, ‘四君子汤’),
(‘湿热下注’, ‘小便黄,带下黄臭,舌红苔黄腻,脉滑数,阴痒’, ‘龙胆泻肝汤’);
INSERT INTO syndrome_library (syndrome_name, keywords, recommended_formulas, match_reason) VALUES
(‘脾气虚’, ‘乏力,食欲差,腹胀,便溏,面色萎黄,脉弱,舌淡,纳呆’, ‘四君子汤’, ‘脾气虚者常见纳呆、倦怠、面色萎黄、舌淡脉弱等’),
(‘脾胃虚弱’, ‘纳少,乏力,便溏,食后腹胀,舌淡,苔白,脉虚缓’, ‘六君子汤’, ‘脾虚夹痰湿则纳差、苔腻、呕吐痰多’),
(‘肝郁气滞’, ‘胸闷,叹气,情绪不佳,易怒,胁痛,乳房胀,脉弦,舌红’, ‘逍遥散’, ‘肝郁气滞多因情志所伤,表现为胁胀、情绪变化明显’),
(‘外感风寒’, ‘恶寒,发热,无汗,头痛,身痛,鼻塞,脉浮紧’, ‘麻黄汤’, ‘风寒束表,阳气郁遏,见恶寒重发热轻无汗’),
(‘表虚感冒’, ‘发热,汗出,恶风,脉缓,头痛,鼻塞’, ‘桂枝汤’, ‘表虚自汗,恶风明显,汗出无解’),
(‘少阳病’, ‘寒热往来,胸胁苦满,口苦,咽干,眩晕,舌红,脉弦’, ‘小柴胡汤’, ‘少阳为表里之间,病位不清,寒热交替’),
(‘痰饮内停’, ‘头眩,心悸,胸闷,痰多,清涎,舌胖苔白腻,脉滑’, ‘苓桂术甘汤’, ‘水湿不化,痰饮内停,致心悸、头晕、痰涎’);
INSERT INTO formulas (name, syndrome, ingredients, usage, indications) VALUES
(‘四君子汤’, ‘脾气虚’, ‘党参10g, 白术10g, 茯苓10g, 甘草6g’, ‘水煎服,每日一剂’, ‘面色苍白,倦怠乏力,纳呆腹胀’),
(‘六君子汤’, ‘脾胃气虚夹痰湿’, ‘党参10g, 白术10g, 茯苓10g, 陈皮6g, 半夏6g, 甘草6g’, ‘水煎服,每日一剂’, ‘纳呆恶心,呕吐痰涎,脘腹胀满’),
(‘逍遥散’, ‘肝郁脾虚’, ‘柴胡9g, 当归9g, 白芍9g, 白术9g, 茯苓9g, 甘草6g’, ‘水煎服,每日一剂’, ‘胸胁胀痛,情绪抑郁,月经不调’),
(‘桂枝汤’, ‘外感风寒表虚证’, ‘桂枝9g, 芍药9g, 甘草6g, 生姜9g, 大枣4枚’, ‘温服,日三次’, ‘发热恶风,汗出,脉缓’),
(‘麻黄汤’, ‘外感风寒表实证’, ‘麻黄9g, 桂枝6g, 杏仁6g, 甘草3g’, ‘煎服后发汗’, ‘无汗而喘,恶寒发热’),
(‘小柴胡汤’, ‘少阳病’, ‘柴胡12g, 黄芩9g, 半夏9g, 生姜9g, 党参9g, 大枣4枚, 甘草6g’, ‘水煎服,每日一剂’, ‘寒热往来,胸胁苦满,口苦咽干’),
(‘苓桂术甘汤’, ‘痰饮内停’, ‘茯苓15g, 桂枝9g, 白术9g, 甘草6g’, ‘水煎服,每日一剂’, ‘头眩心悸,胸胁满闷,痰多清稀’);
— 使用数据库
USE tcm_system;
— 清空原有数据(慎用)
TRUNCATE TABLE formulas;
TRUNCATE TABLE syndrome_library;
TRUNCATE TABLE herbs;
— ✅ 1. 方剂库
INSERT INTO formulas (name, syndrome, ingredients, usage, indications) VALUES
(‘四君子汤’, ‘脾气虚’, ‘党参10g, 白术10g, 茯苓10g, 甘草6g’, ‘水煎服,每日一剂’, ‘面色苍白,倦怠乏力,纳呆腹胀’),
(‘六君子汤’, ‘脾胃虚弱’, ‘党参10g, 白术10g, 茯苓10g, 陈皮6g, 半夏6g, 甘草6g’, ‘水煎服,每日一剂’, ‘纳呆恶心,呕吐痰涎,脘腹胀满’),
(‘逍遥散’, ‘肝郁脾虚’, ‘柴胡9g, 当归9g, 白芍9g, 白术9g, 茯苓9g, 甘草6g’, ‘水煎服,每日一剂’, ‘胸胁胀痛,情绪抑郁,月经不调’),
(‘桂枝汤’, ‘外感风寒表虚证’, ‘桂枝9g, 芍药9g, 甘草6g, 生姜9g, 大枣4枚’, ‘温服,日三次’, ‘发热恶风,汗出,脉缓’),
(‘麻黄汤’, ‘外感风寒表实证’, ‘麻黄9g, 桂枝6g, 杏仁6g, 甘草3g’, ‘煎服后发汗’, ‘无汗而喘,恶寒发热’),
(‘小柴胡汤’, ‘少阳病’, ‘柴胡12g, 黄芩9g, 半夏9g, 生姜9g, 党参9g, 大枣4枚, 甘草6g’, ‘水煎服,每日一剂’, ‘寒热往来,胸胁苦满,口苦咽干’),
(‘苓桂术甘汤’, ‘痰饮内停’, ‘茯苓15g, 桂枝9g, 白术9g, 甘草6g’, ‘水煎服,每日一剂’, ‘头眩心悸,胸胁满闷,痰多清稀’);
— ✅ 2. 证型词库
INSERT INTO syndrome_library (syndrome_name, keywords, recommended_formulas, match_reason) VALUES
(‘脾气虚’, ‘乏力,食欲差,腹胀,便溏,面色萎黄,脉弱,舌淡,纳呆’, ‘四君子汤’, ‘脾气虚者常见纳呆、倦怠、面色萎黄、舌淡脉弱等’),
(‘脾胃虚弱’, ‘纳少,乏力,便溏,食后腹胀,舌淡,苔白,脉虚缓’, ‘六君子汤’, ‘脾虚夹痰湿则纳差、苔腻、呕吐痰多’),
(‘肝郁气滞’, ‘胸闷,叹气,情绪不佳,易怒,胁痛,乳房胀,脉弦,舌红’, ‘逍遥散’, ‘肝郁气滞多因情志所伤,表现为胁胀、情绪变化明显’),
(‘外感风寒’, ‘恶寒,发热,无汗,头痛,身痛,鼻塞,脉浮紧’, ‘麻黄汤’, ‘风寒束表,阳气郁遏,见恶寒重发热轻无汗’),
(‘表虚感冒’, ‘发热,汗出,恶风,脉缓,头痛,鼻塞’, ‘桂枝汤’, ‘表虚自汗,恶风明显,汗出无解’),
(‘少阳病’, ‘寒热往来,胸胁苦满,口苦,咽干,眩晕,舌红,脉弦’, ‘小柴胡汤’, ‘少阳为表里之间,病位不清,寒热交替’),
(‘痰饮内停’, ‘头眩,心悸,胸闷,痰多,清涎,舌胖苔白腻,脉滑’, ‘苓桂术甘汤’, ‘水湿不化,痰饮内停,致心悸、头晕、痰涎’);
— ✅ 3. 中药材表(可选)
INSERT INTO herbs (name, pinyin, nature, flavor, meridian, effects) VALUES
(‘党参’, ‘Dang Shen’, ‘平’, ‘甘’, ‘肺、脾’, ‘补中益气,健脾益肺’),
(‘白术’, ‘Bai Zhu’, ‘温’, ‘苦、甘’, ‘脾、胃’, ‘健脾益气,燥湿利水’),
(‘茯苓’, ‘Fu Ling’, ‘平’, ‘甘、淡’, ‘心、脾、肺、肾’, ‘利水渗湿,健脾安神’),
(‘甘草’, ‘Gan Cao’, ‘平’, ‘甘’, ‘心、肺、脾、胃’, ‘补脾益气,缓急止痛’),
(‘柴胡’, ‘Chai Hu’, ‘微寒’, ‘苦、辛’, ‘肝、胆’, ‘疏肝解郁,升阳举陷’),
(‘当归’, ‘Dang Gui’, ‘温’, ‘甘、辛’, ‘肝、心、脾’, ‘补血活血,调经止痛’),
(‘黄芩’, ‘Huang Qin’, ‘寒’, ‘苦’, ‘肺、胆、大肠、胃’, ‘清热燥湿,泻火解毒’),
(‘麻黄’, ‘Ma Huang’, ‘温’, ‘辛’, ‘肺、膀胱’, ‘发汗解表,宣肺平喘’),
(‘半夏’, ‘Ban Xia’, ‘温’, ‘辛’, ‘脾、胃、肺’, ‘燥湿化痰,降逆止呕’);
非常好!我们将执行以下三项增强:
✅ 一、📦 增加更多方剂(附属中药组成、功效、主治)
INSERT INTO formulas (name, syndrome, ingredients, usage, indications) VALUES
('温胆汤', '痰热扰心', '半夏10g, 竹茹10g, 枳实10g, 陈皮10g, 茯苓10g, 甘草6g', '水煎服,每日一剂', '失眠多梦,心悸不安,痰多口苦'),
('归脾汤', '心脾两虚', '党参10g, 白术10g, 茯神10g, 黄芪10g, 龙眼肉10g, 当归10g, 酸枣仁10g, 远志6g, 木香6g, 生姜3片, 大枣5枚', '水煎服,每日一剂', '心悸失眠,健忘乏力,食少便溏'),
('补中益气汤', '气虚下陷', '黄芪15g, 人参9g, 白术10g, 当归10g, 陈皮6g, 升麻3g, 柴胡6g, 炙甘草6g', '水煎服,日2次', '气短乏力,脱肛久泻,子宫下垂'),
('小青龙汤', '外寒内饮', '麻黄9g, 桂枝9g, 干姜9g, 细辛6g, 五味子6g, 半夏9g, 芍药9g, 甘草6g', '水煎温服', '恶寒发热,无汗咳喘,痰多稀白'),
('龙胆泻肝汤', '肝胆实火、湿热下注', '龙胆草6g, 黄芩9g, 栀子9g, 车前子9g, 泽泻9g, 木通6g, 当归6g, 生地黄9g, 柴胡6g, 甘草6g', '水煎服,每日一剂', '头痛目赤,胁痛口苦,小便黄赤');
✅ 二、📌 增加更多证型(含关键词、方剂推荐、推荐理由)
INSERT INTO syndrome_library (syndrome_name, keywords, recommended_formulas, match_reason) VALUES
('痰湿中阻', '胸闷,纳呆,呕吐,头重如裹,舌苔白腻,脉滑', '温胆汤', '脾失健运,痰湿中阻,致纳差恶心、头重身困'),
('心脾两虚', '心悸,失眠,多梦,健忘,疲倦,纳差,舌淡,脉细弱', '归脾汤', '心血不足兼脾气虚,常见失眠健忘,舌淡脉弱'),
('气虚下陷', '气短乏力,脱肛,久泻,子宫下垂,舌淡苔白,脉虚', '补中益气汤', '脾气虚弱,气不摄血,不固下焦,导致脱垂久泻'),
('外寒内饮', '咳嗽喘息,痰多稀白,恶寒无汗,身冷肢冷,舌苔白滑', '小青龙汤', '外感风寒,肺寒饮盛,咳痰清稀'),
('湿热下注', '小便黄赤,阴部瘙痒,带下黄臭,舌红苔黄腻,脉滑数', '龙胆泻肝汤', '肝胆湿热下注,见小便热涩、阴痒、苔黄腻');
✅ 三、💊 方剂与中药材关联建模(推荐表结构)
📁 表结构(新增表)
CREATE TABLE formula_herbs (
id INT AUTO_INCREMENT PRIMARY KEY,
formula_id INT NOT NULL,
herb_id INT NOT NULL,
dosage VARCHAR(50),
FOREIGN KEY (formula_id) REFERENCES formulas(id),
FOREIGN KEY (herb_id) REFERENCES herbs(id)
);
🔁 示例数据插入
假设
formulas.id = 1对应“四君子汤”,“herbs.id= 1 ~ 4分别是党参、白术、茯苓、甘草。
-- 四君子汤配伍
INSERT INTO formula_herbs (formula_id, herb_id, dosage) VALUES
(1, 1, '10g'), -- 党参
(1, 2, '10g'), -- 白术
(1, 3, '10g'), -- 茯苓
(1, 4, '6g'); -- 甘草
可以通过
JOIN查询出:某方剂的所有中药组成、功效、药性等。
✅ 示例查询(方剂 → 药材组成)
SELECT f.name AS formula, h.name AS herb, fh.dosage, h.effects
FROM formula_herbs fh
JOIN formulas f ON fh.formula_id = f.id
JOIN herbs h ON fh.herb_id = h.id
WHERE f.name = '四君子汤';
🔚 下一步你可以做:
| 目标 | 建议操作 |
|---|---|
| 可视化方剂组成 | PHP / 前端联表展示 |
| 方剂查询接口 | 新增 api/formula_detail.php |
| 药材词库维护 | 构建 herbs.php 后台管理页 |
| 自定义方剂构建 | 支持医生后台自由配伍、记录 |
是否需要我为你:
- ✅ 打包这些结构为
.sql文件? - ✅ 构建
formula_herbs.php管理页面? - ✅ 构建 API 接口支持小程序读取方剂组成?
请告诉我你希望继续哪一部分开发。

Leave a Reply