SchoolPhysicalExamination/application/NewReedaw/controller/app/Userbody.php

1689 lines
76 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\NewReedaw\controller\app;
use think\Db;
use app\NewReedaw\controller\app\Cardparts;
use app\NewReedaw\controller\app\Calculatebody;
class Userbody extends Base{
protected $body_db_name = [
'zhanghao'=>'app_account_number',
'juese'=>'app_user_data',
'body_data'=>'app_card_body_data',
'body_data_new'=>'app_card_body_data_new',
'bmi'=>'pc_bmistand',
'heigh'=>'pc_heightstand',
'weigh'=>'pc_weightstand',
'chufang1'=>'pc_childrenprescription',
'chufang2'=>'pc_childprescriptionbyage',
];
protected $age_limit = 16;
protected $pagesize = 15;
protected $detailed_model_1 = [ //详情里面的数据模板
"name"=>"", //名称
"value"=>"0", //值
"unit"=>"", // 单位
"desc"=>'',// 描述
"standard"=>"", //标准值
"standard_color"=>"#000000", //标准颜色
"list"=>[], //标准列表
"key_name"=>'', //标准列表
"offset"=>0, //标准列表
"tip"=>'', //小妙招
];
protected $merged_data = [
'score' => [
'name' => '身体得分',
'unit' => '分',
"description"=>"身体得分指综合评估身体健康状况的指标。",
'list' => [
'偏低' => '#C2831C',
'标准' => '#F5A623',
'偏高' => '#14CBAD',
'高' => '#0F9982'
],
'standard_list' => [
['min_val'=>'0','max_val'=>'70','text'=>'较差','color'=>'#C2831C'],
['min_val'=>'71','max_val'=>'80','text'=>'一般','color'=>'#F5A623'],
['min_val'=>'81','max_val'=>'90','text'=>'良好','color'=>'#14CBAD'],
['min_val'=>'91','max_val'=>'100','text'=>'很棒','color'=>'#0F9982'],
]
],
'height' => [
'name' => '身高',
'unit' => 'cm',
"description"=>"人体纵向部分的长度,源于人体的纵向生长,受遗传因素的影响较大",
'list' => [
'矮'=>'#FD5759',
'偏矮'=>'#FAAD01',
'标准'=>'#5BD068',
'偏高'=>'#6793F4',
'高'=>'#3D67D3',
],
'standard_list' => [
['min_val'=>'0','max_val'=>'','text'=>'矮','color'=>'#FD5759'],
['min_val'=>'','max_val'=>'','text'=>'偏矮','color'=>'#FAAD01'],
['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#5BD068'],
['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#6793F4'],
['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#3D67D3'],
]
],
'weight' => [
'name' => '体重',
'unit' => 'kg',
"description"=>"体重指人体的重量,通常用斤、公斤或磅作为单位来衡量。体重是人体健康的重要指标,但需要结合身高、体型和体脂率等因素来综合评估。",
'list' => [
'低'=>'#FD5759',
'偏低'=>'#FAAD01',
'标准'=>'#5BD068',
'偏高'=>'#FAAD01',
'高'=>'#FD5759',
],
'standard_list' => [
['min_val'=>'0','max_val'=>'','text'=>'低','color'=>'#FD5759'],
['min_val'=>'','max_val'=>'','text'=>'偏低','color'=>'#FAAD01'],
['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#5BD068'],
['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#FAAD01'],
['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#FD5759'],
]
],
'bmi' => [
'name' => 'BMI',
'unit' => '',
"description"=>"BMI是身体质量指数(BodyMassIndex)的缩写,是一种常用的衡量人体肥胖程度的指标",
'list' => [
'消瘦'=>'#FDDA6B',
'正常'=>'#5BD068',
'偏重'=>'#FAAD01',
'肥胖'=>'#FD5759',
],
'standard_list' => [
['min_val'=>'0','max_val'=>'','text'=>'消瘦','color'=>'#FDDA6B'],
['min_val'=>'','max_val'=>'','text'=>'正常','color'=>'#5BD068'],
['min_val'=>'','max_val'=>'','text'=>'偏重','color'=>'#FAAD01'],
['min_val'=>'','max_val'=>'50','text'=>'肥胖','color'=>'#FD5759'],
]
],
'fat_r' => [
'name' => '脂肪率',
'unit' => '%',
"description"=>"",
'list' => [
'偏低' => '#FCDB67',
'标准' => '#58D268',
'偏高' => '#FCAA00',
'高' => '#FD5752'
],
'standard_list' => [
'man'=>[
'29'=>[
['min_val'=>'0','max_val'=>'10','text'=>'偏低','color'=>'#FCDB67'],
['min_val'=>'10','max_val'=>'21','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'21','max_val'=>'26','text'=>'偏高','color'=>'#FAB000'],
['min_val'=>'26','max_val'=>'50','text'=>'高','color'=>'#FA5951'],
],
'30'=>[
['min_val'=>'0','max_val'=>'11','text'=>'偏低','color'=>'#FCDB67'],
['min_val'=>'11','max_val'=>'22','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'22','max_val'=>'27','text'=>'偏高','color'=>'#FAB000'],
['min_val'=>'27','max_val'=>'50','text'=>'高','color'=>'#FA5951'],
],
],
'woman'=>[
'29'=>[
['min_val'=>'0','max_val'=>'20','text'=>'偏低','color'=>'#FCDB67'],
['min_val'=>'20','max_val'=>'31','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'31','max_val'=>'38','text'=>'偏高','color'=>'#FAB000'],
['min_val'=>'38','max_val'=>'80','text'=>'高','color'=>'#FA5951'],
],
'30'=>[
['min_val'=>'0','max_val'=>'21','text'=>'偏低','color'=>'#FCDB67'],
['min_val'=>'21','max_val'=>'32','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'32','max_val'=>'39','text'=>'偏高','color'=>'#FAB000'],
['min_val'=>'39','max_val'=>'80','text'=>'高','color'=>'#FA5951'],
]
]
]
],
'fat_w' => [
'name' => '脂肪量',
'unit' => 'kg',
"description"=>"",
'list' => [
'偏低' => '#FCDB67',
'标准' => '#58D268',
'偏高' => '#FCAA00',
'高' => '#FD5752'
],
'standard_list' => [
'man'=>[
'29'=>[
['min_val'=>'0','max_val'=>'10','text'=>'偏低','color'=>'#FCDB67'],
['min_val'=>'10','max_val'=>'21','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'21','max_val'=>'26','text'=>'偏高','color'=>'#FAB000'],
['min_val'=>'26','max_val'=>'50','text'=>'高','color'=>'#FA5951'],
],
'30'=>[
['min_val'=>'0','max_val'=>'11','text'=>'偏低','color'=>'#FCDB67'],
['min_val'=>'11','max_val'=>'22','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'22','max_val'=>'27','text'=>'偏高','color'=>'#FAB000'],
['min_val'=>'27','max_val'=>'50','text'=>'高','color'=>'#FA5951'],
],
],
'woman'=>[
'29'=>[
['min_val'=>'0','max_val'=>'20','text'=>'偏低','color'=>'#FCDB67'],
['min_val'=>'20','max_val'=>'31','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'31','max_val'=>'38','text'=>'偏高','color'=>'#FAB000'],
['min_val'=>'38','max_val'=>'80','text'=>'高','color'=>'#FA5951'],
],
'30'=>[
['min_val'=>'0','max_val'=>'21','text'=>'偏低','color'=>'#FCDB67'],
['min_val'=>'21','max_val'=>'32','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'32','max_val'=>'39','text'=>'偏高','color'=>'#FAB000'],
['min_val'=>'39','max_val'=>'80','text'=>'高','color'=>'#FA5951'],
]
]
]
],
'muscle' => [
'name' => '肌肉率',
'unit' => '%',
"description"=>"",
'list' => [
'不足' => '#FFDA68',
'标准' => '#59CD6F',
'优' => '#3C64D4'
],
'standard_list' => [
'man'=>[
['min_val'=>'0','max_val'=>'40','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'40','max_val'=>'60','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'60','max_val'=>'100','text'=>'优','color'=>'#3C66D2'],
],
'woman'=>[
['min_val'=>'0','max_val'=>'30','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'30','max_val'=>'50','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'50','max_val'=>'100','text'=>'优','color'=>'#3C66D2'],
]
]
],
'muscleval' => [
'name' => '肌肉量',
'unit' => 'kg',
"description"=>"",
'list' => [
'不足' => '#FFDA68',
'标准' => '#59CD6F',
'优' => '#3C64D4'
],
'standard_list' => [
'man'=>[
['min_val'=>'0','max_val'=>'40','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'40','max_val'=>'60','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'60','max_val'=>'100','text'=>'优','color'=>'#3C66D2'],
],
'woman'=>[
['min_val'=>'0','max_val'=>'30','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'30','max_val'=>'50','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'50','max_val'=>'100','text'=>'优','color'=>'#3C66D2'],
]
]
],
'water' => [
'name' => '水分',
'unit' => 'kg',
"description"=>"",
'list' => [
'不足' => '#FED966',
'标准' => '#58CF6B',
'优' => '#3A68D7'
],
'standard_list' => [
'man'=>[
['min_val'=>'0','max_val'=>'55','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'55','max_val'=>'65','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'65','max_val'=>'100','text'=>'优','color'=>'#3C66D2'],
],
'woman'=>[
['min_val'=>'0','max_val'=>'45','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'45','max_val'=>'60','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'60','max_val'=>'100','text'=>'优','color'=>'#3C66D2'],
]
]
],
'bone' => [
'name' => '骨重',
'unit' => 'kg',
"description"=>"",
'list' => [
'不足' => '#FED966',
'标准' => '#58CF6F',
'优' => '#3A68D7'
],
'standard_list' => [
'man'=>[
'60'=>[
['min_val'=>'0','max_val'=>'2.4','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'2.4','max_val'=>'2.6','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'2.6','max_val'=>'6','text'=>'优','color'=>'#3C66D2'],
],
'60_75'=>[
['min_val'=>'0','max_val'=>'2.8','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'2.8','max_val'=>'3','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'3','max_val'=>'6','text'=>'优','color'=>'#3C66D2'],
],
'75'=>[
['min_val'=>'0','max_val'=>'3.1','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'3.1','max_val'=>'3.3','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'3.3','max_val'=>'7','text'=>'优','color'=>'#3C66D2'],
],
],
'woman'=>[
'45'=>[
['min_val'=>'0','max_val'=>'1.7','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'1.7','max_val'=>'1.9','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'1.9','max_val'=>'5','text'=>'优','color'=>'#3C66D2'],
],
'45_60'=>[
['min_val'=>'0','max_val'=>'2.1','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'2.1','max_val'=>'2.3','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'2.3','max_val'=>'5','text'=>'优','color'=>'#3C66D2'],
],
'60'=>[
['min_val'=>'0','max_val'=>'2.4','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'2.4','max_val'=>'2.6','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'2.6','max_val'=>'5','text'=>'优','color'=>'#3C66D2'],
],
]
]
],
'protein' => [
'name' => '蛋白率',
'unit' => '%',
"description"=>"",
'list' => [
'不足' => '#FED966',
'标准' => '#58CF6F',
'优' => '#3A68D7'
],
'standard_list' => [
'man'=>[
['min_val'=>'0','max_val'=>'16','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'16','max_val'=>'18','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'18','max_val'=>'50','text'=>'优','color'=>'#3C66D2'], //蓝
],
'woman'=>[
['min_val'=>'0','max_val'=>'14','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'14','max_val'=>'16','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'16','max_val'=>'50','text'=>'优','color'=>'#3C66D2'],
]
]
],
'proteinval' => [
'name' => '蛋白量',
'unit' => 'kg',
"description"=>"",
'list' => [
'不足' => '#FED966',
'标准' => '#58CF6F',
'优' => '#3A68D7'
],
'standard_list' => [
'man'=>[
['min_val'=>'0','max_val'=>'16','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'16','max_val'=>'18','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'18','max_val'=>'50','text'=>'优','color'=>'#3C66D2'], //蓝
],
'woman'=>[
['min_val'=>'0','max_val'=>'14','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'14','max_val'=>'16','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'16','max_val'=>'50','text'=>'优','color'=>'#3C66D2'],
]
]
],
'kcal' => [
'name' => '基础代谢',
'unit' => 'kcal',
"description"=>"",
'list' => [
'偏低' => '#FF5656',
'优' => '#3A68D4'
],
'standard_list' => [
['min_val'=>'0','max_val'=>'','text'=>'偏低','color'=>'#ff5656'],
['min_val'=>'','max_val'=>'9999','text'=>'优','color'=>'#3C66D2'],
]
],
'visceral' => [
'name' => '内脏指数',
'unit' => '',
"description"=>"",
'list' => [
'标准' => '#55CF6C',
'警惕' => '#FEAC00',
'危险' => '#FB5A52'
],
'standard_list' => [
'man'=>[
['min_val'=>'0','max_val'=>'9','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'9','max_val'=>'14','text'=>'警惕','color'=>'#FAB000'],
['min_val'=>'14','max_val'=>'50','text'=>'危险','color'=>'#FA5951'], //红
],
'woman'=>[
['min_val'=>'0','max_val'=>'9','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'9','max_val'=>'14','text'=>'警惕','color'=>'#FAB000'],
['min_val'=>'14','max_val'=>'50','text'=>'危险','color'=>'#FA5951'], //红
]
]
],
'sfr' => [
'name' => '皮下脂肪',
'unit' => '%',
"description"=>"",
'list' => [
'不足' => '#FCDB68',
'标准' => '#59D16F',
'偏高' => '#FEAB03'
],
'standard_list' => [
'man'=>[
['min_val'=>'0','max_val'=>'7','text'=>'不足','color'=>'#FCDB67'], //淡黄
['min_val'=>'7','max_val'=>'15','text'=>'标准','color'=>'#59D16D'], //绿
['min_val'=>'15','max_val'=>'50','text'=>'偏高','color'=>'#FAB000'], //橙
],
'woman'=>[
['min_val'=>'0','max_val'=>'11','text'=>'不足','color'=>'#FCDB67'],
['min_val'=>'11','max_val'=>'17','text'=>'标准','color'=>'#59D16D'],
['min_val'=>'17','max_val'=>'50','text'=>'偏高','color'=>'#FAB000'],
]
]
],
'body_level' => [
'name' => '肥胖等级',
'unit' => '',
"description"=>"肥胖等级指根据个体BMI来评估一个人是否超重或肥胖的指标。",
'list' => [],
'standard_list' => []
],
'body_type' => [
'name' => '身体类型',
'unit' => '',
"description"=>"身体类型是对人体外形的总体描述和评定",
'list' => [],
'standard_list' => []
],
'body_age' => [
'name' => '身体年龄',
'unit' => '岁',
"description"=>"身体年龄指衡量身体健康状况的指标它反映了一个人的生理状态相对于实际年龄的健康程度。相关模型主要与BMI有关。",
'list' => [],
'standard_list' => []
],
// 'heart_rate' => [
// 'name' => '心率',
// 'unit' => '跳/分钟',
// "description"=>"",
// 'list' => [
// '低' => '#FCDB67',
// '标准' => '#58D268',
// '高' => '#FD5752'
// ],
// 'standard_list' => [
// 'man'=>[
// '1'=>[
// ['min_val'=>'0','max_val'=>'10','text'=>'偏低','color'=>'#FCDB67'],
// ['min_val'=>'10','max_val'=>'21','text'=>'标准','color'=>'#59D16D'],
// ['min_val'=>'21','max_val'=>'26','text'=>'偏高','color'=>'#FAB000'],
// ['min_val'=>'26','max_val'=>'50','text'=>'高','color'=>'#FA5951'],
// ],
// ],
// 'woman'=>[
// '29'=>[
// ['min_val'=>'0','max_val'=>'20','text'=>'偏低','color'=>'#FCDB67'],
// ['min_val'=>'20','max_val'=>'31','text'=>'标准','color'=>'#59D16D'],
// ['min_val'=>'31','max_val'=>'38','text'=>'偏高','color'=>'#FAB000'],
// ['min_val'=>'38','max_val'=>'80','text'=>'高','color'=>'#FA5951'],
// ],
// ]
// ]
// ],
];
protected $heart_rate = [
[
'age' => ['min' => '0', 'max' => '1'],
'male' => ['min' => '70', 'max' => '190'],
'female' => ['min' => '70', 'max' => '190']
],
[
'age' => ['min' => '1', 'max' => '12'],
'male' => ['min' => '80', 'max' => '160'],
'female' => ['min' => '80', 'max' => '160']
],
[
'age' => ['min' => '12', 'max' => '36'],
'male' => ['min' => '80', 'max' => '130'],
'female' => ['min' => '80', 'max' => '130']
],
[
'age' => ['min' => '36', 'max' => '60'],
'male' => ['min' => '80', 'max' => '120'],
'female' => ['min' => '80', 'max' => '120']
],
[
'age' => ['min' => '60', 'max' => '120'],
'male' => ['min' => '70', 'max' => '110'],
'female' => ['min' => '70', 'max' => '110']
],
[
'age' => ['min' => '120', 'max' => '204'],
'male' => ['min' => '60', 'max' => '100'],
'female' => ['min' => '60', 'max' => '100']
],
[
'age' => ['min' => '204', 'max' => '480'],
'male' => ['min' => '60', 'max' => '100'],
'female' => ['min' => '60', 'max' => '100']
],
[
'age' => ['min' => '480', 'max' => '720'],
'male' => ['min' => '60', 'max' => '100'],
'female' => ['min' => '60', 'max' => '100']
],
[
'age' => ['min' => '720', 'max' => '9999'], // 61岁+9999作为最大值占位
'male' => ['min' => '60', 'max' => '100'],
'female' => ['min' => '60', 'max' => '100']
]
];
// protected $standard_color = [
// 'fat_r'=>['偏低'=>'#FCDB67','标准'=>'#58D268','偏高'=>'#FCAA00','高'=>'#FD5752'],
// 'fat_w'=>['偏低'=>'#FCDB67','标准'=>'#58D268','偏高'=>'#FCAA00','高'=>'#FD5752'],
// 'muscle'=>['不足'=>'#FFDA68','标准'=>'#59CD6F','优'=>'#3C64D4'],
// 'muscleval'=>['不足'=>'#FFDA68','标准'=>'#59CD6F','优'=>'#3C64D4'],
// 'water'=>['不足'=>'#FED966','标准'=>'#58CF6B','优'=>'#3A68D7'],
// 'proteinval'=>['不足'=>'#FED966','标准'=>'#58CF6B','优'=>'#3A68D7'],
// 'bone'=>['不足'=>'#FED966','标准'=>'#58CF6B','优'=>'#3A68D7'],
// 'protein'=>['不足'=>'#FED966','标准'=>'#58CF6B','优'=>'#3A68D7'],
// 'kcal'=>['偏低'=>'#FF5656','优'=>'#3A68D4'],
// 'visceral'=>['标准'=>'#55CF6C','警惕'=>'#FEAC00','危险'=>'#FB5A52'],
// 'sfr'=>['不足'=>'#FCDB68','标准'=>'#59D16F','偏高'=>'#FEAB03'],
// ];
// protected $card_body_level = [
// 'height'=>['value'=>1,'list'=>['矮'=>2,'偏矮'=>3,'标准'=>4,'偏高'=>5,'高'=>5]],
// 'weight'=>['value'=>3,'list'=>['低'=>1,'偏低'=>1,'标准'=>2,'偏高'=>3,'高'=>3]],
// 'bmi'=>['value'=>2,'list'=>['消瘦'=>1,'正常'=>2,'偏重'=>3,'肥胖'=>4]],
// ];
// 加 bcadd(,,20)
// 减 bcsub(,,20)
// 乘 bcmul(,,20)
// 除 bcdiv(,,20)
// 测试token=>'caadd1be045a65f30b92aa805f1de54a'
################################################################接口################################################################
################################################################接口################################################################
################################################################接口################################################################
// 手动记录
public function manual_record(){
$data = input('post.');
try {
if(!array_key_exists('aud_id', $data) || !array_key_exists('time', $data) || !array_key_exists('height', $data) || !array_key_exists('weight', $data) || !array_key_exists('token', $data)){
return $this->msg(10001);
}
unset($data['token']);
if(!$this->verify_data_is_ok($data['aud_id'],'intnum')){
return $this->msg(10005,'aud_id type error');
}
if(!$this->verify_data_is_ok($data['time'],'datetime')){
return $this->msg(10005,'time type error');
}
$temporary_data = $this->convertHeightAndWeight($data['height'],$data['weight']);
if($temporary_data['height_in_cm'] == false){
return $this->msg(10005,'身高单位错误');
}
if($temporary_data['weight_in_kg'] == false){
return $this->msg(10005,'体重单位错误');
}
$data['height'] = $temporary_data['height_in_cm'];
$data['weight'] = $temporary_data['weight_in_kg'];
if(strlen($data['time']) <= 12){
// 时间日期转换,把'Y-m-d'转换成'Y-m-d H:i:s'格式
$data['time'] = $this->addCurrentTimeToDateString($data['time']);
}
return $this->set_user_body_data($data,'by_hand_means');
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "函数: manual_record" . "\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
$logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
// 设备记录
public function device_record(){
$data = input('post.');
// try {
if(!array_key_exists('aud_id', $data) || !array_key_exists('height', $data) || !array_key_exists('weight', $data) || !array_key_exists('adc', $data) || !array_key_exists('token', $data)){
return $this->msg(10001);
}
if(!$this->verify_data_is_ok($data['aud_id'],'intnum')){
return $this->msg(10005,'aud_id type error');
}
if(!$this->verify_data_is_ok($data['adc'],'num')){
return $this->msg(10005,'adc type error');
}
$temporary_data = $this->convertHeightAndWeight($data['height'],$data['weight']);
if($temporary_data['height_in_cm'] == false){
return $this->msg(10005,'身高单位错误');
}
if($temporary_data['weight_in_kg'] == false){
return $this->msg(10005,'体重单位错误');
}
// 检测设备传过来的info信息
if(array_key_exists('info', $data)){
if (!is_array($data['info'])) {
return $this->msg(10005,'info参数格式错误');
}else{
$info_data_arr =['bodyage','fat_r','muscle','kcal','visceral','sfr','water','bone','fatlevlval','protein','bmi'];
foreach ($data['info'] as $key => $value) {
if (!in_array($key, $info_data_arr)) {
return $this->msg(10005,'info参数格式错误-2');
}
}
}
}
$data['height'] = $temporary_data['height_in_cm'];
$data['weight'] = $temporary_data['weight_in_kg'];
$data['time'] = date('Y-m-d H:i:s');
return $this->set_user_body_data($data,'by_device');
// } catch (\Exception $e) {
// // 捕获异常
// $logContent["flie"] = $e->getFile();
// $logContent["line"] = $e->getLine();
// $logContent['all_content'] = "异常信息:\n";
// $logContent['all_content'] .= "函数: device_record" . "\n";
// $logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
// $logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
// $logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
// $logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
// $logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
// $this->record_api_log($data, $logContent, null);
// return $this->msg(99999);
// }
}
// 获取角色报告(简要)
public function body_report_brief(){
$data = input('post.');
try {
if(!array_key_exists('token', $data) || !array_key_exists('aud_id', $data)){
return $this->msg(10001);
}
if(!$this->verify_data_is_ok($data['token'],'str')){
return $this->msg(10005,'token type error');
}
if(!$this->verify_data_is_ok($data['aud_id'],'intnum')){
return $this->msg(10005,'aud_id type error');
}
return $this->body_report_brief_action($data);
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "函数: body_report_brief" . "\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
$logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
// 获取角色报告(详细)
public function body_report_detailed(){
$data = input('post.');
try {
if(!array_key_exists('token', $data) || !array_key_exists('aud_id', $data)){
return $this->msg(10001);
}
if(!$this->verify_data_is_ok($data['token'],'str')){
return $this->msg(10005,'token type error');
}
if(!$this->verify_data_is_ok($data['aud_id'],'intnum')){
return $this->msg(10005,'aud_id type error');
}
return $this->body_report_detailed_action($data);
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "函数: body_report_detailed" . "\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
$logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
// 修改目标体重
public function set_target_weight(){
$data = input('post.');
try {
if(!array_key_exists('aud_id', $data) || !array_key_exists('weight', $data) || !array_key_exists('token', $data)){
return $this->msg(10001);
}
if(!$this->verify_data_is_ok($data['aud_id'],'intnum')){
return $this->msg(10005,'aud_id type error');
}
if(!$this->verify_data_is_ok($data['weight'],'num')){
return $this->msg(10005,'weight type error');
}
if(!$this->verify_data_is_ok($data['token'],'str')){
return $this->msg(10005,'token type error');
}
$data['time'] = date('Y-m-d H:i:s');
return $this->set_target_weight_action($data);
} catch (\Exception $e) {
// 捕获异常
$logContent["flie"] = $e->getFile();
$logContent["line"] = $e->getLine();
$logContent['all_content'] = "异常信息:\n";
$logContent['all_content'] .= "函数: set_target_weight" . "\n";
$logContent['all_content'] .= "消息: " . $e->getMessage() . "\n";
$logContent['all_content'] .= "代码: " . $e->getCode() . "\n";
$logContent['all_content'] .= "文件: " . $e->getFile() . "\n";
$logContent['all_content'] .= "行号: " . $e->getLine() . "\n";
$logContent['all_content'] .= "跟踪信息:\n" . $e->getTraceAsString() . "\n";
$this->record_api_log($data, $logContent, null);
return $this->msg(99999);
}
}
################################################################action################################################################
################################################################action################################################################
// 用户身体数据卡片记录
public function set_user_body_data($data,$type){
// 加 bcadd(,,20)
// 减 bcsub(,,20)
// 乘 bcmul(,,20)
// 除 bcdiv(,,20)
$db_data = [];
$db_data['create_time'] = date('Y-m-d H:i:s');
$db_data['aud_id'] = $data['aud_id'];
$db_data['record_time'] = $data['time'];
$db_data['height'] = $data['height'];
$db_data['weight'] = $data['weight'];
$db_data['create_time'] = date('Y-m-d H:i:s');
// 查询用户信息
$user_data = Db::table($this->body_db_name['juese'])->where(['id'=>$data['aud_id'],'is_del'=>0])->field('birthday,gender,target_weight,initial_weight,initial_date')->find();
if(!$user_data){
return $this->msg(10003);
}
// 如果最初体重设置为null
if($user_data['initial_date'] == null){
Db::table($this->body_db_name['juese'])->where(['id'=>$data['aud_id']])->update(['initial_weight'=>$data['weight'],'initial_date'=>$data['time']]);
}
$db_data['age'] = $this->calculate_age($user_data['birthday']);
// 设置发送数据:身高、体重、年龄、性别、头围、生日、阻抗
$send_data['height'] = $data['height'];
$send_data['weight'] = $data['weight'];
$send_data['age'] = $db_data['age'];
$send_data['gender'] = $user_data['gender'];
$send_data['birthDay'] = $user_data['birthday'];
// 1、手动记录还是设备记录
if($type == 'by_hand_means'){
$db_data['record_type'] = 'by_hand_means';
// 判断头围数据是否存在是否合理
if(array_key_exists('head_data', $data)){
if(!$this->verify_data_is_ok($data['head_data'],'num')){
return $this->msg(10005);
}
$db_data['head_circumference'] = $data['head_data'];
}
$send_data['adc'] = 550;
$send_data['head'] = $data['head_data'];
// 发送请求获取照良那边的身体数据
$get_body_value = $this->send_body_data($send_data,'4_electrode');
if($get_body_value === false){
return $this->msg(10002);
}
// 开始设置数据
$db_data['bmi'] = $get_body_value['bmi'];
$db_data['score'] = $get_body_value['cmi'];
$db_data['fat_r'] = $get_body_value['bfr'];
$db_data['fat_w'] = $get_body_value['bfrval'];
$db_data['muscle'] = $get_body_value['rom'];
$db_data['muscleval'] = $get_body_value['romval'];
$db_data['water'] = $get_body_value['vwc'];
$db_data['protein'] = $get_body_value['pp'];
$db_data['proteinval'] = $get_body_value['ppval'];
$db_data['bone'] = $get_body_value['bm'];
$db_data['kcal'] = $get_body_value['bmr'];
$db_data['visceral'] = $get_body_value['uvi'];
$db_data['sfr'] = $get_body_value['sfr'];
$db_data['body_level'] = $get_body_value['fatlevelname'];//肥胖等级
$db_data['body_type'] = $get_body_value['body'];//身体类型
$db_data['body_age'] = $get_body_value['bodyage'];
// 如果年纪小于三岁处理头围数据star
$standardlist = [];
if($send_data['age'] < 3){
if(array_key_exists('standardlist',$get_body_value)){
$standardlist = $get_body_value['standardlist'];
foreach ($standardlist as $key => $value) {
if($value['name'] == 'head' && count($value['list'] ) > 0){
$standardlist = $value;
}
}
$standardlist['list2'] = [];
foreach ($standardlist['list'] as $key => $value) {
array_push($standardlist['list2'],[
'min_val'=>$value['minvalue'],
'max_val'=>$value['maxvalue'],
'text'=>$value['text'],
'color'=>$value['color']
]);
}
unset($standardlist['list']);
unset($get_body_value['standardlist']);
}
}else{
if(array_key_exists('standardlist',$get_body_value)){
unset($get_body_value['standardlist']);
}
}
// 如果年纪小于三岁处理头围数据end
$db_data['head_circumference'] = json_encode($standardlist);
}else{
// 如果原始数据存在阻抗
if(array_key_exists('adc', $data)){
if(!$this->verify_data_is_ok($data['adc'],'num')){
return $this->msg(10005);
}
if($data['adc'] > 0){
// 如果阻抗大于0那就使用传过来的阻抗
$send_data['adc'] = $data['adc'];
$db_data['record_type'] = 'by_device_adc';
}else{
$send_data['adc'] = 550;
$db_data['record_type'] = 'by_device';
}
}
if(array_key_exists('lefthand', $data) && array_key_exists('righthand', $data) && array_key_exists('leftfoot', $data) && array_key_exists('rightfoot', $data)){
// 发送请求获取照良那边的身体数据
$send_data['lefthand'] = $data['lefthand'];
$send_data['righthand'] = $data['righthand'];
$send_data['leftfoot'] = $data['leftfoot'];
$send_data['rightfoot'] = $data['rightfoot'];
$get_body_value = $this->send_body_data($send_data,'8_electrode');
}else{
// 发送请求获取照良那边的身体数据
$get_body_value = $this->send_body_data($send_data,'4_electrode');
}
if($get_body_value === false){
return $this->msg(10002);
}
// 开始设置数据
$db_data['bmi'] = $get_body_value['bmi'];
$db_data['score'] = $get_body_value['cmi'];
$db_data['fat_r'] = $get_body_value['fat_r'];
$db_data['fat_w'] = $get_body_value['fat_w'];
$db_data['muscle'] = $get_body_value['muscle'];
$db_data['muscleval'] = $get_body_value['muscleval'];
$db_data['water'] = $get_body_value['water'];
$db_data['protein'] = $get_body_value['protein'];
$db_data['proteinval'] = $get_body_value['proteinval'];
$db_data['bone'] = $get_body_value['bone'];
$db_data['kcal'] = $get_body_value['kcal'];
$db_data['visceral'] = $get_body_value['visceral'];
$db_data['sfr'] = $get_body_value['sfr'];
$db_data['body_level'] = $get_body_value['fatlevelname'];//肥胖等级
$db_data['body_type'] = $get_body_value['body'];//身体类型
$db_data['body_age'] = $get_body_value['bodyage'];
$db_data['8_electrode_data'] = json_encode($get_body_value['bodyage']);
// 处理心率start
if(array_key_exists('heart_rate', $data)){
if(!$this->verify_data_is_ok($data['heart_rate'],'num')){
return $this->msg(10005);
}
$db_data['heart_rate'] = $data['heart_rate'];
}
// 处理心率end
}
// 启动事务
Db::startTrans();
try{
Db::table($this->body_db_name['body_data_new'])->insert($db_data);
$update_arr = [
'height'=>$get_body_value['身高'],
'weight'=>$get_body_value['体重']
];
if($data['head_circumference']>0){
$update_arr['head_data'] = $data['head_circumference'];
}
Db::table($this->body_db_name['juese'])->where(['id'=>$data['aud_id']])->update($update_arr);
// 提交事务
Db::commit();
return $this->msg([]);
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
return $this->msg(10002);
}
}
public function body_report_brief_action($data){
$result_return = [
'top_list'=>[
[
"name"=>"体重",
'time'=>'',
"value"=>"0",
"unit"=>"kg",
"standard"=>"",
"standard_color"=>"#77E46C",
'target_weight'=>'0',
'target_weight_unit'=>'kg'
],
[
"name"=>"身高",
'time'=>'',
"value"=>"0",
"unit"=>"cm",
"standard"=>"",
"standard_color"=>"#FEA63D",
],
[
"name"=>"BMI",
'time'=>'',
"value"=>"0",
"unit"=>"",
"standard"=>"",
"standard_color"=>"#FF8072",
],
],
// 'weight'=>
// 'height'=>
// 'bmi'=>
'card_list'=>[
],
];
$body_last_data = Db::query("
select
Top 1
acbd.id,
acbd.acd_id,
acbd.record_type,
acbd.create_time,
acbd.last_update_time,
acbd.score,
acbd.fat_r,
acbd.fat_w,
acbd.muscle,
acbd.muscleval,
acbd.water,
acbd.proteinval,
acbd.bone,
acbd.protein,
acbd.kcal,
acbd.visceral,
acbd.sfr,
acbd.body_level,
acbd.aud_id,
acbd.record_time,
acbd.body_type,
acbd.age,
acbd.is_del,
acbd.height,
acbd.height_val,
acbd.weight,
acbd.weight_val,
acbd.bmi,
acbd.body_age,
acbd.head_circumference,
acbd.heart_rate,
aud.birthday,aud.gender,aud.target_weight,aud.initial_weight,aud.initial_date
from ".$this->body_db_name['body_data']." as acbd
left join ".$this->body_db_name['juese']." as aud on acbd.aud_id=aud.id
where acbd.is_del=0 and acbd.aud_id='".$data['aud_id']."'
order by acbd.record_time desc
");
if(count($body_last_data) <= 0){
return $this->msg($result_return);
}
// return $this->msg($body_last_data);
$record_time = substr($body_last_data[0]['record_time'], 11, 5);
// 处理体重
$temporary_weight = explode(',',$body_last_data[0]['weight']);
$result_return['top_list'][0]['time'] = $record_time;
$result_return['top_list'][0]['value'] = $temporary_weight[0];
$result_return['top_list'][0]['standard'] = $temporary_weight[1] == '无'?'':$temporary_weight[1];
$result_return['top_list'][0]['standard_color'] = $temporary_weight[2] == '无'?'':$temporary_weight[2];
$result_return['top_list'][0]['target_weight'] = $body_last_data[0]['target_weight'];
$result_return['top_list'][0]['key_name'] = 'weight';
// 处理身高
$temporary_height = explode(',',$body_last_data[0]['height']);
$result_return['top_list'][1]['time'] = $record_time;
$result_return['top_list'][1]['value'] = $temporary_height[0];
$result_return['top_list'][1]['standard'] = $temporary_height[1] == '无'?'':$temporary_height[1];
$result_return['top_list'][1]['standard_color'] = $temporary_height[2] == '无'?'':$temporary_height[2];
$result_return['top_list'][1]['key_name'] = 'height';
// 处理BMI
$temporary_bmi = explode(',',$body_last_data[0]['bmi']);
$result_return['top_list'][2]['time'] = $record_time;
$result_return['top_list'][2]['value'] = $temporary_bmi[0];
$result_return['top_list'][2]['standard'] = $temporary_bmi[1] == '无'?'':$temporary_bmi[1];
$result_return['top_list'][2]['standard_color'] = $temporary_bmi[2] == '无'?'':$temporary_bmi[2];
$result_return['top_list'][2]['key_name'] = 'bmi';
// 如果有心率
if($body_last_data[0]['heart_rate']){
$temporary_heart_rate = explode(',',$body_last_data[0]['heart_rate']);
$result_return['top_list'][2]['time'] = $record_time;
$result_return['top_list'][2]['value'] = $temporary_heart_rate[0];
$result_return['top_list'][2]['standard'] = $temporary_heart_rate[1] == '无'?'':$temporary_heart_rate[1];
$result_return['top_list'][2]['standard_color'] = $temporary_heart_rate[2] == '无'?'':$temporary_heart_rate[2];
$result_return['top_list'][2]['key_name'] = 'heart_rate';
}
// 如果有头围
if($body_last_data[0]['head_circumference']){
$temporary_head_circumference = explode(',',$body_last_data[0]['head_circumference']);
$result_return['top_list'][2]['time'] = $record_time;
$result_return['top_list'][2]['value'] = $temporary_head_circumference[0];
$result_return['top_list'][2]['standard'] = $temporary_head_circumference[1] == '无'?'':$temporary_head_circumference[1];
$result_return['top_list'][2]['standard_color'] = $temporary_head_circumference[2] == '无'?'':$temporary_head_circumference[2];
$result_return['top_list'][2]['key_name'] = 'head_circumference';
}
// 处理卡片数据
if($body_last_data[0]['record_type'] == 'by_hand_means'){
return $this->msg($result_return);
}else{
// 设置卡片顺序
$set_order = [
'fat_r', //体脂率
'fat_w', //脂肪量
'muscle', //肌肉率
'muscleval', //肌肉量
'protein', //蛋白率
'proteinval', //蛋白量
'water', //水分
'sfr', //皮下脂肪
'body_level', //肥胖等级☆
'visceral', //内脏指数
'bone', //骨重
'body_type', //身体类型☆
'score', //身体得分☆
'body_age', //身体年龄☆
];
foreach ($set_order as $key => $value) {
if($value == 'body_level' || $value == 'body_type' || $value == 'body_age' || $value == 'score'){
// 如果是特殊数据
$result_return['card_list'][] = [
'name'=>$this->merged_data[$value]['name'],
'icon'=>'',
'value'=>$body_last_data[0][$value],
'unit'=>$this->merged_data[$value]['unit'],
'standard'=>'',
'standard_color'=>'',
'key_name'=>$value,
];
}else{
// 分割数据
$temporary_data_1 = explode(',',$body_last_data[0][$value]);
// 设置默认标准颜色
$standard_color = '#121212';
// 处理标准颜色
if(array_key_exists($temporary_data_1[1],$this->merged_data[$value]['list'])){
$standard_color = $this->merged_data[$value]['list'][$temporary_data_1[1]];
}
$result_return['card_list'][] = [
'name'=>$this->merged_data[$value]['name'],
'icon'=>'',
'value'=>$temporary_data_1[0],
'unit'=>$this->merged_data[$value]['unit'],
'standard'=>$temporary_data_1[1],
'standard_color'=>$standard_color,
'key_name'=>$value,
];
}
}
}
return $this->msg($result_return);
}
public function body_report_detailed_action($data){
$result_return = [];
$body_last_data = Db::query("
select
Top 1
acbd.id,
acbd.acd_id,
acbd.record_type,
acbd.create_time,
acbd.last_update_time,
acbd.score,
acbd.fat_r,
acbd.fat_w,
acbd.muscle,
acbd.muscleval,
acbd.water,
acbd.proteinval,
acbd.bone,
acbd.protein,
acbd.kcal,
acbd.visceral,
acbd.sfr,
acbd.body_level,
acbd.aud_id,
acbd.record_time,
acbd.body_type,
acbd.age,
acbd.is_del,
acbd.height,
acbd.height_val,
acbd.weight,
acbd.weight_val,
acbd.bmi,
acbd.body_age,
acbd.head_circumference,
acbd.heart_rate,
aud.birthday,aud.gender,aud.target_weight,aud.initial_weight,aud.initial_date
from ".$this->body_db_name['body_data']." as acbd
left join ".$this->body_db_name['juese']." as aud on acbd.aud_id=aud.id
where acbd.is_del=0 and acbd.aud_id='".$data['aud_id']."'
order by acbd.record_time desc
");
if(count($body_last_data) <= 0){
return $this->msg($result_return);
}
// return $this->msg($body_last_data);
// 设置卡片顺序
$set_order = [
'weight', //体重
'height', //身高
// '', //心率
// 'bmr', //BMR 静态基础代谢
'bmi', //BMI
'fat_r', //体脂率
'fat_w', //脂肪量
'muscle', //肌肉率
'muscleval', //肌肉量
'protein', //蛋白率
'proteinval', //蛋白量
'water', //水分
'sfr', //皮下脂肪
'visceral', //内脏指数
'bone', //骨重
'body_type', //身体类型☆
'body_level', //肥胖等级☆
'body_age', //身体年龄☆
'score', //身体得分☆
];
$temporary_model = [];
foreach ($set_order as $key => $value) {
$temporary_model = [];
if($value == 'body_type' || $value == 'body_level'){
$temporary_model = $this->detailed_model_1;
$temporary_model['name'] = $this->merged_data[$value]['name'];
$temporary_model['value'] = '';
$temporary_model['unit'] = '';
$temporary_model['desc'] = $this->merged_data[$value]['description'];
$temporary_model['standard'] = $body_last_data[0][$value];
$temporary_model['key_name'] = $value;
$result_return[] = $temporary_model;
}else if($value == 'weight' || $value == 'height' || $value == 'bmi'){
$temporary_data_array = explode(',',$body_last_data[0][$value]);
$temporary_model = $this->detailed_model_1;
$temporary_model['name'] = $this->merged_data[$value]['name'];
$temporary_model['value'] = $temporary_data_array[0];
$temporary_model['unit'] = $this->merged_data[$value]['unit'];
$temporary_model['desc'] = $this->merged_data[$value]['description'];
$temporary_model['standard'] = $temporary_data_array[1];
$temporary_model['standard_color'] = $temporary_data_array[1] == '无'?'':$this->merged_data[$value]['list'][$temporary_data_array[1]];
$temporary_model['list'] = $this->process_hwb_standard_action($body_last_data[0]['birthday'],$value,$body_last_data[0]['age'],$body_last_data[0]['gender']);
$temporary_model['key_name'] = $value;
$temporary_model['offset'] = $this->process_offset_action($temporary_data_array[0],$temporary_model['list']);
$result_return[] = $temporary_model;
}else if($value == 'score' || $value == 'body_age'){
$temporary_model = $this->detailed_model_1;
$temporary_model['name'] = $this->merged_data[$value]['name'];
$temporary_model['value'] = $body_last_data[0][$value];
$temporary_model['unit'] = $this->merged_data[$value]['unit'];
$temporary_model['desc'] = $this->merged_data[$value]['description'];
$temporary_model['key_name'] = $value;
$temporary_model['list'] = $this->process_other_standard_action($body_last_data[0],$value);
$temporary_model['offset'] = $this->process_offset_action($temporary_model['value'],$temporary_model['list']);
$temporary_model['standard'] = $this->process_special_offset_action($temporary_model['value'],$temporary_model['list'])['standard'];
$temporary_model['standard_color'] = $this->process_special_offset_action($temporary_model['value'],$temporary_model['list'])['standard_color'];
$result_return[] = $temporary_model;
}else{
if($body_last_data[0]['record_type'] == 'by_device_adc'){
$temporary_data_array = explode(',',$body_last_data[0][$value]);
$temporary_model = $this->detailed_model_1;
$temporary_model['name'] = $this->merged_data[$value]['name'];
$temporary_model['value'] = $temporary_data_array[0];
$temporary_model['unit'] = $this->merged_data[$value]['unit'];
$temporary_model['desc'] = $this->merged_data[$value]['description'];
$temporary_model['standard'] = array_key_exists(1,$temporary_data_array)?$temporary_data_array[1]:'';
// dump($temporary_model['standard']);
if($temporary_model['standard'] == ''){
$temporary_model['standard_color'] = "#000000";
}else if($temporary_model['standard'] == '异常'){
$temporary_model['standard_color'] = "#FD5759";
}else{
$temporary_model['standard_color'] = $this->merged_data[$value]['list'][$temporary_data_array[1]];
}
$temporary_model['list'] = $temporary_model['standard'] == ''?[]:$this->process_other_standard_action($body_last_data[0],$value);
// dump($value);
// dump($temporary_model['list']);
$temporary_model['key_name'] = $value;
$temporary_model['offset'] = $temporary_model['standard'] == ''?0:$this->process_offset_action($temporary_data_array[0],$temporary_model['list']);
if($temporary_model['standard'] == '异常'){
$temporary_model = $this->handling_exceptions($temporary_model);
}
$result_return[] = $temporary_model;
}else{
continue;
}
}
}
return $this->msg($result_return);
}
// 设置理想体重
public function set_target_weight_action($data){
$user_data = Db::table($this->body_db_name['juese'])->where(['id'=>$data['aud_id']])->update(['target_weight'=>$data['weight']]);
if($user_data){
return $this->msg([]);
}else{
return $this->msg(10002);
}
}
################################################################工具################################################################
################################################################工具################################################################
// 处理身高体重BMI的标准
public function process_hwb_standard_action($birthday,$key_name,$age,$gender_val){
$month_num = $this->calculateAgeInMonthsWithPrecision($birthday);
if($age < $this->age_limit){
$result_data = $this->merged_data[$key_name]['standard_list'];
if($key_name == 'bmi'){
$bhw_date = Db::table($this->body_db_name['bmi'])->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select();
if($bhw_date){
$result_data[0]['max_val'] = $bhw_date[0]['f1sd'];
$result_data[0]['max_val'] = $bhw_date[0]['f1sd'];
$result_data[1]['min_val'] = $bhw_date[0]['f1sd'];
$result_data[1]['max_val'] = $bhw_date[0]['z1sd'];
$result_data[2]['min_val'] = $bhw_date[0]['z1sd'];
$result_data[2]['max_val'] = $bhw_date[0]['z2sd'];
$result_data[3]['min_val'] = $bhw_date[0]['z2sd'];
}
}else if($key_name == 'height'){
$bhw_date = Db::table($this->body_db_name['heigh'])->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select();
if($bhw_date){
$result_data[0]['max_val'] = $bhw_date[0]['f2sd'];
$result_data[1]['min_val'] = $bhw_date[0]['f2sd'];
$result_data[1]['max_val'] = $bhw_date[0]['f1sd'];
$result_data[2]['min_val'] = $bhw_date[0]['f1sd'];
$result_data[2]['max_val'] = $bhw_date[0]['z1sd'];
$result_data[3]['min_val'] = $bhw_date[0]['z1sd'];
$result_data[3]['max_val'] = $bhw_date[0]['z2sd'];
$result_data[4]['min_val'] = $bhw_date[0]['z2sd'];
$result_data[4]['max_val'] = $bhw_date[0]['z3sd'];
}
}else if($key_name == 'weight'){
$bhw_date = Db::table($this->body_db_name['weigh'])->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select();
// dump($bhw_date);
if($bhw_date){
$result_data[0]['max_val'] = $bhw_date[0]['f2sd'];
$result_data[1]['min_val'] = $bhw_date[0]['f2sd'];
$result_data[1]['max_val'] = $bhw_date[0]['f1sd'];
$result_data[2]['min_val'] = $bhw_date[0]['f1sd'];
$result_data[2]['max_val'] = $bhw_date[0]['z1sd'];
$result_data[3]['min_val'] = $bhw_date[0]['z1sd'];
$result_data[3]['max_val'] = $bhw_date[0]['z2sd'];
$result_data[4]['min_val'] = $bhw_date[0]['z2sd'];
$result_data[4]['max_val'] = $bhw_date[0]['z3sd'];
}
}
}else{
$result_data = [];
}
return $result_data;
}
// 处理其他的标注列表
public function process_other_standard_action($data,$key_name){
if($key_name == 'body_age'){
$result_data = [
['min_val'=>'0','max_val'=>$data['age'],'text'=>'年轻','color'=>'#14CBAD'], //淡黄
['min_val'=>$data['age'],'max_val'=>bcadd(bcsub($data['age'],0,2),$data['age'],2),'text'=>'偏大','color'=>'#F53F31'], //绿
];
}else if($key_name == 'score'){
$result_data = $this->merged_data['score']['standard_list'];
}else{
$gender_val = $data['gender'] == 2?'woman':'man';
if($key_name == 'fat_r'){
if($data['age'] < 30){
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['29'];
}else{
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['30'];
}
}else if($key_name == 'fat_w'){
if($data['age'] < 30){
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['29'];
}else{
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['30'];
}
$result_data = $this->calculate_new_standard($result_data,$data['weight_val'],$key_name,$data['age'],$gender_val);
}else if($key_name == 'muscle' || $key_name == 'protein' || $key_name == 'water' || $key_name == 'sfr' || $key_name == 'visceral'){
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val];
}else if($key_name == 'muscleval' || $key_name == 'proteinval'){
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val];
$result_data = $this->calculate_new_standard($result_data,$data['weight_val'],$key_name,$data['age'],$gender_val);
}else if($key_name == 'bone'){
if($gender_val == 'man'){
if($data['weight_val'] < 60){
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['60'];
}else if($data['weight_val'] >= 60 && $data['weight_val'] < 75){
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['60_75'];
}else{
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['75'];
}
}else{
if($data['weight_val'] < 45){
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['45'];
}else if($data['weight_val'] >= 45 && $data['weight_val'] < 60){
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['45_60'];
}else{
$result_data = $this->merged_data[$key_name]['standard_list'][$gender_val]['60'];
}
}
}
}
return $result_data;
}
// 处理一般落点
public function process_offset_action($val, $list) {
$count = count($list);
if($count <= 0){
return 0;
}
// dump($val);
// dump($list);
// die;
// 边界检查:小于最小值
$firstMin = floatval($list[0]['min_val']);
if (floatval($val) < $firstMin) {
return '0';
}
// 边界检查:大于最大值
$lastMax = floatval($list[$count-1]['max_val']);
if (floatval($val) > $lastMax) {
return '100';
}
// 找到数值所在的区间
for ($i = 0; $i < $count; $i++) {
$item = $list[$i];
$valNum = floatval($val);
$minNum = floatval($item['min_val']);
$maxNum = floatval($item['max_val']);
// 如果是第一个区间,包含最小值
if ($i == 0 && $valNum <= $maxNum) {
$index = $i;
break;
}
// 如果是最后一个区间,包含最大值
elseif ($i == $count - 1 && $valNum >= $minNum) {
$index = $i;
break;
}
// 中间区间
elseif ($valNum >= $minNum && $valNum < $maxNum) {
$index = $i;
break;
}
}
if (!isset($index)) {
return '0';
}
// 计算基准值
$itemPercent = bcdiv('100', strval($count), 20);
$basePercent = bcmul(strval($index), $itemPercent, 20);
// 计算当前区间内的百分比
$item = $list[$index];
$minVal = $item['min_val'];
$maxVal = $item['max_val'];
$rangeWidth = bcsub($maxVal, $minVal, 20);
// 如果范围宽度为0直接返回基准百分比
if (floatval($rangeWidth) == 0) {
$result = bcdiv($basePercent, '1', 1);
return $result;
}
$offset = bcsub($val, $minVal, 20);
$percentInRange = bcdiv($offset, $rangeWidth, 20);
$currentPercent = bcmul($percentInRange, $itemPercent, 20);
// 计算总百分比并格式化
$result = bcadd($basePercent, $currentPercent, 1);
// $result = bcdiv($totalPercent, '1', 1);
return $result;
}
// 处理特殊落点下的标准值
public function process_special_offset_action($val, $list) {
$return_data['standard'] = '';
$return_data['standard_color'] = '#000000';
if($val<$list[0]['min_val']){
$return_data['standard'] = $list[0]['text'];
$return_data['standard_color'] = $list[0]['color'];
return $return_data;
}
if($val>$list[count($list)-1]['max_val']){
$return_data['standard'] = $list[count($list)-1]['text'];
$return_data['standard_color'] = $list[count($list)-1]['color'];
return $return_data;
}
foreach ($list as $key => $value) {
if($val >= $value['min_val'] && $val <= $value['max_val']){
$return_data['standard'] = $value['text'];
$return_data['standard_color'] = $value['color'];
break;
}
}
return $return_data;
}
// 计算新标准
public function calculate_new_standard($data,$w,$k,$age=0,$gender='man'){
$temporary_arr = [];
if($k != 'kcal'){
foreach ($data as $key => $value) {
array_push($temporary_arr,[
'min_val'=>bcmul($w,bcdiv($value['min_val'],100,2),2),
'max_val'=>bcmul($w,bcdiv($value['max_val'],100,2),2),
'text'=>$value['text'],
'color'=>$value['color']
]);
}
}else{
// BMR标准值(男) BMR标准值(女)
// 60.9*体重(kg)-54 61.0*体重(kg)-51
// 22.7*体重(kg)+495 22.5*体重(kg)+499
// 17.5*体重(kg)+651 12.2*体重(kg)+746
// 15.3*体重(kg)+679 14.7*体重(kg)+496
// 11.6*体重(kg)+879 8.7*体重(kg)+820
$vv_val = 0;
if($age < 3){
if($gender == 'man'){
$vv_val = bcsub(bcmul(60.9,$w,2),54,2);
}else{
$vv_val = bcsub(bcmul(61.0,$w,2),51,2);
}
}else if($age >= 3 && $age < 10){
if($gender == 'man'){
$vv_val = bcadd(bcmul(22.7,$w,2),495,2);
}else{
$vv_val = bcadd(bcmul(22.5,$w,2),499,2);
}
}else if($age >= 10 && $age < 18){
if($gender == 'man'){
$vv_val = bcadd(bcmul(17.5,$w,2),651,2);
}else{
$vv_val = bcadd(bcmul(12.2,$w,2),746,2);
}
}else if($age >= 18 && $age < 30){
if($gender == 'man'){
$vv_val = bcadd(bcmul(15.3,$w,2),679,2);
}else{
$vv_val = bcadd(bcmul(14.7,$w,2),496,2);
}
}else{
if($gender == 'man'){
$vv_val = bcadd(bcmul(11.6,$w,2),879,2);
}else{
$vv_val = bcadd(bcmul(8.7,$w,2),820,2);
}
}
$data[0]['max_val'] = $vv_val;
$data[1]['min_val'] = $vv_val;
$temporary_arr = $data;
}
return $temporary_arr;
}
//
public function hwb_standard($data){
$linshi_data = [];
$month_num = $this->calculateAgeInMonthsWithPrecision($data['birthday']);
$gender_val = $data['gender'];
if($data['age'] < $this->age_limit){
foreach ($data as $key => $value) {
if($key =='身高'){
$linshi_data['身高'] = $this->merged_data['height']['standard_list'];
$bhw_date = Db::table($this->body_db_name['heigh'])->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select();
if($bhw_date){
$linshi_data['身高'][0]['max_val'] = $bhw_date[0]['f2sd'];
$linshi_data['身高'][1]['min_val'] = $bhw_date[0]['f2sd'];
$linshi_data['身高'][1]['max_val'] = $bhw_date[0]['f1sd'];
$linshi_data['身高'][2]['min_val'] = $bhw_date[0]['f1sd'];
$linshi_data['身高'][2]['max_val'] = $bhw_date[0]['z1sd'];
$linshi_data['身高'][3]['min_val'] = $bhw_date[0]['z1sd'];
$linshi_data['身高'][3]['max_val'] = $bhw_date[0]['z2sd'];
$linshi_data['身高'][4]['min_val'] = $bhw_date[0]['z2sd'];
$linshi_data['身高'][4]['max_val'] = $bhw_date[0]['z3sd'];
}
}else if($key =='体重'){
$linshi_data['体重'] = $this->merged_data['weight']['standard_list'];
$bhw_date = Db::table($this->body_db_name['weigh'])->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select();
if($bhw_date){
$linshi_data['体重'][0]['max_val'] = $bhw_date[0]['f2sd'];
$linshi_data['体重'][1]['min_val'] = $bhw_date[0]['f2sd'];
$linshi_data['体重'][1]['max_val'] = $bhw_date[0]['f1sd'];
$linshi_data['体重'][2]['min_val'] = $bhw_date[0]['f1sd'];
$linshi_data['体重'][2]['max_val'] = $bhw_date[0]['z1sd'];
$linshi_data['体重'][3]['min_val'] = $bhw_date[0]['z1sd'];
$linshi_data['体重'][3]['max_val'] = $bhw_date[0]['z2sd'];
$linshi_data['体重'][4]['min_val'] = $bhw_date[0]['z2sd'];
$linshi_data['体重'][4]['max_val'] = $bhw_date[0]['z3sd'];
}
}else if($key =='BMI'){
$linshi_data['BMI'] = $this->merged_data['bmi']['standard_list'];
$bhw_date = Db::table($this->body_db_name['bmi'])->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select();
if($bhw_date){
$linshi_data['BMI'][0]['max_val'] = $bhw_date[0]['f1sd'];
$linshi_data['BMI'][1]['min_val'] = $bhw_date[0]['f1sd'];
$linshi_data['BMI'][1]['max_val'] = $bhw_date[0]['z1sd'];
$linshi_data['BMI'][2]['min_val'] = $bhw_date[0]['z1sd'];
$linshi_data['BMI'][2]['max_val'] = $bhw_date[0]['z2sd'];
$linshi_data['BMI'][3]['min_val'] = $bhw_date[0]['z2sd'];
}
}
}
foreach ($linshi_data as $key => $value) {
foreach ($value as $k => $v) {
if($data[$key] >= $v['min_val'] && $data[$key] < $v['max_val']){
// 如果落在区间内
$data[$key.'2'] = $data[$key].','.$v['text'].','.$v['color'];
break;
}
}
// 如果$key.'2'没有被设置
if(!array_key_exists($key.'2', $data)){
if($data[$key] < $value[0]['min_val']){
// 如果小于最小值
$data[$key.'2'] = $data[$key].','.$value[0]['text'].','.$value[0]['color'];
}else if($data[$key] >= $value[count($value)-1]['max_val']){
// 如果大于最大值
$data[$key.'2'] = $data[$key].','.$value[count($value)-1]['text'].','.$value[count($value)-1]['color'];
}
}
}
// die;
}else{
$data['身高2'] = $data['身高'].',无,无';
$data['体重2'] = $data['体重'].',无,无';
$data['BMI2'] = $data['BMI'].',无,无';
}
return $data;
}
// 处理异常
public function handling_exceptions($data){
for ($i=0; $i < count($data['list']); $i++) {
if($data['value']>=$data['list'][$i]['min_val'] && $data['value']<$data['list'][$i]['max_val']){
$data['standard'] = $data['list'][$i]['text'];
$data['color'] = $data['list'][$i]['color'];
break;
}
}
if($data['standard'] == '异常'){
if($data['value'] <= $data['list'][0]['min_val']){
$data['standard'] = $data['list'][0]['text'];
$data['color'] = $data['list'][0]['color'];
}else if($data['value'] >= $data['list'][count($data['list'])-1]['max_val']){
$data['standard'] = $data['list'][count($data['list'])-1]['text'];
$data['color'] = $data['list'][count($data['list'])-1]['color'];
}
}
return $data;
}
// 发送信息获取身体数据
public function send_body_data($data,$type){
if($type == '4_electrode'){
// 使用接口调用照良那边的 进行计算start
$url = 'https://klcz.pcxbc.com/open-api/calc/healthcalc/bodyfat3';
if($data['age'] < '3'){
$data['hasStandardList'] = true;
}else{
unset($data['birthDay']);
unset($data['head']);
}
$request_result = $this->postRequest($url,$data);
}else{
// 使用接口调用照良那边的 进行计算start
$url = 'https://ybapi.ybhdmob.com/api/third/body120';
$data['body'] = $data['adc'];
$data['sex'] = $data['gender'];
unset($data['adc']);
unset($data['gender']);
unset($data['birthDay']);
// dump($data);
// die;
$request_result = $this->postRequest($url,$data);
}
// dump($request_result);
if($request_result['code'] != 0){
return false;
}else{
return $request_result['data'];
}
}
}