472 lines
21 KiB
PHP
472 lines
21 KiB
PHP
<?php
|
||
|
||
namespace app\NewReedaw\controller\app;
|
||
|
||
use think\Db;
|
||
|
||
|
||
class Card extends Base{
|
||
|
||
protected $card_db_name = [
|
||
'zhanghao'=>'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 [];
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
} |