'app_account_number', 'juese'=>'app_user_data', 'body_data'=>'app_card_body_data', 'bmi'=>'pc_bmistand', 'heigh'=>'pc_heightstand', 'weigh'=>'pc_weightstand', 'chufang1'=>'pc_childrenprescription', 'chufang2'=>'pc_childprescriptionbyage', ]; protected $result_end_data_mould = [ 'name'=>'', 'value'=>'', 'unit'=>'', 'standard'=>'', 'color'=>'', 'list'=>[] ]; protected $age_limit = 16; protected $pagesize = 15; protected $unit_name = ['score'=>'身体得分','height'=>'身高','weight'=>'体重','bmi'=>'BMI','fat_r'=>'脂肪率','fat_w'=>'脂肪量','muscle'=>'肌肉率','muscleval'=>'肌肉量','water'=>'水分','bone'=>'骨重','protein'=>'蛋白率','proteinval'=>'蛋白量','kcal'=>'基础代谢','visceral'=>'内脏指数','sfr'=>'皮下脂肪','body_level'=>'肥胖等级','body_type'=>'身体类型']; protected $unit_symbol = ['score'=>'分','height'=>'CM','weight'=>'公斤','bmi'=>'','fat_r'=>'%','fat_w'=>'kg','muscle'=>'%','muscleval'=>'kg','water'=>'kg','bone'=>'kg','protein'=>'%','proteinval'=>'kg','kcal'=>'kcal','visceral'=>'','sfr'=>'%',]; 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 $bhw_list = [ 'bmi'=>[ ['min_val'=>'0','max_val'=>'','text'=>'消瘦','color'=>'#FDDA6B'], ['min_val'=>'','max_val'=>'','text'=>'正常','color'=>'#59D06A'], ['min_val'=>'','max_val'=>'','text'=>'偏重','color'=>'#FDAA02'], ['min_val'=>'','max_val'=>'50','text'=>'肥胖','color'=>'#FB5755'], ], 'height'=>[ ['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'=>[ ['min_val'=>'0','max_val'=>'','text'=>'低','color'=>'#F8595D'], ['min_val'=>'','max_val'=>'','text'=>'偏低','color'=>'#FFAF04'], ['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#59D168'], ['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#FFAF04'], ['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#F8595D'], ] ]; 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 body_report(){ // phpinfo(); // die; try { $data = input('post.'); 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_action_detailed($data); } catch (\Exception $e) { // 捕获异常 $logContent["flie"] = $e->getFile(); $logContent["line"] = $e->getLine(); $logContent['all_content'] = "异常信息:\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 manual_record(){ try { $data = input('post.'); 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']); } // $data['acd_id'] = '2'; 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'] .= "消息: " . $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(){ try { // 你的业务逻辑 $data = input('post.'); 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'] .= "消息: " . $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 record_list_page(){ try { $data = input('post.'); if(!array_key_exists('token', $data) || !array_key_exists('aud_id', $data) || !array_key_exists('page', $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'); } if(!$this->verify_data_is_ok($data['page'],'intnum')){ return $this->msg(10005,'page type error'); } return $this->record_list_page_or_group_action($data,'page'); } catch (\Exception $e) { // 捕获异常 $logContent["flie"] = $e->getFile(); $logContent["line"] = $e->getLine(); $logContent['all_content'] = "异常信息:\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 record_list_group(){ try { $data = input('post.'); if(!array_key_exists('token', $data) || !array_key_exists('aud_id', $data) || !array_key_exists('s_time', $data) || !array_key_exists('e_time', $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'); } if(!$this->verify_data_is_ok($data['s_time'],'datetime')){ return $this->msg(10005,'page type error'); } if(!$this->verify_data_is_ok($data['e_time'],'datetime')){ return $this->msg(10005,'page type error'); } return $this->record_list_page_or_group_action($data,'group'); } catch (\Exception $e) { // 捕获异常 $logContent["flie"] = $e->getFile(); $logContent["line"] = $e->getLine(); $logContent['all_content'] = "异常信息:\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 detailed_record(){ try { $data = input('post.'); if(!array_key_exists('token', $data) || !array_key_exists('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['id'],'intnum')){ return $this->msg(10005,'id type error'); } return $this->get_all_detaile_data_action($data); } catch (\Exception $e) { // 捕获异常 $logContent["flie"] = $e->getFile(); $logContent["line"] = $e->getLine(); $logContent['all_content'] = "异常信息:\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 del_record(){ try { $data = input('post.'); if(!array_key_exists('id', $data) || !array_key_exists('token', $data)){ return $this->msg(10001); } if(!$this->verify_data_is_ok($data['id'],'intnum')){ return $this->msg(10005); } unset($data['token']); $user_data = Db::table($this->body_db_name['body_data'])->where(['id'=>$data['id']])->update(['is_del'=>1]); if($user_data){ return $this->msg([]); }else{ return $this->msg(10002); } } catch (\Exception $e) { // 捕获异常 $logContent["flie"] = $e->getFile(); $logContent["line"] = $e->getLine(); $logContent['all_content'] = "异常信息:\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 body_report_action_detailed($data){ $result_return = [ "score_name"=>"", "score_value"=>"", "score_unit"=>"", "body_type_name"=>"", "body_type_value"=>"", "body_type_unit"=>"", "record_time"=>"", 'top_list'=>[ [ "name"=>"体重", "value"=>"0", "unit"=>"公斤", "standard"=>"", "color"=>"", "list"=>[], "key_name"=>"weight", "desc"=>"反映和衡量一个人健康状况的重要标志之一", "offset"=>"0", "standard_val"=>"", "difference_val"=>"", ], [ "name"=>"身高", "value"=>"0", "unit"=>"CM", "standard"=>"", "color"=>"", "list"=>[], "key_name"=>"height", "desc"=>"人体纵向部分的长度,源于人体的纵向生长,受遗传因素的影响较大", "offset"=>"0", "standard_val"=>"", "difference_val"=>"", ], [ "name"=>"BMI", "value"=>"0", "unit"=>"公斤", "standard"=>"", "color"=>"", "list"=>[], "key_name"=>"bmi", "desc"=>"BMI是身体质量指数,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。", "offset"=>"0", "standard_val"=>"", "difference_val"=>"", ], ], 'bottom_list' => [], 'cplist'=>[ 'nutritionlist'=>[], 'sportlist'=>[], 'sleeplist'=>[], 'moodlist'=>[], ], 'target_current'=>[ 'target_weight'=>'0', 'initial_weight'=>'0', 'cumulative_weight'=>'0', 'cumulative_day'=>'0' ], ]; $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, 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 "); // return $this->msg($body_last_data); if(count($body_last_data) <= 0){ return $this->msg($result_return); } // 暂时存储头围数据 $head_circumference = $body_last_data[0]['head_circumference']?json_decode($body_last_data[0]['head_circumference'],true):false; unset($body_last_data[0]['head_circumference']); // 处理返回数据 $result_end = $this->processing_return_data_new($body_last_data[0]); $cardparts = new Cardparts; $result_end['gender'] = $body_last_data[0]['gender']; $result_end['record_time'] = $body_last_data[0]['record_time']; $result_end['score'] = $result_end['score']; $result_end['body_type'] = $result_end['body_type']; $result_end = $cardparts->conversion_interval($result_end); // return $this->msg($result_end); $result_end['cplist'] = $this->grow_up_recommendation([ 'birthday'=>$body_last_data[0]['birthday'], 'body'=>[ 'height'=>$body_last_data[0]['height'], 'weight'=>$body_last_data[0]['weight'], 'bmi'=>$body_last_data[0]['bmi'] ], ]); // return $this->msg($result_end); // // 加入曲线板块底部的减肥计划数据start // $result_end['target_current'] = $this->base_target_initial_cumulative_weight([ // 'weight'=>$body_last_data[0]['weight']>0?$body_last_data[0]['weight']:0, // 'target_weight'=>$body_last_data[0]['target_weight']>0?$body_last_data[0]['target_weight']:0, // 'initial_weight'=>$body_last_data[0]['initial_weight']>0?$body_last_data[0]['initial_weight']:0, // 'initial_date'=>$body_last_data[0]['initial_date']!=null?$body_last_data[0]['initial_date']:0, // ]); // // dump($result_end); // if(count($result_end['top_list'][2]['list']) <= 0){ // // 这是16岁以上人群 // $data = [ // 'height'=>$body_last_data[0]['height_val'], // 'weight'=>$body_last_data[0]['weight_val'], // 'birthday'=>$body_last_data[0]['birthday'], // 'sex'=>$body_last_data[0]['gender'] // ]; // $temporary_arr_bmi_list = $this->card_bmi_evaluation($data,true); // $temporary_arr_bmi_list = $temporary_arr_bmi_list->getData(); // if($temporary_arr_bmi_list['code'] == 0){ // $result_end['top_list'][2]['standard'] = $temporary_arr_bmi_list['data']['bmilevel']; // $result_end['top_list'][2]['color'] = $temporary_arr_bmi_list['data']['bmilevelcolor']; // $result_end['top_list'][2]['list'] = $temporary_arr_bmi_list['data']['bmilevellist']; // $result_end['top_list'][2]['offset'] = $temporary_arr_bmi_list['data']['offset']; // } // // dump($result_end); // // die; // } // 添加头围数据(如果有的话)start if($head_circumference !== false && $this->calculate_age($body_last_data[0]['birthday']) < 3){ if($head_circumference['level'] == '异常' || $head_circumference['value'] == 0){ $offset = 0; }else{ $offset = $cardparts->calculate_landing_point($head_circumference['list2'],$head_circumference['value'],$head_circumference['level']); } $touwei_array = [ 'name'=>'头围', 'value'=>$head_circumference['value'], 'unit'=>'CM', 'standard'=>$head_circumference['level'], 'color'=>'', 'list'=>$head_circumference['list2'], 'key_name'=>'head_circumference', 'desc'=>'头围是指绕头部一周的最大长度,头围的大小与脑的发育密切相关', 'offset'=>$offset ]; $touwei_data = $this->touwei_temporary_use($body_last_data[0]['birthday'],$body_last_data[0]['gender']); if(count($touwei_data)){ $touwei_array['standard_val'] = $touwei_data['middle']; $touwei_array['difference_val'] = bcsub($touwei_array['value'],$touwei_data['middle'],2); }else{ $touwei_array['standard_val'] = ''; $touwei_array['difference_val'] = ''; } array_push($result_end['top_list'],$touwei_array); } // 添加头围数据(如果有的话)end // 这段业务处理可以删除,是做的临时的,假的start $biaozhun_val = $this->body_temporary_use($body_last_data[0]['birthday'],$body_last_data[0]['gender']); // // dump($biaozhun_val); // die; // dump($biaozhun_val); // $biaozhun_val_weight = 50; // $biaozhun_val_height = 170; // $biaozhun_val_bmi = 22; foreach ($result_end['top_list'] as $key => $value) { if($value['key_name'] == 'weight'){ if($biaozhun_val['weight'] == ''){ $result_end['top_list'][$key]['standard_val'] = ''; $result_end['top_list'][$key]['difference_val'] = ''; }else{ $result_end['top_list'][$key]['standard_val'] = $biaozhun_val['weight']; $result_end['top_list'][$key]['difference_val'] = bcsub($value['value'],$biaozhun_val['weight'],2); } }else if($value['key_name'] == 'height'){ if($biaozhun_val['height'] == ''){ $result_end['top_list'][$key]['standard_val'] = ''; $result_end['top_list'][$key]['difference_val'] = ''; }else{ $result_end['top_list'][$key]['standard_val'] = $biaozhun_val['height']; $result_end['top_list'][$key]['difference_val'] = bcsub($value['value'],$biaozhun_val['height'],2); } }else if($value['key_name'] == 'bmi'){ if($biaozhun_val['bmi'] == ''){ $result_end['top_list'][$key]['standard_val'] = ''; $result_end['top_list'][$key]['difference_val'] = ''; }else{ $result_end['top_list'][$key]['standard_val'] = $biaozhun_val['bmi']; $result_end['top_list'][$key]['difference_val'] = bcsub($value['value'],$biaozhun_val['bmi'],2); } } } // 这段业务处理可以删除,是做的临时的,假的end return $this->msg($result_end); // dump($result_end); } // 用户身体数据卡片记录 public function set_user_body_data($data,$type){ // 加 bcadd(,,20) // 减 bcsub(,,20) // 乘 bcmul(,,20) // 除 bcdiv(,,20) // 判断头围数据是否存在是否合理 if(array_key_exists('head_data', $data)){ if(!$this->verify_data_is_ok($data['head_data'],'num')){ return $this->msg(10005); } $data['head_circumference'] = $data['head_data']; }else{ $data['head_circumference'] = 0; } // 查询用户信息 $user_data = Db::table($this->body_db_name['juese'])->where(['id'=>$data['aud_id']])->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']]); $target_current = $this->base_target_initial_cumulative_weight([ 'weight'=>$data['weight'], 'target_weight'=>$user_data['target_weight'], 'initial_weight'=>$data['weight'], 'initial_date'=>$data['time'], ]); }else{ $target_current = $this->base_target_initial_cumulative_weight([ 'weight'=>$data['weight'], 'target_weight'=>$user_data['target_weight'], 'initial_weight'=>$user_data['initial_weight'], 'initial_date'=>$user_data['initial_date'], ]); } // 设置身高、体重、年龄、性别、阶段称谓、头围、生日、阻抗 $result_data['height'] = $data['height']; $result_data['weight'] = $data['weight']; $result_data['age'] = $this->calculate_age($user_data['birthday']); $result_data['gender'] = $user_data['gender']; $result_data['head_circumference'] = $data['head_circumference']; $result_data['birthday'] = $user_data['birthday']; if(array_key_exists('adc', $data)){ if($data['adc'] > 0){ $result_data['adc'] = $data['adc']; $type = "by_device_adc"; }else{ $result_data['adc'] = 550; $type = "by_device"; } } $calculate_body_formula = new Calculatebody(); // 计算身体数据 $get_body_value = $calculate_body_formula->calculate_body_data_result($result_data); if($get_body_value === false){ return $this->msg(10005); } // 如果年纪小于三岁,处理头围数据star $standardlist = []; if($result_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 $get_body_value['gender'] = $user_data['gender']; $get_body_value['birthday'] = $user_data['birthday']; // 添加身高、体重、bmi、头围(如果有)的标尺标准 $get_body_value = $this->hwb_standard($get_body_value); $enumeration_data = [ 'fat_r'=>'脂肪率', 'muscle'=>'肌肉率', 'kcal'=>'基础代谢', 'visceral'=>'内脏指数', 'sfr'=>'皮下脂肪', 'water'=>'水分', 'bone'=>'骨重', 'protein'=>'蛋白率', 'bodyage'=>'身体年龄' ]; // return $this->msg($get_body_value); // 根据秤传过来的数据,去处理要存的结果 if(array_key_exists('info', $data)){ foreach ($data['info'] as $key => $value) { if($key == 'bmi'){ if($value > 0){ $get_body_value['BMI'] = $value; $get_body_value['BMI2'] = explode(',',$get_body_value['BMI2']); $get_body_value['BMI2'][0] = $value; $get_body_value['BMI2'] = implode(',',$get_body_value['BMI2']); } }else if($key == 'bodyage'){ $get_body_value[$enumeration_data[$key]] = $value; }else if($key == 'fatlevlval'){ continue; }else{ if($value > 0){ $get_body_value[$enumeration_data[$key]][0] = $value; } } } } $set_data = [ 'acd_id'=>2, 'aud_id'=>$data['aud_id'], 'record_time'=>array_key_exists('time', $data)?$data['time']:date('Y-m-d H:i:s'), 'create_time'=>date('Y-m-d H:i:s'), 'last_update_time'=>date('Y-m-d H:i:s'), 'age'=>$get_body_value['age'], 'height'=>$get_body_value['身高2'], 'height_val'=>$get_body_value['身高'], 'weight'=>$get_body_value['体重2'], 'weight_val'=>$get_body_value['体重'], 'bmi'=>$get_body_value['BMI2'], 'bmi_val'=>$get_body_value['BMI'], 'score'=>$get_body_value['身体得分'], 'fat_r'=> implode(',',$get_body_value['脂肪率']), 'fat_w'=>implode(',',$get_body_value['脂肪量']), 'muscle'=>implode(',',$get_body_value['肌肉率']), 'muscleval'=>implode(',',$get_body_value['肌肉量']), 'water'=>implode(',',$get_body_value['水分']), 'proteinval'=>implode(',',$get_body_value['蛋白量']), 'bone'=>implode(',',$get_body_value['骨重']), 'protein'=>implode(',',$get_body_value['蛋白率']), 'kcal'=>implode(',',$get_body_value['基础代谢']), 'visceral'=>implode(',',$get_body_value['内脏指数']), 'sfr'=>implode(',',$get_body_value['皮下脂肪']), 'body_level'=>$get_body_value['肥胖等级'], 'body_type'=>$get_body_value['身体类型'], 'body_age'=>$get_body_value['身体年龄'], 'record_type' => $type, 'head_circumference' => $result_data['age'] < 3?json_encode($standardlist):"", ]; if(strlen($set_data['record_time']) <= 12){ // 时间日期转换,把'Y-m-d'转换成'Y-m-d H:i:s'格式 $set_data['record_time'] = $this->addCurrentTimeToDateString($set_data['record_time']); } // 启动事务 Db::startTrans(); try{ $set_user_data = Db::table($this->body_db_name['body_data'])->insert($set_data); $update_arr = [ 'height'=>$get_body_value['身高'], 'weight'=>$get_body_value['体重'] ]; if($data['head_circumference']>0){ $update_arr['head_data'] = $data['head_circumference']; } $update_user_data = Db::table($this->body_db_name['juese'])->where(['id'=>$data['aud_id']])->update($update_arr); // 提交事务 Db::commit(); return $this->msg([ 'acd_id'=>2, 'height'=>$get_body_value['身高'].',CM', 'weight'=>$get_body_value['体重'].',公斤', 'bmi'=>$get_body_value['BMI'], 'target_current'=>$target_current, ]); } catch (\Exception $e) { // 回滚事务 Db::rollback(); return $this->msg(10002); } } public function record_list_page_or_group_action($data,$type){ $return_result = []; if($type == 'group'){ $data['s_time'] = $data['s_time'].' 00:00:00'; $data['e_time'] = $data['e_time'].' 23:59:59'; $result = Db::query(" select id, CONVERT(varchar(10), record_time, 120) AS r_t, CONVERT(varchar(19), record_time, 120) AS record_time, height_val as v1, weight_val as v2, bmi_val as v3 from ".$this->body_db_name['body_data']." where aud_id='".$data['aud_id']."' and record_time between '".$data['s_time']."' and '".$data['e_time']."' and is_del = 0 order by record_time desc"); foreach ($result as $key => $value) { array_push($return_result, [ 'id'=>$value['id'], 'v1'=>floatval(sprintf("%.2f", $value['v1'])), 'v2'=>floatval(sprintf("%.2f", $value['v2'])), 'v3'=>floatval(sprintf("%.2f", $value['v3'])), 'v1_name'=>'身高', 'v2_name'=>'体重', 'v3_name'=>'BMI', // 'r_t'=>str_replace('-', '/', $value['r_t']) 'r_t'=>$value['r_t'] ]); } }else{ $result = Db::table($this->body_db_name['body_data'])->where(['aud_id'=>$data['aud_id'],'is_del'=>0])->field("id,record_time,REPLACE(record_time, '-', '-') AS b_time,height_val,weight_val,bmi_val")->order('record_time desc')->page($data['page'],$this->pagesize)->select(); $return_result['totalrows'] = Db::table($this->body_db_name['body_data'])->where(['aud_id'=>$data['aud_id']])->count(); $return_result['rows'] = []; $return_result['pageno'] = $data['page']; $return_result['pagesize'] = $this->pagesize; $return_result['totalpage'] = ceil($return_result['totalrows']/$this->pagesize); foreach ($result as $key => $value) { array_push($return_result['rows'],[ 'id'=>$value['id'], 'v1'=>floatval(sprintf("%.2f", $value['height_val'])), 'v2'=>floatval(sprintf("%.2f", $value['weight_val'])), 'v3'=>floatval(sprintf("%.2f", $value['bmi_val'])), 'v1_name'=>'身高', 'v2_name'=>'体重', 'v3_name'=>'BMI', 'record_time'=>$value['b_time'], ]); } } return $this->msg($return_result); } // 获取详细历史数据信息 public function get_all_detaile_data_action($data){ // 加 bcadd(,,20) // 减 bcsub(,,20) // 乘 bcmul(,,20) // 除 bcdiv(,,20) // 设置排除在外的数据类型start $exclude_data_arr = ['height','weight','age','bmi']; // 设置排除在外的数据类型end $result = Db::table($this->body_db_name['body_data'])->where(['id'=>$data['id']])->find(); $for_data_arr = ['height'=>['身高','cm'],'weight'=>['体重','kg'],'age'=>['年龄','岁'],'bmi'=>['BMI',''],'head'=>['头围',''],'fat_w'=>['脂肪量','kg'],'fat_r'=>['脂肪率','%'],'muscleval'=>['肌肉量','kg'],'muscle'=>['肌肉率','%'],'proteinval'=>['蛋白量','kg'],'protein'=>['蛋白率','%'],'water'=>['水分',''],'bone'=>['骨重','kg'],'visceral'=>['内脏指数',''],'sfr'=>['皮下脂肪','%'],'kcal'=>['基础代谢','kcal'],'un_fat_w_weight'=>['去脂体重','kg'],'body_age'=>['体龄',''],'body_level'=>['肥胖等级',''],'body_type'=>['体型','']]; if($result){ $result_data = []; foreach ($for_data_arr as $key => $value) { $temporary_arr['key_name'] = $key; $temporary_arr['name'] = $value[0]; // 身体数据处理,如果没有阻抗,则只显示四项$exclude_data_arr if($result['record_type'] != 'by_device_adc'){ if(!in_array($key, $exclude_data_arr)){ continue; }else{ $temporary_arr['value'] = explode(',',$result[$key])[0]; } }else{ if($key == 'un_fat_w_weight'){ $temporary_arr['value'] = bcsub(explode(',',$result['weight'])[0],explode(',',$result['fat_w'])[0],2); }else{ if(array_key_exists($key,$result)){ $temporary_arr['value'] = explode(',',$result[$key])[0]; } } } $temporary_arr['unit'] = $value[1]; array_push($result_data,$temporary_arr); } // // 添加头围详细start if($result['head_circumference'] != null){ array_unshift($result_data,[ 'key_name'=>'head_circumference', 'name'=>'头围', 'value'=>json_decode($result['head_circumference'],true)['value'] == 0?"0":json_decode($result['head_circumference'],true)['value'], 'unit'=>'cm', ]); } // 添加头围详细end return $this->msg($result_data); }else{ return $this->msg(10004); } } ################################################################内部调用################################################################ ################################################################内部调用################################################################ public function processing_return_data_new($data){ $result_end_data = []; $month_num = $this->calculateAgeInMonthsWithPrecision($data['birthday']); $gender_val = $data['gender']; foreach ($data as $key => $value) { if($key != 'aud_id' && $key != 'id' && $key != 'create_time' && $key != 'last_update_time' && $key != 'acd_id' && $key != 'ROW_NUMBER' && $key != 'record_time' && $key != 'gender' && $key != 'birthday'){ // 设置单个数据格式 $result_end_data[$key] = $this->result_end_data_mould; // 该项名 if(array_key_exists($key, $this->unit_name)){ $result_end_data[$key]['name'] = $this->unit_name[$key]; } // 该项单位 if(array_key_exists($key, $this->unit_symbol)){ $result_end_data[$key]['unit'] = $this->unit_symbol[$key]; } $result_end_data[$key]['value'] = explode(',',$value)[0]; if(strpos($value, ',')){ $result_end_data[$key]['standard'] = explode(',',$value)[1]; } if(array_key_exists($key, $this->standard_color)){ if($result_end_data[$key]['standard'] != '异常' && $result_end_data[$key]['standard'] != ''){ $result_end_data[$key]['color'] = $this->standard_color[$key][$result_end_data[$key]['standard']]; } } // 如果小于16岁(儿童) if($data['age'] < $this->age_limit){ if(array_key_exists($key, $this->bhw_list)){ $result_end_data[$key]['list'] = $this->bhw_list[$key]; if($key == '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_end_data[$key]['list'][0]['max_val'] = $bhw_date[0]['f1sd']; $result_end_data[$key]['list'][1]['min_val'] = $bhw_date[0]['f1sd']; $result_end_data[$key]['list'][1]['max_val'] = $bhw_date[0]['z1sd']; $result_end_data[$key]['list'][2]['min_val'] = $bhw_date[0]['z1sd']; $result_end_data[$key]['list'][2]['max_val'] = $bhw_date[0]['z2sd']; $result_end_data[$key]['list'][3]['min_val'] = $bhw_date[0]['z2sd']; } }else if($key == '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_end_data[$key]['list'][0]['max_val'] = $bhw_date[0]['f2sd']; $result_end_data[$key]['list'][1]['min_val'] = $bhw_date[0]['f2sd']; $result_end_data[$key]['list'][1]['max_val'] = $bhw_date[0]['f1sd']; $result_end_data[$key]['list'][2]['min_val'] = $bhw_date[0]['f1sd']; $result_end_data[$key]['list'][2]['max_val'] = $bhw_date[0]['z1sd']; $result_end_data[$key]['list'][3]['min_val'] = $bhw_date[0]['z1sd']; $result_end_data[$key]['list'][3]['max_val'] = $bhw_date[0]['z2sd']; $result_end_data[$key]['list'][4]['min_val'] = $bhw_date[0]['z2sd']; $result_end_data[$key]['list'][4]['max_val'] = $bhw_date[0]['z3sd']; } }else if($key == 'weight'){ $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){ $result_end_data[$key]['list'][0]['max_val'] = $bhw_date[0]['f2sd']; $result_end_data[$key]['list'][1]['min_val'] = $bhw_date[0]['f2sd']; $result_end_data[$key]['list'][1]['max_val'] = $bhw_date[0]['f1sd']; $result_end_data[$key]['list'][2]['min_val'] = $bhw_date[0]['f1sd']; $result_end_data[$key]['list'][2]['max_val'] = $bhw_date[0]['z1sd']; $result_end_data[$key]['list'][3]['min_val'] = $bhw_date[0]['z1sd']; $result_end_data[$key]['list'][3]['max_val'] = $bhw_date[0]['z2sd']; $result_end_data[$key]['list'][4]['min_val'] = $bhw_date[0]['z2sd']; $result_end_data[$key]['list'][4]['max_val'] = $bhw_date[0]['z3sd']; } } } } } } return $result_end_data; } public function grow_up_recommendation($data){ // card_body_level // die; // $result = [ // ['name'=>'营养','key'=>'nutrition','content'=>''], // ['name'=>'睡眠','key'=>'sleep','content'=>''], // ['name'=>'运动','key'=>'motion','content'=>''], // ['name'=>'情绪','key'=>'emotion','content'=>''] // ]; $result = [ 'nutritionlist'=>[],//营养 'sportlist'=>[],//运动 'sleeplist'=>[],//睡眠 'moodlist'=>[],//情绪 ]; $temporary_arr = []; foreach ($data['body'] as $key => $value) { if(explode(',',$value)[1] == '无'){ $result = [ 'nutritionlist'=>[],//营养 'sportlist'=>[],//运动 'sleeplist'=>[],//睡眠 'moodlist'=>[],//情绪 ]; return $result; } $temporary_arr[$key] = $this->card_body_level[$key]['list'][explode(',',$value)[1]]; } $min_value = min($temporary_arr); $min_key = array_search($min_value,$temporary_arr); $type_num = $this->card_body_level[$min_key]['value']; $temporary_arr2 = Db::table($this->body_db_name['chufang1'])->where(['Type'=>$type_num,'Level'=>$min_value,'IsDeleted'=>0])->field('Nutrition,Sport')->find(); // dump($temporary_arr2); array_push($result['nutritionlist'],$temporary_arr2['Nutrition']); array_push($result['sportlist'],$temporary_arr2['Sport']); // $result['nutritionlist'] = $temporary_arr2['Nutrition']; // $result['sportlist'] = $temporary_arr2['Sport']; $month_num = $this->calculateAgeInMonthsWithPrecision($data['birthday']); $temporary_arr2 = Db::table($this->body_db_name['chufang2'])->where(['IsDeleted'=>0])->field('MinAge,MaxAge,Type,Content')->select(); $default_sleep = ''; $default_emotion = ''; foreach ($temporary_arr2 as $key => $value) { if($value['MinAge'] == -1 && $value['Type'] == 2){ $default_sleep = $value['Content']; } if($value['MinAge'] == -1 && $value['Type'] == 3){ $default_emotion = $value['Content']; } if($month_num>=$value['MinAge'] && $month_num<=$value['MaxAge']){ if($value['Type'] == 1){ array_push($result['sportlist'],$value['Content']); // $result['sportlist'] = $result['sportlist'].$value['Content']; }else if($value['Type'] == 2){ array_push($result['sleeplist'],$value['Content']); // $result['sleeplist'] = $result['sleeplist'].$value['Content']; }else if($value['Type'] == 3){ array_push($result['moodlist'],$value['Content']); // $result['moodlist'] = $result['moodlist'].$value['Content']; } } } $result['sleeplist'] = count($result['sleeplist']) <= 0?array_push($result['sportlist'],$default_sleep):$result['sleeplist']; $result['moodlist'] = count($result['moodlist']) <= 0?array_push($result['moodlist'],$default_sleep):$result['moodlist']; return $result; } public function touwei_temporary_use($age,$gender){ $return_data = [ ]; if(!in_array($gender,['1','2'])){ return $return_data; } $age_m = $this->calculateAgeInMonthsWithPrecision($age); if($age_m <= 36){ // $touwei_date = Db::table('ws_touwei')->where("age <= $age_m and gender = '$gender'")->order('age desc')->limit(1)->field('middle')->fetchSql(true)->select(); $touwei_date = Db::query("select * from ws_touwei where age <= $age_m and gender = '$gender' order by age desc"); $return_data = $touwei_date[0]; } return $return_data; } public function body_temporary_use($age,$gender){ $return_data = [ 'height'=>'', 'weight'=>'', 'bmi'=>'', ]; if(!in_array($gender,['1','2'])){ return $return_data; } $age_m = $this->calculateAgeInMonthsWithPrecision($age); if($age_m < 228){//月龄小于19岁 // dump($age_m); // $height_date = Db::table('ws_height')->where("age <= $age_m and gender = '$gender'")->order('age desc')->limit(1)->field('middle')->select(); $height_date = Db::query("select * from ws_height where age <= $age_m and gender = '$gender' order by age desc"); // $weight_date = Db::table('ws_weight')->where("age <= $month_num and Sex = '$gender'")->order('age desc')->limit(1)->field('middle')->select(); $weight_date = Db::query("select * from ws_weight where age <= $age_m and gender = '$gender' order by age desc"); // $bmi_date = Db::table('ws_bmi')->where("age <= $month_num and Sex = '$gender'")->order('age desc')->limit(1)->field('middle')->select(); $bmi_date = Db::query("select * from ws_bmi where age <= $age_m and gender = '$gender' order by age desc"); $return_data = array( 'height' => $height_date[0]['middle'], 'weight' => $weight_date[0]['middle'], 'bmi' => $bmi_date[0]['middle'], ); }else{ $bmi_data = [ '1' => [ // 男性 [ 'age' => ['min' => 216, 'max' => 299], // 18-24岁(216-299月龄) 'list'=>[ ['min_val' => '0', 'max_val' => '18.5', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.5', 'max_val' => '20.4', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '20.5', 'max_val' => '23.9', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '24.0', 'max_val' => '27.9', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '28.0', 'max_val' => '31.9', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '32.0', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ], [ 'age' => ['min' => 300, 'max' => 419], // 25-34岁(300-419月龄) 'list'=>[ ['min_val' => '0', 'max_val' => '18.5', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.5', 'max_val' => '20.9', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '21.0', 'max_val' => '24.4', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '24.5', 'max_val' => '28.4', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '28.5', 'max_val' => '32.4', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '32.5', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ], [ 'age' => ['min' => 420, 'max' => 539], // 35-44岁(420-539月龄) 'list'=>[ ['min_val' => '0', 'max_val' => '18.5', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.5', 'max_val' => '21.4', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '21.5', 'max_val' => '25.0', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '25.1', 'max_val' => '29.0', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '29.1', 'max_val' => '33.0', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '33.1', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ], [ 'age' => ['min' => 540, 'max' => 719], // 45-59岁(540-719月龄) 'list'=>[ ['min_val' => '0', 'max_val' => '18.5', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.5', 'max_val' => '21.9', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '22.0', 'max_val' => '25.5', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '25.6', 'max_val' => '29.5', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '29.6', 'max_val' => '33.5', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '33.6', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ], [ 'age' => ['min' => 720, 'max' => '99999'], // ≥60岁(720+月龄) 'list'=>[ ['min_val' => '0', 'max_val' => '18.5', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.5', 'max_val' => '22.4', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '22.5', 'max_val' => '26.0', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '26.1', 'max_val' => '29.0', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '29.1', 'max_val' => '33.0', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '33.1', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ] ], '2' => [ // 女性 [ 'age' => ['min' => 216, 'max' => 299], // 18-24岁 'list'=>[ ['min_val' => '0', 'max_val' => '18.0', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.0', 'max_val' => '19.9', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '20.0', 'max_val' => '22.9', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '23.0', 'max_val' => '26.9', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '27.0', 'max_val' => '30.9', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '31.0', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ], [ 'age' => ['min' => 300, 'max' => 419], // 25-34岁 'list'=>[ ['min_val' => '0', 'max_val' => '18.0', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.0', 'max_val' => '20.4', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '20.5', 'max_val' => '23.4', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '23.5', 'max_val' => '27.4', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '27.5', 'max_val' => '31.4', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '31.5', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ], [ 'age' => ['min' => 420, 'max' => 539], // 35-44岁 'list'=>[ ['min_val' => '0', 'max_val' => '18.0', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.0', 'max_val' => '20.9', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '21.0', 'max_val' => '24.0', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '24.1', 'max_val' => '28.0', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '28.1', 'max_val' => '32.0', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '32.1', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ], [ 'age' => ['min' => 540, 'max' => 719], // 45-59岁 'list'=>[ ['min_val' => '0', 'max_val' => '18.0', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.0', 'max_val' => '21.4', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '21.5', 'max_val' => '24.5', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '24.6', 'max_val' => '28.5', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '28.6', 'max_val' => '32.5', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '32.6', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ], [ 'age' => ['min' => 720, 'max' => 99999], // ≥60岁 'list'=>[ ['min_val' => '0', 'max_val' => '18.0', 'text' => '低体重', 'color' => '#8BC8FB'], ['min_val' => '18.0', 'max_val' => '21.9', 'text' => '偏瘦', 'color' => '#B4E3FD'], ['min_val' => '22.0', 'max_val' => '25.0', 'text' => '正常', 'color' => '#6CD86F'], ['min_val' => '25.1', 'max_val' => '28.0', 'text' => '超重', 'color' => '#FFD166'], ['min_val' => '28.1', 'max_val' => '32.0', 'text' => '肥胖', 'color' => '#FF9A5A'], ['min_val' => '32.1', 'max_val' => '99999', 'text' => '重度肥胖', 'color' => '#FF6B6B'] ] ] ] ]; foreach ($bmi_data[$gender] as $group) { if ($age_m >= $group['age']['min'] && $age_m <= $group['age']['max']) { $return_data['bmi'] = bcdiv(bcadd($group['list'][2]['min_val'],$group['list'][2]['max_val'],20),2,1); } } } return $return_data; } // 添加身高体重bmi的标准 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->bhw_list['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){ $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->bhw_list['weight']; $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->bhw_list['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){ $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; } }