'app_account_number', 'juese'=>'app_user_data', 'card'=>'app_card_data', 'skip'=>'app_card_skip_data', 'vitalcapacity'=>'app_card_vitalcapacity_data', 'zhongzhao'=>'app_sportstesting_data', ]; protected $card_standard_arr_data = [ 'id'=>'', 'name'=>'', 'content'=>'', 'page_url_report'=>'', 'is_sub_item'=>'', 'background_color'=>'', 'background_pic'=>'', 'key_word'=>'', 'data'=>[], ]; // 加 bcadd(,,20) // 减 bcsub(,,20) // 乘 bcmul(,,20) // 除 bcdiv(,,20) // 测试token=>'caadd1be045a65f30b92aa805f1de54a' ################################################################接口################################################################ ################################################################接口################################################################ ################################################################接口################################################################ // 卡片列表信息 public function card_list_all(){ $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->card_list_all_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 save_card_list(){ $data = input('post.'); try { // 你的业务逻辑 if(!array_key_exists('token', $data) || !array_key_exists('aud_id', $data) || !array_key_exists('card_list', $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(explode(',',$data['card_list']),'arr_intnum')){ return $this->msg(10005,'aud_id type error'); } return $this->save_card_list_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 user_card_list(){ $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->user_card_list_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); } } // BMI测评 public function bmi_evaluation(){ $cbe_data = input('post.'); try { if(!is_array($cbe_data)){ return $this->msg(10005); } if(!array_key_exists('height', $cbe_data) || !array_key_exists('weight', $cbe_data) || !array_key_exists('birthday', $cbe_data) || !array_key_exists('sex', $cbe_data)){ return $this->msg(10001); } unset($cbe_data['token']); if(!$this->verify_data_is_ok($cbe_data['birthday'],'datetime')){ return $this->msg(10005,'birthday type error'); } if(!$this->verify_data_is_ok($cbe_data['height'],'num')){ return $this->msg(10005,'height type error'); } if(!$this->verify_data_is_ok($cbe_data['weight'],'num')){ return $this->msg(10005,'weight type error'); } if(!$this->verify_data_is_ok($cbe_data['sex'],'intnum')){ return $this->msg(10005,'sex type error'); } // 直接开始业务,请求外部接口start $url = 'http://ybdevice.pcxbc.com/api/result/calcbmi'; $temporary_parameter = [ 'height'=>$cbe_data['height'], 'weight'=>$cbe_data['weight'], 'birthday'=>$cbe_data['birthday'], 'sex'=>$cbe_data['sex'], ]; $request_result = $this->postRequest($url,$temporary_parameter,array('Content-Type:application/json','Origin:http://ybdevice.pcxbc.com')); // 直接开始业务,请求外部接口end // 处理进度点 $request_result =$this->bmi_evaluation_action($request_result); return $request_result; } 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($cbe_data, $logContent, null); return $this->msg(99999); } } // 身高预测 public function genetic_height(){ $data = input('post.'); try { if(!array_key_exists('dadHeight', $data) || !array_key_exists('momHeight', $data) || !array_key_exists('birthday', $data) || !array_key_exists('sex', $data)){ return $this->msg(10001); } if(!$this->verify_data_is_ok($data['birthday'],'datetime')){ return $this->msg(10005,'birthday type error'); } if(!$this->verify_data_is_ok($data['dadHeight'],'num')){ return $this->msg(10005,'dadHeight type error'); } if(!$this->verify_data_is_ok($data['momHeight'],'num')){ return $this->msg(10005,'momHeight type error'); } if(!$this->verify_data_is_ok($data['sex'],'intnum')){ return $this->msg(10005,'sex type error'); } // 直接开始业务,请求外部接口start $url = 'https://ybapi.pcxbc.com/api/child/predictheight'; $temporary_parameter = [ 'dadHeight'=>$data['dadHeight'], 'momHeight'=>$data['momHeight'], 'birthday'=>$data['birthday'], 'sex'=>$data['sex'], ]; $request_result = $this->postRequest($url,$temporary_parameter,array('Content-Type:application/json','Origin:http://ybdevice.pcxbc.com')); return json($request_result); } 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 card_list_all_action($data){ // 检查角色 $user_data = Db::table($this->card_db_name['juese'])->where(['id'=>$data['aud_id'],'is_del'=>0])->field('id,card_order')->find(); if(!$user_data){ return $this->msg(10003,'未核实到角色信息'); } // 获取卡片信息 $card_data = Db::table($this->card_db_name['card'])->where(['is_del'=>0])->field('id,name,content,page_url_report,is_sub_item,background_color,background_pic,key_word')->cache(86400)->select(); // 根据用户处理卡片信息 $return_data = [ 'chosen_yes'=>[], 'chosen_no'=>[], ]; if($user_data['card_order'] != ''){ // 如果有设置过 $user_data['card_order'] = explode(',',$user_data['card_order']); }else{ $user_data['card_order'] = []; } // 对照处理用户的卡片信息 foreach ($user_data['card_order'] as $key => $value) { foreach ($card_data as $k => $v) { if(in_array($v['id'],$user_data['card_order']) && $v['id'] == $value){ $return_data['chosen_yes'][] = $v; unset($card_data[$k]); } } } foreach ($card_data as $key => $value) { $return_data['chosen_no'][] = $value; } // 剔除不必要的数据 foreach ($return_data as $key => $value) { foreach ($value as $k => $v) { unset($return_data[$key][$k]['content']); unset($return_data[$key][$k]['page_url_report']); unset($return_data[$key][$k]['is_sub_item']); unset($return_data[$key][$k]['background_color']); unset($return_data[$key][$k]['background_pic']); unset($return_data[$key][$k]['ROW_NUMBER']); } } return $this->msg($return_data); } public function save_card_list_action($data){ // 检查角色 $user_data = Db::table($this->card_db_name['juese'])->where(['id'=>$data['aud_id'],'is_del'=>0])->field('id,card_order')->find(); if(!$user_data){ return $this->msg(10003,'未核实到角色信息'); } $card_data = Db::table($this->card_db_name['card'])->where("id in (".$data['card_list'].")")->field('id')->cache(86400)->select(); if(count(explode(',',$data['card_list'])) == count($card_data)){ $result = Db::table($this->card_db_name['juese'])->where(['id'=>$data['aud_id'],'is_del'=>0])->update([ 'card_order' => $data['card_list'] ]); if($result){ return $this->msg([]); }else{ return $this->msg(10002); } }else{ return $this->msg(10003,'卡片数据错误'); } } public function user_card_list_action($data){ // 检查角色 $user_data = Db::table($this->card_db_name['juese'])->where(['id'=>$data['aud_id'],'is_del'=>0])->field('id,card_order')->find(); if(!$user_data){ return $this->msg(10003,'未核实到角色信息'); } if($user_data['card_order'] == '' || $user_data['card_order'] == '2'){ // == 2是为了兼容老数据 return $this->msg([]); } $card_data = Db::table($this->card_db_name['card'])->where(['is_del'=>0])->field('id,name,content,page_url_report,is_sub_item,background_color,background_pic,key_word')->cache(86400)->select(); // 处理卡片映射 $card_data_map = []; foreach ($card_data as $key => $value) { $card_data_map[$value['key_word']] = $value; } // 开始处理列表数据 $user_card_list = explode(',',$user_data['card_order']); $return_data = []; // dump($card_data_map); // die; foreach ($user_card_list as $key => $value) { // dump('本次card_id:'.$value); $temporary_data = $this->little_tool_one($card_data_map,$data['aud_id'],$value); // dump('最终结果如下'); // dump($temporary_data); if(count($temporary_data) > 0){ $return_data[] = $temporary_data; } } return $this->msg($return_data); } public function bmi_evaluation_action($data){ // 加 bcadd(,,20) // 减 bcsub(,,20) // 乘 bcmul(,,20) // 除 bcdiv(,,20) if(!array_key_exists('code',$data) || !array_key_exists('data',$data)){ return $this->msg(99999,'网络异常,请稍后重试1'); } if($data['code'] != 0){ return $this->msg(99999,'网络异常,请稍后重试2'); } if(!is_array($data['data'])){ return $this->msg(99999,'网络异常,请稍后重试3'); } if(!array_key_exists('bmi',$data['data']) || !array_key_exists('bmilevel',$data['data']) || !array_key_exists('bmilevelcolor',$data['data']) || !array_key_exists('bmilevellist',$data['data'])){ return $this->msg(99999,'网络异常,请稍后重试4'); } if(!is_array($data['data']['bmilevellist'])){ return $this->msg(99999,'网络异常,请稍后重试5'); } $num = 0; $subsection_val = 0; $temporary_subsection_val = null; foreach ($data['data']['bmilevellist'] as $key => $value) { if(!array_key_exists('maxvalue',$value) || !array_key_exists('minvalue',$value)){ return $this->msg(99999,'网络异常,请稍后重试6'); } // 判断是否可以进行比较,规则是否正确 if(is_numeric($value['maxvalue']) && is_numeric($value['minvalue'])){ if($data['data']['bmi'] >= $value['minvalue'] && $data['data']['bmi'] < $value['maxvalue']){ // 在落点内 $subsection_val = bcsub($value['maxvalue'],$value['minvalue'],1);//获取最大最小值差 $temporary_subsection_val = bcsub($data['data']['bmi'],$value['minvalue'],1);//获取当前值与最小值差 $temporary_subsection_val = bcdiv($temporary_subsection_val,$subsection_val,1);//获取当前值与最小值差与最大最小值差之比 $subsection_val = bcdiv(100,count($data['data']['bmilevellist']),1);//每段应该的百分比 $temporary_subsection_val = bcmul($subsection_val,$temporary_subsection_val,1);//获取当前值与最小值差与最大最小值差之比与总段数之比 $temporary_subsection_val = bcadd($temporary_subsection_val,bcmul($subsection_val,$num,1),1); }else{ $num = $num + 1; } } } if($temporary_subsection_val === null){ if($data['data']['bmi'] >= $data['data']['bmilevellist'][count($data['data']['bmilevellist'])-1]['maxvalue']){ $temporary_subsection_val = 100; }else{ return $this->msg(99999,'网络异常,请稍后重试7'); } } $data['data']['offset'] = $temporary_subsection_val; $data = $data['data']; // 处理key名称一致start foreach ($data['bmilevellist'] as $key => $value) { $data['bmilevellist'][$key]['max_val'] = $value['maxvalue']; $data['bmilevellist'][$key]['min_val'] = $value['minvalue']; unset($data['bmilevellist'][$key]['minvalue']); unset($data['bmilevellist'][$key]['maxvalue']); } // 处理key名称一致end return $this->msg($data); } ################################################################小工具################################################################ ################################################################小工具################################################################ public function little_tool_one($data,$aud_id,$type){ $result = $this->card_standard_arr_data; if($type == 6){ if(!array_key_exists('skip',$data)){ // 如果系统已经停用了跳绳 return []; } $temporary_data = $data['skip']; $all_data = Db::table($this->card_db_name['skip'])->where(['aud_id'=>$aud_id,'is_del'=>0])->order('id desc')->field('id,jump_kcal as val_data')->find(); $result['data']['unit'] = 'kcal'; }else if($type == 8){ if(!array_key_exists('vitalcapacity',$data)){ // 如果系统已经停用了肺活 return []; } $temporary_data = $data['skip']; $all_data = Db::table($this->card_db_name['vitalcapacity'])->where(['aud_id'=>$aud_id,'is_del'=>0])->order('id desc')->field('id,score_val as val_data')->find(); $result['data']['unit'] = '分'; }else if($type == 20){ if(!array_key_exists('zz_score',$data)){ // 如果系统已经停用了中招估分 return []; } $temporary_data = $data['skip']; $all_data = Db::table($this->card_db_name['zhongzhao'])->where(['aud_id'=>$aud_id,'is_del'=>0])->order('id desc')->field('id,score as val_data')->find(); $result['data']['unit'] = '分'; }else if($type == 21 || $type == 22 || $type == 25 || $type == 26){ if(!array_key_exists('bmi',$data) || !array_key_exists('heredity',$data) || !array_key_exists('fat_loss',$data) || !array_key_exists('target',$data)){ // 如果系统已经停用了BMI测评、遗传身高、减脂对比、曲线/目标、 return []; } $map = ['21'=>'bmi','22'=>'heredity','25'=>'fat_loss','26'=>'target']; $temporary_data = $data[$map[$type]]; $all_data = ['val_data'=>'']; $result['data']['unit'] = ''; }else{ return []; } if($all_data){ $result['id'] = $temporary_data['id']; $result['name'] = $temporary_data['name']; $result['content'] = $temporary_data['content']; $result['page_url_report'] = $temporary_data['page_url_report']; $result['is_sub_item'] = $temporary_data['is_sub_item']; $result['background_color'] = $temporary_data['background_color']; $result['background_pic'] = $temporary_data['background_pic']; $result['key_word'] = $temporary_data['key_word']; $result['data']['value'] = $all_data['val_data']; return $result; }else{ return []; } } }