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

472 lines
21 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 [];
}
}
}