新增通用卡片:存储数据、标签列表拉取、详情拉取接口

This commit is contained in:
tsf 2024-09-06 18:21:33 +08:00
parent f2124fe291
commit a3fc9812eb
14 changed files with 1290 additions and 55 deletions

View File

@ -0,0 +1,412 @@
<?php
namespace app\admin\controller;
use think\Db;
use think\Log;
use PHPExcel;
use PHPExcel_Cell_DataType;
use PHPExcel_IOFactory;
use PHPExcel_Style_NumberFormat;
class Demo extends Base{
public function get_class_xuesheng(){
// dump('0932');
// die;
// 图片文件所在的目录
// $imageDir = ROOT_PATH . 'public' . DS . 'tsf' . DS . 'demo' . DS . 'class1'; // 假设图片在public/uploads/images目录下
// $imageDir = ROOT_PATH . 'public' . DS . 'tsf' . DS . 'demo' . DS . 'class2'; // 假设图片在public/uploads/images目录下
$imageDir = ROOT_PATH . 'public' . DS . 'tsf' . DS . 'demo' . DS . 'class3'; // 假设图片在public/uploads/images目录下
vendor('PHPExcel.PHPExcel');
// 创建PHPExcel对象
$objPHPExcel = new PHPExcel();
// 设置活动的工作表
$sheet = $objPHPExcel->getActiveSheet();
// 设置表头
$sheet->setCellValue('A1', '原文件名');
$sheet->setCellValue('B1', '新序号');
$sheet->setCellValue('C1', '电话');
$sheet->setCellValue('D1', '姓名');
// 序号起始值
// $startNumber = 24101;
// $startNumber = 24201;
$startNumber = 24301;
$row = 2; // 从第二行开始写入数据
$mingzi_str = '';
// 遍历目录中的图片文件
if ($handle = opendir($imageDir)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != ".." && preg_match('/\.(jpg|jpeg|png|gif)$/i', $entry)) {
// dump($entry);
$mingzi_str = $this->str_jiequ($entry);
// dump($mingzi_str);
// dump($mingzi_str);
// 写入原文件名
$sheet->setCellValue('A' . $row, $entry);
// 生成新序号(注意:这里的序号示例是连续的,如果需要跳号,请调整逻辑)
$newNumber = $startNumber + ($row - 2);
$sheet->setCellValue('B' . $row, $newNumber);
if($mingzi_str != false){
$sheet->setCellValue('C' . $row, $mingzi_str[0]);
$sheet->setCellValue('D' . $row, $mingzi_str[1]);
}
// 实际文件路径和新文件名
$oldFilePath = $imageDir . DS . $entry;
$newFilePath = $imageDir . DS . $newNumber . '.' . pathinfo($entry, PATHINFO_EXTENSION);
// 重命名图片文件
if (rename($oldFilePath, $newFilePath)) {
// 重命名成功
} else {
// 重命名失败,记录错误或抛出异常
throw new \Exception("Failed to rename file: " . $entry);
}
$row++;
}
}
closedir($handle);
}
// die;
// 写入Excel文件到服务器
$fileName = 'image_rename_log_' . date('YmdHis') . '.xlsx';
$filePath = $imageDir . DS . $fileName;
// 使用PHPExcel_IOFactory保存Excel文件
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save($filePath);
dump('完事');
}
// 截取字符串
public function str_jiequ($str){
// $str = "余航13838799761.jpg";
$banPos = strpos($str, '班');
$banPos = $banPos + 3;
// $str = substr($str, $banPos+1);
$str = substr($str, $banPos);
// dump($banPos);
// dump($str);
// 查找“.jpg”的位置
$dotPos = strpos($str, '.jpg');
if ($dotPos !== false) {
// 去除“.jpg”扩展名
$strWithoutExt = substr($str, 0, $dotPos);
// 假设电话号码是11位数字
$phoneLength = 11;
// 检查电话号码长度是否合法
if (strlen($strWithoutExt) >= $phoneLength && ctype_digit(substr($strWithoutExt, -$phoneLength))) {
// 提取电话号码
$phone = substr($strWithoutExt, -$phoneLength);
// 提取中文名字(即去掉电话号码和“.jpg”之前的部分
$name = substr($strWithoutExt, 0, strlen($strWithoutExt) - $phoneLength);
// echo "名字: $name\n";
// echo "电话号码: $phone\n";
return [$name,$phone];
} else {
return false;
// echo "字符串格式不正确,无法提取名字和电话号码。\n";
}
} else {
return false;
// echo "字符串中未找到“.jpg”扩展名。\n";
}
}
################################################################业务接口################################################################
################################################################业务接口################################################################
################################################获取execl中数组
public function submit_rule(){
// $file = request()->file('file');
$file = request()->file('execl');
$name = request()->param();
$address_data = explode(',',$name['address']);
// dump($name);
// die;
if($name['type'] == 'create'){
$rule_is_true = Db::table('admin_estimate')->where(['province'=>$address_data[0],'city'=>$address_data[1]==''?'无':$address_data[1]])->count();
if($rule_is_true > 0){
return $this->msg(10007);
}
}
if($file){
// 移动到框架应用根目录/public/uploads/ 目录下
$file_name_new = date('YmdHis').'_ceshi.xlsx';
$info = $file->validate(['size' => 2048000, 'ext' => 'xlsx'])->move(ROOT_PATH . 'public' . DS . 'estimate',$file_name_new);
if($info){
$original_data = $this->excelToArray(ROOT_PATH . 'public' . DS . 'estimate' . DS . $info->getSaveName());
$handle_data = $this->transformation_data($original_data,$address_data,$name['type']);
// die;
// dump($handle_data);
// die;
if($name['type'] == 'create'){
$result = Db::table('admin_estimate')->insert($handle_data);
}else{
$result = Db::table('admin_estimate')->where(['id'=>$name['update_id']])->update($handle_data);
}
// return $this->msg(10002);
// 成功上传后 获取上传信息
// 输出 jpg
// echo $info->getExtension();
// // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getSaveName();
// // 输出 42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getFilename();
if($result){
return $this->msg([]);
}else{
return $this->msg(10002);
}
}else{
// 上传失败获取错误信息
return $this->msg(10001, $file->getError());
// echo $file->getError();
}
}else{
return $this->msg(10001, '文件缺失');
}
}
// 读取execl文件数据
private function excelToArray($filename){
vendor('PHPExcel.PHPExcel');
$objPHPExcelReader = \PHPExcel_IOFactory::load($filename);
$sheet = $objPHPExcelReader->getSheet(0); // 读取第一个工作表(编号从 0 开始)
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = \PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()); // 取得总列数
// 一次读取一列
$res_arr = array();
for ($row = 2; $row <= $highestRow; $row++) {
$row_arr = array();
for ($column = 0; $column < $highestColumn; $column++) {
//判断单元格是否包含公式
if ($sheet->getCellByColumnAndRow($column, $row)->isFormula()) {
$val = $sheet->getCellByColumnAndRow($column, $row)->getFormattedValue();
} else {
$val = $sheet->getCellByColumnAndRow($column, $row)->getValue();
}
$row_arr[] = $val;
}
if (count($row_arr) > 0) {
$res_arr[] = $row_arr;
}
}
return $res_arr;
}
//处理估分数据格式
private function transformation_data($data,$daaress,$type='create'){
// dump($daaress);
$temporary_daaress = $daaress;
// dump($temporary_daaress);
// die;
if($type == 'create'){
$return_result = [
'province'=>$temporary_daaress[0] == ''?'无':$temporary_daaress[0],
'city'=>$temporary_daaress[1] == ''?'无':$temporary_daaress[1],
'area'=>'无',
'create_time'=>date('Y-m-d H:i:s'),
'update_time'=>date('Y-m-d H:i:s'),
'content'=>[]
];
}else{
$return_result = [
'update_time'=>date('Y-m-d H:i:s'),
'content'=>[]
];
}
$temporary_array = [];
$gender = [];
$rule_c = [];
foreach ($data as $key => $value) {
$gender = explode(',',$value[5]);
if($value[6] == '无' || $value[7] == '无' || $value[8] == '无'){
$rule_c = [];
}else{
$rule_c = [[$value[6],$value[7],$value[8]]];
}
foreach ($gender as $gk => $gv) {
if(!array_key_exists($gv,$temporary_array)){
// 如果性别不存在
// $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2];
$temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [
'unit_data'=>$value[4],
'proportion'=>$value[10],
'value'=>$value[11],
'type'=>$value[12],
'describe'=>$value[13],
'score'=>$value[2],
];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c;
// if($value[6] == null){
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [];
// }else{
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]];
// }
}else{
// 如果性别已经存在
if(!array_key_exists($value[0],$temporary_array[$gv])){
// 如果第一分类不存在
// $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2];
$temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [
'unit_data'=>$value[4],
'proportion'=>$value[10],
'value'=>$value[11],
'type'=>$value[12],
'describe'=>$value[13],
'score'=>$value[2],
];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c;
// if($value[6] == null){
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [];
// }else{
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]];
// }
}else{
// 第一分类存在
if(!array_key_exists($value[1],$temporary_array[$gv][$value[0]])){
// 如果第二分类不存在
// array_push($temporary_array[$value[0]]);
// $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2];
$temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [
'unit_data'=>$value[4],
'proportion'=>$value[10],
'value'=>$value[11],
'type'=>$value[12],
'describe'=>$value[13],
'score'=>$value[2],
];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c;
// if($value[6] == null){
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [];
// }else{
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]];
// }
}else{
// 第二分类存在
if(!array_key_exists($value[3],$temporary_array[$gv][$value[0]][$value[1]]['list'])){
// 如果项目名不存在
// $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2];
$temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [
'unit_data'=>$value[4],
'proportion'=>$value[10],
'value'=>$value[11],
'type'=>$value[12],
'describe'=>$value[13],
'score'=>$value[2],
];
$temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c;
// if($value[6] == null){
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [];
// }else{
// $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]];
// }
}else{
array_push($temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'],[$value[6],$value[7],$value[8]]);
}
}
}
}
}
}
// return $temporary_array;
$temporary_array = json_encode($temporary_array);
$return_result['content'] = $temporary_array;
return $return_result;
}
################################################################其他接口################################################################
################################################################其他接口################################################################
// 查看所有地市卡片项目种类
public function cards_select_all(){
$data = Db::table('admin_estimate')->where(['type'=>1])->field('id,province,city,area,content')->select();
$card_arr = [];
$exception_arr = ['7年级','8年级','9年级','七年级','八年级','九年级','七年级下学期','八年级上学期','八年级下学期','九年级上学期','BMI','肺活量','机考','体质健康达标','体育课','《国家学生体质健康标准》','体育综合知识测试成绩','体育课考评','一小时阳光体育活动',''];
foreach ($data as $key => $value) {
$data[$key]['content'] = json_decode($value['content'],true);
// dump($data[$key]['city']);
if(!array_key_exists($data[$key]['city'], $card_arr)){
$card_arr[$data[$key]['city']] = [];
}
// 开始遍历内容
foreach ($data[$key]['content'] as $k1 => $v1) {
// 遍历男女
foreach ($v1 as $k2 => $v2) {
// 遍历现场还是日常
foreach ($v2 as $k3 => $v3) {
// 遍历大分支(第一类目)
foreach ($v3['list'] as $k4 => $v4) {
// 遍历项目名
// dump($k4);
// dump($v4);
// if($k4 == '轮滑过桩'){
// dump($data[$key]['province']);
// dump($data[$key]['city']);
// }
if(!in_array($k4, $exception_arr)){
if(!in_array($k4.'-----------'.$v4['unit_data'], $card_arr[$data[$key]['city']])){
// if(!in_array($k4, $card_arr[$data[$key]['city']])){
// array_push($card_arr[$data[$key]['city']],$k4.'-------'.($k1 == 1?'男':'女').'-----------'.$v4['unit_data']);
array_push($card_arr[$data[$key]['city']],$k4.'-----------'.$v4['unit_data']);
// array_push($card_arr[$data[$key]['city']],$k4);
}
}
}
}
}
}
}
dump($card_arr);
}
}

