更新
This commit is contained in:
@@ -192,6 +192,89 @@ class GiKnowledge
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据血糖统计给出「运动降糖」建议(规则化,按控制好坏调整强度)
|
||||
*
|
||||
* @param array<string,mixed> $stats7 近7天统计
|
||||
* @param array<string,mixed> $stats30 近30天统计
|
||||
* @return array{level:string,level_label:string,headline:string,items:list<string>,intensity:string,note:string}
|
||||
*/
|
||||
public static function exercisePlan(array $stats7 = [], array $stats30 = []): array
|
||||
{
|
||||
// 优先用记录更全的口径判断;都没记录则用近7天
|
||||
$primary = ((int) ($stats30['record_days'] ?? 0) > 0) ? $stats30 : $stats7;
|
||||
$recordDays = (int) ($primary['record_days'] ?? 0);
|
||||
$compliance = (int) ($primary['compliance'] ?? 0);
|
||||
$highDays = (int) ($primary['high_days'] ?? 0);
|
||||
|
||||
if ($recordDays <= 0) {
|
||||
$level = 'unknown';
|
||||
} elseif ($compliance < 50 || $highDays * 2 >= $recordDays) {
|
||||
$level = 'high'; // 偏高多、达标率低 = 控制不佳
|
||||
} elseif ($compliance < 80) {
|
||||
$level = 'medium';
|
||||
} else {
|
||||
$level = 'good';
|
||||
}
|
||||
|
||||
$note = '餐后 1 小时内开始动,别空腹剧烈运动;身上带几块糖,头晕、心慌、出虚汗就马上停下歇着。';
|
||||
|
||||
switch ($level) {
|
||||
case 'high':
|
||||
return [
|
||||
'level' => 'high',
|
||||
'level_label' => '血糖偏高 · 多动',
|
||||
'headline' => '近期血糖偏高,三顿饭后都动一动,最能帮着把糖降下来。',
|
||||
'items' => [
|
||||
'早饭后快走 15 分钟,走到微微出汗',
|
||||
'午饭后快走或原地踏步 20–30 分钟,降餐后血糖最管用',
|
||||
'晚饭后慢走 30 分钟,吃完别马上坐下、躺下',
|
||||
],
|
||||
'intensity' => '中等强度 · 每天累计约 60 分钟',
|
||||
'note' => $note,
|
||||
];
|
||||
case 'medium':
|
||||
return [
|
||||
'level' => 'medium',
|
||||
'level_label' => '基本平稳 · 再稳稳',
|
||||
'headline' => '血糖大体平稳,坚持餐后活动,把它稳住。',
|
||||
'items' => [
|
||||
'三餐后各散步 20 分钟,午饭后可以走快些',
|
||||
'每天加一段八段锦或太极拳,10–15 分钟',
|
||||
'能走楼梯少坐电梯,多干点家务、地里活',
|
||||
],
|
||||
'intensity' => '中低强度 · 每天累计 40–50 分钟',
|
||||
'note' => $note,
|
||||
];
|
||||
case 'good':
|
||||
return [
|
||||
'level' => 'good',
|
||||
'level_label' => '控制不错 · 保持',
|
||||
'headline' => '血糖控制得不错,保持规律活动就行。',
|
||||
'items' => [
|
||||
'餐后散步 15–20 分钟,雷打不动',
|
||||
'每天一段八段锦、太极或柔和拉伸',
|
||||
'天好多到院里、地里走动,别久坐',
|
||||
],
|
||||
'intensity' => '中低强度 · 每天累计 30–40 分钟',
|
||||
'note' => $note,
|
||||
];
|
||||
default:
|
||||
return [
|
||||
'level' => 'unknown',
|
||||
'level_label' => '先记血糖 · 再调运动',
|
||||
'headline' => '血糖记录还少,先按基础来:饭后多走动。',
|
||||
'items' => [
|
||||
'三餐后都散步 15–20 分钟',
|
||||
'每天一段八段锦或太极拳',
|
||||
'少久坐,坐 1 小时就起来活动几分钟',
|
||||
],
|
||||
'intensity' => '中低强度 · 每天累计约 30 分钟',
|
||||
'note' => $note,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{food:string,level:string,level_label:string,advice:string,source:string}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user