'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']; } } }