View File

@ -365,7 +365,50 @@ class Estimate extends Base{
################################################################其他接口################################################################
// 查看所有地市卡片项目种类
public function cards_select_all(){
$data = Db::table('admin_estimate')->where(['type'=>1])->field('id,province,city,area,content')->select();
$card_arr = [];
$exception_arr = ['7年级','8年级','9年级','七年级','八年级','九年级','七年级下学期','八年级上学期','八年级下学期','九年级上学期','BMI','肺活量','机考','体质健康达标','体育课','《国家学生体质健康标准》','体育综合知识测试成绩','体育课考评','一小时阳光体育活动',''];
foreach ($data as $key => $value) {
$data[$key]['content'] = json_decode($value['content'],true);
// dump($data[$key]['city']);
if(!array_key_exists($data[$key]['city'], $card_arr)){
$card_arr[$data[$key]['city']] = [];
}
// 开始遍历内容
foreach ($data[$key]['content'] as $k1 => $v1) {
// 遍历男女
foreach ($v1 as $k2 => $v2) {
// 遍历现场还是日常
foreach ($v2 as $k3 => $v3) {
// 遍历大分支(第一类目)
foreach ($v3['list'] as $k4 => $v4) {
// 遍历项目名
// dump($k4);
// dump($v4);
// if($k4 == '轮滑过桩'){
// dump($data[$key]['province']);
// dump($data[$key]['city']);
// }
if(!in_array($k4, $exception_arr)){
if(!in_array($k4.'-----------'.$v4['unit_data'], $card_arr[$data[$key]['city']])){
// if(!in_array($k4, $card_arr[$data[$key]['city']])){
// array_push($card_arr[$data[$key]['city']],$k4.'-------'.($k1 == 1?'男':'女').'-----------'.$v4['unit_data']);
array_push($card_arr[$data[$key]['city']],$k4.'-----------'.$v4['unit_data']);
// array_push($card_arr[$data[$key]['city']],$k4);
}
}
}
}
}
}
}
dump($card_arr);
}

View File

@ -10,7 +10,7 @@
<link rel="stylesheet" href="/x_admin/css/font.css">
<link rel="stylesheet" href="/x_admin/css/login.css">
<link rel="stylesheet" href="/x_admin/css/xadmin.css">
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="/x_admin/js/jq.js"></script>
<script src="/x_admin/lib/layui/layui.js" charset="utf-8"></script>
</head>

View File

@ -64,7 +64,7 @@
<body id="box_k">
<div class="big_box">
<div class="title">青测隐私协议</div>
<div class="title">Reedaw隐私协议</div>
<div class="content">
<div class="font_1">一、前言</div>
<div class="font_2">感谢您选择使用我们的中学生身体数据健康评估APP以下简称“本应用”。我们深知您的个人信息安全至关重要在您使用本应用后我们郑重承诺将严格遵守相关法律法规采取合理有效的措施保护您的个人隐私。本隐私协议旨在明确我们在采集、使用、存储、共享及保护您的个人信息的责任、义务。请您在使用本应用前仔细阅读并理解本协议内容一旦您开始使用本应用即视为您同意我们使用您的个人信息接受本协议的全部条款。</div>

View File

@ -210,6 +210,10 @@ class Base extends Controller{
return false;
}
// 判断一个字符串是否为两位以内小数
public function isTwoDecimalOrLess($str) {
return preg_match('/^\d*(\.\d{1,2})?$/', $str) === 1;
}
// 获取用户肺活量的标准值
public function get_vitalcapacity_data($id){
@ -280,7 +284,14 @@ class Base extends Controller{
return $dateTime->format('Y-m-d H:i:s');
}
// 处理分秒变秒
function convertMinutesSecondsToStringSeconds($timeString) {
// 分割字符串获取分钟和秒
list($minutes, $seconds) = explode(':', $timeString);
// 将分钟和秒转换为秒
$totalSeconds = ($minutes * 60) + intval($seconds); // 确保秒是整数
return $totalSeconds;
}
// 时间加一或者减一
public function adjustDateTime($datetimeStr, $type) {
@ -388,6 +399,12 @@ class Base extends Controller{
public function ceshiyong(){
phpinfo();
$token = '2d4ea9b3f44b169ddf64b2f3d2725ceb';
$time = cache($token);
dump($time);
die;
$aa = 15;
$a = 1;
for ($i=0; $i < 100; $i++) {

View File

@ -108,73 +108,157 @@ class Calculatebody extends Base{
// 身体得分修改end
$return_data['脂肪量'][0] = $result['fat_w'];
$return_data['脂肪率'][0] = $result['fat_r'];
if(($data['gender']==1 && $data['age']<30 && $result['fat_r']<10) || ($data['gender']==1 && $data['age']>=30 && $result['fat_r']<11) || ($data['gender']==2 && $data['age']<30 && $result['fat_r']<20) || ($data['gender']==2 && $data['age']>=30 && $result['fat_r']<21)){
if(
($data['gender']==1 && $data['age']<30 && $result['fat_r']<10) ||
($data['gender']==1 && $data['age']>=30 && $result['fat_r']<11) ||
($data['gender']==2 && $data['age']<30 && $result['fat_r']<20) ||
($data['gender']==2 && $data['age']>=30 && $result['fat_r']<21)){
$return_data['脂肪率'][1] = '偏低';
$return_data['脂肪量'][1] = '偏低';
}else if(($data['gender']==1 && $data['age']<30 && $result['fat_r']>=10 && $result['fat_r']<21) || ($data['gender']==1 && $data['age']>=30 && $result['fat_r']>=11 && $result['fat_r']<22) || ($data['gender']==2 && $data['age']<30 && $result['fat_r']>=20 && $result['fat_r']<31) || ($data['gender']==2 && $data['age']>=30 && $result['fat_r']>=21 && $result['fat_r']<32)){
}else if(
($data['gender']==1 && $data['age']<30 && $result['fat_r']>=10 && $result['fat_r']<21) ||
($data['gender']==1 && $data['age']>=30 && $result['fat_r']>=11 && $result['fat_r']<22) ||
($data['gender']==2 && $data['age']<30 && $result['fat_r']>=20 && $result['fat_r']<31) ||
($data['gender']==2 && $data['age']>=30 && $result['fat_r']>=21 && $result['fat_r']<32)){
$return_data['脂肪率'][1] = '标准';
$return_data['脂肪量'][1] = '标准';
}else if(($data['gender']==1 && $data['age']<30 && $result['fat_r']>=21 && $result['fat_r']<26) || ($data['gender']==1 && $data['age']>=30 && $result['fat_r']>=22 && $result['fat_r']<27) || ($data['gender']==2 && $data['age']<30 && $result['fat_r']>=31 && $result['fat_r']<38) || ($data['gender']==2 && $data['age']>=30 && $result['fat_r']>=32 && $result['fat_r']<39)){
}else if(
($data['gender']==1 && $data['age']<30 && $result['fat_r']>=21 && $result['fat_r']<26) ||
($data['gender']==1 && $data['age']>=30 && $result['fat_r']>=22 && $result['fat_r']<27) ||
($data['gender']==2 && $data['age']<30 && $result['fat_r']>=31 && $result['fat_r']<38) ||
($data['gender']==2 && $data['age']>=30 && $result['fat_r']>=32 && $result['fat_r']<39)){
$return_data['脂肪率'][1] = '偏高';
$return_data['脂肪量'][1] = '偏高';
}else if(($data['gender']==1 && $data['age']<30 && $result['fat_r']>=26) || ($data['gender']==1 && $data['age']>=30 && $result['fat_r']>=27) || ($data['gender']==2 && $data['age']<30 && $result['fat_r']<38) || ($data['gender']==2 && $data['age']>=30 && $result['fat_r']<39)){
}else if(
($data['gender']==1 && $data['age']<30 && $result['fat_r']>=26) ||
($data['gender']==1 && $data['age']>=30 && $result['fat_r']>=27) ||
($data['gender']==2 && $data['age']<30 && $result['fat_r']<38) ||
($data['gender']==2 && $data['age']>=30 && $result['fat_r']<39)){
$return_data['脂肪率'][1] = '高';
$return_data['脂肪量'][1] = '高';
}else{
$return_data['脂肪率'][1] = '异常';
$return_data['脂肪量'][1] = '异常';
}
$return_data['肌肉量'][0] = $result['muscleval'];
$return_data['肌肉率'][0] = $result['muscle'];
if(($data['gender']==1 && $result['muscle']<40) || ($data['gender']==2 && $result['muscle']<30)){
if(
($data['gender']==1 && $result['muscle']<40) ||
($data['gender']==2 && $result['muscle']<30)){
$return_data['肌肉量'][1] = '不足';
$return_data['肌肉率'][1] = '不足';
}else if(($data['gender']==1 && $result['muscle']>=40 && $result['muscle']<60) || ($data['gender']==2 && $result['muscle']>=30 && $result['muscle']<50)){
}else if(
($data['gender']==1 && $result['muscle']>=40 && $result['muscle']<60) ||
($data['gender']==2 && $result['muscle']>=30 && $result['muscle']<50)){
$return_data['肌肉量'][1] = '标准';
$return_data['肌肉率'][1] = '标准';
}else if(($data['gender']==1 && $result['muscle']>=60) || ($data['gender']==2 && $result['muscle']>=50)){
}else if(
($data['gender']==1 && $result['muscle']>=60) ||
($data['gender']==2 && $result['muscle']>=50)){
$return_data['肌肉量'][1] = '优';
$return_data['肌肉率'][1] = '优';
}else{
$return_data['肌肉量'][1] = '异常';
$return_data['肌肉率'][1] = '异常';
}
$return_data['水分'][0] = $result['water'];
if(($data['gender']==1 && $result['water']<55) || ($data['gender']==2 && $result['water']<45)){
if(
($data['gender']==1 && $result['water']<55) ||
($data['gender']==2 && $result['water']<45)){
$return_data['水分'][1] = '不足';
}else if(($data['gender']==1 && $result['water']>=55 && $result['water']<65) || ($data['gender']==2 && $result['water']>=45 && $result['water']<60)){
}else if(
($data['gender']==1 && $result['water']>=55 && $result['water']<65) ||
($data['gender']==2 && $result['water']>=45 && $result['water']<60)){
$return_data['水分'][1] = '标准';
}else if(($data['gender']==1 && $result['water']>65) || ($data['gender']==2 && $result['water']>60)){
}else if(
($data['gender']==1 && $result['water']>65) ||
($data['gender']==2 && $result['water']>60)){
$return_data['水分'][1] = '优';
}else{
$return_data['水分'][1] = '异常';
}
$return_data['蛋白量'][0] = $result['proteinval'];
$return_data['蛋白率'][0] = $result['protein'];
if(($data['gender']==1 && $result['protein']<16) || ($data['gender']==2 && $result['protein']<14)){
if(
($data['gender']==1 && $result['protein']<16) ||
($data['gender']==2 && $result['protein']<14)){
$return_data['蛋白量'][1] = '不足';
$return_data['蛋白率'][1] = '不足';
}else if(($data['gender']==1 && $result['protein']>=16 && $result['protein']<18) || ($data['gender']==2 && $result['protein']>=14 && $result['protein']<16)){
}else if(
($data['gender']==1 && $result['protein']>=16 && $result['protein']<18) ||
($data['gender']==2 && $result['protein']>=14 && $result['protein']<16)){
$return_data['蛋白量'][1] = '标准';
$return_data['蛋白率'][1] = '标准';
}else if(($data['gender']==1 && $result['protein']>18) || ($data['gender']==2 && $result['protein']>16)){
}else if(
($data['gender']==1 && $result['protein']>18) ||
($data['gender']==2 && $result['protein']>16)){
$return_data['蛋白量'][1] = '优';
$return_data['蛋白率'][1] = '优';
}else{
$return_data['蛋白量'][1] = '异常';
$return_data['蛋白率'][1] = '异常';
}
$return_data['骨重'][0] = $result['bone'];
if(($data['gender']==1 && $data['weight']<60 && $result['bone']<2.4) || ($data['gender']==1 && $data['weight']>=60 && $data['weight']<75 && $result['bone']<2.8) || ($data['gender']==1 && $data['weight']>=75 && $result['bone']<3.1) || ($data['gender']==2 && $data['weight']<45 && $result['bone']<1.7) || ($data['gender']==2 && $data['weight']>=45 && $data['weight']<60 && $result['bone']<2.1) || ($data['gender']==2 && $data['weight']>=60 && $result['bone']<2.4)){
if(
($data['gender']==1 && $data['weight']<60 && $result['bone']<2.4) ||
($data['gender']==1 && $data['weight']>=60 && $data['weight']<75 && $result['bone']<2.8) ||
($data['gender']==1 && $data['weight']>=75 && $result['bone']<3.1) ||
($data['gender']==2 && $data['weight']<45 && $result['bone']<1.7) ||
($data['gender']==2 && $data['weight']>=45 && $data['weight']<60 && $result['bone']<2.1) ||
($data['gender']==2 && $data['weight']>=60 && $result['bone']<2.4)){
$return_data['骨重'][1] = '不足';
}else if(($data['gender']==1 && $data['weight']<60 && $result['bone']>=2.4 && $result['bone']<=2.6) || ($data['gender']==1 && $data['weight']>=60 && $data['weight']<75 && $result['bone']>=2.8 && $result['bone']<=3) || ($data['gender']==1 && $data['weight']>=75 && $result['bone']>=3.1 && $result['bone']<=3.3) || ($data['gender']==2 && $data['weight']<45 && $result['bone']>=1.7 && $result['bone']<=1.9) || ($data['gender']==2 && $data['weight']>=45 && $data['weight']<60 && $result['bone']>=2.1 && $result['bone']<=2.3) || ($data['gender']==2 && $data['weight']>=60 && $result['bone']>=2.4 && $result['bone']<=2.6)){
}else if(
($data['gender']==1 && $data['weight']<60 && $result['bone']>=2.4 && $result['bone']<=2.6) ||
($data['gender']==1 && $data['weight']>=60 && $data['weight']<75 && $result['bone']>=2.8 && $result['bone']<=3) ||
($data['gender']==1 && $data['weight']>=75 && $result['bone']>=3.1 && $result['bone']<=3.3) ||
($data['gender']==2 && $data['weight']<45 && $result['bone']>=1.7 && $result['bone']<=1.9) ||
($data['gender']==2 && $data['weight']>=45 && $data['weight']<60 && $result['bone']>=2.1 && $result['bone']<=2.3) ||
($data['gender']==2 && $data['weight']>=60 && $result['bone']>=2.4 && $result['bone']<=2.6)){
$return_data['骨重'][1] = '标准';
}else if(($data['gender']==1 && $data['weight']<60 && $result['bone']>2.6) || ($data['gender']==1 && $data['weight']>=60 && $data['weight']<75 && $result['bone']>3) || ($data['gender']==1 && $data['weight']>=75 && $result['bone']<3.3) || ($data['gender']==2 && $data['weight']<45 && $result['bone']>1.9) || ($data['gender']==2 && $data['weight']>=45 && $data['weight']<60 && $result['bone']>2.3) || ($data['gender']==2 && $data['weight']>=60 && $result['bone']>2.6)){
}else if(
($data['gender']==1 && $data['weight']<60 && $result['bone']>2.6) ||
($data['gender']==1 && $data['weight']>=60 && $data['weight']<75 && $result['bone']>3) ||
($data['gender']==1 && $data['weight']>=75 && $result['bone']<3.3) ||
($data['gender']==2 && $data['weight']<45 && $result['bone']>1.9) ||
($data['gender']==2 && $data['weight']>=45 && $data['weight']<60 && $result['bone']>2.3) ||
($data['gender']==2 && $data['weight']>=60 && $result['bone']>2.6)){
$return_data['骨重'][1] = '优';
}else{
$return_data['骨重'][1] = '异常';
}
$return_data['基础代谢'][0] = $result['kcal'];
if(($data['gender']==1 && $data['age']>0 && $data['age']<3 && (60.9*$data['weight']-54)>$result['kcal']) || ($data['gender']==1 && $data['age']>=3 && $data['age']<10 && (22.7*$data['weight']+495)>$result['kcal']) || ($data['gender']==1 && $data['age']>=10 && $data['age']<18 && (17.5*$data['weight']+651)>$result['kcal']) || ($data['gender']==1 && $data['age']>=18 && $data['age']<30 && (15.3*$data['weight']+679)>$result['kcal']) || ($data['gender']==1 && $data['age']>=30 && (11.6*$data['weight']+879)>$result['kcal']) || ($data['gender']==2 && $data['age']>0 && $data['age']<3 && (61*$data['weight']-51)>$result['kcal']) || ($data['gender']==2 && $data['age']>=3 && $data['age']<10 && (22.5*$data['weight']+499)>$result['kcal']) || ($data['gender']==2 && $data['age']>=10 && $data['age']<18 && (12.2*$data['weight']+746)>$result['kcal']) || ($data['gender']==2 && $data['age']>=18 && $data['age']<30 && (14.7*$data['weight']+496)>$result['kcal']) || ($data['gender']==2 && $data['age']>=30 && (8.7*$data['weight']+820)>$result['kcal'])){
if(
($data['gender']==1 && $data['age']>0 && $data['age']<3 && (60.9*$data['weight']-54)>$result['kcal']) ||
($data['gender']==1 && $data['age']>=3 && $data['age']<10 && (22.7*$data['weight']+495)>$result['kcal']) ||
($data['gender']==1 && $data['age']>=10 && $data['age']<18 && (17.5*$data['weight']+651)>$result['kcal']) ||
($data['gender']==1 && $data['age']>=18 && $data['age']<30 && (15.3*$data['weight']+679)>$result['kcal']) ||
($data['gender']==1 && $data['age']>=30 && (11.6*$data['weight']+879)>$result['kcal']) ||
($data['gender']==2 && $data['age']>0 && $data['age']<3 && (61*$data['weight']-51)>$result['kcal']) ||
($data['gender']==2 && $data['age']>=3 && $data['age']<10 && (22.5*$data['weight']+499)>$result['kcal']) ||
($data['gender']==2 && $data['age']>=10 && $data['age']<18 && (12.2*$data['weight']+746)>$result['kcal']) ||
($data['gender']==2 && $data['age']>=18 && $data['age']<30 && (14.7*$data['weight']+496)>$result['kcal']) ||
($data['gender']==2 && $data['age']>=30 && (8.7*$data['weight']+820)>$result['kcal'])){
$return_data['基础代谢'][1] = '偏低';
}else if(($data['gender']==1 && $data['age']>0 && $data['age']<3 && (60.9*$data['weight']-54)<=$result['kcal']) || ($data['gender']==1 && $data['age']>=3 && $data['age']<10 && (22.7*$data['weight']+495)<=$result['kcal']) || ($data['gender']==1 && $data['age']>=10 && $data['age']<18 && (17.5*$data['weight']+651)<=$result['kcal']) || ($data['gender']==1 && $data['age']>=18 && $data['age']<30 && (15.3*$data['weight']+679)<=$result['kcal']) || ($data['gender']==1 && $data['age']>=30 && (11.6*$data['weight']+879)<=$result['kcal']) || ($data['gender']==2 && $data['age']>0 && $data['age']<3 && (61*$data['weight']-51)<=$result['kcal']) || ($data['gender']==2 && $data['age']>=3 && $data['age']<10 && (22.5*$data['weight']+499)<=$result['kcal']) || ($data['gender']==2 && $data['age']>=10 && $data['age']<18 && (12.2*$data['weight']+746)<=$result['kcal']) || ($data['gender']==2 && $data['age']>=18 && $data['age']<30 && (14.7*$data['weight']+496)<=$result['kcal']) || ($data['gender']==2 && $data['age']>=30 && (8.7*$data['weight']+820)<=$result['kcal'])){
}else if(
($data['gender']==1 && $data['age']>0 && $data['age']<3 && (60.9*$data['weight']-54)<=$result['kcal']) ||
($data['gender']==1 && $data['age']>=3 && $data['age']<10 && (22.7*$data['weight']+495)<=$result['kcal']) ||
($data['gender']==1 && $data['age']>=10 && $data['age']<18 && (17.5*$data['weight']+651)<=$result['kcal']) ||
($data['gender']==1 && $data['age']>=18 && $data['age']<30 && (15.3*$data['weight']+679)<=$result['kcal']) ||
($data['gender']==1 && $data['age']>=30 && (11.6*$data['weight']+879)<=$result['kcal']) ||
($data['gender']==2 && $data['age']>0 && $data['age']<3 && (61*$data['weight']-51)<=$result['kcal']) ||
($data['gender']==2 && $data['age']>=3 && $data['age']<10 && (22.5*$data['weight']+499)<=$result['kcal']) ||
($data['gender']==2 && $data['age']>=10 && $data['age']<18 && (12.2*$data['weight']+746)<=$result['kcal']) ||
($data['gender']==2 && $data['age']>=18 && $data['age']<30 && (14.7*$data['weight']+496)<=$result['kcal']) ||
($data['gender']==2 && $data['age']>=30 && (8.7*$data['weight']+820)<=$result['kcal'])){
$return_data['基础代谢'][1] = '优';
}else{
$return_data['基础代谢'][1] = '异常';
}
$return_data['内脏指数'][0] = $result['visceral'];
@ -184,18 +268,26 @@ class Calculatebody extends Base{
$return_data['内脏指数'][1] = '警惕';
}else if($result['visceral']>=14){
$return_data['内脏指数'][1] = '危险';
}else{
$return_data['内脏指数'][1] = '异常';
}
$return_data['皮下脂肪'][0] = $result['sfr'];
if(($data['gender']==1 && $result['sfr']<7) || ($data['gender']==2 && $result['sfr']<11)){
if(
($data['gender']==1 && $result['sfr']<7) ||
($data['gender']==2 && $result['sfr']<11)){
$return_data['皮下脂肪'][1] = '不足';
}else if(($data['gender']==1 && $result['sfr']>=7 && $result['sfr']<15) || ($data['gender']==2 && $result['sfr']>=11 && $result['sfr']<17)){
}else if(
($data['gender']==1 && $result['sfr']>=7 && $result['sfr']<15) ||
($data['gender']==2 && $result['sfr']>=11 && $result['sfr']<17)){
$return_data['皮下脂肪'][1] = '标准';
}else if(($data['gender']==1 && $result['sfr']>=15) || ($data['gender']==2 && $result['sfr']>=17)){
}else if(
($data['gender']==1 && $result['sfr']>=15) ||
($data['gender']==2 && $result['sfr']>=17)){
$return_data['皮下脂肪'][1] = '偏高';
}else{
$return_data['皮下脂肪'][1] = '异常';
}
// 脂肪率:偏低 标准 偏高 高
// 肌肉率:不足 标准 优
@ -286,7 +378,7 @@ class Calculatebody extends Base{
// 除 bcdiv(,,20)
// 计算身体数据BMI、脂肪率、脂肪量、肌肉率、肌肉量....
function calculate_body_data($height,$weight,$age,$gender,$impedance){
public function calculate_body_data($height,$weight,$age,$gender,$impedance){
$result_data = [];
$mheight = bcdiv($height, '100', 20); // 假设我们保留20位小数

View File

@ -81,7 +81,7 @@ class Card extends Base{
// 详细卡片信息
// $data = ['id'=>'2']
public function card_data_detailed($data=['aud_id'=>'83','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){
public function card_data_detailed($data=['aud_id'=>'61','token'=>'caadd1be045a65f30b92aa805f1de54a']){
if(count(input('post.')) > 0){
$data = input('post.');
}
@ -273,12 +273,14 @@ class Card extends Base{
$result_end = $this->processing_return_data_new($result[0]);
$cardparts = new Cardparts;
// dump($result_end);
// die;
$result_end['gender'] = $result[0]['gender'];
$result_end['record_time'] = $result[0]['record_time'];
$result_end['score'] = $result_end['score'];
$result_end['body_type'] = $result_end['body_type'];
$result_end = $cardparts->conversion_interval($result_end);
// dump($result);
// dump($result_end);
// die;
$result_end['cplist'] = $this->grow_up_recommendation([
'birthday'=>$result[0]['birthday'],
'body'=>[
@ -287,12 +289,17 @@ class Card extends Base{
'bmi'=>$result[0]['bmi']
],
]);
if(count($result_end['cplist']['nutritionlist']) <= 0){
// $result_end['cplist'] = [];
$result_end['literature'] = [];
}else{
$result_end['literature'] = [
'《中华人民共和国卫生行业标准WS 423-2013》',
'《中华人民共和国卫生行业标准WS/T 612-2018》',
'《中华人民共和国卫生行业标准WS/T1586-2018》',
'《WHO 5~19岁身高/体重判定标准》',
];
}
return $this->msg($result_end);
}
}
@ -302,9 +309,12 @@ class Card extends Base{
$result_end_data = [];
$month_num = $this->calculateAgeInMonthsWithPrecision($data['birthday']);
$gender_val = $data['gender'];
// dump($data);
// dump($this->result_end_data_mould);
// die;
foreach ($data as $key => $value) {
if($key != 'aud_id' && $key != 'id' && $key != 'create_time' && $key != 'last_update_time' && $key != 'acd_id' && $key != 'ROW_NUMBER' && $key != 'record_time' && $key != 'gender' && $key != 'birthday'){
// dump($key);
// 设置单个数据格式
$result_end_data[$key] = $this->result_end_data_mould;
if(array_key_exists($key, $this->unit_name)){
@ -317,9 +327,15 @@ class Card extends Base{
if(strpos($value, ',')){
$result_end_data[$key]['standard'] = explode(',',$value)[1];
}
// dump($result_end_data[$key]);
if(array_key_exists($key, $this->standard_color)){
// dump($key);
// dump($result_end_data[$key]);
// dump($this->standard_color[$key]);
if($result_end_data[$key]['standard'] != '异常'){
$result_end_data[$key]['color'] = $this->standard_color[$key][$result_end_data[$key]['standard']];
}
}
// 如果小于16岁儿童
if($data['age'] < $this->age_limit){
if(array_key_exists($key, $this->bhw_list)){
@ -391,8 +407,18 @@ class Card extends Base{
'sleeplist'=>[],//睡眠
'moodlist'=>[],//情绪
];
$temporary_arr = [];
foreach ($data['body'] as $key => $value) {
if(explode(',',$value)[1] == '无'){
$result = [
'nutritionlist'=>[],//营养
'sportlist'=>[],//运动
'sleeplist'=>[],//睡眠
'moodlist'=>[],//情绪
];
return $result;
}
$temporary_arr[$key] = $this->card_body_level[$key]['list'][explode(',',$value)[1]];
}
$min_value = min($temporary_arr);

View File

@ -242,6 +242,10 @@ class Cardparts extends Base{
}else{
$temporary_arr['bottom_list'][$key]['list'] = $this->fat_r_w[$gender]['30'];
}
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
}
// 脂肪量
@ -252,12 +256,20 @@ class Cardparts extends Base{
$temporary_arr['bottom_list'][$key]['list'] = $this->fat_r_w[$gender]['30'];
}
$temporary_arr['bottom_list'][$key]['list'] = $this->calculate_new_standard($temporary_arr['bottom_list'][$key]['list'],$weight,$value['key_name']);
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
}
// 肌肉率
else if($value['key_name'] == 'muscle'){
// dump('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
$temporary_arr['bottom_list'][$key]['list'] = $this->muscle_muscleval[$gender];
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
// dump($temporary_arr['bottom_list'][$key]);
}
@ -266,18 +278,30 @@ class Cardparts extends Base{
// dump('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
$temporary_arr['bottom_list'][$key]['list'] = $this->muscle_muscleval[$gender];
$temporary_arr['bottom_list'][$key]['list'] = $this->calculate_new_standard($temporary_arr['bottom_list'][$key]['list'],$weight,$value['key_name']);
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
// dump($temporary_arr['bottom_list'][$key]);
}
// 水分
else if($value['key_name'] == 'water'){
$temporary_arr['bottom_list'][$key]['list'] = $this->water[$gender];
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
}
// 蛋白量
else if($value['key_name'] == 'proteinval'){
$temporary_arr['bottom_list'][$key]['list'] = $this->proteinval_protein[$gender];
$temporary_arr['bottom_list'][$key]['list'] = $this->calculate_new_standard($temporary_arr['bottom_list'][$key]['list'],$weight,$value['key_name']);
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
}
// 骨重
@ -299,26 +323,47 @@ class Cardparts extends Base{
$temporary_arr['bottom_list'][$key]['list'] = $this->bone[$gender]['60'];
}
}
// dump($temporary_arr['bottom_list'][$key]);
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
}
// 蛋白率
else if($value['key_name'] == 'protein'){
$temporary_arr['bottom_list'][$key]['list'] = $this->proteinval_protein[$gender];
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
}
// 基础代谢
else if($value['key_name'] == 'kcal'){
$temporary_arr['bottom_list'][$key]['list'] = $this->calculate_new_standard($this->kcal,$weight,$value['key_name'],$age,$gender);
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
}
// 内脏指数
else if($value['key_name'] == 'visceral'){
$temporary_arr['bottom_list'][$key]['list'] = $this->visceral[$gender];
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
}
// 皮下脂肪
else if($value['key_name'] == 'sfr'){
$temporary_arr['bottom_list'][$key]['list'] = $this->sfr[$gender];
// 处理异常
if($temporary_arr['bottom_list'][$key]['standard'] == '异常'){
$temporary_arr['bottom_list'][$key] = $this->handling_exceptions($temporary_arr['bottom_list'][$key]);
}
$temporary_arr['bottom_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['bottom_list'][$key]['list'],$temporary_arr['bottom_list'][$key]['value'],$temporary_arr['bottom_list'][$key]['standard']);
}
}
@ -420,4 +465,17 @@ class Cardparts extends Base{
// dump($k);
}
// 处理异常
public function handling_exceptions($data){
if($data['value'] <= $data['list'][0]['max_val']){
$data['standard'] = $data['list'][0]['text'];
$data['color'] = $data['list'][0]['color'];
}else if($data['value'] >= $data['list'][count($data['list'])-1]['min_val']){
$data['standard'] = $data['list'][count($data['list'])-1]['text'];
$data['color'] = $data['list'][count($data['list'])-1]['color'];
}
return $data;
}
}

View File

@ -0,0 +1,452 @@
<?php
namespace app\app\controller;
use think\Controller;
use think\Db;
use app\bj\controller\Common;
use think\Log;
use \think\Validate;
use app\app\controller\Calculatebody;
use app\app\controller\Cardparts;
use app\app\controller\Skip;
use Exception;
class Cardpublic extends Base{
protected $level_data = [
['min_val'=>'0','max_val'=>'59','text'=>'不及格','color'=>'#FB5755'],
['min_val'=>'60','max_val'=>'79','text'=>'及格','color'=>'#FCAE00'],
['min_val'=>'80','max_val'=>'89','text'=>'良好','color'=>'#58CF67'],
['min_val'=>'90','max_val'=>'150','text'=>'优秀','color'=>'#6691EF'],
];
// 示意接口
public function card_curve_chart($data = ['aud_id'=>'83','s_time'=>'2024-04-01','e_time'=>'2024-07-25','token'=>'caadd1be045a65f30b92aa805f1de54a']){
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('aud_id', $data) || !array_key_exists('s_time', $data) || !array_key_exists('e_time', $data) || !array_key_exists('token', $data)){
return $this->msg(10001);
}
if($this->token_time_validate($data['token']) === false){
return $this->msg(20001);
}
unset($data['token']);
}
// 获取卡片数据
public function get_card_content($data = ['aud_id'=>'83','acd_id'=>'10','token'=>'caadd1be045a65f30b92aa805f1de54a']){
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('aud_id', $data) || !array_key_exists('acd_id', $data) || !array_key_exists('token', $data)){
return $this->msg(10001);
}
if($this->token_time_validate($data['token']) === false){
return $this->msg(20001);
}
// dump(111);
// die;
return $this->get_card_content_action($data);
}
// 存储信息
public function data_save($data = ['aud_id'=>'83','acd_id'=>'10','name'=>'50米','data'=>'10.3','record_time'=>'2024-09-06','token'=>'caadd1be045a65f30b92aa805f1de54a']){
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('aud_id', $data) || !array_key_exists('acd_id', $data) || !array_key_exists('name', $data) || !array_key_exists('data', $data) || !array_key_exists('record_time', $data) || !array_key_exists('token', $data)){
return $this->msg(10001);
}
if($this->token_time_validate($data['token']) === false){
return $this->msg(20001);
}
return $this->data_save_action($data);
}
// 获取标签项目信息
public function get_label_list($data = ['aud_id'=>'83','acd_id'=>'10','token'=>'caadd1be045a65f30b92aa805f1de54a']){
if(count(input('post.')) > 0){
$data = input('post.');
}
if(!array_key_exists('aud_id', $data) || !array_key_exists('acd_id', $data) || !array_key_exists('token', $data)){
return $this->msg(10001);
}
if($this->token_time_validate($data['token']) === false){
return $this->msg(20001);
}
return $this->get_label_list_action($data);
}
################################################################action################################################################
################################################################action################################################################
##################################################get_card_content##################################################
public function get_card_content_action($data){
// 查找用户是存在
$user_data = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('id,gender')->find();
if(!$user_data){
return $this->msg(10004);
}
// 卡片是否存在,以及是否含有子项
$card_data_sub_item = Db::table('app_card_data_sub_item')->where("acd_id = ".$data['acd_id']." and suit_gender LIKE '%".$user_data['gender']."%'")->field('id,type,name,unit')->select();
if(!$card_data_sub_item){
return $this->msg(10004);
}
$return_data = [
'icon' => '',
'label_list' => [],
'line_list' => [],
'label_data' => [],
];
$data_this_time = [];
$today_time = date('Y-m-d');
foreach ($card_data_sub_item as $key => $value) {
// 设置单项数据模板
$temporary_arr_c = [
'project_name' => $value['name'],
'score' => '',
'max_score' => '',
'standard' => '',
'this_time_title' => '本次成绩',
'this_time_value' => '',
'today_time_title' => '今日总计',
'today_times' => 0,
'today_time_value' => 0,
'all_time_title' => '总计平均',
'all_times' => 0,
'all_time_value' => 0,
'describe' => '',
'color' => '',
'offset' => '',
'unit_data' => '',
];
// 添加标签
array_push($return_data['label_list'],$value['name']);
// 添加线性轴描述
$return_data['line_list'] = $this->level_data;
// 查询最后一次成绩
$data_this_time = Db::table('app_card_data_sub_item_data')->where(['aud_id'=>$data['aud_id'],'acdsi_id'=>$value['id']])->order('id desc')->field('id,detailed_msg,achievement')->find();
// dump($data_this_time);
if($data_this_time){
$data_this_time['detailed_msg'] = json_decode($data_this_time['detailed_msg'],true);
// 设置基础数据
$temporary_arr_c['score'] = $data_this_time['detailed_msg']['score'].'分';
$temporary_arr_c['max_score'] = $data_this_time['detailed_msg']['max_score'];
$temporary_arr_c['standard'] = $data_this_time['detailed_msg']['standard'];
$temporary_arr_c['describe'] = $data_this_time['detailed_msg']['describe'];
$temporary_arr_c['color'] = $data_this_time['detailed_msg']['color'];
$temporary_arr_c['offset'] = $data_this_time['detailed_msg']['offset'];
$temporary_arr_c['unit_data'] = $data_this_time['detailed_msg']['unit_data'];
// 获取到该项所有数据
$all_time_title = Db::table('app_card_data_sub_item_data')->where(['aud_id'=>$data['aud_id'],'acdsi_id'=>$value['id']])->order('id desc')->field('id,achievement,LEFT(record_time,10) AS r_t')->select();
// 处理今日,以及总计数据
if($data_this_time['detailed_msg']['unit_data'] == '分/秒'){
// 如果是分秒形式的数据
// 设置今日数据跟总计数据的格式
$temporary_arr_c['today_time_value'] = "0:00";
$temporary_arr_c['all_time_value'] = "0:00";
// 处理本次数据最终格式
list($minutes, $seconds) = explode(':', $data_this_time['achievement']);
$temporary_arr_c['this_time_value'] = $minutes . '分' . sprintf('%02d', $seconds) . '秒';
// 计算今日总计&所有平均
$temporary_arr_c['all_times'] = count($all_time_title);
foreach ($all_time_title as $k1 => $v1) {
$temporary_arr_c['all_time_value'] = $this->sumTimes($temporary_arr_c['all_time_value'],$v1['achievement']);
if($v1['r_t'] == $today_time){
$temporary_arr_c['today_times'] = $temporary_arr_c['today_times']+1;
$temporary_arr_c['today_time_value'] = $this->sumTimes($temporary_arr_c['today_time_value'],$v1['achievement']);
}
}
$temporary_arr_c['all_time_value'] = $this->averageTime($temporary_arr_c['all_time_value'],$temporary_arr_c['all_times']);
list($minutes, $seconds) = explode(':', $temporary_arr_c['today_time_value']);
$temporary_arr_c['today_time_value'] = $minutes . '分' . sprintf('%02d', $seconds) . '秒';
}else{
$temporary_arr_c['this_time_value'] = $data_this_time['achievement'].$data_this_time['detailed_msg']['unit_data'];
$temporary_arr_c['all_times'] = count($all_time_title);
foreach ($all_time_title as $k1 => $v1) {
$temporary_arr_c['all_time_value'] = $temporary_arr_c['all_time_value']+$v1['achievement'];
if($v1['r_t'] == $today_time){
$temporary_arr_c['today_times'] = $temporary_arr_c['today_times']+1;
$temporary_arr_c['today_time_value'] = $temporary_arr_c['today_time_value']+$v1['achievement'];
}
}
$temporary_arr_c['today_time_value'] = $temporary_arr_c['today_time_value'].$data_this_time['detailed_msg']['unit_data'];
$temporary_arr_c['all_time_value'] = bcdiv($temporary_arr_c['all_time_value'],$temporary_arr_c['all_times'],1).$data_this_time['detailed_msg']['unit_data'];
}
$temporary_arr_c['today_times'] = $temporary_arr_c['today_times'].'次';
$temporary_arr_c['all_times'] = $temporary_arr_c['all_times'].'次';
}
array_push($return_data['label_data'],$temporary_arr_c);
}
return $this->msg($return_data);
}
##################################################data_save##################################################
public function data_save_action($data){
// 查找用户是存在
$user_data = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('id,gender')->find();
if(!$user_data){
return $this->msg(10004);
}
// 查找项目是否存在,以及获取项目信息
$card_data_sub_item_data = Db::table('app_card_data_sub_item')->where("name = '".$data['name']."' and suit_gender LIKE '%".$user_data['gender']."%'")->field('id,type,name,unit,acd_id')->find();
if(!$card_data_sub_item_data){
return $this->msg(10004);
}
// 如果项目数据类型为分秒格式
if($card_data_sub_item_data['type'] == 1){
// 判断是否为整型,或者字符串类型的整型数字
if(!$this->isValidInteger($data['data'])){
return $this->msg(10005);
}
}else if($card_data_sub_item_data['type'] == 4){
// 检查字符串格式是否为“数字”+“:”+“数字”的格式且冒号后的数字小于等于59
if(!$this->isValidFormatWithLimit($data['data'])){
return $this->msg(10005);
}
}else if($card_data_sub_item_data['type'] == 2){
// 判断一个字符串是否为两位以内小数
// dump($this->isTwoDecimalOrLess($data['data']));
if(!$this->isTwoDecimalOrLess($data['data'])){
return $this->msg(10005);
}
}
$score_all_data = $this->calculation_score($user_data['gender'],$data,$card_data_sub_item_data['type']);
$save_data = [
'acd_id' => $card_data_sub_item_data['acd_id'],
'acdsi_id' => $card_data_sub_item_data['id'],
'aud_id' => $data['aud_id'],
'achievement' => $data['data'],
'record_time' => $data['record_time'].date(' H:i:s'),
'create_time' => date('Y-m-d H:i:s'),
'unit' => $card_data_sub_item_data['unit'],
'score' => $score_all_data['score'],
'detailed_msg' => json_encode($score_all_data),
];
$result = Db::table('app_card_data_sub_item_data')->insert($save_data);
// $result = true;
if($result){
if($save_data['unit'] == '分/秒'){
list($minutes, $seconds) = explode(':', $data['data']);
$score_all_data['this_time_value'] = $minutes . '分' . sprintf('%02d', $seconds) . '秒';
}else{
$score_all_data['this_time_value'] = $data['data'].$save_data['unit'];
}
return $this->msg($score_all_data);
}else{
return $this->msg(10002);
}
}
##################################################get_label_list##################################################
public function get_label_list_action($data){
// 查找用户是存在
$user_data = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('id,gender')->find();
if(!$user_data){
return $this->msg(10004);
}
$label_data = Db::table('app_card_data_sub_item')->where("acd_id = ".$data['acd_id']." and suit_gender LIKE '%".$user_data['gender']."%'")->field('name,unit,type')->select();
if(count($label_data)<=0){
return $this->msg(10004);
}
foreach ($label_data as $key => $value) {
if($value['type'] == 1){
$label_data[$key]['default_value'] = '0';
}else if($value['type'] == 2){
$label_data[$key]['default_value'] = '0.0';
}else if($value['type'] == 4){
$label_data[$key]['default_value'] = '0:00';
}
unset($label_data[$key]['ROW_NUMBER']);
}
return $this->msg($label_data);
}
################################################################tool################################################################
################################################################tool################################################################
// 计算得分成绩以及线性进度
public function calculation_score($gender,$data,$type){
// $card_name['card_name'] = ;
$card_name['project_name'] = $data['name'];
$card_name['score'] = 0;
$card_name['offset'] = 0;
$describe_list = $this->level_data;
$card_name['rule'] = [];
// 计算得分
// 获取评分细则
$estimate = Db::table('admin_estimate')->where(['type'=>3])->find();
$estimate = json_decode($estimate['content'],true);
// 根据男女循环出项目细则
foreach ($estimate[$gender]['公共考核标准'] as $key => $value) {
if(count($card_name['rule']) > 0){
break;
}
foreach ($value['list'] as $k => $v) {
if($k == $data['name']){
$card_name['rule'] = $v;
break;
}
}
}
foreach ($card_name['rule']['content'] as $key => $value) {
if($type == '分/秒'){
$rule_result = $this->convertMinutesSecondsToStringSeconds($value[0]);
$data_result = $this->convertMinutesSecondsToStringSeconds($data['data']);
}else{
$rule_result = $value[0];
$data_result = $data['data'];
}
switch ($value[1]) {
case "<=":
$result = $data_result <= $rule_result;
break;
case ">=":
$result = $data_result >= $rule_result;
break;
case "<":
$result = $data_result < $rule_result;
break;
case ">":
$result = $data_result > $rule_result;
break;
case "==":
$result = $data_result == $rule_result;
break;
case "!=":
$result = $data_result != $rule_result;
break;
default:
// 如果比较符号不是上述任何一个,可以抛出一个异常或错误
throw new Exception("Unsupported comparison operator: " . $value[1]);
}
if($result == true){
$card_name['score'] = $value[2];
if($value[2] < 100){
$card_name['offset'] = $value[2];
}else{
$card_name['offset'] = 100;
}
// $card_name['offset'] = bcdiv($value[2],$card_name['diagram'][count($card_name['diagram'])-1]['max_val'],0);
break;
}
}
foreach ($describe_list as $key => $value) {
if($card_name['score'] >= $value['min_val'] && $card_name['score'] <= $value['max_val']){
$card_name['standard'] = $value['text'];
$card_name['color'] = $value['color'];
break;
}
}
$card_name['max_score'] = $card_name['rule']['content'][0][2];
$card_name['describe'] = $card_name['rule']['describe'];
$card_name['unit_data'] = $card_name['rule']['unit_data'];
// $card_name['default_data_format'] = $card_name['rule']['value'];
// $card_name['default_data_type'] = $card_name['rule']['type'];
// $card_name['list'] = $describe_list;
unset($card_name['rule']);
return $card_name;
}
// 获取标签列表,以及标签列表下数据
public function get_other_data(){
}
################################################################其他################################################################
################################################################其他################################################################
// 检查字符串格式是否为“数字”+“:”+“数字”的格式且冒号后的数字小于等于59
public function isValidFormatWithLimit($str){
// 使用正则表达式匹配“数字:数字”的格式
if (preg_match('/^(\d+):(\d+)$/', $str, $matches)) {
// 提取冒号前后的数字
$firstNumber = $matches[1];
$secondNumber = $matches[2];
// 检查冒号后的数字是否小于等于60
if ($secondNumber <= 59) {
return true;
}
}
return false;
}
// 两个时间相加4:20、5:15
function sumTimes($time1, $time2) {
// 将时间字符串拆分为分钟和秒
list($min1, $sec1) = explode(':', $time1);
list($min2, $sec2) = explode(':', $time2);
// 将分钟和秒转换为整数
$totalMin = (int)$min1 + (int)$min2;
$totalSec = (int)$sec1 + (int)$sec2;
// 如果秒数超过或等于60则进位到分钟
if ($totalSec >= 60) {
$totalMin += floor($totalSec / 60);
$totalSec = $totalSec % 60;
}
// 格式化总时间为"分:秒"
// $totalTime = sprintf('%d分%02d秒', $totalMin, $totalSec);
$totalTime = $totalMin.":".$totalSec;
// 返回结果
return $totalTime;
}
// 处理平均时间
function averageTime($timeStr, $divisor) {
// 步骤1: 拆分时间字符串
list($minutes, $seconds) = explode(':', $timeStr);
// 步骤2: 转换为总秒数
$totalSeconds = ($minutes * 60) + $seconds;
// 步骤3: 除以参数
$averageSeconds = $totalSeconds / $divisor;
// 步骤4: 转换回分钟和秒
$averageMinutes = floor($averageSeconds / 60);
$remainingSeconds = round($averageSeconds % 60); // 使用round来处理小数秒如果需要更精确的四舍五入
// 步骤5: 格式化结果为“分:秒”
$formattedTime = sprintf('%d分%02d秒', $averageMinutes, $remainingSeconds);
return $formattedTime;
}
}

View File

@ -8,9 +8,15 @@ use think\Db;
class Download extends Base{
public function demo(){
$num = Db::table('app_version_log')->order('id desc')->find();
echo '你好,这里仅仅是个下载展示页面-1';
echo '<br><a href="'.$num['download_url'].'">点击下载</a>';
// $num = Db::table('app_version_log')->order('id desc')->find();
// echo '你好,这里仅仅是个下载展示页面-1';
// echo '<br><a href="'.$num['download_url'].'">点击下载</a>';
$url = Db::table('app_version_log')->order('id desc')->find();
$this->assign([
'url' => $url['download_url'],
]);
return $this->fetch();
}
public function demo2(){

View File

@ -407,7 +407,7 @@ class Login extends Base{
// 设置POST数据
$postData = array(
'phone' => $tel,
'content' => '【xxxx】您好欢迎使用xxx,,您的手机验证码是:'.$code.',验证码一分钟内有效,若非本人操作,请忽略!'
'content' => '您好欢迎使用Reedaw,您的手机验证码是:'.$code.',验证码三分钟内有效,若非本人操作,请忽略!'
);
$postData = json_encode($postData);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

View File

@ -1058,14 +1058,7 @@ class Sportstesting extends Base{
// 比较两个时间(秒)
// return $totalSecondsB <= $totalSecondsA;
}
// 处理分秒变秒
function convertMinutesSecondsToStringSeconds($timeString) {
// 分割字符串获取分钟和秒
list($minutes, $seconds) = explode(':', $timeString);
// 将分钟和秒转换为秒
$totalSeconds = ($minutes * 60) + intval($seconds); // 确保秒是整数
return $totalSeconds;
}
// 处理默认规则列表
public function handle_default_rule_list($data,$gender){

View File

@ -26,6 +26,13 @@
position: absolute;
top: 0;
left: 0;
}
.content_1{
width: 100vw;
height: 100vh;
position: absolute;
top: 0;
left: 0;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
@ -34,15 +41,131 @@
overflow: auto;
padding: 10vw;
box-sizing: border-box;
font-size: 4vw;
}
.download{
width: 40vw;
height: 10vw;
background-color: darkgray;
border-radius: 5vw;
text-align: center;
line-height: 10vw;
font-weight: bold;
text-decoration: none;
color: white;
margin-top: 10vw;
}
img{
width: 25vw;
margin-bottom: 20vw;
}
.jump{
width: 40vw;
height: 10vw;
color: white;
background-color: darkgray;
border-radius: 5vw;
text-align: center;
line-height: 10vw;
font-weight: bold;
margin-bottom: 10vw;
}
.ts{
width: 100vw;
height: 100vh;
position: absolute;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.8);
}
.ts_box{
width: 85vw;
height: 27vw;
position: absolute;
top: 20%;
left: 12%;
display: flex;
flex-direction: column;
flex-wrap: nowrap;
justify-content: space-evenly;
align-items: flex-start;
font-size: 5vw;
color: white;
font-weight: bold;
}
.ts_pic{
width: 32vw;
height: 40vw;
position: absolute;
top: 0%;
right: 0%;
background: url(/tsf/registered_arrow.png) no-repeat;
background-size: contain;
background-position: center;
}
a{
margin-top: 10vw;
text-decoration: none;
color: blue;
}
</style>
</head>
<body id="box_k">
<div class="big_box">
<div>你好,这里仅仅是个下载展示页面-2</div>
<a href="{$url}">点击下载</a>
<div class="content_1">
<img src="http://tc.pcxbc.com/tsf/logo.png" alt="">
<div class="jump" onclick="jump()">打开微信小程序</div>
<div class="download" onclick="download()">下载</div>
<!-- <a href="javascript:;">已安装? 打开Reedaw&nbsp;></a> -->
</div>
</div>
<div class="ts" style="display: none;">
<div class="ts_box">
<div>1、点击右上角“ ··· ”</div>
<div>2、在菜单中选择“在浏览器中打开”</div>
</div>
<div class="ts_pic"></div>
</div>
</body>
</html>
<script>
var str_url = "{$url}";
function isWeixin() {
var ua = navigator.userAgent.toLowerCase();
return /micromessenger/i.test(ua);
}
function isIOS() {
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
return /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream;
}
function jump(){
window.location.href = 'weixin://dl/business/?appid=wx3e50e84030fe0d1e&path=pages/index/index';
}
$('.ts').on('click',function(){
$(this).hide()
})
function download(){
if (isWeixin()) {
console.log('当前在微信环境中');
$('.ts').show()
} else {
console.log('当前不在微信环境中');
if (isIOS()) {
console.log('当前是iOS设备');
// 在这里执行iOS设备下的特定代码
window.location.href = "https://apps.apple.com/app/reedaw/id6654906497";
} else {
console.log('当前不是iOS设备');
// 在这里执行非iOS设备下的代码
window.location.href = str_url;
}
}
}
</script>

View File

@ -18,6 +18,7 @@ use think\Route;
Route::any('/download', 'app/download/demo');
Route::any('/download2', 'app/download/demo2');
Route::any('/ceshi', 'app/download/ceshi');
Route::any('/get_class', 'admin/demo/get_class_xuesheng');
// Route::any('/CityList.js', 'tsf/CityList.js');
@ -53,6 +54,9 @@ Route::any('/estimate/estimate_add', 'admin/estimate/estimate_add');
Route::any('/estimate/estimate_edit', 'admin/estimate/estimate_edit');
Route::any('/estimate/submit_rule', 'admin/estimate/submit_rule');
Route::any('/estimate/estimate_content_observe', 'admin/estimate/estimate_content_observe');
Route::any('/estimate/cards_select_all', 'admin/estimate/cards_select_all');
// 设备管理
Route::any('/device/index', 'admin/device/index');
Route::any('/device/device_add', 'admin/device/device_add');
@ -208,6 +212,15 @@ Route::any('/update_my_password', 'app/myinformation/update_my_password');
// // 曲线
// Route::any('/vitalcapacity_curve_chart', 'app/sportstesting/vitalcapacity_curve_chart');
// ################################通用卡片接口################################
// 报告页详情
Route::any('/get_card_content', 'app/cardpublic/get_card_content');
// 存储数据
Route::any('/public_data_save', 'app/cardpublic/data_save');
// 获取标签项目信息
Route::any('/get_label_list', 'app/cardpublic/get_label_list');
// // ################################################################其它测试################################################################
// // ################################################################其它测试################################################################
Route::any('/use_test', 'admin/base/use_test');