2025-11-21 19:13:01 +08:00
< ? php
namespace app\NewReedaw\controller\app ;
use think\Db ;
2026-03-06 18:02:49 +08:00
2025-11-21 19:13:01 +08:00
class Card extends Base {
protected $card_db_name = [
'zhanghao' => 'app_account_number' ,
'juese' => 'app_user_data' ,
2026-03-06 18:02:49 +08:00
'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' => [],
2025-11-21 19:13:01 +08:00
];
// 加 bcadd(,,20)
// 减 bcsub(,,20)
// 乘 bcmul(,,20)
// 除 bcdiv(,,20)
// 测试token=>'caadd1be045a65f30b92aa805f1de54a'
################################################################接口################################################################
################################################################接口################################################################
################################################################接口################################################################
// 卡片列表信息
2026-03-06 18:02:49 +08:00
public function card_list_all (){
$data = input ( 'post.' );
2025-11-21 19:13:01 +08:00
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' );
}
2026-03-06 18:02:49 +08:00
return $this -> card_list_all_action ( $data );
2025-11-21 19:13:01 +08:00
} 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 );
}
}
2026-03-06 18:02:49 +08:00
// 保存用户所选的卡片列表
public function save_card_list (){
$data = input ( 'post.' );
2025-11-21 19:13:01 +08:00
try {
// 你的业务逻辑
2026-03-06 18:02:49 +08:00
if ( ! array_key_exists ( 'token' , $data ) || ! array_key_exists ( 'aud_id' , $data ) || ! array_key_exists ( 'card_list' , $data )){
2025-11-21 19:13:01 +08:00
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' );
}
2026-03-06 18:02:49 +08:00
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 );
2025-11-21 19:13:01 +08:00
} 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 );
}
}
2026-03-06 18:02:49 +08:00
// 角色卡片列表信息
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 );
}
}
2025-11-21 19:13:01 +08:00
################################################################action################################################################
################################################################action################################################################
2026-03-06 18:02:49 +08:00
public function card_list_all_action ( $data ){
2025-11-21 19:13:01 +08:00
// 检查角色
$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 , '未核实到角色信息' );
}
// 获取卡片信息
2026-03-16 19:29:36 +08:00
$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 ( 10 ) -> select ();
2025-11-21 19:13:01 +08:00
// 根据用户处理卡片信息
$return_data = [
'chosen_yes' => [],
'chosen_no' => [],
];
if ( $user_data [ 'card_order' ] != '' ){
2026-03-06 18:02:49 +08:00
// 如果有设置过
2025-11-21 19:13:01 +08:00
$user_data [ 'card_order' ] = explode ( ',' , $user_data [ 'card_order' ]);
} else {
$user_data [ 'card_order' ] = [];
}
2026-03-06 18:02:49 +08:00
// 对照处理用户的卡片信息
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' ]);
2025-11-21 19:13:01 +08:00
}
}
return $this -> msg ( $return_data );
}
2026-03-06 18:02:49 +08:00
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 , '未核实到角色信息' );
2025-11-21 19:13:01 +08:00
}
2026-03-06 18:02:49 +08:00
$card_data = Db :: table ( $this -> card_db_name [ 'card' ]) -> where ( " id in ( " . $data [ 'card_list' ] . " ) " ) -> field ( 'id' ) -> cache ( 86400 ) -> select ();
2025-11-21 19:13:01 +08:00
2026-03-06 18:02:49 +08:00
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 );
2025-11-21 19:13:01 +08:00
}
2026-03-06 18:02:49 +08:00
} else {
return $this -> msg ( 10003 , '卡片数据错误' );
2025-11-21 19:13:01 +08:00
}
2026-03-06 18:02:49 +08:00
}
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 ){
2025-11-21 19:13:01 +08:00
return $this -> msg ( 10003 , '未核实到角色信息' );
}
2026-03-06 18:02:49 +08:00
if ( $user_data [ 'card_order' ] == '' || $user_data [ 'card_order' ] == '2' ){
// == 2是为了兼容老数据
2025-11-21 19:13:01 +08:00
return $this -> msg ([]);
2026-03-06 18:02:49 +08:00
}
$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' ] = '' ;
2025-11-21 19:13:01 +08:00
} else {
2026-03-06 18:02:49 +08:00
return [];
2025-11-21 19:13:01 +08:00
}
2026-03-06 18:02:49 +08:00
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' ];
2025-11-21 19:13:01 +08:00
2026-03-06 18:02:49 +08:00
$result [ 'data' ][ 'value' ] = $all_data [ 'val_data' ];
return $result ;
} else {
return [];
}
2025-11-21 19:13:01 +08:00
}
2026-03-06 18:02:49 +08:00
2025-11-21 19:13:01 +08:00
}