diff --git a/application/admin/controller/Demo.php b/application/admin/controller/Demo.php new file mode 100644 index 0000000..33e0896 --- /dev/null +++ b/application/admin/controller/Demo.php @@ -0,0 +1,412 @@ +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); + } + + + + + + + + + + +} \ No newline at end of file diff --git a/application/admin/controller/Estimate.php b/application/admin/controller/Estimate.php index b6d2276..6a5fc66 100644 --- a/application/admin/controller/Estimate.php +++ b/application/admin/controller/Estimate.php @@ -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); + } diff --git a/application/admin/view/login/login.html b/application/admin/view/login/login.html index 330faa7..864610d 100644 --- a/application/admin/view/login/login.html +++ b/application/admin/view/login/login.html @@ -10,7 +10,7 @@ - + diff --git a/application/admin/view/technology/privacy_index.html b/application/admin/view/technology/privacy_index.html index 2bcb089..ef419de 100644 --- a/application/admin/view/technology/privacy_index.html +++ b/application/admin/view/technology/privacy_index.html @@ -64,7 +64,7 @@
-
青测隐私协议
+
Reedaw隐私协议
一、前言
感谢您选择使用我们的中学生身体数据健康评估APP(以下简称“本应用”)。我们深知您的个人信息安全至关重要,在您使用本应用后我们郑重承诺,将严格遵守相关法律法规,采取合理有效的措施保护您的个人隐私。本隐私协议旨在明确我们在采集、使用、存储、共享及保护您的个人信息的责任、义务。请您在使用本应用前,仔细阅读并理解本协议内容,一旦您开始使用本应用,即视为您同意我们使用您的个人信息,接受本协议的全部条款。
diff --git a/application/app/controller/Base.php b/application/app/controller/Base.php index f12ff5f..48b47fb 100644 --- a/application/app/controller/Base.php +++ b/application/app/controller/Base.php @@ -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++) { diff --git a/application/app/controller/Calculatebody.php b/application/app/controller/Calculatebody.php index b37b607..14433fb 100644 --- a/application/app/controller/Calculatebody.php +++ b/application/app/controller/Calculatebody.php @@ -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位小数 diff --git a/application/app/controller/Card.php b/application/app/controller/Card.php index 4d1feb9..d94a254 100644 --- a/application/app/controller/Card.php +++ b/application/app/controller/Card.php @@ -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'] ], ]); - $result_end['literature'] = [ - '《中华人民共和国卫生行业标准WS 423-2013》', - '《中华人民共和国卫生行业标准WS/T 612-2018》', - '《中华人民共和国卫生行业标准WS/T1586-2018》', - '《WHO 5~19岁身高/体重判定标准》', - ]; + 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,8 +327,14 @@ 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)){ - $result_end_data[$key]['color'] = $this->standard_color[$key][$result_end_data[$key]['standard']]; + // 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){ @@ -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); diff --git a/application/app/controller/Cardparts.php b/application/app/controller/Cardparts.php index af05864..cc9ec50 100644 --- a/application/app/controller/Cardparts.php +++ b/application/app/controller/Cardparts.php @@ -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']); } } @@ -419,5 +464,18 @@ class Cardparts extends Base{ // dump($w); // 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; + } } \ No newline at end of file diff --git a/application/app/controller/Cardpublic.php b/application/app/controller/Cardpublic.php new file mode 100644 index 0000000..f2b0753 --- /dev/null +++ b/application/app/controller/Cardpublic.php @@ -0,0 +1,452 @@ +'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; + } + + + + + + + + + + + + +} \ No newline at end of file diff --git a/application/app/controller/Download.php b/application/app/controller/Download.php index 8445d9a..ab6723a 100644 --- a/application/app/controller/Download.php +++ b/application/app/controller/Download.php @@ -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 '
点击下载'; + // $num = Db::table('app_version_log')->order('id desc')->find(); + // echo '你好,这里仅仅是个下载展示页面-1'; + // echo '
点击下载'; + $url = Db::table('app_version_log')->order('id desc')->find(); + $this->assign([ + + 'url' => $url['download_url'], + ]); + return $this->fetch(); } public function demo2(){ diff --git a/application/app/controller/Login.php b/application/app/controller/Login.php index 15637f9..04ed89f 100644 --- a/application/app/controller/Login.php +++ b/application/app/controller/Login.php @@ -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); diff --git a/application/app/controller/Sportstesting.php b/application/app/controller/Sportstesting.php index 3d024cc..7c192b8 100644 --- a/application/app/controller/Sportstesting.php +++ b/application/app/controller/Sportstesting.php @@ -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){ diff --git a/application/app/view/download/demo2.html b/application/app/view/download/demo2.html index ffa193d..2d9218f 100644 --- a/application/app/view/download/demo2.html +++ b/application/app/view/download/demo2.html @@ -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; }
-
你好,这里仅仅是个下载展示页面-2
- 点击下载 +
+ +
打开微信小程序
+
下载
+ +
+
+ + + diff --git a/application/route.php b/application/route.php index 593320f..0b6031f 100644 --- a/application/route.php +++ b/application/route.php @@ -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');