SchoolPhysicalExamination/application/NewReedaw/controller/app/Card.php

472 lines
21 KiB
PHP
Raw Normal View History

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,'未核实到角色信息');
}
// 获取卡片信息
$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'] != ''){
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
}