diff --git a/application/appbackups/controller/Base.php b/application/appbackups/controller/Base.php new file mode 100644 index 0000000..a4fa4ca --- /dev/null +++ b/application/appbackups/controller/Base.php @@ -0,0 +1,460 @@ + ['success',[]], + '10001'=>'关键参数缺失', + '10002'=>'操作失败', + '10003'=>'信息核实错误', + '10004'=>'未找到有效数据', + '10005'=>'参数格式错误', + '10006'=>'参数不能为空', + '10007'=>'', + '10008'=>'', + '10009'=>'', + '10010'=>'自定义信息', + '20001'=>'登录失效', + ]; + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + ################################################################接口################################################################ + ################################################################接口################################################################ + ################################################################接口################################################################ + + // 操作记录留存 + // $data = ['aud_id'=>'xxxxxxxxxxxxxxx','order_list'=>[1,2,3,4,5]] + public function abnormal_data_log_action($dacall_methoda = 0,$content='未记录的内容',$use_database_name='未记录的数据库名'){ + $result = Db::table('app_data_log')->insert([ + 'create_time'=>date('Y-m-d H:i:s'), + 'call_method'=>$this->base_call_method[$dacall_methoda], + 'content'=>$content, + 'use_database_name'=>$use_database_name, + ]); + } + + // 检查变量是否是一个只有数字的一维数组 + public function is_num_array($array = [1,2,3],$type=1) { + if (!is_array($array)) { + return false; // 变量不是数组 + } + foreach ($array as $value) { + if (!is_numeric($value)) { + return false; // 数组中包含非数字元素 + } + } + if($type!=1){ + return true; + } + $result = Db::table('app_card_data')->where(['is_del'=>0])->cache(true,3600)->select();//查询结果缓存3600秒 + if(empty(array_diff($array, array_column($result, 'id')))){ + return true;// 数组是一维的且只包含数字,且已经跟数据库比对过,每个数值都是有效 + }else{ + return false;//跟数据库比对过,存在无效数值 + } + } + public function validate_user_identity($data) { + $validate_user = Db::table('app_user_data')->where(['id'=>$data])->count(); + if($validate_user<=0){ + return false; + }else{ + return true; + } + } + // 判断字符串是手机还是邮箱 + public function is_tel_email($str) { + // 手机号码的正则表达式(中国大陆格式)(下面正则实际判断的是是否为11位数字) + $mobilePattern = '/^\d{11}$/'; + // 电子邮件地址的正则表达式 + $emailPattern = '/^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/'; + // 判断是否为手机号码 + if (preg_match($mobilePattern, $str)) { + return 'tel'; + } + // 判断是否为电子邮件地址 + if (preg_match($emailPattern, $str)) { + return 'email'; + } + // 如果都不是,返回其他 + return false; + } + + // 计算年龄 + public function calculate_age($data = '1991-04-20'){ + $today = time(); // 获取当前时间的 Unix 时间戳 + $birthDate = strtotime($data); // 将出生日期字符串转换为 Unix 时间戳 + if ($birthDate !== false) { + $age = date('Y', $today) - date('Y', $birthDate); + // 如果当前年份的月份和日期小于出生年份的月份和日期,那么年龄减一 + if (date('m-d', $today) < date('m-d', $birthDate)) { + $age--; + } + return $age; + } else { + return false; + } + } + // 秒转化格式,00:00:00 + public function handle_hour_branch_second($data = '2000'){ + $data = abs($data); + $hours = intval($data / 3600); + $minutes = intval(($data % 3600) / 60); + $remainingSeconds = $data % 60; + return [ + 'h' => str_pad($hours, 2, '0', STR_PAD_LEFT), + 'm' => str_pad($minutes, 2, '0', STR_PAD_LEFT), + 's' => str_pad($remainingSeconds, 2, '0', STR_PAD_LEFT) + ]; + } + + // 判断token是否过期 + public function token_time_validate($token){ + // if(in_array($token,$this->ceshiyong_token)){ + // return true; + // } + // $time = cache($token); + // if($time === false){ + // Log::record('用户尝试更新token时间,token:' . $token.',但是更新token失败,原因没有找到该token', 'log'); + // return false; + // } + // $diff_time = bcsub(time(),$time,0); + // if($diff_time > $this->token_time){ + // Log::record('用户尝试更新token时间,token:' . $token.',但是更新token失败,原因当前时间戳减去记录时间戳后为'.$diff_time.'秒,大于规定秒数'.$this->token_time, 'log'); + // return false; + // } + // cache($token, time()); + // Log::record('用户尝试更新token时间,token:' . $token.',记录成功,最新的秒数为'.time(), 'log'); + // return true; + + + if(cache($token) === false){ + Log::record('用户尝试更新token时间,token:' . $token.',但是更新token失败,原因没有找到该token,或该token已经超过30天', 'log'); + return false; + } + $time_now = date('Y-m-d H:i:s'); + cache($token,$time_now,$this->token_time); + Log::record('用户尝试更新token时间,token:' . $token.',记录成功,最新的时间为'.$time_now, 'log'); + return true; + + } + + // 计算天数 + public function daysSince($pastDate,$now = false) + { + // 创建一个表示过去日期的 DateTime 对象 + $past = new \DateTime($pastDate); + if($now === false){ + // 创建一个表示当前日期的 DateTime 对象 + $now = new \DateTime(); + }else{ + $now = new \DateTime($now); + } + // 使用 DateTime::diff() 方法计算两个日期之间的差值 + $interval = $past->diff($now); + // 返回相差的天数 + return $interval->format('%a'); + } + + // 计算月龄 + public function calculateAgeInMonthsWithPrecision($birthDateStr) { + // 获取当前日期 + $now = new \DateTime(); + // 将出生日期字符串转换为 DateTime 对象 + $birthDate = \DateTime::createFromFormat('Y-m-d', $birthDateStr); + // 计算两者之间的差距(以月为单位,包含部分月份的小数) + $interval = $now->diff($birthDate); + $ageInMonths = $interval->y * 12 + $interval->m; // 年份乘以12加上月份 + $remainingDays = $interval->d; // 当前月内的剩余天数 + // 将剩余天数转换为小数月份(假设一个月为30天,进行近似计算) + $partialMonth = $remainingDays / 30; + // 结果精确到小数点后两位 + // $ageInMonthsPrecise = round($ageInMonths + $partialMonth, 2); + // 整月+剩余月取整 + $ageInMonthsPrecise = intval($ageInMonths + $partialMonth); + return $ageInMonthsPrecise; + } + // 曲线页面-底部统计动作 + public function base_target_initial_cumulative_weight($data = []){ + // 第一种:用户详情(所有数据都有) + // 第二种:手动记录(只有最新体重) + // 第三种:修改原始体重(只有原始体重) + // dump($data); + if(count($data) > 0){ + $result_data['target_weight'] = $data['target_weight']; + $result_data['initial_weight'] = $data['initial_weight']; + $result_data['cumulative_weight'] = bcsub($data['weight'],$data['initial_weight'],2); + $result_data['cumulative_day'] = $data['initial_date'] == 0?0:$this->daysSince($data['initial_date']); + }else{ + $result_data['target_weight'] = 0; + $result_data['initial_weight'] = 0; + $result_data['cumulative_weight'] = 0; + $result_data['cumulative_day'] = 0; + } + // dump($result_data); + return $result_data; + } + + // 判断一个参数是否为数字且大于等于0 + public function isPositiveNumber($value) { + return is_numeric($value) && $value >= 0; + } + // 判断是否为整型,或者字符串类型的整型数字 + public function isValidInteger($var) { + // 直接检查是否为整型 + if (is_int($var)) { + return true; + } + + // 检查是否为字符串且是有效的整数表示 + if (is_string($var) && filter_var($var, FILTER_VALIDATE_INT) !== false) { + return true; + } + + // 其他情况 + return false; + } + + // 判断一个字符串是否为两位以内小数 + public function isTwoDecimalOrLess($str) { + return preg_match('/^\d*(\.\d{1,2})?$/', $str) === 1; + } + + // 获取用户肺活量的标准值 + public function get_vitalcapacity_data($id){ + $standard_data = [ + ['min_val'=>'90','max_val'=>'100','text'=>'优秀','color'=>'#6492F6'], + ['min_val'=>'80','max_val'=>'89','text'=>'良好','color'=>'#5AD06D'], + ['min_val'=>'60','max_val'=>'79','text'=>'及格','color'=>'#FFAB00'], + ['min_val'=>'10','max_val'=>'59','text'=>'不及格','color'=>'#FF5656'], + ['min_val'=>'0','max_val'=>'9','text'=>'无效','color'=>'#FF5656'], + ]; + $grade = Db::table('app_user_data')->where(['id'=>$id])->field('id,grade,gender')->find(); + if(!$grade || $grade['grade'] == 'nothing'){ + return []; + } + $sql_min = "WITH RankedGrades AS ( + SELECT + id, + level, + ".$grade['grade'].", + ROW_NUMBER() OVER(PARTITION BY level ORDER BY ".$grade['grade']." ASC, id ASC) AS rn + FROM + pc_vitalcapacity_standard + WHERE + sex = ".$grade['gender']." + ) + SELECT + id, + level, + ".$grade['grade']." + FROM + RankedGrades + WHERE + rn = 1"; + // dump($sql_min); + $result_min = Db::query($sql_min); + // dump($result_min); + // die; + foreach ($result_min as $key => $value) { + foreach ($standard_data as $sdk => $sdv) { + if($value['level'] == $sdv['text']){ + $standard_data[$sdk]['min_val'] = $value[$grade['grade']]; + } + } + } + for ($i=count($standard_data)-1; $i >= 1; $i--) { + $standard_data[$i]['max_val'] = $standard_data[$i-1]['min_val']; + } + $standard_data[0]['max_val'] = '5140'; + return $standard_data; + } + + + // 时间日期转换 + public function addCurrentTimeToDateString($dateStr) { + // 将日期字符串转换为DateTime对象 + $dateTime = new \DateTime($dateStr); + + // 获取当前的时分秒 + $currentTime = new \DateTime('now'); + $hours = $currentTime->format('H'); + $minutes = $currentTime->format('i'); + $seconds = $currentTime->format('s'); + + // 设置DateTime对象的时间部分为当前时间 + $dateTime->setTime($hours, $minutes, $seconds); + + // 返回格式化为"Y-m-d H:i:s"的字符串 + 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) { + // 将时间字符串转换为时间戳 + $timestamp = strtotime($datetimeStr); + + // 检查时间戳是否有效 + if ($timestamp === false) { + return "无效的日期时间格式"; + } + + // 根据$type参数调整时间戳 + switch ($type) { + case 'add': + $newTimestamp = strtotime('+1 day', $timestamp); + break; + case 'subtract': + $newTimestamp = strtotime('-1 day', $timestamp); + break; + default: + return false; + } + + // 将新的时间戳转换回日期时间字符串 + $newDateTimeStr = date('Y-m-d', $newTimestamp); + + return $newDateTimeStr; + } + + // 对于任意浮点字符串的指定位四舍五入 + public function roundToString($numberStr, $numDecimals) { + // 将字符串转换为浮点数 + $number = floatval($numberStr); + + // 四舍五入到指定的小数位数 + $roundedNumber = round($number, $numDecimals); + + // 将结果转换回字符串 + return strval($roundedNumber); + } + + + public function postRequest($url, $data = [], $headers = []) { + $ch = curl_init(); // 初始化cURL会话 + + if (!$ch) { + return [ + 'error' => true, + 'message' => 'cURL init failed' + ]; + } + // 设置cURL选项 + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用证书验证 + curl_setopt($ch, CURLOPT_URL, $url); // 要请求的URL + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出 + curl_setopt($ch, CURLOPT_POST, true); // 发送一个常规的POST请求 + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); // POST数据 + // 设置请求头 + if (!empty($headers)) { + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + }else{ + // 如果需要发送JSON数据,可以使用以下设置: + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); + } + // 执行cURL会话 + $response = curl_exec($ch); + + if ($response === false) { + $error = curl_error($ch); + curl_close($ch); + return [ + 'error' => true, + 'message' => "cURL Error: $error" + ]; + } + $decodedResponse = json_decode($response, true); + $jsonError = json_last_error(); + curl_close($ch); + + if ($jsonError !== JSON_ERROR_NONE) { + return [ + 'error' => true, + 'message' => 'Invalid JSON Response', + 'raw_response' => $response + ]; + } + return $decodedResponse; + } + + + + public function msg($data,$str='',$result = []){ + if(is_array($data)){ + if($str != ''){ + return json(['code'=>0,'msg'=>$str,'data'=>$data]); + }else{ + return json(['code'=>0,'msg'=>'操作成功','data'=>$data]); + } + }else{ + if($str != ''){ + return json(['code'=>$data,'msg'=>$str,'data'=>$result]); + } + return json(['code'=>$data,'msg'=>$this->return_data_all[$data],'data'=>$result]); + } + } + + + + + public function ceshiyong($aa = 4,$gd = 0.2){ + $token = 'caadd1be045a65f30b92aa805f1de54a'; + $jieguo = $this->token_time_validate($token); + // // // Log::record('用户尝试更新token时间,token:' . $token, 'log'); + // // // phpinfo(); + // // dump($jieguo); + // // // return $jieguo; + // // die; + // // cache($token, time()); + $time = cache($token); + dump($jieguo); + dump($time); + // // die; + + + + + // $aa = 3; + // dump($aa/20); + $a = $aa; + for ($i=0; $i < 100; $i++) { + dump($a.'======='.$a/$aa*100); + $a = $a - $gd; + if($a < 0){ + break; + } + } + // $aa = 15; + // $a = 1; + // for ($i=0; $i < 100; $i++) { + // dump($aa.'======='.$aa/17.5*100); + // $aa = $aa - $a; + // if($aa < 1){ + // break; + // } + // } + } + + +} \ No newline at end of file diff --git a/application/appbackups/controller/Calculatebody.php b/application/appbackups/controller/Calculatebody.php new file mode 100644 index 0000000..14433fb --- /dev/null +++ b/application/appbackups/controller/Calculatebody.php @@ -0,0 +1,657 @@ +52.5,'height'=>165,'age'=>30,'gender'=>1]){ + $data['gender'] = $data['gender'] == 0 ? 1 : $data['gender']; + + $data['adc'] = array_key_exists('adc', $data)?$data['adc']:$this->default_adc; + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + + // 青测自己写的计算start + // $result = $this->calculate_body_data($data['height'],$data['weight'],$data['age'],$data['gender'],$data['adc']); + // // $result['fat_w'] = $result['fat_r'] / 100 * $data['weight']; + // $result['fat_w'] = bcmul(bcdiv($result['fat_r'],'100',20),$data['weight'],2); + // // $result['proteinval'] = $result['protein'] / 100 * $data['weight']; + // $result['proteinval'] = bcmul(bcdiv($result['protein'],'100',20),$data['weight'],2); + // //肌肉量=体重-脂肪量-骨量 + // // $result['muscleval'] = $result['weight'] - $result['fat_w'] - $result['bone']; + // $result['muscleval'] = bcsub(bcsub($result['weight'],$result['fat_w'],20),$result['bone'],2); + // // $result['muscle'] = $result['muscleval'] / $data['weight'] * 100.0; + // $result['muscle'] = bcmul(bcdiv($result['muscleval'],$data['weight'],20),'100.0',2); + // // 水份=肌肉量-蛋白量 + // // $result['water'] = $result['muscleval'] - $result['proteinval']; + // $result['water'] = bcsub($result['muscleval'],$result['proteinval'],2); + // // $result['lbm'] = (1 - $result['fat_r'] / 100) * $data['weight']; + // $result['lbm'] = bcmul(bcsub('1',bcdiv($result['fat_r'],'100',20),20),$data['weight'],2); + // 青测自己写的计算end + + // 使用接口调用之前的进行计算start + $url = 'https://klcz.pcxbc.com/open-api/calc/healthcalc/bodyfat3'; + $temporary_parameter = [ + 'weight'=>$data['weight'], + 'height'=>$data['height'], + 'age'=>$data['age'], + 'adc'=>$data['adc'], + 'gender'=>$data['gender'], + ]; + // dump($temporary_parameter); + + $request_result = $this->postRequest($url,$temporary_parameter); + // dump($request_result); + $result['weight'] = $request_result['data']['weight']; + $result['height'] = $request_result['data']['height']; + $result['bmi'] = $request_result['data']['bmi']; + $result['age'] = $request_result['data']['age']; + $result['cmi'] = $request_result['data']['cmi']; + $result['fat_w'] = $request_result['data']['bfrval']; + $result['fat_r'] = $request_result['data']['bfr']; + $result['muscleval'] = $request_result['data']['romval']; + $result['muscle'] = $request_result['data']['rom']; + $result['water'] = $request_result['data']['vwc']; + $result['proteinval'] = $request_result['data']['ppval']; + $result['protein'] = $request_result['data']['pp']; + $result['bone'] = $request_result['data']['bm']; + $result['kcal'] = $request_result['data']['bmr']; + $result['visceral'] = $request_result['data']['uvi']; + $result['sfr'] = $request_result['data']['sfr']; + $result['standard_level'] = $request_result['data']['fatlevelname']; + $result['bodyage'] = $request_result['data']['bodyage']; + $result['lbm'] = $request_result['data']['lbm']; + $result['body'] = $request_result['data']['body']; + // dump($result); + // die; + // 使用接口调用之前的进行计算end + + $return_data['体重'] = $data['weight']; + $return_data['身高'] = $data['height']; + $return_data['BMI'] = $result['bmi']; + $return_data['age'] = $result['age']; + + // 身体得分修改start + // if($result['bmi']<21.6){ + // $return_data['身体得分'] = bcmul(bcdiv($result['bmi'],'21.6',20),'100',0); + // }else{ + // $return_data['身体得分'] = bcmul(bcdiv('21.6',$result['bmi'],20),'100',0); + // } + $return_data['身体得分'] = $result['cmi']; + // 身体得分修改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)){ + $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)){ + $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)){ + $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)){ + $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)){ + $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)){ + $return_data['肌肉量'][1] = '标准'; + $return_data['肌肉率'][1] = '标准'; + }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)){ + $return_data['水分'][1] = '不足'; + }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)){ + $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)){ + $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)){ + $return_data['蛋白量'][1] = '标准'; + $return_data['蛋白率'][1] = '标准'; + }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)){ + $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)){ + $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)){ + $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'])){ + $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'])){ + $return_data['基础代谢'][1] = '优'; + }else{ + $return_data['基础代谢'][1] = '异常'; + } + + $return_data['内脏指数'][0] = $result['visceral']; + if($result['visceral']<9){ + $return_data['内脏指数'][1] = '标准'; + }else if($result['visceral']>=9 && $result['visceral']<14){ + $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)){ + $return_data['皮下脂肪'][1] = '不足'; + }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)){ + $return_data['皮下脂肪'][1] = '偏高'; + }else{ + $return_data['皮下脂肪'][1] = '异常'; + } + // 脂肪率:偏低 标准 偏高 高 + // 肌肉率:不足 标准 优 + + // 肥胖等级修改start + // // if($data['age']>=16){ + // if($result['standard_level']<-0.2){ + // $return_data['肥胖等级'] = '体重不足'; + // }else if($result['standard_level']>=-0.2 && $result['standard_level']<-0.1){ + // $return_data['肥胖等级'] = '偏瘦'; + // }else if($result['standard_level']>=-0.1 && $result['standard_level']<=0.1){ + // $return_data['肥胖等级'] = '标准'; + // }else if($result['standard_level']>0.1 && $result['standard_level']<=0.2){ + // $return_data['肥胖等级'] = '偏重'; + // }else if($result['standard_level']>0.2){ + // $return_data['肥胖等级'] = '超重'; + // }else{ + // $return_data['肥胖等级'] = '暂无数据'; + // } + // // }else{ + // // $return_data['肥胖等级'] = '儿童'; + // // } + $return_data['肥胖等级'] = $result['standard_level']; + // 肥胖等级修改end + + + // 身体类型修改start + // // if($data['age']>=16){ + // if(($return_data['脂肪率'][1] == '高' || $return_data['脂肪率'][1] == '偏高') && $return_data['肌肉率'][1] == '不足'){ + // $return_data['身体类型'] = '隐形肥胖'; + // }else if(($return_data['脂肪率'][1] == '高' || $return_data['脂肪率'][1] == '偏高') && $return_data['肌肉率'][1] == '标准'){ + // $return_data['身体类型'] = '偏胖'; + // }else if(($return_data['脂肪率'][1] == '高' || $return_data['脂肪率'][1] == '偏高') && $return_data['肌肉率'][1] == '优'){ + // $return_data['身体类型'] = '结实型偏胖'; + // }else if($return_data['脂肪率'][1] == '标准' && $return_data['肌肉率'][1] == '不足'){ + // $return_data['身体类型'] = '缺乏肌肉型'; + // }else if($return_data['脂肪率'][1] == '标准' && $return_data['肌肉率'][1] == '标准'){ + // $return_data['身体类型'] = '标准型'; + // }else if($return_data['脂肪率'][1] == '标准' && $return_data['肌肉率'][1] == '优'){ + // $return_data['身体类型'] = '标准肌肉型'; + // }else if($return_data['脂肪率'][1] == '偏低' && $return_data['肌肉率'][1] == '不足'){ + // $return_data['身体类型'] = '偏瘦'; + // }else if($return_data['脂肪率'][1] == '偏低' && $return_data['肌肉率'][1] == '标准'){ + // $return_data['身体类型'] = '偏瘦肌肉型'; + // }else if($return_data['脂肪率'][1] == '偏低' && $return_data['肌肉率'][1] == '优'){ + // $return_data['身体类型'] = '健美肌肉型'; + // }else{ + // $return_data['身体类型'] = '暂无数据'; + // } + // // }else{ + // // $return_data['身体类型'] = '儿童'; + // // } + $return_data['身体类型'] = $result['body']; + // 身体类型修改end + + $return_data['身体年龄'] = $result['bodyage']; + + // dump($return_data); + // die; + // $result_end['fat_r'] = $result['fat_r']; + // $result_end['muscle'] = $result['muscle']; + // $result_end['water'] = $result['water']; + // $result_end['bone'] = $result['bone']; + // $result_end['kcal'] = $result['kcal']; + // $result_end['fat_w'] = $result['fat_w']; + // $result_end['visceral'] = $result['visceral']; + // $result_end['protein'] = $result['protein']; + // $result_end['bodyage'] = $result['bodyage']; + // $result_end['bmi'] = $result['bmi']; + // // $result_end['cmi'] = $result['cmi']; + // $result_end['sfr'] = $result['sfr']; + // // $result_end['sfrval'] = $result['sfrval']; + // $result_end['skeletalmuscle'] = $result['skeletalmuscle']; + // $result_end['muscleval'] = $result['muscleval']; + // $result_end['proteinval'] = $result['proteinval']; + // $result_end['lbm'] = $result['lbm']; + // $result_end['weight'] = $result['weight']; + // $result_end['height'] = $result['height']; + // dump($return_data); + // dump('========================================='); + return $return_data; + // dump($result_end); + // die; + } + + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + + // 计算身体数据,BMI、脂肪率、脂肪量、肌肉率、肌肉量.... + public function calculate_body_data($height,$weight,$age,$gender,$impedance){ + + $result_data = []; + $mheight = bcdiv($height, '100', 20); // 假设我们保留20位小数 + $gender = $gender == 0 ? 1 : $gender; + + if (($weight <= 0) || ($weight > 220) || ($height <= 0) || ($height > 270) || ($age <= 0) || ($age > 120) || ($impedance <= 0) || ($impedance > 1000) || !in_array($gender, [1, 2])) { + if ($weight != 0 && $height != 0) { + // 计算BMI + // dump(bcmul($mheight, $mheight,20)); + // $bmi = bcmul(bcdiv($weight, bcmul($mheight, $mheight,20), 20), '10.0', 20); // 先算除法再算乘法 + $bmi = bcdiv($weight, bcmul($mheight, $mheight,20), 2); + // $bmi = bcdiv($bmi, '10.0', 2); // 最后除以10,保留2位小数 + $result_data['bmi'] = $bmi; + $result_data['bone'] = 0; + $result_data['muscle'] = 0; + $result_data['water'] = 0; + $result_data['fat_r'] = 0; + $result_data['sfr'] = 0; + $result_data['skeletalmuscle'] = 0; + $result_data['protein'] = 0; + $result_data['visceral'] = 0; + $result_data['kcal'] = 0; + $result_data['bodyage'] = 0; + $result_data['weight'] = $weight; + $result_data['height'] = $height; + $result_data['age'] = $age; + $result_data['adc'] = $impedance; + $result_data['gender'] = $gender; + $result_data['standard_level'] = 0.0; + return $result_data; + } + } + + // $num = bcmul(bcdiv($weight, bcmul($mheight, $mheight,20), 20), '10.0', 20); + // $num = bcdiv($num, '10.0', 2); // 确保最后结果也保留20位小数 + + $num = intval(bcmul(bcdiv($weight,bcmul($mheight,$mheight,20),20),'10',20))/10; + $num2 = 0.0; + $num3 = 0.0; + $num4 = 0.0; + $num5 = 0.0; + $num6 = 0.0; + $num7 = 0.0; + $num8 = 0.0; + $num9 = 0.0; + $num10 = 0.0; + $num11 = 0.0; + + $standard_weight = 0.0; + $standard_level = 0.0; + + + // dump($gender); + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + if ($gender == 1){ + // $num2 = 0.015 * $weight + (2.0 - 0.00055 * $impedance) * $height / 100 - 1.15; + $num2 = bcsub(bcadd(bcmul('0.015',$weight,20),bcdiv(bcmul(bcsub('2.0',bcmul('0.00055',$impedance,20),20),$height,20),'100.0',20),20),'1.15',2); + // $num3 = (0.0 - (0.00115 * $impedance + 0.01)) * $weight + (49.64 - 0.031 * $impedance) * $height / 100.0 + $impedance * 0.08 + $age * 0.04 + 15.4; + $num3 = bcsub(bcsub(bcsub(bcsub(bcmul(bcsub('0.0',bcadd(bcmul('0.00115',$impedance,20),'0.01',20),20),$weight,20),bcdiv(bcmul(bcsub('49.64',bcmul('0.031',$impedance,20)),$height,20),'100.0',20),20),bcmul($impedance,'0.08'),20),bcmul($age,'0.04'),20),'15.4',2); + // $num4 = 1000000.0/($num*(2.688*$impedance-78.28))-(10058/$impedance)-0.22*$age+52.6; + $num4 = bcadd(bcsub(bcsub(bcdiv('1000000.0',bcmul($num,bcsub(bcmul('2.688',$impedance,20),'78.28',20),20),20),bcdiv('10058',$impedance,20),20),bcmul('0.22',$age,20),20),'52.6',20); + // $num5 = -930000.0 / $num / (1.966 * $impedance - 58.46) + (13176 / $impedance) - 0.06 * $age + 40.0; + $num5 = bcadd(bcsub(bcadd(bcdiv(bcdiv('-930000.0',$num,20),bcsub(bcmul('1.966',$impedance,20),'58.46',20),20),bcdiv('13176',$impedance,0),20),bcmul('0.06',$age,20),20),'40.0',20); + // $num6 = 0.898 * $num5; + $num6 = bcmul('0.898',$num5,1); + // $num7 = 0.895 * $num4; + $num7 = bcmul('0.895',$num4,20); + // $num8 = 0.8 * (100.0 - $num5 - $num4 - $num2 / $weight); + $num8 = bcmul('0.8',bcsub(bcsub(bcsub('100.0',$num5,20),$num4,20),bcdiv($num2,$weight,20),20),2); + // $num9 = 0.304 * $weight - 25.58 * $height / 100.0 + 0.131 * $age + 0.005 * $impedance + 22.0; + $num9 = bcadd(bcadd(bcadd(bcsub(bcmul('0.304',$weight,20),bcdiv(bcmul('25.58',$height,20),'100.0',20),20),bcmul('0.131',$age,20),20),bcmul('0.005',$impedance,20),20),'22.0',0); + // $num10 = (9.0 + 0.0015 * $impedance) * $weight + (1350.0 - 0.88 * $impedance) * $height / 100.0 + (188 / $age) + 0.748 * $impedance - 1053.0; + $num10 = bcsub(bcadd(bcadd(bcadd(bcmul(bcadd('9.0',bcmul('0.0015',$impedance,20),20),$weight,20),bcdiv(bcmul(bcsub('1350.0',bcmul('0.88',$impedance,20),20),$height,20),'100.0',20),20),bcdiv('188',$age,20),20),bcmul('0.748',$impedance,20),20),'1053.0',0); + // $num11 = $age * (1.0 + 0.012 * ($num - 1.0)) - 21.0 + (30 - $age) * 0.35 + ($impedance - 450) * 0.02 + 11.0; + $num11 = bcadd(bcadd(bcadd(bcsub(bcmul($age,bcadd('1.0',bcmul('0.012',bcsub($num,'1.0',20),20),20),20),'21.0',20),bcmul(bcsub('30',$age,20),'0.35',20),20),bcmul(bcsub($impedance,'450',20),'0.02',20),20),'11.0',0); + + // $standard_weight = ($height-80)*0.7; + $standard_weight = bcmul(bcsub($height,'80',20),'0.7',20); + + }else{ + // $num2 = 2.2E-05 * $impedance * $weight + (4.99 - 0.00284 * $impedance) * $height / 100.0 + 0.0012 * $impedance - 4.45; + $num2 = bcsub(bcadd(bcadd(bcmul(bcmul('0.000022',$impedance,20),$weight,20),bcdiv(bcmul(bcsub('4.99',bcmul('0.00284',$impedance,20),20),$height,20),'100.0',20),20),bcmul('0.0012',$impedance,20),20),'4.45',2); + // $num3 = (0.0 - (0.00115 * $impedance + 0.01)) * $weight + (49.64 - 0.031 * $impedance) * $height / 100.0 + $impedance * 0.08 + $age * 0.04 + 6.0; + $num3 = bcadd(bcadd(bcadd(bcadd(bcmul(bcsub('0.0',bcadd(bcmul('0.00115',$impedance,20),'0.01',20),20),$weight,20),bcdiv(bcmul(bcsub('49.64',bcmul('0.031',$impedance,20),20),$height,20),'100.0',20),20),bcmul($impedance,'0.08',20),20),bcmul($age,'0.04',20),20),'6.0',2); + // $num4 = 1000000.0 / ($num * (2.467 * $impedance - 75.37)) - (14215 / $impedance) - 0.034 * $age + 43.2; + $num4 = bcadd(bcsub(bcsub(bcdiv('1000000.0',bcmul($num,bcsub(bcmul('2.467',$impedance,20),'75.37',20),20),20),bcdiv('14215',$impedance,20),20),bcmul('0.034',$age,20),20),'43.2',20); + // $num5 = -3030000.0 / ($num + 20.0) / (1.966 * $impedance - 58.46) + (28176 / $impedance) - 0.06 * $age + 51.0; + $num5 = bcadd(bcsub(bcadd(bcdiv(bcdiv('-3030000.0',bcadd($num,'20.0',20),20),bcsub(bcmul('1.966',$impedance,20),'58.46',20),20),bcdiv('28176',$impedance,20),20),bcmul('0.06',$age,20),20),'51.0',20); + // $num6 = 0.876 * $num5 + 1.66; + $num6 = bcadd(bcmul('0.876',$num5,20),'1.66',1); + // $num7 = 0.857 * $num4 - 0.36; + $num7 = bcsub(bcmul('0.857',$num4,20),'0.36',20); + // $num8 = 0.75 * (100.0 - $num5 - $num4 - $num2 / $weight); + $num8 = bcmul('0.75',bcsub('100.0',bcsub($num5,bcsub($num4,bcdiv($num2,$weight,20),20),20),20),2); + // $num9 = 0.304 * $weight - 25.58 * $height / 100.0 + 0.131 * $age + 0.005 * $impedance + 22.0; + $num9 = bcadd(bcadd(bcadd(bcsub(bcmul(0.304,$weight,20),bcdiv(bcmul(25.58,$height,20),'100.0',20),20),bcmul('0.131',$age,20),20),bcmul('0.005',$impedance,20),20),'22.0',0); + // $num10 = (0.00307 * $impedance + 1.5) * $weight + (1459.0 - 0.989 * $impedance) * $height / 100.0 + $age * 0.9 + 0.923 * $impedance - 950.0; + $num10 = bcsub(bcadd(bcadd(bcadd(bcmul(bcadd(bcmul('0.00307',$impedance,20),'1.5',20),$weight,20),bcdiv(bcmul(bcsub('1459.0',bcmul('0.989',$impedance,20),20),$height,20),'100.0',20),20),bcmul($age,'0.9',20),20),bcmul('0.923',$impedance,20),20),'950.0',0); + // $num11 = $age * (0.95 + 0.02 * ($num - 21.2)) + ($impedance - 500) * 0.02; + $num11 = bcadd(bcmul($age,bcadd(0.95,bcmul('0.02',bcsub($num,'21.2',20),20),20),20),bcmul(bcsub($impedance,'500',20),'0.02',20),0); + + // $standard_weight = ($height-80)*0.7; + $standard_weight = bcmul(bcsub($height,'80',20),'0.6',20); + } + + $result_data['bmi'] = $num; + // $num2 = (($num2 > $weight * 0.15) ? ($weight * 0.15) : $num2); + if(bccomp($num2, bcmul($weight,'0.15',20), 20) === 1){ + $num2 = bcmul($weight,'0.15',2); + } + // $result_data['bone'] = ($num2 < $weight * 0.02) ? ($weight * 0.02) : $num2; + if(bccomp($num2, bcmul($weight,'0.02',20), 20) === -1){ + $result_data['bone'] = bcmul($weight,'0.02',2); + }else{ + $result_data['bone'] = $num2; + } + // $num3 = (($num3 > 75.0) ? 75.0 : $num3); + if(bccomp($num3, '75.0', 20) === 1){ + $num3 = '75.0'; + } + // $result_data['muscle'] = ($num3 < 15.0) ? 15.0 : $num3; + // dump($num3); + if(bccomp($num3, '15.0', 20) === -1){ + $result_data['muscle'] = '15.00'; + }else{ + $result_data['muscle'] = $num3; + } + // dump($num4); + // $num4 = (($num4 > 70.0) ? 70.0 : $num4); + if(bccomp($num4, '70.0', 20) === 1){ + $num4 = '70.0'; + } + // $result_data['water'] = ($num4 < 20.0) ? 20.0 : $num4; + if(bccomp($num4, '20.0', 20) === -1){ + $result_data['water'] = '20.00'; + }else{ + $result_data['water'] = $num4; + } + // $num5 = (($num5 > 50.0) ? 50.0 : $num5); + if(bccomp($num5, '50.0', 20) === 1){ + $num5 = '50.0'; + } + // $result_data['fat_r'] = ($num5 < 5.0) ? 5.0 : $num5; + + if(bccomp($num5, '5.0', 20) === -1){ + $result_data['fat_r'] = '5.00'; + }else{ + // $result_data['fat_r'] = $num5; + // dump($num5); + $result_data['fat_r'] = substr($num5, 0, strpos($num5, ".") + 3); + } + // $result_data['sfr'] = $num6 <= 0 ? "0" : $num6; + if(bccomp($num6, '0.0', 20) === -1){ + $result_data['sfr'] = '0.00'; + }else{ + $result_data['sfr'] = $num6; + } + // $result_data['skeletalmuscle'] = $num7; + $result_data['skeletalmuscle'] = substr($num7, 0, strpos($num7, ".") + 3); + // $num8 = (($num8 > 50.0) ? 50.0 : $num8); + if(bccomp($num8, '50.0', 20) === 1){ + $num8 = '50.00'; + } + // $result_data['protein'] = ($num8 < 10.0) ? 10.0 : $num8; + if(bccomp($num8, '10.0', 20) === -1){ + $result_data['protein'] = '10.00'; + }else{ + $result_data['protein'] = $num8; + } + // $num9 = (($num9 > 20.0) ? 20.0 : $num9); + if(bccomp($num9, '20.0', 20) === 1){ + $num9 = '20.0'; + } + // $result_data['visceral'] = ($num9 < 1.0) ? 1.0 : $num9; + if(bccomp($num9, '1.0', 20) === -1){ + $result_data['visceral'] = '1.0'; + }else{ + $result_data['visceral'] = $num9; + } + // $result_data['kcal'] = $num10 <= 0 ? "0" : $num10; + if(bccomp($num10, '0', 20) !== 1){ + $result_data['kcal'] = '0'; + }else{ + $result_data['kcal'] = $num10; + } + + // $standard_level = ($weight-$standard_weight)/$standard_weight; + $standard_level = bcdiv(bcsub($weight,$standard_weight,20),$standard_weight,2); + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // dump($num11); + if ($age < 18){ + $num11 = $age; + }else{ + // dump($num11); + // $num11 = (($num11 > ($age + 10)) ? (($age + 10)) : $num11); + if(bccomp($num11, $age + 10, 20) === 1){ + $num11 = $age + 10; + } + // $num11 = (($num11 < ($age - 10)) ? (($age - 10)) : $num11); + if(bccomp($num11, $age - 10, 20) === -1){ + $num11 = $age - 10; + } + } + // dump($age); + + $result_data['bodyage'] = $num11; + $result_data['weight'] = $weight; + $result_data['height'] = $height; + $result_data['age'] = $age; + $result_data['adc'] = $impedance; + $result_data['gender'] = $gender; + $result_data['standard_level'] = $standard_level; + // dump($result_data); + // die; + return $result_data; + } + // 计算脂肪率 + function calculate_fat_r(){ + dump(123); + } + // 计算脂肪量 + function calculate_zhifangliang(){ + + } + // 计算肌肉率 + function calculate_jiroulv(){ + + } + // 计算肌肉量 + function calculate_jirouliang(){ + + } + // 计算水分 + function calculate_shuifen(){ + + } + // 计算蛋白量 + function calculate_danbailiang(){ + + } + // 计算骨重 + function calculate_guzhong(){ + + } + // 计算蛋白率 + function calculate_danbailv(){ + + } + // 计算基础代谢 + function calculate_jichudaixie(){ + + } + // 计算内脏指数 + function calculate_neizangzhishu(){ + + } + // 计算皮下脂肪 + function calculate_pixiazhifang(){ + + } + // 计算肥胖等级 + function calculate_feipangdengji(){ + + } + + + + public function msg($code,$msg='',$data=[]){ + return json(['code'=>$code,'msg'=>$msg,'data'=>$data]); + } + +} \ No newline at end of file diff --git a/application/appbackups/controller/Card.php b/application/appbackups/controller/Card.php new file mode 100644 index 0000000..c838a9d --- /dev/null +++ b/application/appbackups/controller/Card.php @@ -0,0 +1,781 @@ +'分','height'=>'CM','weight'=>'公斤','bmi'=>'','fat_r'=>'%','fat_w'=>'kg','muscle'=>'%','muscleval'=>'kg','water'=>'kg','bone'=>'kg','protein'=>'%','proteinval'=>'kg','kcal'=>'kcal','visceral'=>'','sfr'=>'%',]; + protected $unit_name = ['score'=>'身体得分','height'=>'身高','weight'=>'体重','bmi'=>'BMI','fat_r'=>'脂肪率','fat_w'=>'脂肪量','muscle'=>'肌肉率','muscleval'=>'肌肉量','water'=>'水分','bone'=>'骨重','protein'=>'蛋白率','proteinval'=>'蛋白量','kcal'=>'基础代谢','visceral'=>'内脏指数','sfr'=>'皮下脂肪','body_level'=>'肥胖等级','body_type'=>'身体类型']; + protected $bhw_list = [ + 'bmi'=>[ + ['min_val'=>'0','max_val'=>'','text'=>'消瘦','color'=>'#FDDA6B'], + ['min_val'=>'','max_val'=>'','text'=>'正常','color'=>'#59D06A'], + ['min_val'=>'','max_val'=>'','text'=>'偏重','color'=>'#FDAA02'], + ['min_val'=>'','max_val'=>'50','text'=>'肥胖','color'=>'#FB5755'], + ], + 'height'=>[ + ['min_val'=>'0','max_val'=>'','text'=>'矮','color'=>'#FD5759'], + ['min_val'=>'','max_val'=>'','text'=>'偏矮','color'=>'#FAAD01'], + ['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#5BD068'], + ['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#6793F4'], + ['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#3D67D3'], + ], + 'weight'=>[ + ['min_val'=>'0','max_val'=>'','text'=>'低','color'=>'#F8595D'], + ['min_val'=>'','max_val'=>'','text'=>'偏低','color'=>'#FFAF04'], + ['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#59D168'], + ['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#FFAF04'], + ['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#F8595D'], + ] + ]; + protected $standard_color = [ + 'fat_r'=>['偏低'=>'#FCDB67','标准'=>'#58D268','偏高'=>'#FCAA00','高'=>'#FD5752'], + 'fat_w'=>['偏低'=>'#FCDB67','标准'=>'#58D268','偏高'=>'#FCAA00','高'=>'#FD5752'], + 'muscle'=>['不足'=>'#FFDA68','标准'=>'#59CD6F','优'=>'#3C64D4'], + 'muscleval'=>['不足'=>'#FFDA68','标准'=>'#59CD6F','优'=>'#3C64D4'], + 'water'=>['不足'=>'#FED966','标准'=>'#58CF6B','优'=>'#3A68D7'], + 'proteinval'=>['不足'=>'#FED966','标准'=>'#58CF6B','优'=>'#3A68D7'], + 'bone'=>['不足'=>'#FED966','标准'=>'#58CF6B','优'=>'#3A68D7'], + 'protein'=>['不足'=>'#FED966','标准'=>'#58CF6B','优'=>'#3A68D7'], + 'kcal'=>['偏低'=>'#FF5656','优'=>'#5ad06d'], + 'visceral'=>['标准'=>'#55CF6C','警惕'=>'#FEAC00','危险'=>'#FB5A52'], + 'sfr'=>['不足'=>'#FCDB68','标准'=>'#59D16F','偏高'=>'#FEAB03'], + ]; + protected $result_end_data_mould = [ + 'name'=>'', + 'value'=>'', + 'unit'=>'', + 'standard'=>'', + 'color'=>'', + 'list'=>[] + ]; + // 曲线参数 + protected $card_body_curve_arr = ['height','weight','bmi','fat_r']; + protected $card_body_curve_arr2 = ['身高','体重','BMI','脂肪率',]; + protected $card_body_curve_arr3 = ['#f7b03e','#fb7b92','#ff9f40','#3fcba7',]; + + protected $card_body_level = [ + 'height'=>['value'=>1,'list'=>['矮'=>2,'偏矮'=>3,'标准'=>4,'偏高'=>5,'高'=>5]], + 'weight'=>['value'=>3,'list'=>['低'=>1,'偏低'=>1,'标准'=>2,'偏高'=>3,'高'=>3]], + 'bmi'=>['value'=>2,'list'=>['消瘦'=>1,'正常'=>2,'偏重'=>3,'肥胖'=>4]], + ]; + + + + ################################################################接口################################################################ + ################################################################接口################################################################ + ################################################################接口################################################################ + + + // 详细卡片信息 + // $data = ['id'=>'2'] + public function card_data_detailed($data=['aud_id'=>'87','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + + if(!array_key_exists('aud_id', $data) || !array_key_exists('token', $data)){ + return $this->msg(10001); + } + // cache($data['token'], time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + return $this->get_user_body_data($data); + } + + // 曲线页面-曲线接口 + 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']); + // $data['s_time'] = $data['s_time'].' 00:00:00'; + // $data['e_time'] = $data['e_time'].' 23:59:59'; + return $this->curve_chart_action($data); + } + + // 手动记录 + // $data = ['id'=>'2','time'=>'1991-04-20 10:10:10','height'=>'15.1','weight'=>'75.1'] + public function card_manual_recording($data = ['aud_id'=>'83','time'=>'2024-07-24','height'=>'145.7','weight'=>'41.3','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + }else{ + $data['time'] = date('Y-m-d H:i:s'); + } + // dump($data); + // die; + if(!array_key_exists('aud_id', $data) || !array_key_exists('time', $data) || !array_key_exists('height', $data) || !array_key_exists('weight', $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']); + $data['acd_id'] = '2'; + return $this->set_user_body_data($data); + } + // 设备记录 + // $data = ['id'=>'2','time'=>'1991-04-20 10:10:10','height'=>'15.1','weight'=>'75.1'] + public function card_manual_recording_device($data = ['aud_id'=>'58','height'=>'175','weight'=>'68','adc'=>'550','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + }else{ + $data['time'] = date('Y-m-d H:i:s'); + } + // dump($data); + // die; + if(!array_key_exists('aud_id', $data) || !array_key_exists('height', $data) || !array_key_exists('weight', $data) || !array_key_exists('adc', $data) || !array_key_exists('token', $data)){ + return $this->msg(10001); + } + if($data['adc'] == 0){ + $data['adc'] = 550; + } + $data['time'] = date('Y-m-d H:i:s'); + // if($this->token_time_validate($data['token']) === false){ + // return $this->msg(20001); + // } + // unset($data['token']); + $data['acd_id'] = '2'; + return $this->set_user_body_data($data); + } + + // 修改初始体重/目标体重 + public function card_modify_weight($data = ['aud_id'=>'25','weight'=>'25','type'=>1,'time'=>'','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!is_array($data)){ + return $this->msg(10005); + } + if(!array_key_exists('aud_id', $data) || !array_key_exists('weight', $data) || !array_key_exists('type', $data) || !array_key_exists('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']); + + return $this->modify_weight_action($data); + } + // // 删除历史数据 + // public function card_del_record_data($data = ['id'=>'16','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + // if(count(input('post.')) > 0){ + // $data = input('post.'); + // } + // if(!array_key_exists('id', $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']); + // $user_data = Db::table('app_card_body_data')->where(['id'=>$data['id']])->update(['is_del'=>1]); + // if($user_data){ + // return $this->msg([]); + // }else{ + // return $this->msg(10002); + // } + // } + + // // 数据对比 + // public function card_data_contrast($data = ['before_id'=>'24','after_id'=>'25','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + // if(count(input('post.')) > 0){ + // $data = input('post.'); + // } + // if(!array_key_exists('before_id', $data) || !array_key_exists('after_id', $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']); + // // $data = explode(',',$data['id_arr']); + // // dump($data); + // // die; + // return $this->body_data_contrast($data); + // } + + ################################################################业务接口################################################################ + ################################################################业务接口################################################################ + + ################################################card_data_detailed + // 用户身体数据卡片获取 + public function get_user_body_data($data){ + // $result = Db::table('app_card_body_data') + // ->alias('acbd') + // ->join('app_user_data aud','acbd.aud_id = aud.id','LEFT') + // ->where(['acbd.aud_id'=>$data['aud_id']]) + // ->order('acbd.record_time desc') + // ->field('acbd.*,aud.birthday,aud.gender,aud.target_weight,aud.initial_weight,aud.initial_date') + // ->find(); + // dump($data); + $result = Db::query(" + select + Top 1 + acbd.id, + acbd.acd_id, + acbd.create_time, + acbd.last_update_time, + acbd.score, + acbd.fat_r, + acbd.fat_w, + acbd.muscle, + acbd.muscleval, + acbd.water, + acbd.proteinval, + acbd.bone, + acbd.protein, + acbd.kcal, + acbd.visceral, + acbd.sfr, + acbd.body_level, + acbd.aud_id, + acbd.record_time, + acbd.body_type, + acbd.age, + acbd.is_del, + acbd.height, + acbd.weight, + acbd.bmi, + acbd.body_age, + aud.birthday,aud.gender,aud.target_weight,aud.initial_weight,aud.initial_date + from app_card_body_data as acbd + left join app_user_data as aud on acbd.aud_id=aud.id + where acbd.aud_id='".$data['aud_id']."' + order by acbd.record_time desc + "); + // dump($result); + // die; + if(!$result){ + return $this->msg(10004); + }else{ + // $curve_bottom = $this->card_curve_target_action($result); + $result_end = $this->processing_return_data_new($result[0]); + // dump($result_end); + // die; + $cardparts = new Cardparts; + // dump($result_end); + $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'=>[ + 'height'=>$result[0]['height'], + 'weight'=>$result[0]['weight'], + '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); + } + } + // 返回数据处理 + public function processing_return_data_new($data){ + // dump($data); + $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)){ + $result_end_data[$key]['name'] = $this->unit_name[$key]; + } + if(array_key_exists($key, $this->unit_symbol)){ + $result_end_data[$key]['unit'] = $this->unit_symbol[$key]; + } + $result_end_data[$key]['value'] = explode(',',$value)[0]; + 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)){ + $result_end_data[$key]['list'] = $this->bhw_list[$key]; + if($key == 'bmi'){ + // dump($month_num); + $bhw_date = Db::table('pc_bmistand')->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select(); + // dump($bhw_date); + if($bhw_date){ + $result_end_data[$key]['list'][0]['max_val'] = $bhw_date[0]['f1sd']; + $result_end_data[$key]['list'][1]['min_val'] = $bhw_date[0]['f1sd']; + $result_end_data[$key]['list'][1]['max_val'] = $bhw_date[0]['z1sd']; + $result_end_data[$key]['list'][2]['min_val'] = $bhw_date[0]['z1sd']; + $result_end_data[$key]['list'][2]['max_val'] = $bhw_date[0]['z2sd']; + $result_end_data[$key]['list'][3]['min_val'] = $bhw_date[0]['z2sd']; + } + }else if($key == 'height'){ + $bhw_date = Db::table('pc_heightstand')->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select(); + if($bhw_date){ + $result_end_data[$key]['list'][0]['max_val'] = $bhw_date[0]['f2sd']; + $result_end_data[$key]['list'][1]['min_val'] = $bhw_date[0]['f2sd']; + $result_end_data[$key]['list'][1]['max_val'] = $bhw_date[0]['f1sd']; + $result_end_data[$key]['list'][2]['min_val'] = $bhw_date[0]['f1sd']; + $result_end_data[$key]['list'][2]['max_val'] = $bhw_date[0]['z1sd']; + $result_end_data[$key]['list'][3]['min_val'] = $bhw_date[0]['z1sd']; + $result_end_data[$key]['list'][3]['max_val'] = $bhw_date[0]['z2sd']; + $result_end_data[$key]['list'][4]['min_val'] = $bhw_date[0]['z2sd']; + $result_end_data[$key]['list'][4]['max_val'] = $bhw_date[0]['z3sd']; + } + }else if($key == 'weight'){ + $bhw_date = Db::table('pc_weightstand')->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select(); + // dump($value); + // dump($bhw_date);/ + if($bhw_date){ + $result_end_data[$key]['list'][0]['max_val'] = $bhw_date[0]['f2sd']; + $result_end_data[$key]['list'][1]['min_val'] = $bhw_date[0]['f2sd']; + $result_end_data[$key]['list'][1]['max_val'] = $bhw_date[0]['f1sd']; + $result_end_data[$key]['list'][2]['min_val'] = $bhw_date[0]['f1sd']; + $result_end_data[$key]['list'][2]['max_val'] = $bhw_date[0]['z1sd']; + $result_end_data[$key]['list'][3]['min_val'] = $bhw_date[0]['z1sd']; + $result_end_data[$key]['list'][3]['max_val'] = $bhw_date[0]['z2sd']; + $result_end_data[$key]['list'][4]['min_val'] = $bhw_date[0]['z2sd']; + $result_end_data[$key]['list'][4]['max_val'] = $bhw_date[0]['z3sd']; + } + } + } + } + } + } + // $result_end_data['age'] = $data['age']; + // dump($data['age']); + // dump($result_end_data); + // die; + return $result_end_data; + } + + public function grow_up_recommendation($data){ + // card_body_level + // die; + // $result = [ + // ['name'=>'营养','key'=>'nutrition','content'=>''], + // ['name'=>'睡眠','key'=>'sleep','content'=>''], + // ['name'=>'运动','key'=>'motion','content'=>''], + // ['name'=>'情绪','key'=>'emotion','content'=>''] + // ]; + $result = [ + 'nutritionlist'=>[],//营养 + 'sportlist'=>[],//运动 + '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); + $min_key = array_search($min_value,$temporary_arr); + $type_num = $this->card_body_level[$min_key]['value']; + $temporary_arr2 = Db::table('pc_childrenprescription')->where(['Type'=>$type_num,'Level'=>$min_value,'IsDeleted'=>0])->field('Nutrition,Sport')->find(); + // dump($temporary_arr2); + array_push($result['nutritionlist'],$temporary_arr2['Nutrition']); + array_push($result['sportlist'],$temporary_arr2['Sport']); + // $result['nutritionlist'] = $temporary_arr2['Nutrition']; + // $result['sportlist'] = $temporary_arr2['Sport']; + + $month_num = $this->calculateAgeInMonthsWithPrecision($data['birthday']); + $temporary_arr2 = Db::table('pc_childprescriptionbyage')->where(['IsDeleted'=>0])->field('MinAge,MaxAge,Type,Content')->select(); + $default_sleep = ''; + $default_emotion = ''; + foreach ($temporary_arr2 as $key => $value) { + if($value['MinAge'] == -1 && $value['Type'] == 2){ + $default_sleep = $value['Content']; + } + if($value['MinAge'] == -1 && $value['Type'] == 3){ + $default_emotion = $value['Content']; + } + if($month_num>=$value['MinAge'] && $month_num<=$value['MaxAge']){ + if($value['Type'] == 1){ + array_push($result['sportlist'],$value['Content']); + // $result['sportlist'] = $result['sportlist'].$value['Content']; + }else if($value['Type'] == 2){ + array_push($result['sleeplist'],$value['Content']); + // $result['sleeplist'] = $result['sleeplist'].$value['Content']; + }else if($value['Type'] == 3){ + array_push($result['moodlist'],$value['Content']); + // $result['moodlist'] = $result['moodlist'].$value['Content']; + } + } + } + + $result['sleeplist'] = count($result['sleeplist']) <= 0?array_push($result['sportlist'],$default_sleep):$result['sleeplist']; + $result['moodlist'] = count($result['moodlist']) <= 0?array_push($result['moodlist'],$default_sleep):$result['moodlist']; + + return $result; + } + + ########################################################card_curve_chart + + // 曲线图动作函数 + public function curve_chart_action($data){ + $card_body_curve_arr = implode(',',$this->card_body_curve_arr); + // $user_data_list = Db::query(" + // select + // record_time, + // $card_body_curve_arr + // from app_card_body_data + // where aud_id='".$data['aud_id']."' + // and record_time between '".$data['s_time']."' + // and '".$data['e_time']."' + // order by record_time desc + // "); + // dump($card_body_curve_arr); + // dump($this->card_body_curve_arr); + // dump($data); + // $data['s_time'] = $this->adjustDateTime($data['s_time'],'subtract'); + // $data['e_time'] = $this->adjustDateTime($data['e_time'],'add'); + // dump($data); + // die; + + $data['s_time'] = $data['s_time'].' 00:00:00'; + $data['e_time'] = $data['e_time'].' 23:59:59'; + + $user_data_list = Db::table('app_card_body_data') + ->where('aud_id', $data['aud_id']) + ->whereTime('record_time', 'between', [$data['s_time'], $data['e_time']]) + ->field("record_time,REPLACE(CONVERT(varchar(10), record_time, 23), '-', '-') AS b_time,$card_body_curve_arr") + // ->field("record_time,REPLACE(CONVERT(varchar(10), record_time, 23), '-', '/') AS b_time,$card_body_curve_arr") + ->order('record_time desc') + ->select(); + // dump($user_data_list); + + // 下面业务逻辑是取每天的,最近后一次记录成绩 + $data_arr = []; + $record_arr1 = []; + $record_arr2 = []; + // 如果有数据 + if(count($user_data_list)>0){ + // 循环数据 + foreach ($user_data_list as $key => $value) { + // 如果数据中的时间不存在临时数组中 + if(!in_array($value['b_time'],$record_arr1)){ + array_push($record_arr1,$value['b_time']); + foreach ($this->card_body_curve_arr as $k => $v) { + $user_data_list[$key][$v] = explode(',',$user_data_list[$key][$v])[0]; + } + array_push($record_arr2,$user_data_list[$key]); + } + } + // dump($record_arr1); + // dump($record_arr2); + // die; + foreach ($this->card_body_curve_arr as $key => $value) { + $temporary_arr = []; + $temporary_arr['title'] = $this->card_body_curve_arr2[$key]; + $temporary_arr['key'] = $value; + $temporary_arr['line']['categories'] = []; + $temporary_arr['line']['series'][0]['color'] = $this->card_body_curve_arr3[$key]; + $temporary_arr['line']['series'][0]['data'] = []; + foreach ($record_arr2 as $k => $v) { + array_push($temporary_arr['line']['categories'],$record_arr2[$k]['b_time']); + array_push($temporary_arr['line']['series'][0]['data'],$record_arr2[$k][$value]); + } + array_push($data_arr,$temporary_arr); + } + } + // dump($data_arr); + return $this->msg($data_arr); + } + + ################################################card_manual_recording + // 用户身体数据卡片记录 + public function set_user_body_data($data){ + + $data['type'] = 1; + $user_data = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('birthday,gender,target_weight,initial_weight,initial_date')->find(); + if(!$user_data){ + return $this->msg(10003); + } + if($user_data['initial_date'] == null){ + Db::table('app_user_data')->where(['id'=>$data['aud_id']])->update(['initial_weight'=>$data['weight'],'initial_date'=>$data['time']]); + $target_current = $this->base_target_initial_cumulative_weight([ + 'weight'=>$data['weight'], + 'target_weight'=>$user_data['target_weight'], + 'initial_weight'=>$data['weight'], + 'initial_date'=>$data['time'], + ]); + }else{ + $target_current = $this->base_target_initial_cumulative_weight([ + 'weight'=>$data['weight'], + 'target_weight'=>$user_data['target_weight'], + 'initial_weight'=>$user_data['initial_weight'], + 'initial_date'=>$user_data['initial_date'], + ]); + } + $result_data['height'] = $data['height']; + $result_data['weight'] = $data['weight']; + $result_data['age'] = $this->calculate_age($user_data['birthday']); + $result_data['gender'] = $user_data['gender']; + if(array_key_exists('adc', $data)){ + $result_data['adc'] = $data['adc']; + } + $calculate_body_formula = new Calculatebody(); + // 计算身体数据 + $get_body_value = $calculate_body_formula->calculate_body_data_result($result_data); + + $get_body_value['gender'] = $user_data['gender']; + $get_body_value['birthday'] = $user_data['birthday']; + // 添加身高体重bmi的标尺标准 + $get_body_value = $this->hwb_standard($get_body_value); + $set_data = [ + 'acd_id'=>$data['acd_id'], + 'aud_id'=>$data['aud_id'], + 'record_time'=>array_key_exists('time', $data)?$data['time']:date('Y-m-d H:i:s'), + 'create_time'=>date('Y-m-d H:i:s'), + 'last_update_time'=>date('Y-m-d H:i:s'), + 'age'=>$get_body_value['age'], + 'height'=>$get_body_value['身高2'], + 'height_val'=>$get_body_value['身高'], + 'weight'=>$get_body_value['体重2'], + 'weight_val'=>$get_body_value['体重'], + 'bmi'=>$get_body_value['BMI2'], + 'bmi_val'=>$get_body_value['BMI'], + 'score'=>$get_body_value['身体得分'], + 'fat_r'=> implode(',',$get_body_value['脂肪率']), + 'fat_w'=>implode(',',$get_body_value['脂肪量']), + 'muscle'=>implode(',',$get_body_value['肌肉率']), + 'muscleval'=>implode(',',$get_body_value['肌肉量']), + 'water'=>implode(',',$get_body_value['水分']), + 'proteinval'=>implode(',',$get_body_value['蛋白量']), + 'bone'=>implode(',',$get_body_value['骨重']), + 'protein'=>implode(',',$get_body_value['蛋白率']), + 'kcal'=>implode(',',$get_body_value['基础代谢']), + 'visceral'=>implode(',',$get_body_value['内脏指数']), + 'sfr'=>implode(',',$get_body_value['皮下脂肪']), + 'body_level'=>$get_body_value['肥胖等级'], + 'body_type'=>$get_body_value['身体类型'], + 'body_age'=>$get_body_value['身体年龄'] + ]; + if(strlen($set_data['record_time']) <= 12){ + // 时间日期转换,把'Y-m-d'转换成'Y-m-d H:i:s'格式 + $set_data['record_time'] = $this->addCurrentTimeToDateString($set_data['record_time']); + } + + $set_user_data = Db::table('app_card_body_data')->insert($set_data); + if($set_user_data){ + // 返回简要数据 + if($data['type'] == 1){ + return $this->msg([ + 'acd_id'=>2, + 'height'=>$get_body_value['身高'].',CM', + 'weight'=>$get_body_value['体重'].',公斤', + 'bmi'=>$get_body_value['BMI'], + 'target_current'=>$target_current, + ]); + } + + }else{ + return $this->msg(10002); + } + } + + // 添加身高体重bmi的标准 + public function hwb_standard($data){ + + $linshi_data = []; + $month_num = $this->calculateAgeInMonthsWithPrecision($data['birthday']); + // dump($month_num); + $gender_val = $data['gender']; + if($data['age'] < $this->age_limit){ + foreach ($data as $key => $value) { + if($key =='身高'){ + $linshi_data['身高'] = $this->bhw_list['height']; + $bhw_date = Db::table('pc_heightstand2')->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select(); + if($bhw_date){ + $linshi_data['身高'][0]['max_val'] = $bhw_date[0]['f2sd']; + $linshi_data['身高'][1]['min_val'] = $bhw_date[0]['f2sd']; + $linshi_data['身高'][1]['max_val'] = $bhw_date[0]['f1sd']; + $linshi_data['身高'][2]['min_val'] = $bhw_date[0]['f1sd']; + $linshi_data['身高'][2]['max_val'] = $bhw_date[0]['z1sd']; + $linshi_data['身高'][3]['min_val'] = $bhw_date[0]['z1sd']; + $linshi_data['身高'][3]['max_val'] = $bhw_date[0]['z2sd']; + $linshi_data['身高'][4]['min_val'] = $bhw_date[0]['z2sd']; + $linshi_data['身高'][4]['max_val'] = $bhw_date[0]['z3sd']; + } + }else if($key =='体重'){ + $linshi_data['体重'] = $this->bhw_list['weight']; + $bhw_date = Db::table('pc_weightstand2')->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select(); + if($bhw_date){ + $linshi_data['体重'][0]['max_val'] = $bhw_date[0]['f2sd']; + $linshi_data['体重'][1]['min_val'] = $bhw_date[0]['f2sd']; + $linshi_data['体重'][1]['max_val'] = $bhw_date[0]['f1sd']; + $linshi_data['体重'][2]['min_val'] = $bhw_date[0]['f1sd']; + $linshi_data['体重'][2]['max_val'] = $bhw_date[0]['z1sd']; + $linshi_data['体重'][3]['min_val'] = $bhw_date[0]['z1sd']; + $linshi_data['体重'][3]['max_val'] = $bhw_date[0]['z2sd']; + $linshi_data['体重'][4]['min_val'] = $bhw_date[0]['z2sd']; + $linshi_data['体重'][4]['max_val'] = $bhw_date[0]['z3sd']; + } + }else if($key =='BMI'){ + $linshi_data['BMI'] = $this->bhw_list['bmi']; + $bhw_date = Db::table('pc_bmistand2')->where("Month <= $month_num and Sex = '$gender_val'")->order('Month desc')->limit(1)->select(); + // dump($bhw_date); + if($bhw_date){ + $linshi_data['BMI'][0]['max_val'] = $bhw_date[0]['f1sd']; + $linshi_data['BMI'][1]['min_val'] = $bhw_date[0]['f1sd']; + $linshi_data['BMI'][1]['max_val'] = $bhw_date[0]['z1sd']; + $linshi_data['BMI'][2]['min_val'] = $bhw_date[0]['z1sd']; + $linshi_data['BMI'][2]['max_val'] = $bhw_date[0]['z2sd']; + $linshi_data['BMI'][3]['min_val'] = $bhw_date[0]['z2sd']; + } + } + } + // dump($linshi_data); + // die; + foreach ($linshi_data as $key => $value) { + // dump($value); + foreach ($value as $k => $v) { + if($data[$key] >= $v['min_val'] && $data[$key] < $v['max_val']){ + // 如果落在区间内 + $data[$key.'2'] = $data[$key].','.$v['text'].','.$v['color']; + } + } + if($data[$key] < $value[0]['min_val']){ + // 如果小于最小值 + $data[$key.'2'] = $data[$key].','.$value[0]['text'].','.$value[0]['color']; + }else if($data[$key] >= $value[count($value)-1]['max_val']){ + // 如果大于最大值 + $data[$key.'2'] = $data[$key].','.$value[count($value)-1]['text'].','.$value[count($value)-1]['color']; + } + } + // die; + }else{ + $data['身高2'] = $data['身高'].',无,无'; + $data['体重2'] = $data['体重'].',无,无'; + $data['BMI2'] = $data['BMI'].',无,无'; + } + // dump($data); + // die; + return $data; + // dump($data); + } + + + ################################################card_modify_weight + public function modify_weight_action($data){ + // $data['aud_id'] = 26; + // $data['weight'] = 60; + // dump($data); + // die; + + $result = Db::query(" + select + TOP 1 + acbd.weight, + aud.target_weight, + aud.initial_weight, + aud.initial_date + from app_card_body_data as acbd + left join app_user_data as aud on acbd.aud_id = aud.id + where acbd.aud_id = ".$data['aud_id']." + order by acbd.record_time desc + "); + if($data['type'] == 1){ + // 修改目标体重 + $bhw_date = ['target_weight'=>$data['weight']]; + }else if($data['type'] == 2){ + // 修改原始体重 + $bhw_date = ['initial_weight'=>$data['weight'],'initial_date' => $data['time']]; + }else{ + return $this->msg(10005); + } + $result_update = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->update($bhw_date); + // dump($result_update); + // dump($result[0]['weight']); + // dump($result); + + if($result_update){ + $target_current = $this->base_target_initial_cumulative_weight([ + 'weight'=>$result[0]['weight'], + 'target_weight'=>$data['type'] == 1?$data['weight']:$result[0]['target_weight'], + 'initial_weight'=>$data['type'] == 1?$result[0]['initial_weight']:$data['weight'], + 'initial_date'=>$data['type'] == 1?$result[0]['initial_date']:$data['time'], + ]); + // die; + // dump($target_current); + return $this->msg($target_current); + }else{ + return $this->msg(10002); + } + + } + + ################################################card_record_detailed_information + + + ################################################################其他接口################################################################ + ################################################################其他接口################################################################ + + + + + + + + + + + + + +} \ No newline at end of file diff --git a/application/appbackups/controller/Cardparts.php b/application/appbackups/controller/Cardparts.php new file mode 100644 index 0000000..048c153 --- /dev/null +++ b/application/appbackups/controller/Cardparts.php @@ -0,0 +1,481 @@ +'反映和衡量一个人健康状况的重要标志之一', + 'height'=>'人体纵向部分的长度,源于人体的纵向生长,受遗传因素的影响较大', + 'bmi'=>'BMI是身体质量指数,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。' + ]; + protected $parameter_aggregate_bottom = [ + 'fat_r'=>'体脂率是指身体成分中,脂肪组织所占的比率。测量体脂率比单纯的只测量体重更能反映我们身体的脂肪水平(肥胖程度)。', + 'fat_w'=>'人体脂肪的重量', + 'muscle'=>'根据人体肌肉总量和人体体重、身高等相结合得到的人体的一个比例值,这个值的范围决定一个人的身体健康状况以及力量的多少。', + 'muscleval'=>'肌肉量=实际体重*肌肉率', + 'water'=>'指人体内水分比例。', + 'proteinval'=>'蛋白量=实际体重*蛋白率', + 'bone'=>'单位体积内,骨组织、骨矿物质(钙、磷等)和骨基质(骨胶原、蛋白率、无机盐等等)含量,骨量代表它们骨骼健康的情况。', + 'protein'=>'人体内蛋白率含量。', + 'kcal'=>'指人体在清醒而又极端安静的状态下,不受肌肉活动、环境温度、食物及精神紧张等影响时的能量代谢率', + 'visceral'=>'内脏脂肪指数', + 'sfr'=>'皮下脂脂肪就是贮存于皮下的脂肪组织,人体的脂肪大约有2/3贮存在皮下组织', + 'body_level'=>'肥胖的程度,表现实际体重与理想体重的差距。肥胖等级是判定肥胖症的一个指标。' + ]; + protected $parameter_aggregate_bottom_out = ['body_level']; + protected $parameter_aggregate_bottom_condition = ['body_level']; + // 脂肪率&脂肪量 + protected $fat_r_w = [ + 'man'=>[ + '29'=>[ + ['min_val'=>'0','max_val'=>'10','text'=>'偏低','color'=>'#FCDB67'], + ['min_val'=>'10','max_val'=>'21','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'21','max_val'=>'26','text'=>'偏高','color'=>'#FAB000'], + ['min_val'=>'26','max_val'=>'50','text'=>'高','color'=>'#FA5951'], + ], + '30'=>[ + ['min_val'=>'0','max_val'=>'11','text'=>'偏低','color'=>'#FCDB67'], + ['min_val'=>'11','max_val'=>'22','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'22','max_val'=>'27','text'=>'偏高','color'=>'#FAB000'], + ['min_val'=>'27','max_val'=>'50','text'=>'高','color'=>'#FA5951'], + ], + ], + 'woman'=>[ + '29'=>[ + ['min_val'=>'0','max_val'=>'20','text'=>'偏低','color'=>'#FCDB67'], + ['min_val'=>'20','max_val'=>'31','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'31','max_val'=>'38','text'=>'偏高','color'=>'#FAB000'], + ['min_val'=>'38','max_val'=>'80','text'=>'高','color'=>'#FA5951'], + ], + '30'=>[ + ['min_val'=>'0','max_val'=>'21','text'=>'偏低','color'=>'#FCDB67'], + ['min_val'=>'21','max_val'=>'32','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'32','max_val'=>'39','text'=>'偏高','color'=>'#FAB000'], + ['min_val'=>'39','max_val'=>'80','text'=>'高','color'=>'#FA5951'], + ] + ] + ]; + // 肌肉率&肌肉量 + protected $muscle_muscleval = [ + 'man'=>[ + ['min_val'=>'0','max_val'=>'40','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'40','max_val'=>'60','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'60','max_val'=>'100','text'=>'优','color'=>'#3C66D2'], + ], + 'woman'=>[ + ['min_val'=>'0','max_val'=>'30','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'30','max_val'=>'50','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'50','max_val'=>'100','text'=>'优','color'=>'#3C66D2'], + ] + ]; + // 水分 + protected $water = [ + 'man'=>[ + ['min_val'=>'0','max_val'=>'55','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'55','max_val'=>'65','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'65','max_val'=>'100','text'=>'优','color'=>'#3C66D2'], + ], + 'woman'=>[ + ['min_val'=>'0','max_val'=>'45','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'45','max_val'=>'60','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'60','max_val'=>'100','text'=>'优','color'=>'#3C66D2'], + ] + ]; + // 蛋白量&蛋白率 + protected $proteinval_protein = [ + 'man'=>[ + ['min_val'=>'0','max_val'=>'16','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'16','max_val'=>'18','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'18','max_val'=>'50','text'=>'优','color'=>'#3C66D2'], //蓝 + ], + 'woman'=>[ + ['min_val'=>'0','max_val'=>'14','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'14','max_val'=>'16','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'16','max_val'=>'50','text'=>'优','color'=>'#3C66D2'], + ] + ]; + // 骨重 + protected $bone = [ + 'man'=>[ + '60'=>[ + ['min_val'=>'0','max_val'=>'2.4','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'2.4','max_val'=>'2.6','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'2.6','max_val'=>'6','text'=>'优','color'=>'#3C66D2'], + ], + '60_75'=>[ + ['min_val'=>'0','max_val'=>'2.8','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'2.8','max_val'=>'3','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'3','max_val'=>'6','text'=>'优','color'=>'#3C66D2'], + ], + '75'=>[ + ['min_val'=>'0','max_val'=>'3.1','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'3.1','max_val'=>'3.3','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'3.3','max_val'=>'7','text'=>'优','color'=>'#3C66D2'], + ], + ], + 'woman'=>[ + '45'=>[ + ['min_val'=>'0','max_val'=>'1.7','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'1.7','max_val'=>'1.9','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'1.9','max_val'=>'5','text'=>'优','color'=>'#3C66D2'], + ], + '45_60'=>[ + ['min_val'=>'0','max_val'=>'2.1','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'2.1','max_val'=>'2.3','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'2.3','max_val'=>'5','text'=>'优','color'=>'#3C66D2'], + ], + '60'=>[ + ['min_val'=>'0','max_val'=>'2.4','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'2.4','max_val'=>'2.6','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'2.6','max_val'=>'5','text'=>'优','color'=>'#3C66D2'], + ], + ] + ]; + // 基础代谢 + protected $kcal = [ + ['min_val'=>'0','max_val'=>'','text'=>'偏低','color'=>'#ff5656'], + ['min_val'=>'','max_val'=>'9999','text'=>'优','color'=>'#3C66D2'], + ]; + // 内脏指数 + protected $visceral = [ + 'man'=>[ + ['min_val'=>'0','max_val'=>'9','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'9','max_val'=>'14','text'=>'警惕','color'=>'#FAB000'], + ['min_val'=>'14','max_val'=>'50','text'=>'危险','color'=>'#FA5951'], //红 + ], + 'woman'=>[ + ['min_val'=>'0','max_val'=>'9','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'9','max_val'=>'14','text'=>'警惕','color'=>'#FAB000'], + ['min_val'=>'14','max_val'=>'50','text'=>'危险','color'=>'#FA5951'], //红 + ] + ]; + // 皮下脂肪 + protected $sfr = [ + 'man'=>[ + ['min_val'=>'0','max_val'=>'7','text'=>'不足','color'=>'#FCDB67'], //淡黄 + ['min_val'=>'7','max_val'=>'15','text'=>'标准','color'=>'#59D16D'], //绿 + ['min_val'=>'15','max_val'=>'50','text'=>'偏高','color'=>'#FAB000'], //橙 + ], + 'woman'=>[ + ['min_val'=>'0','max_val'=>'11','text'=>'不足','color'=>'#FCDB67'], + ['min_val'=>'11','max_val'=>'17','text'=>'标准','color'=>'#59D16D'], + ['min_val'=>'17','max_val'=>'50','text'=>'偏高','color'=>'#FAB000'], + ] + ]; + + + + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + // 计算部分内容的横线标准以及说明文字 + public function conversion_interval($data){ + // dump($data); + // die; + // $data['gender'] = $data['gender']==2?'woman':'man'; + $gender = $data['gender']==2?'woman':'man'; + $age = $data['age']['value']; + $weight = 0; + $temporary_arr = [ + 'score_name' =>$data['score']['name'], + 'score_value' =>$data['score']['value'], + 'score_unit' =>$data['score']['unit'], + 'body_type_name' =>$data['body_type']['name'], + 'body_type_value' =>$data['body_type']['value'], + 'body_type_unit' =>$data['body_type']['unit'], + // 'record_time' =>str_replace('-', '/', $data['record_time']), + 'record_time' =>$data['record_time'], + 'top_list'=>[], + 'bottom_list'=>[], + ]; + $date_temporary = new \DateTime($temporary_arr['record_time']); + + // 使用 format 方法来指定新的日期和时间格式 + $temporary_arr['record_time'] = $date_temporary->format('Y年m月d日 H:i:s'); + // dump($data); + // dump($temporary_arr); + // die; + // 处理格式(顶部) + foreach ($this->parameter_aggregate_top as $key => $value) { + $data[$key]['key_name'] = $key; + $data[$key]['desc'] = $value; + if($key == 'weight'){ + $weight = $data[$key]['value']; + } + array_push($temporary_arr['top_list'],$data[$key]); + } + + // 处理格式(底部) + foreach ($this->parameter_aggregate_bottom as $key => $value) { + $data[$key]['key_name'] = $key; + $data[$key]['desc'] = $value; + array_push($temporary_arr['bottom_list'],$data[$key]); + } + + // dump($temporary_arr); + // die; + // 处理顶部list + foreach ($temporary_arr['top_list'] as $key => $value) { + if(count($temporary_arr['top_list'][$key]['list']) > 0){ + $temporary_arr['top_list'][$key]['offset'] = $this->calculate_landing_point($temporary_arr['top_list'][$key]['list'],$temporary_arr['top_list'][$key]['value'],$temporary_arr['top_list'][$key]['standard']); + } + } + + // 处理底部list + foreach ($temporary_arr['bottom_list'] as $key => $value) { + // dump($value['key_name']); + // 脂肪率& + if($value['key_name'] == 'fat_r'){ + if($age < 30){ + $temporary_arr['bottom_list'][$key]['list'] = $this->fat_r_w[$gender]['29']; + }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']); + } + // 脂肪量 + else if($value['key_name'] == 'fat_w'){ + if($age < 30){ + $temporary_arr['bottom_list'][$key]['list'] = $this->fat_r_w[$gender]['29']; + }else{ + $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]); + } + // 肌肉量 + else if($value['key_name'] == 'muscleval'){ + // 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']); + } + // 骨重 + else if($value['key_name'] == 'bone'){ + if($gender == 'man'){ + if($weight < 60){ + $temporary_arr['bottom_list'][$key]['list'] = $this->bone[$gender]['60']; + }else if($weight >= 60 && $weight < 75){ + $temporary_arr['bottom_list'][$key]['list'] = $this->bone[$gender]['60_75']; + }else{ + $temporary_arr['bottom_list'][$key]['list'] = $this->bone[$gender]['75']; + } + }else{ + if($weight < 45){ + $temporary_arr['bottom_list'][$key]['list'] = $this->bone[$gender]['45']; + }else if($weight >= 45 && $weight < 60){ + $temporary_arr['bottom_list'][$key]['list'] = $this->bone[$gender]['45_60']; + }else{ + $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']); + } + } + // dump($data['gender']); + // dump($data['age']['value']); + // // dump($temporary_arr['top_list']); + // dump($temporary_arr['bottom_list']); + // die; + return $temporary_arr; + } + + + // 计算落点百分比 + public function calculate_landing_point($data,$val,$t_val){ + $num = count($data); + $a_section = bcdiv(100,$num,2); + $temporary_data = []; + $num_0 = 0; + foreach ($data as $key => $value) { + if($t_val == $value['text']){ + $temporary_data = $value; + $num_0 = $key; + break; + } + } + $max_num = trim($temporary_data['max_val']); + $min_num = trim($temporary_data['min_val']); + if($val < $temporary_data['max_val']){ + $num_1 = bcsub($val,$min_num,2); + $num_2 = bcsub($max_num,$min_num,2); + $num_3 = bcdiv(bcdiv($num_1,$num_2,4),$num,4)*100; + $result = bcadd(bcmul($num_0,$a_section,2),$num_3,2); + }else{ + $num_3 = bcdiv(1,$num,4)*100; + $result = bcadd(bcmul($num_0,$a_section,2),$num_3,2); + } + return $result; + } + + // 计算新标准 + public function calculate_new_standard($data,$w,$k,$age=0,$gender='man'){ + $temporary_arr = []; + if($k != 'kcal'){ + foreach ($data as $key => $value) { + array_push($temporary_arr,[ + 'min_val'=>bcmul($w,bcdiv($value['min_val'],100,2),2), + 'max_val'=>bcmul($w,bcdiv($value['max_val'],100,2),2), + 'text'=>$value['text'], + 'color'=>$value['color'] + ]); + } + }else{ + // BMR标准值(男) BMR标准值(女) + // 60.9*体重(kg)-54 61.0*体重(kg)-51 + // 22.7*体重(kg)+495 22.5*体重(kg)+499 + // 17.5*体重(kg)+651 12.2*体重(kg)+746 + // 15.3*体重(kg)+679 14.7*体重(kg)+496 + // 11.6*体重(kg)+879 8.7*体重(kg)+820 + $vv_val = 0; + if($age < 3){ + if($gender == 'man'){ + $vv_val = bcsub(bcmul(60.9,$w,2),54,2); + }else{ + $vv_val = bcsub(bcmul(61.0,$w,2),51,2); + } + }else if($age >= 3 && $age < 10){ + if($gender == 'man'){ + $vv_val = bcadd(bcmul(22.7,$w,2),495,2); + }else{ + $vv_val = bcadd(bcmul(22.5,$w,2),499,2); + } + }else if($age >= 10 && $age < 18){ + if($gender == 'man'){ + $vv_val = bcadd(bcmul(17.5,$w,2),651,2); + }else{ + $vv_val = bcadd(bcmul(12.2,$w,2),746,2); + } + }else if($age >= 18 && $age < 30){ + if($gender == 'man'){ + $vv_val = bcadd(bcmul(15.3,$w,2),679,2); + }else{ + $vv_val = bcadd(bcmul(14.7,$w,2),496,2); + } + }else{ + if($gender == 'man'){ + $vv_val = bcadd(bcmul(11.6,$w,2),879,2); + }else{ + $vv_val = bcadd(bcmul(8.7,$w,2),820,2); + } + } + $data[0]['max_val'] = $vv_val; + $data[1]['min_val'] = $vv_val; + $temporary_arr = $data; + } + return $temporary_arr; + + // dump($data); + // 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/appbackups/controller/Cardpublic.php b/application/appbackups/controller/Cardpublic.php new file mode 100644 index 0000000..f2b0753 --- /dev/null +++ b/application/appbackups/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/appbackups/controller/Device.php b/application/appbackups/controller/Device.php new file mode 100644 index 0000000..cfc35be --- /dev/null +++ b/application/appbackups/controller/Device.php @@ -0,0 +1,283 @@ +'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + // cache($data['token'],time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + return $this->device_data_list_action($data); + } + + // 绑定系统设备 + public function device_binding($data = ['token'=>'caadd1be045a65f30b92aa805f1de54a','device_id'=>'3','device_mac'=>'54654654']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data) || !array_key_exists('device_id', $data) || !array_key_exists('device_mac', $data)){ + return $this->msg(10001); + } + // cache($data['token'],time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + // unset($data['token']); + return $this->device_binding_action($data); + } + // 获取用户设备列表 + public function device_user_data_list($data = ['token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + // cache($data['token'],time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + // unset($data['token']); + return $this->device_user_data_list_action($data); + } + // 解绑系统设备 + public function device_unbinding($data = ['token'=>'e0966788d02cc93290d9d674921d9715','id'=>'8']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data) || !array_key_exists('id', $data)){ + return $this->msg(10001); + } + // cache($data['token'],time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + // unset($data['token']); + return $this->device_unbinding_action($data); + } + + // 获取设备详情 + public function device_mac_get_content($data = ['mac'=>'76:FE:B3:2F:E7:D8','acd_id'=>'2','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('mac', $data) || !array_key_exists('acd_id', $data) || !array_key_exists('token', $data)){ + return $this->msg(10001); + } + cache($data['token'],time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + return $this->device_mac_get_content_action($data); + } + + ################################################################业务接口################################################################ + ################################################################业务接口################################################################ + + ################################################device_data_list + public function device_data_list_action($data){ + $result = Db::table('app_device_data')->where(['is_del'=>0])->field('id,name,pic,content,page_measure,bluetooth_type,device_model')->select(); + foreach ($result as $key => $value) { + unset($result[$key]['ROW_NUMBER']); + } + if(empty($result)){ + return $this->msg(10004); + }else{ + return $this->msg(['list'=>$result]); + } + } + + ################################################device_binding + public function device_binding_action($data){ + $result_user = Db::table('app_account_number')->where(['token'=>$data['token']])->field('id,token')->find(); + if(!$result_user){ + return $this->msg(10003); + } + $device_code_data = Db::table('app_device_code_data')->where(['machine_code'=>$data['device_mac']])->find(); + $device_code_data_user = explode(',',$device_code_data['bind_account_id']); + if($device_code_data){ + // 多用户可以绑定 + if(in_array($result_user['id'], $device_code_data_user)){ + return $this->msg(10003,'设备已绑定'); + }else{ + array_push($device_code_data_user,$result_user['id']); + $device_binding = Db::table('app_device_code_data')->where(['machine_code'=>$data['device_mac']])->update([ + 'bind_account_id'=>implode(',',$device_code_data_user), + ]); + if($device_binding){ + return $this->msg([]); + }else{ + return $this->msg(10002,'更新失败'); + } + } + // 仅单用户可以绑定 + // if($device_code_data['bind_account_id']){ + // return $this->msg(10003,'设备已被绑定'); + // }else{ + // $device_binding = Db::table('app_device_code_data')->where(['machine_code'=>$data['device_mac']])->update([ + // 'bind_account_id'=>$result_user['id'], + // ]); + // if($device_binding){ + // return $this->msg([]); + // }else{ + // return $this->msg(10002,'更新失败'); + // } + // } + } + $device_binding = Db::table('app_device_code_data')->insert([ + 'add_id'=>$data['device_id'], + 'machine_code'=>$data['device_mac'], + 'create_time'=>date('Y-m-d H:i:s'), + 'bind_account_id'=>$result_user['id'], + ]); + if($device_binding){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + + ################################################device_user_data_list + public function device_user_data_list_action($data){ + $result_user = Db::table('app_account_number')->where(['token'=>$data['token']])->field('id,token')->find(); + if(!$result_user){ + return $this->msg(10003); + } + $likePattern = '%' . $result_user['id'] . '%'; + $device_code_data = Db::table('app_device_code_data') + ->alias('adcd') + ->join('app_device_data add','adcd.add_id = add.id','LEFT') + // ->where(['adcd.bind_account_id'=>$result_user['id']]) + // ->where('adcd.bind_account_id LIKE "%'.$result_user['id'].'%"') + ->where("adcd.bind_account_id LIKE ?", [$likePattern]) + ->field('adcd.id,adcd.add_id,adcd.machine_code,adcd.create_time,add.name,add.pic,add.content,add.page_measure,add.bluetooth_type,add.device_model') + ->select(); + if(count($device_code_data) <= 0){ + return $this->msg([]); + } + $device_code_data1 = []; + $result = []; + + // 新版格式 + // $result['list'] = []; + foreach ($device_code_data as $key => $value) { + array_push($result,[ + 'add_id'=>$value['add_id'], + 'name'=>$value['name'], + 'pic'=>$value['pic'], + 'content'=>$value['content'], + 'page_measure'=>$value['page_measure'], + 'bluetooth_type'=>$value['bluetooth_type'], + 'device_model'=>$value['device_model'], + 'bind_time'=>$value['create_time'], + 'id'=>$value['id'], + 'mac'=>$value['machine_code'] + ]); + } + + return $this->msg(['list'=>$result]); + } + + ################################################device_unbinding + public function device_unbinding_action($data){ + $result_user = Db::table('app_account_number')->where(['token'=>$data['token']])->field('id,token')->find(); + if(!$result_user){ + return $this->msg(10003); + } + + $device_binding_user = Db::table('app_device_code_data') + ->alias('adcd') + ->join('app_device_data add2','add2.id = adcd.add_id','LEFT') + ->where(['adcd.id'=>$data['id']]) + ->field('adcd.id,adcd.bind_account_id,add2.acd_id') + ->find(); + // dump(time()); + // die; + $device_binding_user = explode(',',$device_binding_user['bind_account_id']); + // dump($device_binding_user); + $key = array_search($result_user['id'], $device_binding_user); + if($key !== false){ + unset($device_binding_user[$key]); + }else{ + return $this->msg([]); + } + // dump($device_binding_user); + // dump(implode(',',$device_binding_user)); + // die; + $device_binding = Db::table('app_device_code_data')->where(['id'=>$data['id']])->update([ + 'bind_account_id'=>implode(',',$device_binding_user), + ]); + if($device_binding){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + + ################################################device_mac_get_content + public function device_mac_get_content_action($data){ + + $user_id = Db::table('app_account_number')->where(['token'=>$data['token']])->field('id,token')->find(); + // dump($user_id); + // die; + $likePattern = '%' . $user_id['id'] . '%'; + $result_device = Db::table('app_device_code_data') + ->alias('adcd') + ->join('app_device_data add','adcd.add_id = add.id','LEFT') + ->where([ + 'adcd.machine_code'=>$data['mac'], + 'add.acd_id'=>$data['acd_id'], + 'adcd.bind_account_id'=>['LIKE',$likePattern], + 'add.is_del'=>0, + 'adcd.is_del'=>0, + ]) + // ->where("adcd.bind_account_id LIKE ?", [$likePattern]) + ->field('adcd.id,add.acd_id,add.name,add.pic,add.content,add.page_measure,add.bluetooth_type,add.device_model') + ->find(); + if($result_device){ + unset($result_device['ROW_NUMBER']); + return $this->msg($result_device); + }else{ + return $this->msg(10004); + } + } + + + + ################################################################其他接口################################################################ + ################################################################其他接口################################################################ + + + + + + + + + + + + + +} \ No newline at end of file diff --git a/application/appbackups/controller/Download.php b/application/appbackups/controller/Download.php new file mode 100644 index 0000000..ab6723a --- /dev/null +++ b/application/appbackups/controller/Download.php @@ -0,0 +1,50 @@ +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(){ + + $url = Db::table('app_version_log')->order('id desc')->find(); + + + $this->assign([ + + 'url' => $url['download_url'], + ]); + return $this->fetch(); + } + + public function ceshi(){ + $data = input(); + $url = 'https://klcz.pcxbc.com/open-api/calc/healthcalc/bodyfat3'; + $temporary_parameter = [ + 'weight'=>$data['weight'], + 'height'=>$data['height'], + 'age'=>$data['age'], + 'adc'=>$data['adc'], + 'gender'=>$data['gender'], + ]; + dump($temporary_parameter); + + $result = $this->postRequest($url,$temporary_parameter); + dump($result); + die; + } +} \ No newline at end of file diff --git a/application/appbackups/controller/Index.php b/application/appbackups/controller/Index.php new file mode 100644 index 0000000..4795133 --- /dev/null +++ b/application/appbackups/controller/Index.php @@ -0,0 +1,593 @@ +'app_card_body_data','6'=>'app_card_skip_data','8'=>'app_card_vitalcapacity_data']; + // protected $card_key = ['2'=>'body','6'=>'skip','8'=>'vitalcapacity']; + protected $default_card = ['2','6','8']; + protected $card_data = [ + '2'=>['身体数据','body',['height'=>['身高','cm','-'],'weight'=>['体重','公斤','-'],'bmi'=>['BMI','无','-']]], + // '6'=>['跳绳数据','skip',['jump_time'=>['用时','无','--:--:--'],'jump_num'=>['本次次数','次','-'],'average_num'=>['平均成绩','个','-'],'jump_kcal'=>['卡路里','kcal','-']]], + '6'=>['跳绳数据','skip',['jump_time'=>['用时','无','--:--:--'],'jump_num'=>['本次次数','次','-'],'jump_kcal'=>['卡路里','kcal','-']]], + '8'=>['肺活量','vitalcapacity',['average'=>['本次数据','ml','-']]], + ]; + + protected $data_name_unit = [ + 'height'=>['身高','cm','pc_heightstand2'], + 'weight'=>['体重','公斤','pc_weightstand2'], + 'bmi'=>['BMI','','pc_bmistand2'], + 'average'=>['肺活量','ml','pc_vitalcapacity_standard'] + ]; + + protected $grade_list = [ + ['id'=>'nothing','name'=>'无'], + ['id'=>'grade_s_1','name'=>'小学一年级'], + ['id'=>'grade_s_2','name'=>'小学二年级'], + ['id'=>'grade_s_3','name'=>'小学三年级'], + ['id'=>'grade_s_4','name'=>'小学四年级'], + ['id'=>'grade_s_5','name'=>'小学五年级'], + ['id'=>'grade_s_6','name'=>'小学六年级'], + ['id'=>'grade_m_1','name'=>'初中一年级'], + ['id'=>'grade_m_2','name'=>'初中二年级'], + ['id'=>'grade_m_3','name'=>'初中三年级'], + ['id'=>'grade_h_1','name'=>'高中一年级'], + ['id'=>'grade_h_2','name'=>'高中二年级'], + ['id'=>'grade_h_3','name'=>'高中三年级'], + ['id'=>'grade_u_12','name'=>'大学一、二年级'], + ['id'=>'grade_u_34','name'=>'大学三、四年级'] + ]; + + ################################################################个人资料卡################################################################ + ################################################################个人资料卡################################################################ + ################################################################个人资料卡################################################################ + + // 检测版本及判断是否登录失效 + public function login_invalid_version($data = ['token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + // phpinfo(); + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + $result = Db::table('app_version_log')->order('is_del,id desc')->find(); + if($result){ + $version = $result['version_num_original']; + $url = $result['download_url']; + }else{ + $version = ''; + $url = ''; + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(-1,'未登录',['version'=>$version,'url'=>$url]); + }else{ + return $this->msg(['version'=>$version,'url'=>$url]); + } + + + } + // 创建用户 + public function create_user_data($data = ['aan_id'=>66,'nickname'=>'王小二','birthday'=>'2019-01-01','gender'=>1,'grade'=>'二年级','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + $verify_result = $this->verify_parameters($data,'register'); + if(!is_array($verify_result)){ + return $this->msg(10001,$verify_result); + } + $result = Db::table('app_user_data')->insertGetId($verify_result); + if($result){ + return $this->msg(['aud_id'=>$result]); + }else{ + return $this->msg(10002); + } + } + // 修改用户 + public function update_user_data($data = ['id'=>66,'nickname'=>'王小二','birthday'=>'2019-01-01','gender'=>1,'grade'=>'二年级','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + $verify_result = $this->verify_parameters2($data,'update'); + if(!is_array($verify_result)){ + return $this->msg(10001,$verify_result); + } + $id_val = $verify_result['id']; + unset($verify_result['id']); + $result = Db::table('app_user_data')->where(['id'=>$id_val])->update($verify_result); + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + + // 删除用户 + public function del_user_data($data = ['id'=>'26','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('id', $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']); + $result = Db::table('app_user_data')->where(['id'=>$data['id']])->update(['is_del'=>1]); + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + + + // 获取账号下用户列表 + // $type 1获取列表,2获取详细信息 + public function get_user_card_list($data = ['aan_id'=>66,'type'=>1,'token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data) || !array_key_exists('aan_id', $data) || !array_key_exists('type', $data)){ + return $this->msg(10001); + } + + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + $result = Db::table('app_user_data')->where(['aan_id'=>$data['aan_id'],'is_del'=>0])->select(); + // $result = Db::table('app_user_data')->where(['aan_id'=>$aan_id])->field('id,nickname')->select(); + $temporary_data = []; + if($data['type'] == 1){ + for ($i=0; $i < count($result); $i++) { + array_push($temporary_data,['id'=>$result[$i]['id'],'nickname'=>$result[$i]['nickname']]); + } + }else{ + for ($i=0; $i < count($result); $i++) { + $result[$i]['age'] = $this->calculate_age($result[$i]['birthday']); + // array_push($temporary_data,['id'=>$result[$i]['id'],'nickname'=>$result[$i]['nickname'],'age'=>$this->calculate_age($result[$i]['birthday'])]); + } + $temporary_data = $result; + } + return $this->msg($temporary_data); + } + + // 获取指定用户详细信息 + public function get_user_data_information($data = ['aud_id'=>92,'token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + // dump(input('post.')); + // dump(input('get.')); + // // dump($data); + // die; + if(!array_key_exists('token', $data) || !array_key_exists('aud_id', $data)){ + return $this->msg(10001); + } + // cache($data['token'],time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + $result = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('id,aan_id,nickname,head_pic,birthday,gender,card_order,target_weight,initial_weight,initial_date,weight')->find(); + $weight_data_pd = Db::table('app_card_body_data')->where(['aud_id'=>$data['aud_id']])->order('record_time desc')->field('id,weight_val,record_time')->find(); + // dump($weight_data_pd); + // die; + if(!$result){ + return $this->msg(10003); + } + unset($result['ROW_NUMBER']); + $result['age'] = $this->calculate_age($result['birthday']); + if($result['card_order'] === ''){ + $result['card_order'] = []; + $result['card_data_list'] = []; + $result['target_current'] = $this->base_target_initial_cumulative_weight([]); + + }else{ + $result['card_order'] = explode(',',$result['card_order']); + $calculation_results = $this->get_user_card_data_list($result,$result['id']); + $result['card_data_list'] = $calculation_results[0]; + $result['target_current'] = $calculation_results[1]; + } + + if($weight_data_pd){ + $result['weight'] = $weight_data_pd['weight_val']; + } + + + // $result['birthday'] = str_replace('-', '/', $result['birthday']); + // foreach ($result['card_data_list'] as $key => $value) { + // // dump($key); + // if($key == 'record_time' && $value != ''){ + // // dump(111); + // $result['card_data_list'][$key] = str_replace('-', '/', $result['card_data_list'][$key]); + // } + // } + unset($result['target_weight']); + unset($result['initial_weight']); + unset($result['initial_date']); + + // 获取设备信息进入卡片 start + $likePattern = '%' . $result['aan_id'] . '%'; + $result_device = Db::table('app_device_code_data') + ->alias('adcd') + ->join('app_device_data add','adcd.add_id = add.id','LEFT') + // ->where(['adcd.bind_account_id'=>$result['aan_id']]) + ->where("adcd.bind_account_id LIKE ?", [$likePattern]) + ->field('adcd.id,add.acd_id') + ->select(); + + $device_arr = []; + foreach ($result_device as $key => $value) { + if(!in_array($value['acd_id'],$device_arr)){ + array_push($device_arr,$value['acd_id']); + } + } + // dump($device_arr); + // die; + foreach ($result['card_data_list'] as $key => $value) { + if(in_array($value['acd_id'],$device_arr)){ + $result['card_data_list'][$key]['device_determine'] = true; + }else{ + $result['card_data_list'][$key]['device_determine'] = false; + } + } + $result['address'] = $this->moren_gufen_diqu; + // 插入肺活量的卡片标准 + $result['vitalcapacity_data'] = $this->get_vitalcapacity_data($result['id']); + // 获取设备信息进入卡片 end + return $this->msg($result); + } + + // 获取所有卡片列表信息 + public function get_card_all_list($data = ['aud_id'=>83,'token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + $user_card_list = Db::table('app_user_data')->where(['id'=>$data['aud_id'],'is_del'=>0])->field('id,card_order')->find(); + if(!$user_card_list){ + return $this->msg(10003); + } + unset($user_card_list['ROW_NUMBER']); + $user_card_list['card_order'] = explode(',',$user_card_list['card_order']); + $all_card_list = Db::table('app_card_data')->where(['is_del'=>0])->field('id,name,pic')->select(); + // dump($user_card_list); + // dump($all_card_list); + $result = ['user'=>[],'all'=>[]]; + foreach ($all_card_list as $key => $value) { + if(in_array($value['id'],$user_card_list['card_order'])){ + $result['user'][array_search($value['id'], $user_card_list['card_order'])] = ['id'=>$value['id'],'name'=>$value['name'],'pic'=>$value['pic']]; + }else{ + array_push($result['all'],['id'=>$value['id'],'name'=>$value['name'],'pic'=>$value['pic']]); + } + } + ksort($result['user']); + return $this->msg($result); + } + + // 保存用户的卡片排序 + public function save_user_card_order($data=['aud_id'=>11,'card_order'=>'2,8','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $data) || !array_key_exists('card_order', $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']); + if(!$this->is_num_array(explode(',',$data['card_order']))){ + return $this->msg(10001,'数据内参数格式或值错误'); + } + $result = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->update(['card_order'=>$data['card_order']]); + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + + } + + // 获取年级key列表 + public function get_grade_list(){ + $data = input('post.'); + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + + return $this->msg($this->grade_list); + // $temporary_arr = Db::table('app_identity_data')->cache(true,60)->select(); + // $result = [['id'=>'nothing','name'=>'无']]; + // // dump(); + // // die; + // foreach ($temporary_arr as $key => $value) { + // array_push($result,['id'=>$value['id'],'name'=>$value['content']]); + // } + // return $this->msg(['grade_list'=>$this->grade_list,'identity_list'=>$result]); + } + ################################获取账号下信息操作################################ + + // 获取账号下首页卡片的基础数据 + public function get_user_card_data_list($data,$aud_id){ + + $result = []; + $db_arr = []; + foreach ($data['card_order'] as $key => $value) { + $db_arr[$value] = Db::table($this->db_name[$value])->where(['aud_id'=>$aud_id,'is_del'=>'0'])->order('record_time desc')->limit(1)->select(); + // dump($db_arr[$value]); + + if(count($db_arr[$value]) > 0){ + $db_arr[$value] = $db_arr[$value][0]; + }else{ + unset($db_arr[$value]); + } + } + + // 获取卡片路径及卡片数组处理start + $card_all_data = Db::table('app_card_data')->field('id,page_url_record,page_url_report,page_url_bluetooth')->select(); + $card_all_data_result = []; + foreach ($card_all_data as $key => $value) { + $card_all_data_result[$value['id']] = [ + 'page_url_record'=>$value['page_url_record'], + 'page_url_report'=>$value['page_url_report'], + 'page_url_bluetooth'=>$value['page_url_bluetooth'] + ]; + } + // 获取卡片路径及卡片数组处理end + + // dump($db_arr); + // die; + // 添加目标体重于当前体重差数据 + if(array_key_exists('2', $db_arr)){ + $target_current = $this->base_target_initial_cumulative_weight([ + 'weight'=>$db_arr['2']['weight']>0?$db_arr['2']['weight']:0, + 'target_weight'=>$data['target_weight']>0?$data['target_weight']:0, + 'initial_weight'=>$data['initial_weight']>0?$data['initial_weight']:0, + 'initial_date'=>$data['initial_date']!=null?$data['initial_date']:0, + ]); + }else{ + $target_current = $this->base_target_initial_cumulative_weight([ + 'weight'=>0, + 'target_weight'=>$data['target_weight']>0?$data['target_weight']:0, + 'initial_weight'=>$data['initial_weight']>0?$data['initial_weight']:0, + 'initial_date'=>$data['initial_date']!=null?$data['initial_date']:0, + ]); + } + if(count($db_arr) <= 0){ + // 没有数据,传递一个空的卡片 + foreach ($data['card_order'] as $key => $value) { + $temporary_arr = []; + $temporary_arr['id'] = ''; + $temporary_arr['acd_id'] = $value; + $temporary_arr['record_time'] = ''; + $temporary_arr['card_name'] = $this->card_data[$value][0]; + $temporary_arr['card_key'] = $this->card_data[$value][1]; + $temporary_arr['page_url_record'] = $card_all_data_result[$value]['page_url_record']; + $temporary_arr['page_url_report'] = $card_all_data_result[$value]['page_url_report']; + $temporary_arr['page_url_bluetooth'] = $card_all_data_result[$value]['page_url_bluetooth']; + $temporary_arr['inside_data'] = []; + foreach ($this->card_data[$value][2] as $k => $v) { + array_push($temporary_arr['inside_data'],[ + 'key'=>$k, + 'name'=>$v[0], + 'value'=>$v[2], + 'unit'=>$v[1]!='无'?$v[1]:'', + 'standard'=>'', + 'color'=>'' + ]); + } + array_push($result,$temporary_arr); + } + }else{ + // dump($db_arr); + // die; + foreach ($data['card_order'] as $key => $value) { + $temporary_arr = []; + $temporary_arr['acd_id'] = $value; + + $temporary_arr['card_name'] = $this->card_data[$value][0]; + $temporary_arr['card_key'] = $this->card_data[$value][1]; + $temporary_arr['page_url_record'] = $card_all_data_result[$value]['page_url_record']; + $temporary_arr['page_url_report'] = $card_all_data_result[$value]['page_url_report']; + $temporary_arr['page_url_bluetooth'] = $card_all_data_result[$value]['page_url_bluetooth']; + $temporary_arr['inside_data'] = []; + if(array_key_exists($value,$db_arr)){ + $temporary_arr['id'] = $db_arr[$value]['id']; + $temporary_arr['record_time'] = $db_arr[$value]['record_time']; + foreach ($this->card_data[$value][2] as $k => $v) { + if($value == '2'){ + $tem_arr_2 = explode(',', $db_arr[$value][$k]); + }else if($value == '6' && $k == 'jump_time'){ + $time_conversion = $this->handle_hour_branch_second($db_arr[$value][$k]); + $tem_arr_2 = [$time_conversion['h'].':'.$time_conversion['m'].':'.$time_conversion['s'],'','']; + }else{ + $tem_arr_2 = [$db_arr[$value][$k],'','']; + } + + // dump($tem_arr_2); + array_push($temporary_arr['inside_data'],[ + 'key'=>$k, + 'name'=>$v[0], + 'value'=>$tem_arr_2[0], + 'unit'=>$v[1]!='无'?$v[1]:'', + 'standard'=>$tem_arr_2[1]!='无'?$tem_arr_2[1]:'', + 'color'=>$tem_arr_2[2]!='无'?$tem_arr_2[2]:'' + ]); + } + }else{ + $temporary_arr['id'] = ''; + $temporary_arr['record_time'] = ''; + foreach ($this->card_data[$value][2] as $k => $v) { + array_push($temporary_arr['inside_data'],[ + 'key'=>$k, + 'name'=>$v[0], + 'value'=>$v[2], + 'unit'=>$v[1]!='无'?$v[1]:'', + 'standard'=>'', + 'color'=>'' + ]); + } + } + array_push($result,$temporary_arr); + + } + } + return [$result,$target_current]; + } + + + + ################################################################other################################################################ + ################################################################other################################################################ + ################################################################other################################################################ + + + public function verify_parameters($data,$type){ + // 设置验证 + $rule = [ + 'aan_id' => 'require|number', + 'nickname' => 'require|chsAlphaNum', + 'birthday' => 'require|date', + 'gender' => 'require|number|in:0,1,2', + 'grade' => 'require', + 'height' => 'require|number', + 'weight' => 'require|number', + // 'identity' => 'require|number', + ]; + $msg = [ + 'aan_id.require' => '账号信息缺失', + 'nickname.require' => '昵称缺失', + 'birthday.require' => '生日缺失', + 'gender.require' => '性别缺失', + 'grade.require' => '年级缺失', + 'height.require' => '身高缺失', + 'weight.require' => '体重缺失', + // 'identity.require' => '身份缺失', + + 'aan_id.number' => '账号信息格式错误', + 'nickname.chsAlphaNum' => '昵称只能是只能是汉字、字母', + 'birthday.date' => '生日信息格式错误', + 'gender.number' => '性别格式错误', + 'gender.in' => '性别信息错误', + 'height.number' => '身高必须为数字', + 'weight.number' => '体重必须为数字', + // 'identity.number' => '身份信息格式错误', + ]; + $validate = new Validate($rule,$msg); + $result = $validate->check($data); + if(!$result){ + return $validate->getError(); + } + + $parameter['aan_id'] = $data['aan_id']; + $parameter['nickname'] = $data['nickname']; + $parameter['birthday'] = $data['birthday']; + $parameter['gender'] = $data['gender']; + $parameter['grade'] = $data['grade']; + $parameter['card_order'] = '2,6,8'; + $parameter['height'] = $data['height']; + $parameter['weight'] = $data['weight']; + $parameter['head_pic'] = $data['gender'] == 2?'http://tc.pcxbc.com/tsf/2.png':'http://tc.pcxbc.com/tsf/1.png'; + // $parameter['identity_data'] = $data['identity']; + $parameter['create_time'] = date('Y-m-d H:i:s'); + $parameter['last_update_time'] = date('Y-m-d H:i:s'); + $parameter_pd = Db::table('app_account_number')->where(['id'=>$parameter['aan_id']])->count(); + if($parameter_pd <= 0){ + return '该账户不存在'; + } + $result = Db::table('app_user_data')->where(['nickname'=>$parameter['nickname'],'aan_id'=>$parameter['aan_id'],'is_del'=>0])->count(); + if($result>0){ + return '该成员已存在'; + } + + return $parameter; + } + public function verify_parameters2($data,$type){ + // 设置验证 + $rule = [ + 'id' => 'require|number', + 'nickname' => 'require|chsAlphaNum', + 'birthday' => 'require|date', + 'gender' => 'require|number|in:0,1,2', + 'grade' => 'require', + 'height' => 'require|number', + 'weight' => 'require|number', + // 'identity' => 'require|number', + ]; + $msg = [ + 'id.require' => '用户信息缺失', + 'nickname.require' => '昵称缺失', + 'birthday.require' => '生日缺失', + 'gender.require' => '性别缺失', + 'grade.require' => '年级缺失', + 'height.require' => '身高缺失', + 'weight.require' => '体重缺失', + // 'identity.require' => '身份缺失', + + 'id.number' => '用户信息格式错误', + 'nickname.chsAlphaNum' => '昵称只能是只能是汉字、字母、数字', + 'birthday.date' => '生日信息格式错误', + 'gender.number' => '性别格式错误', + 'gender.in' => '性别信息错误', + 'height.number' => '身高必须为数字', + 'weight.number' => '体重必须为数字', + // 'identity.number' => '身份信息格式错误', + ]; + $validate = new Validate($rule,$msg); + $result = $validate->check($data); + if(!$result){ + return $validate->getError(); + } + + $parameter['id'] = $data['id']; + $parameter['nickname'] = $data['nickname']; + $parameter['birthday'] = $data['birthday']; + $parameter['height'] = $data['height']; + $parameter['weight'] = $data['weight']; + $parameter['gender'] = $data['gender']; + $parameter['grade'] = $data['grade']; + $parameter['head_pic'] = $data['gender'] == 2?'http://tc.pcxbc.com/tsf/2.png':'http://tc.pcxbc.com/tsf/1.png'; + // $parameter['identity_data'] = $data['identity']; + $parameter['last_update_time'] = date('Y-m-d H:i:s'); + return $parameter; + } + + + + + +} \ No newline at end of file diff --git a/application/appbackups/controller/Login.php b/application/appbackups/controller/Login.php new file mode 100644 index 0000000..41d7fe8 --- /dev/null +++ b/application/appbackups/controller/Login.php @@ -0,0 +1,485 @@ +18530934717,'password'=>'ceshi','code'=>'746119']){ + // 验证是否前段发送过来的数据 + if(count(input('post.')) > 0){ + $data = input('post.'); + } + // 验证数据项是否完整 + if(!array_key_exists('data', $data) || !array_key_exists('password', $data) || !array_key_exists('code', $data)){ + return $this->msg(10001); + } + // 验证数据值是否合规 + if(!$data['data'] || !$data['password'] || !$data['code']){ + return $this->msg(10006); + } + // 验证是手机还是邮箱 + $montage_data = $this->is_tel_email($data['data']); + if($montage_data == false){ + return $this->msg(10005); + } + // 查询账号是否已经注册 + $inspect_repeat = Db::table('app_account_number')->where([$montage_data=>$data['data'],'is_del'=>0])->count(); + if($inspect_repeat >= 0){ + return $this->msg(10002,'注册失败,账号已存在'); + } + // 检查验证码 + $code_result = $this->check_code($data['data'],$data['code']); + if($code_result !== true){ + return $this->msg(10002,$code_result); + } + // 验证完之后 + $set_data = []; + if($montage_data == 'tel'){ + $set_data['tel'] = $data['data']; + }else{ + $set_data['email'] = $data['data']; + } + $set_data['password'] = $data['password']; + $set_data['head_pic'] = $this->default_head_pic; + $set_data['nickname'] = '用户'.time(); + $set_data['create_time'] = date('Y-m-d H:i:s'); + $set_data['token'] = md5($data['data'].$this->create_random_string(12).time()); + $result = Db::table('app_account_number')->insertGetId($set_data); + if($result){ + cache($set_data['token'], time()); + return $this->msg(['token'=>$set_data['token'],'aan_id'=>$result]); + }else{ + return $this->msg(10002); + } + } + // 重置密码 + public function reset_password($data = ['data'=>'18530934717','password'=>'ceshi1','c_password'=>'ceshi1','code'=>'491661']){ + // 验证是否前段发送过来的数据 + if(count(input('post.')) > 0){ + $data = input('post.'); + } + // 验证数据项是否完整 + if(!array_key_exists('data', $data) || !array_key_exists('password', $data) || !array_key_exists('c_password', $data) || !array_key_exists('code', $data)){ + return $this->msg(10001); + } + // 验证数据值是否合规 + if($data['password'] != $data['c_password']){ + return $this->msg(10003,'两次密码不一致'); + } + if($data['password'] == ''){ + return $this->msg(10003,'密码不能为空'); + } + // 检查验证码 + $code_result = $this->check_code($data['data'],$data['code']); + if($code_result !== true){ + return $this->msg(10003,$code_result); + } + $t_y = $this->is_tel_email($data['data']); + if($t_y === false){ + return $this->msg(10003,'账号格式错误'); + } + // 检查账号是否存在 + $find_data = Db::table('app_account_number')->where([$t_y=>$data['data'],'is_del'=>0])->field('id,token')->find(); + if(!$find_data){ + return $this->msg(10003); + } + $result = Db::table('app_account_number')->where([$t_y=>$data['data']])->update(['password'=>$data['password']]); + if($result){ + cache($find_data['token'], time()); + return $this->msg(['token'=>$find_data['token'],'aan_id'=>$find_data['id']]); + }else{ + return $this->msg(10002); + } + } + + // 登录 + public function login_action($data = ['data'=>'18530934717','validate_data'=>'746119','type'=>'login','validate_type'=>'code']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('data', $data) || !array_key_exists('validate_data', $data) || !array_key_exists('validate_type', $data)){ + return $this->msg(10001); + } + // 检测是否为手机 + $montage_data = $this->is_tel_email($data['data']); + if($montage_data == false){ + return $this->msg(10005); + } + $verify_result[$montage_data] = $data['data']; + $verify_result['is_del'] = 0; + // 检测校验途径 + if($data['validate_type'] == 'code'){ + $code_name = $data['data']; + if($this->check_code($code_name,$data['validate_data']) === true){ + $result = Db::table('app_account_number')->where($verify_result)->field('id,token')->find(); + if($result){ + cache($result['token'], time()); + return $this->msg(['token'=>$result['token'],'aan_id'=>$result['id']]); + }else{ + $set_data['password'] = ''; + $set_data[$montage_data] = $data['data']; + $set_data['head_pic'] = $this->default_head_pic; + $set_data['nickname'] = '用户'.$data['data']; + $set_data['create_time'] = date('Y-m-d H:i:s'); + $set_data['token'] = md5($data['data'].$this->create_random_string(12).time()); + $result = Db::table('app_account_number')->insertGetId($set_data); + if($result){ + cache($set_data['token'], time()); + return $this->msg(['token'=>$set_data['token'],'aan_id'=>$result],'登录成功'); + }else{ + return $this->msg(10002); + } + } + }else{ + return $this->msg(10003,'登录失败,验证码错误或失效'); + } + }else if($data['validate_type'] == 'password'){ + // $verify_result['password'] = $data['validate_data']; + $result = Db::table('app_account_number')->where($verify_result)->field('id,token,password')->find(); + if($result){ + if($result['password'] == ''){ + return $this->msg(10003,'该账户未设密码,请用验证码登录'); + } + if($data['validate_data'] != $result['password']){ + return $this->msg(10003,'账号密码错误'); + }else{ + cache($result['token'], time()); + return $this->msg(['token'=>$result['token'],'aan_id'=>$result['id']],'登录成功'); + } + }else{ + return $this->msg(10003,'账号未注册,请先注册'); + } + }else{ + return $this->msg(10003,'校验参数错误'); + } + + } + // 退出登录操作 + public function user_quit_account($data=['token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + cache($data['token'], NULL); + return $this->msg([]); + } + + + // 删除账号 + public function delete_account($data=['token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + $result = Db::table('app_account_number')->where(['token'=>$data['token']])->update(['is_del'=>1]); + cache($data['token'], NULL); + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + + ################################################################接口################################################################ + ################################################################接口################################################################ + ################################################################接口################################################################ + + + + // 发送验证码 手机/邮箱 + /* 接口说明(发邮件) + * $data(手机或者邮箱信息) 字符串 + * $type(验证类型,是注册用,还是其他用途) 字符串 默认register(注册)(register、login、reset_password) + * $road(是手机还是邮箱还是其他) 字符串 默认tel或email + */ + public function send_phone_email_code($data = ['data'=>'18530934717']){ + // dump(cache('linshi')); + // die; + // $data = input('post.'); + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('data', $data)){ + return $this->msg(10001); + } + + if(cache($data['data'])){ + return $this->msg(10002,'60秒仅可发送一次验证码'); + } + + $num = mt_rand(100000,999999); + if (preg_match('/^\d{11}$/', $data['data'])) { + $result = $this->send_tel_code($data['data'],$num); + $road = 'tel'; + }else{ + $result = $this->send_email_code([$data['data']],['title'=>'体测APP验证码','from_user_name'=>'体测APP','content'=>$num]); + // dump($result); + $road = 'email'; + } + // dump($result); + // dump($road); + // die; + if(is_array($result) && $result['code'] == 0){ + cache($data['data'], $num, $this->code_time); + // dump($data['data']."_".$data['road']."_".$data['type']); + // return $this->msg(['code'=>$num]); + return $this->msg([]); + // return true; + }else{ + return $this->msg(10010,'验证码发送失败'); + // return false; + } + } + + ################################内部调用################################ + /* 接口说明(发手机短信) + + */ + public function send_tel_code($tel,$code){ + // 初始化cURL会话 + $ch = curl_init(); + $headers = [ + 'Accept: application/json', + 'Content-Type: application/json', + ]; + // 设置头部信息 + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + // 设置请求的URL + $url = "http://sms.ybhdmob.com/Message/Send?token=ybhdmob"; + curl_setopt($ch, CURLOPT_URL, $url); + // 设置为POST请求 + curl_setopt($ch, CURLOPT_POST, 1); + // 设置POST数据 + $postData = array( + 'phone' => $tel, + // 'content' => '您好,欢迎使用Reedaw,您的手机验证码是:'.$code.',验证码三分钟内有效,若非本人操作,请忽略!' + 'content' => '【Reedaw】您好,欢迎使用Reedaw,您的验证码是:'.$code.',验证码一分钟内有效,若非本人操作,请忽略本短信' + ); + $postData = json_encode($postData); + curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); + // 设置返回结果不直接输出,而是返回到变量中 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + // 发送请求并获取响应 + $response = curl_exec($ch); + // 检查是否有错误发生 + if (curl_errno($ch)) { + $error_message = curl_error($ch); + return "请求错误: " . $error_message; + } + // 关闭cURL会话 + curl_close($ch); + // 处理响应 + // dump($response); + cache('linshi', $response); + if ($response) { + return json_decode($response,true); + } else { + echo "未收到响应"; + } + } + /* 接口说明(发邮件) + * $address(收件人的邮箱地址) 数组 格式: ['460834639@qq.com','460834639@qq.com'.......] + * $content(邮件的主题数据信息) 数组 格式:['title'=>'123','from_user_name'=>'123','content'=>'123'] + * $annex(附件路径信息) 字符串 + */ + public function send_email_code($address,$content,$annex=''){ + // $ad = '460834639@qq.com'; + $ad1 = '295155911@qq.com'; + $mail = new PHPMailer(); //实例化 + $mail->IsSMTP(); // 启用SMTP + $mail->Host = "smtp.126.com"; //SMTP服务器 163邮箱例子 + $mail->Port = 465; //邮件发送端口 + $mail->SMTPAuth = true; //启用SMTP认证 + $mail->SMTPSecure = 'ssl'; + $mail->CharSet = "UTF-8"; //字符集 + $mail->Encoding = "base64"; //编码方式 + $mail->Username = "tsf3920322@126.com"; //你的邮箱 + $mail->Password = "HLWXNRPUCTHJFIIX"; //你的密码(邮箱后台的授权密码) + $mail->From = "tsf3920322@126.com"; //发件人地址(也就是你的邮箱) + + // $mail->Subject = "微盟测试邮件"; //邮件标题 + $mail->Subject = $content['title']; //邮件标题 + + // $mail->FromName = "微盟体测中心"; //发件人姓名 + $mail->FromName = $content['from_user_name']; //发件人姓名 + + + for ($i=0; $i < count($address); $i++) { + $mail->AddAddress($address[$i], ""); //添加收件人(地址,昵称) + } + + if($annex != ''){ + // $url = ROOT_PATH. 'public' . DS . 'tsf' . DS .'demoooo.jpg'; + $mail->AddAttachment($annex,''); // 添加附件,并指定名称 + } + + $mail->IsHTML(true); //支持html格式内容 + + $neirong = '
+ + + + + +
+ + + + + + + +
  + + + + + +
+
 
+
+ + + + + +
+
 
+ + QingCe! + +
 
+
+ + + + + +
+
 
+ + 感谢您选择青测产品! + +
 
+ + 以下6位数字是邮箱验证码,请在需要的位置填写以通过验证 + +
 
+ + (如果您从未请求发送邮箱验证码,请忽略此邮件) + +
 
+ + + + +
+ + + '.$content['content'].' + + +
+
 
+
+ + + + + +
+
 
+ + + + +
+
 
+ + © Zhengzhou Pinchuan Technology Co., Ltd. + +
 
+ + + +
 
+
+
+ +
 
+ +
+
'; + + $mail->Body = $neirong; //邮件主体内容 + // dump($address); + // die; + //发送 + if (!$mail->Send()) { + + return ['code' => 10003,'msg'=>$mail->ErrorInfo]; + // return $mail->ErrorInfo; + } else { + return ['code' => 0]; + // return 'success'; + } + } + + + + public function check_code($data = 18530934717 , $code = 123456){ + // // 默认验证码正确 + // return true; + // dump($data); + // dump(cache($data)); + // die; + if(cache($data) == false){ + return '验证码过期'; + }else{ + if($code != cache($data)){ + return '验证码错误'; + } + } + return true; + } + ################################################################other################################################################ + ################################################################other################################################################ + ################################################################other################################################################ + + + public function create_random_string($length = 12) + { + //创建随机字符 + $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + $str = ""; + for ($i = 0; $i < $length; $i++) { + $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); + } + return $str; + } + + + +} \ No newline at end of file diff --git a/application/appbackups/controller/Myinformation.php b/application/appbackups/controller/Myinformation.php new file mode 100644 index 0000000..b03cc1d --- /dev/null +++ b/application/appbackups/controller/Myinformation.php @@ -0,0 +1,154 @@ +'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data)){ + return $this->msg(10001); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + // unset($data['token']); + + return $this->get_my_account_msg_action($data); + } + // 修改昵称 + public function update_my_nickname($data = ['token'=>'0dafb98a10995c98b5a33b7d59d986ca','nickname'=>'']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('nickname', $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']); + + return $this->update_my_nickname_action($data); + } + // 邮箱/手机绑定 + public function update_my_account_msg($data = ['token'=>'0dafb98a10995c98b5a33b7d59d986ca','data'=>'tsf3920322@126.com','code'=>'123456']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('data', $data) || !array_key_exists('token', $data) || !array_key_exists('code', $data)){ + return $this->msg(10001); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + // unset($data['token']); + + return $this->update_my_account_msg_action($data); + } + + // 修改密码 + public function update_my_password($data = ['token'=>'0dafb98a10995c98b5a33b7d59d986ca','password'=>'ceshi1','c_password'=>'ceshi1']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('password', $data) || !array_key_exists('c_password', $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']); + return $this->update_my_password_action($data); + } + + ################################################################业务################################################################ + ################################################################get_my_account_msg + public function get_my_account_msg_action($data){ + $result = Db::table('app_account_number')->where(['token'=>$data['token'],'is_del'=>0])->find(); + if($result){ + return $this->msg([ + 'my_tel'=>$result['tel'], + 'my_email'=>$result['email'], + 'create_time'=>$result['create_time'], + 'token'=>$result['token'], + 'nickname'=>$result['nickname'], + 'head_pic'=>$result['head_pic'], + 'last_update_time'=>$result['update_time'], + ]); + }else{ + return $this->msg(10002); + } + } + ################################################################update_my_nickname + public function update_my_nickname_action($data){ + $result = Db::table('app_account_number')->where(['token'=>$data['token'],'is_del'=>0])->update([ + 'nickname'=>$data['nickname'], + 'update_time'=>date('Y-m-d H:i:s') + ]); + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + ################################################################update_my_account_msg + public function update_my_account_msg_action($data){ + $login_action = new Login(); + $validate_result = $login_action->check_code($data['data'],$data['code']); + if($validate_result !== true){ + return $this->msg(10001,$validate_result); + } + $montage_data = $this->is_tel_email($data['data']); + if($montage_data == false){ + return $this->msg(10005); + } + // dump($data); + // die; + $result = Db::table('app_account_number')->where(['token'=>$data['token'],'is_del'=>0])->update([ + $montage_data=>$data['data'], + 'update_time'=>date('Y-m-d H:i:s') + ]); + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + ################################################################update_my_password + public function update_my_password_action($data){ + if($data['password'] != $data['c_password']){ + return $this->msg(10003,'两次密码不一致'); + } + if($data['password'] == ''){ + return $this->msg(10003,'密码不能为空'); + } + $result = Db::table('app_account_number')->where(['token'=>$data['token'],'is_del'=>0])->update([ + 'password'=>$data['password'], + 'update_time'=>date('Y-m-d H:i:s') + ]); + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + + +} \ No newline at end of file diff --git a/application/appbackups/controller/Pagingcontrast.php b/application/appbackups/controller/Pagingcontrast.php new file mode 100644 index 0000000..b829f76 --- /dev/null +++ b/application/appbackups/controller/Pagingcontrast.php @@ -0,0 +1,606 @@ +'app_card_body_data','6'=>'app_card_skip_data','8'=>'app_card_vitalcapacity_data']; + protected $request_result = [ + '2'=>['height'=>['身高','cm'],'weight'=>['体重','kg'],'age'=>['年龄','岁'],'bmi'=>['BMI',''],'fat_w'=>['脂肪量','kg'],'fat_r'=>['脂肪率','%'],'muscleval'=>['肌肉量','kg'],'muscle'=>['肌肉率','%'],'proteinval'=>['蛋白量','kg'],'protein'=>['蛋白率','%'],'water'=>['水分',''],'bone'=>['骨重','kg'],'visceral'=>['内脏指数',''],'sfr'=>['皮下脂肪','%'],'kcal'=>['基础代谢','kcal'],'un_fat_w_weight'=>['去脂体重','kg'],'body_age'=>['体龄',''],'body_level'=>['肥胖等级',''],'body_type'=>['体型','']], + '6'=>['jump_num'=>['个数',''],'jump_time'=>['时长',''],'jump_kcal'=>['卡路里','kcal']], + '8'=>['one_val'=>['第一次','ml'],'two_val'=>['第二次','ml'],'three_val'=>['第三次','ml'],'average_val'=>['三次平均','ml'],'score'=>['最后成绩','分']] + ]; + + protected $pagesize = 10; + + ################################################请求接口################################################ + ################################################请求接口################################################ + ################################################请求接口################################################ + // 获取记录信息(分组)(包含身体、跳绳、肺活量) + public function get_all_record_data_group($data = ['aud_id'=>'26','s_time'=>'2024-04-01','e_time'=>'2024-06-12','token'=>'0dafb98a10995c98b5a33b7d59d986ca','type'=>'6']){ + 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) || !array_key_exists('type', $data)){ + return $this->msg(10001); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + if(array_key_exists($data['type'],$this->db_name)){ + return $this->jump_transfer_interface_record($data,'group'); + }else{ + return $this->msg(10005); + } + } + // 获取记录信息(分页)(包含身体、跳绳、肺活量) + public function get_all_record_data_page($data = ['aud_id'=>'25','page'=>1,'token'=>'0dafb98a10995c98b5a33b7d59d986ca','type'=>'2']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $data) || !array_key_exists('page', $data) || !array_key_exists('token', $data) || !array_key_exists('type', $data)){ + return $this->msg(10001); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + if(array_key_exists($data['type'],$this->db_name)){ + return $this->jump_transfer_interface_record($data,'page'); + }else{ + return $this->msg(10005); + } + } + // 获取详细历史数据信息(包含身体、跳绳、肺活量) + public function get_all_record_detailed_information($data = ['id'=>'39','type'=>'2','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('id', $data) || !array_key_exists('type', $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']); + + return $this->jump_transfer_interface_detailed($data); + } + // 数据对比(包含身体、跳绳、肺活量) + public function get_all_card_data_contrast($data = ['before_id'=>'837','after_id'=>'836','type'=>'6','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('before_id', $data) || !array_key_exists('after_id', $data) || !array_key_exists('type', $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']); + // $data = explode(',',$data['id_arr']); + // dump($data); + // die; + return $this->jump_transfer_interface_data_contrast($data); + } + // 删除历史数据 + public function del_all_record_data($data = ['id'=>'29','type'=>'2','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('id', $data) || !array_key_exists('type', $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']); + $user_data = Db::table($this->db_name[$data['type']])->where(['id'=>$data['id']])->update(['is_del'=>1]); + if($user_data){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + ################################################请求接口################################################ + ################################################请求接口################################################ + ################################################请求接口################################################ + + public function jump_transfer_interface_record($data,$str){ + if($data['type'] == '2'){ + return $this->get_body_record_data($data,$str); + }else if($data['type'] == '6'){ + return $this->get_skip_record_data($data,$str); + }else if($data['type'] == '8'){ + return $this->get_vitalcapacity_record_data($data,$str); + } + } + public function jump_transfer_interface_detailed($data){ + return $this->get_all_detaile_data_msg($data); + + // if($data['type'] == '2'){ + // return $this->get_body_detaile_data_msg($data); + // }else if($data['type'] == '6'){ + // return $this->get_skip_detaile_data_msg($data); + // // return $this->msg(10005); + // }else if($data['type'] == '8'){ + // // return $this->get_body_record_data($data,$str); + // } + } + public function jump_transfer_interface_data_contrast($data){ + if($data['type'] == '2'){ + return $this->get_body_data_contrast($data); + }else if($data['type'] == '6'){ + return $this->get_skip_data_contrast($data); + }else if($data['type'] == '8'){ + return $this->get_vitalcapacity_data_contrast($data); + } + } + + ################################################业务部分################################################ + + + // 获取记录信息列表(分组)-身体 + // 获取记录信息列表(分页)-身体 + public function get_body_record_data($data,$type){ + $return_result = []; + + if($type == 'group'){ + $data['s_time'] = $data['s_time'].' 00:00:00'; + $data['e_time'] = $data['e_time'].' 23:59:59'; + $result = Db::query(" + select + id, + CONVERT(varchar(10), record_time, 120) AS r_t, + CONVERT(varchar(19), record_time, 120) AS record_time, + height_val as v1, + weight_val as v2, + bmi_val as v3 + from app_card_body_data + where aud_id='".$data['aud_id']."' + and record_time between '".$data['s_time']."' and '".$data['e_time']."' + and is_del = 0 + order by record_time desc"); + foreach ($result as $key => $value) { + array_push($return_result, [ + 'id'=>$value['id'], + 'v1'=>$value['v1'], + 'v2'=>$value['v2'], + 'v3'=>$value['v3'], + 'v1_name'=>'身高', + 'v2_name'=>'体重', + 'v3_name'=>'BMI', + // 'r_t'=>str_replace('-', '/', $value['r_t']) + 'r_t'=>$value['r_t'] + ]); + } + }else{ + $result = Db::table('app_card_body_data')->where(['aud_id'=>$data['aud_id'],'is_del'=>0])->field("id,record_time,REPLACE(record_time, '-', '-') AS b_time,height_val,weight_val,bmi_val")->order('record_time desc')->page($data['page'],$this->pagesize)->select(); + $return_result['totalrows'] = Db::table('app_card_body_data')->where(['aud_id'=>$data['aud_id']])->count(); + $return_result['rows'] = []; + $return_result['pageno'] = $data['page']; + $return_result['pagesize'] = $this->pagesize; + $return_result['totalpage'] = ceil($return_result['totalrows']/$this->pagesize); + foreach ($result as $key => $value) { + array_push($return_result['rows'],[ + 'id'=>$value['id'], + 'v1'=>$value['height_val'], + 'v2'=>$value['weight_val'], + 'v3'=>$value['bmi_val'], + 'v1_name'=>'身高', + 'v2_name'=>'体重', + 'v3_name'=>'BMI', + 'record_time'=>$value['b_time'], + ]); + } + } + return $this->msg($return_result); + } + // 获取记录信息列表(分组)-跳绳 + // 获取记录信息列表(分页)-跳绳 + public function get_skip_record_data($data,$type){ + $return_result = []; + + if($type == 'group'){ + $data['s_time'] = $data['s_time'].' 00:00:00'; + $data['e_time'] = $data['e_time'].' 23:59:59'; + $result = Db::query(" + select + id, + CONVERT(varchar(10), record_time, 120) AS r_t, + CONVERT(varchar(19), record_time, 120) AS record_time, + jump_num as v1, + jump_time as v2, + jump_kcal as v3 + from app_card_skip_data + where aud_id='".$data['aud_id']."' + and record_time between '".$data['s_time']."' and '".$data['e_time']."' + and is_del = 0 + order by record_time desc"); + foreach ($result as $key => $value) { + $time_t = $this->handle_hour_branch_second($value['v2']); + array_push($return_result, [ + 'id'=>$value['id'], + 'v1'=>$value['v1'], + 'v2'=>$time_t['h'].':'.$time_t['m'].':'.$time_t['s'], + 'v3'=>$value['v3'], + 'v1_name'=>'个数', + 'v2_name'=>'时长', + 'v3_name'=>'卡路里', + // 'r_t'=>str_replace('-', '/', $value['r_t']) + 'r_t'=>$value['r_t'] + ]); + } + }else{ + $result = Db::table('app_card_skip_data')->where(['aud_id'=>$data['aud_id'],'is_del'=>0])->field("id,record_time,REPLACE(record_time, '-', '-') AS b_time,jump_num,jump_time,jump_kcal")->order('record_time desc')->page($data['page'],$this->pagesize)->select(); + $return_result['totalrows'] = Db::table('app_card_skip_data')->where(['aud_id'=>$data['aud_id']])->count(); + $return_result['rows'] = []; + $return_result['pageno'] = $data['page']; + $return_result['pagesize'] = $this->pagesize; + $return_result['totalpage'] = ceil($return_result['totalrows']/$this->pagesize); + foreach ($result as $key => $value) { + $time_t = $this->handle_hour_branch_second($value['jump_time']); + array_push($return_result['rows'],[ + 'id'=>$value['id'], + 'v1'=>$value['jump_num'], + 'v2'=>$time_t['h'].':'.$time_t['m'].':'.$time_t['s'], + 'v3'=>$value['jump_kcal'], + 'v1_name'=>'个数', + 'v2_name'=>'时长', + 'v3_name'=>'卡路里', + 'record_time'=>$value['b_time'], + ]); + } + } + return $this->msg($return_result); + } + // 获取记录信息列表(分组)-肺活量 + // 获取记录信息列表(分页)-肺活量 + public function get_vitalcapacity_record_data($data,$type){ + $return_result = []; + + if($type == 'group'){ + $data['s_time'] = $data['s_time'].' 00:00:00'; + $data['e_time'] = $data['e_time'].' 23:59:59'; + $result = Db::query(" + select + id, + CONVERT(varchar(10), record_time, 120) AS r_t, + CONVERT(varchar(19), record_time, 120) AS record_time, + one_val as v1, + two_val as v2, + three_val as v3, + average_val as v4, + score as v5 + from app_card_vitalcapacity_data + where aud_id='".$data['aud_id']."' + and record_time between '".$data['s_time']."' and '".$data['e_time']."' + and is_del = 0 + order by record_time desc"); + foreach ($result as $key => $value) { + // $time_t = $this->handle_hour_branch_second($value['v2']); + array_push($return_result, [ + 'id'=>$value['id'], + 'v1'=>$value['v1'], + 'v2'=>$value['v2'], + 'v3'=>$value['v3'], + 'v4'=>$value['v4'], + 'v5'=>explode(',',$value['v5'])[0], + 'v1_name'=>'第一次', + 'v2_name'=>'第二次', + 'v3_name'=>'第三次', + 'v4_name'=>'平均', + 'v5_name'=>'成绩', + // 'r_t'=>str_replace('-', '/', $value['r_t']) + 'r_t'=>$value['r_t'] + ]); + } + }else{ + $result = Db::table('app_card_vitalcapacity_data')->where(['aud_id'=>$data['aud_id'],'is_del'=>0])->field("id,record_time,REPLACE(record_time, '-', '-') AS b_time,one_val,two_val,three_val,average_val,score")->order('record_time desc')->page($data['page'],$this->pagesize)->select(); + $return_result['totalrows'] = Db::table('app_card_vitalcapacity_data')->where(['aud_id'=>$data['aud_id']])->count(); + $return_result['rows'] = []; + $return_result['pageno'] = $data['page']; + $return_result['pagesize'] = $this->pagesize; + $return_result['totalpage'] = ceil($return_result['totalrows']/$this->pagesize); + foreach ($result as $key => $value) { + // $time_t = $this->handle_hour_branch_second($value['jump_time']); + array_push($return_result['rows'],[ + 'id'=>$value['id'], + 'v1'=>$value['one_val'], + 'v2'=>$value['two_val'], + 'v3'=>$value['three_val'], + 'v4'=>$value['average_val'], + 'v5'=>explode(',',$value['score'])[0], + 'v1_name'=>'第一次', + 'v2_name'=>'第二次', + 'v3_name'=>'第三次', + 'v4_name'=>'平均', + 'v5_name'=>'成绩', + 'record_time'=>$value['b_time'] + ]); + } + } + return $this->msg($return_result); + } + + + // 获取详细历史数据信息 + public function get_all_detaile_data_msg($data){ + $result = Db::table($this->db_name[$data['type']])->where(['id'=>$data['id']])->find(); + if($result){ + $result_data = []; + foreach ($this->request_result[$data['type']] as $key => $value) { + $temporary_arr['key_name'] = $key; + $temporary_arr['name'] = $value[0]; + if($data['type'] == 2){ + if($key == 'un_fat_w_weight'){ + $temporary_arr['value'] = bcsub(explode(',',$result['weight'])[0],explode(',',$result['fat_w'])[0],2); + }else{ + $temporary_arr['value'] = explode(',',$result[$key])[0]; + } + }else{ + $temporary_arr['value'] = explode(',',$result[$key])[0]; + } + $temporary_arr['unit'] = $value[1]; + array_push($result_data,$temporary_arr); + } + return $this->msg($result_data); + }else{ + return $this->msg(10004); + } + + } + + + // 数据对比 + public function get_body_data_contrast($data){ + // dump($data); + $data2 = [$data['before_id'],$data['after_id']]; + $data3 = implode(',',$data2); + $calculate_arr = []; + $result = Db::query(" + select + acbd.id, + acbd.height, + acbd.weight, + acbd.bmi, + acbd.fat_r, + acbd.fat_w, + acbd.muscle, + acbd.muscleval, + acbd.water, + acbd.proteinval, + acbd.bone, + acbd.protein, + acbd.kcal, + acbd.visceral, + acbd.sfr, + acbd.record_time, + REPLACE(CONVERT(varchar(10), acbd.record_time, 23), '-', '-') AS b_time, + aud.nickname, + aud.gender, + aud.birthday, + aud.head_pic + from app_card_body_data as acbd + left join app_user_data as aud on acbd.aud_id=aud.id + where acbd.id in ($data3) + and acbd.is_del = 0 + "); + // dump($result); + // die; + if(!$result || count($result)<2){ + return $this->msg(10004); + } + // 调整顺序 + foreach ($result as $key => $value) { + if($value['id'] == $data2[0]){ + $calculate_arr['before'] = $value; + }else{ + $calculate_arr['after'] = $value; + } + } + $return_data['time'] = $calculate_arr['before']['b_time'].'-'.$calculate_arr['after']['b_time']; + $return_data['headimg'] = $calculate_arr['before']['head_pic']; + $return_data['name'] = $calculate_arr['before']['nickname']; + $return_data['gender'] = $calculate_arr['before']['gender']; + $return_data['age'] = $this->calculate_age($calculate_arr['before']['birthday']); + $return_data['day'] = abs($this->daysSince($calculate_arr['before']['record_time'],$calculate_arr['after']['record_time'])); + + $return_data['list'] = []; + + foreach ($calculate_arr['before'] as $key => $value) { + if(in_array($key, ['height','weight','bmi','fat_r','fat_w','muscle','muscleval','water','proteinval','bone','protein','kcal','visceral','sfr'])){ + $before_arr = explode(',', $value); + $after_arr = explode(',', $calculate_arr['after'][$key]); + // $calculate_arr['before'][$key] = explode(',', $value); + + array_push($return_data['list'], [ + 'firstresult'=>[ + 'color'=>'', + 'level'=>$before_arr[1], + 'value'=>$before_arr[0], + 'title'=>$this->request_result['2'][$key][0], + 'unit'=>$this->request_result['2'][$key][1], + 'name'=>$key, + ], + 'secondresult'=>[ + 'color'=>'', + 'level'=>$after_arr[1], + 'value'=>$after_arr[0], + 'title'=>$this->request_result['2'][$key][0], + 'unit'=>$this->request_result['2'][$key][1], + 'name'=>$key, + ], + 'diffval'=>bcsub($after_arr[0],$before_arr[0],2), + ]); + } + } + return $this->msg($return_data); + } + // 数据对比 + public function get_skip_data_contrast($data){ + // dump($data); + $data2 = [$data['before_id'],$data['after_id']]; + $data3 = implode(',',$data2); + $calculate_arr = []; + $result = Db::query(" + select + acsd.id, + acsd.jump_num, + acsd.jump_time, + acsd.jump_kcal, + acsd.record_time, + REPLACE(CONVERT(varchar(10), acsd.record_time, 23), '-', '-') AS b_time, + aud.nickname, + aud.gender, + aud.birthday, + aud.head_pic + from app_card_skip_data as acsd + left join app_user_data as aud on acsd.aud_id=aud.id + where acsd.id in ($data3) + and acsd.is_del = 0 + "); + + if(!$result || count($result)<2){ + return $this->msg(10004); + } + // 调整顺序 + foreach ($result as $key => $value) { + if($value['id'] == $data2[0]){ + $calculate_arr['before'] = $value; + }else{ + $calculate_arr['after'] = $value; + } + } + $return_data['time'] = $calculate_arr['before']['b_time'].'-'.$calculate_arr['after']['b_time']; + $return_data['headimg'] = $calculate_arr['before']['head_pic']; + $return_data['name'] = $calculate_arr['before']['nickname']; + $return_data['gender'] = $calculate_arr['before']['gender']; + $return_data['age'] = $this->calculate_age($calculate_arr['before']['birthday']); + $return_data['day'] = abs($this->daysSince($calculate_arr['before']['record_time'],$calculate_arr['after']['record_time'])); + + $return_data['list'] = []; + // dump($calculate_arr); + // die; + foreach ($calculate_arr['before'] as $key => $value) { + if(in_array($key, ['jump_num','jump_time','jump_kcal'])){ + $before_arr = $value; + $after_arr = $calculate_arr['after'][$key]; + $temporary_arr = [ + 'firstresult'=>[ + 'color'=>'', + 'level'=>'', + 'value'=>$key=='jump_time'?implode(':',$this->handle_hour_branch_second($before_arr)):$before_arr, + 'title'=>$this->request_result['6'][$key][0], + 'unit'=>$this->request_result['6'][$key][1], + 'name'=>$key, + ], + 'secondresult'=>[ + 'color'=>'', + 'level'=>'', + 'value'=>$key=='jump_time'?implode(':',$this->handle_hour_branch_second($after_arr)):$after_arr, + 'title'=>$this->request_result['6'][$key][0], + 'unit'=>$this->request_result['6'][$key][1], + 'name'=>$key, + ], + 'diffval'=>bcsub($after_arr,$before_arr,2) + ]; + if($key=='jump_time'){ + $temporary_arr['diffval'] = $temporary_arr['diffval'] >= 0?implode(':',$this->handle_hour_branch_second($temporary_arr['diffval'])):'-'.implode(':',$this->handle_hour_branch_second($temporary_arr['diffval'])); + } + array_push($return_data['list'], $temporary_arr); + + } + + } + return $this->msg($return_data); + } + // 数据对比 + public function get_vitalcapacity_data_contrast($data){ + // dump($data); + $data2 = [$data['before_id'],$data['after_id']]; + $data3 = implode(',',$data2); + $calculate_arr = []; + $result = Db::query(" + select + acsd.id, + acsd.one_val, + acsd.two_val, + acsd.three_val, + acsd.average_val, + acsd.score_val as score, + acsd.record_time, + REPLACE(CONVERT(varchar(10), acsd.record_time, 23), '-', '-') AS b_time, + aud.nickname, + aud.gender, + aud.birthday, + aud.head_pic + from app_card_vitalcapacity_data as acsd + left join app_user_data as aud on acsd.aud_id=aud.id + where acsd.id in ($data3) + and acsd.is_del = 0 + "); + + if(!$result || count($result)<2){ + return $this->msg(10004); + } + // 调整顺序 + foreach ($result as $key => $value) { + if($value['id'] == $data2[0]){ + $calculate_arr['before'] = $value; + }else{ + $calculate_arr['after'] = $value; + } + } + $return_data['time'] = $calculate_arr['before']['b_time'].'-'.$calculate_arr['after']['b_time']; + $return_data['headimg'] = $calculate_arr['before']['head_pic']; + $return_data['name'] = $calculate_arr['before']['nickname']; + $return_data['gender'] = $calculate_arr['before']['gender']; + $return_data['age'] = $this->calculate_age($calculate_arr['before']['birthday']); + $return_data['day'] = abs($this->daysSince($calculate_arr['before']['record_time'],$calculate_arr['after']['record_time'])); + + $return_data['list'] = []; + // dump($calculate_arr); + // die; + foreach ($calculate_arr['before'] as $key => $value) { + if(in_array($key, ['one_val','two_val','three_val','average_val','score_val'])){ + $before_arr = $value; + $after_arr = $calculate_arr['after'][$key]; + $temporary_arr = [ + 'firstresult'=>[ + 'color'=>'', + 'level'=>'', + 'value'=>$before_arr, + 'title'=>$this->request_result['8'][$key][0], + 'unit'=>$this->request_result['8'][$key][1], + 'name'=>$key, + ], + 'secondresult'=>[ + 'color'=>'', + 'level'=>'', + 'value'=>$after_arr, + 'title'=>$this->request_result['8'][$key][0], + 'unit'=>$this->request_result['8'][$key][1], + 'name'=>$key, + ], + 'diffval'=>bcsub($after_arr,$before_arr,2) + ]; + array_push($return_data['list'], $temporary_arr); + + } + + } + return $this->msg($return_data); + } + + + +} \ No newline at end of file diff --git a/application/appbackups/controller/Skip.php b/application/appbackups/controller/Skip.php new file mode 100644 index 0000000..38bca8f --- /dev/null +++ b/application/appbackups/controller/Skip.php @@ -0,0 +1,365 @@ +['跳绳个数','个数/个','#009DFF'],'jump_time'=>['跳绳时长','时长/分','#009DFF'],'jump_kcal'=>['消耗卡路里','卡路里/kcal','#009DFF']]; + + protected $result_end_data_mould = [ + 'name'=>'', + 'value'=>'', + 'unit'=>'', + 'standard'=>'', + 'color'=>'', + 'list'=>[] + ]; + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + ################################################################接口################################################################ + ################################################################接口################################################################ + ################################################################接口################################################################ + // 手动记录 + public function skip_manual_recording($data = ['aud_id'=>'61','r_time'=>'2024-07-24','num'=>'369','time_m'=>'02','time_s'=>'42','type'=>'free','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + // dump(bcmul('1.23', '4.56', 2)); + // dump(bcround('18.777', 2)); + // // phpinfo(); + // // opcache_reset(); + // die; + + if(!array_key_exists('aud_id', $data) || !array_key_exists('r_time', $data) || !array_key_exists('num', $data) || !array_key_exists('time_m', $data) || !array_key_exists('time_s', $data) || !array_key_exists('type', $data) || !array_key_exists('token', $data)){ + return $this->msg(10001); + } + if(!$this->isValidInteger($data['num']+0) || !$this->isValidInteger($data['time_m']+0) || !$this->isValidInteger($data['time_s']+0)){ + return $this->msg(10005,'跳绳数量或者分钟、秒钟值必须为整数'); + } + if($data['num'] <= 0){ + return $this->msg(10005,'跳绳数不能小于等于0'); + } + if(abs($data['time_s']) >= 60){ + return $this->msg(10005,'秒钟值不能大于60'); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + if($this->validate_user_identity($data['aud_id']) === false){ + return $this->msg(10003); + } + // die; + return $this->skip_manual_recording_action($data); + } + // 设备记录记录 + public function skip_manual_recording_device($data = ['aud_id'=>'58','num'=>'582','time_m'=>'10','time_s'=>'00','type'=>'free','kcal'=>'200','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $data) || !array_key_exists('kcal', $data) || !array_key_exists('num', $data) || !array_key_exists('time_m', $data) || !array_key_exists('time_s', $data) || !array_key_exists('type', $data) || !array_key_exists('token', $data)){ + return $this->msg(10001); + } + if(!$this->isValidInteger($data['num']+0) || !$this->isValidInteger($data['time_m']+0) || !$this->isValidInteger($data['time_s']+0)){ + return $this->msg(10005,'跳绳数量或者分钟、秒钟值必须为整数'); + } + if($data['num'] <= 0){ + return $this->msg(10005,'跳绳数不能小于等于0'); + } + if(abs($data['time_s']) >= 60){ + return $this->msg(10005,'秒钟值不能大于60'); + } + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + if($this->validate_user_identity($data['aud_id']) === false){ + return $this->msg(10003); + } + return $this->skip_manual_recording_action($data); + } + // 今日数据 + public function skip_today_data($data = ['aud_id'=>'26','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $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']); + // dump($data); + // die; + return $this->skip_today_data_action($data); + } + // 曲线 + public function skip_curve_chart($data = ['aud_id'=>'83','time'=>'2024-07-24','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $data) || !array_key_exists('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']); + return $this->skip_curve_chart_action($data); + } + // 删除历史数据 + public function skip_del_record_data($data = ['id'=>'16','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('id', $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']); + $user_data = Db::table('app_card_skip_data')->where(['id'=>$data['id']])->update(['is_del'=>1]); + if($user_data){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + ################################################################接口################################################################ + ################################################################接口################################################################ + ################################################################接口################################################################ + ################################################################skip_manual_recording + public function skip_manual_recording_action($data){ + // 分秒转换为秒 + $data['time'] = abs($data['time_m'])*60+abs($data['time_s']); + $user_msg_content = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->count(); + if($user_msg_content<=0){ + return $this->msg(10004); + } + if(!array_key_exists('kcal', $data)){ + $last_data_body = Db::table('app_card_body_data')->where(['aud_id'=>$data['aud_id'],'is_del'=>0])->order('record_time desc,id desc')->field('id,weight_val,record_time')->find(); + if(!$last_data_body){ + $last_data_body = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('id,weight as weight_val')->find(); + if(!$last_data_body){ + return $this->msg(10004); + } + } + $kcal_data = $this->skip_kcal_calculate($data['num'],$data['time'],$last_data_body['weight_val']); + }else{ + // 将时间从秒转换为分钟 + $minutes = bcdiv($data['time'],60,20); + // 计算每分钟的跳绳次数 + $jumpsPerMinute = bcdiv($data['num'],$minutes,2); + $kcal_data['totalCalories'] = $data['kcal']; + $kcal_data['averageAchievement'] = $jumpsPerMinute; + $kcal_data['caloriesPerMinute'] = bcdiv($kcal_data['totalCalories'],$minutes,2); + } + + + $data_set = [ + 'create_time'=>date('Y-m-d H:i:s'), + 'last_update_time'=>date('Y-m-d H:i:s'), + 'jump_num'=>$data['num'], + 'jump_time'=>$data['time'], + 'jump_kcal'=>$kcal_data['totalCalories'], + 'average_num'=>$kcal_data['averageAchievement'], + 'average_kcal'=>$kcal_data['caloriesPerMinute'], + 'aud_id'=>$data['aud_id'], + 'record_time'=>array_key_exists('r_time', $data)?$data['r_time']:date('Y-m-d H:i:s'), + 'jump_type'=>$data['type'] + ]; + if(strlen($data_set['record_time']) <= 12){ + $data_set['record_time'] = $this->addCurrentTimeToDateString($data_set['record_time']); + } + $last_data_body = Db::table('app_card_skip_data')->insert($data_set); + $result = [ + 'today_jump_num'=>0, + 'today_jump_time'=>0, + 'today_jump_kcal'=>0, + ]; + $all_data = Db::table('app_card_skip_data')->where(['aud_id'=>$data['aud_id']])->whereTime('record_time','today')->field('jump_num,jump_time,jump_kcal')->select(); + foreach ($all_data as $key => $value) { + $result['today_jump_num'] = $result['today_jump_num']+$value['jump_num']; + $result['today_jump_time'] = $result['today_jump_time']+$value['jump_time']; + $result['today_jump_kcal'] = bcadd($result['today_jump_kcal'],$value['jump_kcal'],2); + } + $result['last_jump_num'] = $data['num']; + $result['last_jump_time'] = $data['time']; + $result['last_jump_kcal'] = $data_set['jump_kcal']; + // $result['last_record_time'] = str_replace('-', '/', $data_set['record_time']); + $result['last_record_time'] = $data_set['record_time']; + $time_conversion = $this->handle_hour_branch_second($result['today_jump_time']); + $result['today_jump_time'] = $time_conversion['h'].':'.$time_conversion['m'].':'.$time_conversion['s']; + $time_conversion = $this->handle_hour_branch_second($result['last_jump_time']); + $result['last_jump_time'] = $time_conversion['h'].':'.$time_conversion['m'].':'.$time_conversion['s']; + return $this->msg($result); + } + ################################################################skip_today_data + public function skip_today_data_action($data){ + $all_data = Db::table('app_card_skip_data')->where(['aud_id'=>$data['aud_id']])->whereTime('record_time','today')->field('jump_num,jump_time,jump_kcal')->select(); + $last_data = Db::table('app_card_skip_data')->where(['aud_id'=>$data['aud_id']])->order('record_time desc,id desc')->field('id,jump_num,jump_time,jump_kcal,record_time')->find(); + $result = [ + 'today_jump_num'=>0, + 'today_jump_time'=>0, + 'today_jump_kcal'=>0, + ]; + foreach ($all_data as $key => $value) { + $result['today_jump_num'] = $result['today_jump_num']+$value['jump_num']; + $result['today_jump_time'] = $result['today_jump_time']+$value['jump_time']; + $result['today_jump_kcal'] = bcadd($result['today_jump_kcal'],$value['jump_kcal'],2); + } + if($last_data){ + $result['last_jump_num'] = $last_data['jump_num']; + $result['last_jump_time'] = $last_data['jump_time']; + $result['last_jump_kcal'] = $last_data['jump_kcal']; + // $result['last_record_time'] = str_replace('-', '/', $last_data['record_time']); + $result['last_record_time'] = $last_data['record_time']; + }else{ + $result['last_jump_num'] = 0; + $result['last_jump_time'] = 0; + $result['last_jump_kcal'] = 0; + $result['last_record_time'] = ''; + } + $time_conversion = $this->handle_hour_branch_second($result['today_jump_time']); + $result['today_jump_time'] = $time_conversion['h'].':'.$time_conversion['m'].':'.$time_conversion['s']; + $time_conversion = $this->handle_hour_branch_second($result['last_jump_time']); + $result['last_jump_time'] = $time_conversion['h'].':'.$time_conversion['m'].':'.$time_conversion['s']; + return $this->msg($result); + } + ################################################################skip_curve_chart + // 运动曲线 + public function skip_curve_chart_action($data){ + // public function skip_motion_curve($data = ['aud_id'=>'11','time_data'=>['2024','04']]){ + // public function skip_motion_curve($data = ['aud_id'=>'11','time_data'=>['2024','12','31']]){ + + + $audid = $data['aud_id']; + $timeData = explode('-', $data['time']); + + // 根据$timeData的长度构建不同的查询条件 + $map = ['aud_id' => $audid]; + switch (count($timeData)) { + case 3: // 年月日 + $map['record_time'] = ['between', [date('Y-m-d 00:00:00', strtotime($timeData[0] . '-' . $timeData[1] . '-' . $timeData[2])), date('Y-m-d 23:59:59', strtotime($timeData[0] . '-' . $timeData[1] . '-' . $timeData[2]))]]; + break; + case 2: // 年月 + $map['record_time'] = ['between', [date('Y-m-01 00:00:00', strtotime($timeData[0] . '-' . $timeData[1])), date('Y-m-t 23:59:59', strtotime($timeData[0] . '-' . $timeData[1]))]]; + break; + case 1: // 年 + $map['record_time'] = ['between', [date('Y-01-01 00:00:00', strtotime($timeData[0])), date('Y-12-31 23:59:59', strtotime($timeData[0]))]]; + break; + default: + return $this->msg(10005); // 无效的时间数据格式 + } + + // 使用查询构造器进行查询 + $result = Db::name('app_card_skip_data')->where($map)->field('jump_num,jump_time,jump_kcal,aud_id,record_time,jump_type,DATEPART(hour, record_time) AS hour,DATEPART(minute, record_time) AS minute,DATEPART(day, record_time) AS day,DATEPART(month, record_time) AS month')->order('record_time')->select(); + // dump($result); + // die; + $return_data = []; + if(count($timeData) == 3){ + $key_condition = 'hour'; + }else if(count($timeData) == 2){ + $key_condition = 'day'; + }else if(count($timeData) == 1){ + $key_condition = 'month'; + } + // dump($key_condition); + foreach ($this->curve_data_format as $key => $value) { + $temporary_arr['title'] = $value[0].'('.$value[1].')'; + $temporary_arr['key'] = $key; + $temporary_arr['line']['categories'] = []; + $temporary_arr['line']['series'][0]['color'] = $value[2]; + $temporary_arr['line']['series'][0]['name'] = $value[0].'('.$value[1].')'; + $temporary_arr['line']['series'][0]['data'] = []; + foreach ($result as $k => $v) { + if($key_condition == 'hour'){ + + // 每一次的记录都添加进去 + array_push($temporary_arr['line']['categories'],$result[$k]['hour'].':'.$result[$k]['minute']); + array_push($temporary_arr['line']['series'][0]['data'],$result[$k][$key]); + + // // 根据小时分组 + // if(in_array($result[$k][$key_condition].'时',$temporary_arr['line']['categories'])){ + // $num = array_search($result[$k][$key_condition].'时', $temporary_arr['line']['categories']); + // $temporary_arr['line']['series'][0]['data'][$num] = bcadd($temporary_arr['line']['series'][0]['data'][$num],$result[$k][$key],2); + // }else{ + // array_push($temporary_arr['line']['categories'],$result[$k][$key_condition].'时'); + // array_push($temporary_arr['line']['series'][0]['data'],$result[$k][$key]); + // } + }else if($key_condition == 'day'){ + // 根据天分组 + if(in_array($result[$k]['month'].'/'.$result[$k][$key_condition],$temporary_arr['line']['categories'])){ + $num = array_search($result[$k]['month'].'/'.$result[$k][$key_condition], $temporary_arr['line']['categories']); + $temporary_arr['line']['series'][0]['data'][$num] = bcadd($temporary_arr['line']['series'][0]['data'][$num],$result[$k][$key],2); + }else{ + array_push($temporary_arr['line']['categories'],$result[$k]['month'].'/'.$result[$k][$key_condition]); + array_push($temporary_arr['line']['series'][0]['data'],$result[$k][$key]); + } + + }else{ + // 根据年分组 + if(in_array($result[$k]['month'].'月',$temporary_arr['line']['categories'])){ + $num = array_search($result[$k]['month'].'月', $temporary_arr['line']['categories']); + $temporary_arr['line']['series'][0]['data'][$num] = bcadd($temporary_arr['line']['series'][0]['data'][$num],$result[$k][$key],2); + }else{ + array_push($temporary_arr['line']['categories'],$result[$k]['month'].'月'); + array_push($temporary_arr['line']['series'][0]['data'],$result[$k][$key]); + } + } + } + // dump($temporary_arr); + array_push($return_data,$temporary_arr); + } + foreach ($return_data[1]['line']['series'][0]['data'] as $key => $value) { + $return_data[1]['line']['series'][0]['data'][$key] = bcdiv($return_data[1]['line']['series'][0]['data'][$key],60,2); + } + return $this->msg($return_data); + } + + + ################################################################other################################################################ + ################################################################other################################################################ + ################################################################other################################################################ + + // 跳绳卡路里计算 + public function skip_kcal_calculate($num=143, $time=222, $weight=70) { + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + // 将时间从秒转换为分钟 + $minutes = bcdiv($time,60,20); + // 计算每分钟的跳绳次数 + $jumpsPerMinute = bcdiv($num,$minutes,2); + // 根据跳绳次数确定MET值 + // $met = 11.8; + if ($jumpsPerMinute < 100) { + $met = 8.8; + } else if ($jumpsPerMinute >= 100 && $jumpsPerMinute < 120) { + $met = 11.8; + } else { + $met = 12.3; + } + // 计算每分钟燃烧的卡路里 + $caloriesPerMinute = bcdiv(bcmul(bcmul($met,$weight,20),3.5,20),200,2); + // 计算总卡路里消耗 + $totalCalories = bcmul($caloriesPerMinute,$minutes,2); + // 返回结果 + return [ + 'averageAchievement' => $jumpsPerMinute, + 'caloriesPerMinute' => $caloriesPerMinute, + 'totalCalories' => $totalCalories + ]; + } + + +} \ No newline at end of file diff --git a/application/appbackups/controller/Sportstesting.php b/application/appbackups/controller/Sportstesting.php new file mode 100644 index 0000000..7c192b8 --- /dev/null +++ b/application/appbackups/controller/Sportstesting.php @@ -0,0 +1,1296 @@ +'现场类项目', + 'xc_1'=>'第一类:素质项目Ⅰ(8分)', + 'xc_2'=>'第二类:素质项目Ⅱ(8分)', + 'xc_3'=>'第三类:运动能力Ⅰ(8分)', + 'xc_4'=>'第四类:运动能力Ⅱ(6分)', + 'gc'=>'过程类项目', + 'gc_8_m'=>'8年级体质健康统测(10分)', + 'gc_8_r'=>'8年级体育与健康知识机考(10分)', + ]; + protected $city_data_rule_is_choice = ['xc_2','xc_3','xc_4']; + + protected $type_all = [ + '1'=>'整数填数字(例肺活量)', + '2'=>'小数(例50米跑)', + '3'=>'拖动区间(例坐位体前屈:-15至30之间,需要有小数1位)', + '4'=>'分钟秒钟(例1000米跑)', + ]; + + protected $city_data_rule2 = [ + '北京'=>[ + 'xc'=>[ + 'xc_1'=>[ + '1'=>[ + '1000米'=>[ + 'list'=>[ + '4:05'=>'8', + '4:11'=>'7.5', + '4:18'=>'7', + '4:26'=>'6.5', + '4:35'=>'6', + '4:45'=>'5.5', + '4:55'=>'5', + '5:01'=>'4.5', + '5:07'=>'4', + '5:13'=>'3.5', + '5:20'=>'3', + '5:27'=>'2.5', + '5:34'=>'2', + '5:42'=>'1.5', + '5:50'=>'1', + '5:59'=>'0.5', + '6:00'=>'0' + ], + 'unit'=>'分/秒', + 'value'=>'00:00', + 'proportion'=>'1', + 'type'=>'4', + ], + ], + '2'=>[ + '800米'=>[ + 'list'=>[ + '3:55'=>'8', + '4:01'=>'7.5', + '4:08'=>'7', + '4:16'=>'6.5', + '4:25'=>'6', + '4:35'=>'5.5', + '4:45'=>'5', + '4:49'=>'4.5', + '4:53'=>'4', + '4:57'=>'3.5', + '5:02'=>'3', + '5:07'=>'2.5', + '5:12'=>'2', + '5:19'=>'1.5', + '5:26'=>'1', + '5:35'=>'0.5', + '5:36'=>'0', + ], + 'unit'=>'分/秒', + 'value'=>'00:00', + 'proportion'=>'1', + 'type'=>'4', + ] + ], + ], + 'xc_2'=>[ + '1'=>[ + '引体向上'=>[ + 'list'=>[ + '11'=>'8', + '10'=>'7.5', + '9'=>'7', + '8'=>'6.5', + '7'=>'6', + '6'=>'5.5', + '5'=>'5', + '4'=>'4.5', + '3'=>'4', + '2'=>'3.5', + '1'=>'3' + ], + 'unit'=>'次', + 'value'=>'0', + 'proportion'=>'1', + 'type'=>'1', + ], + '双杠臂屈伸'=>[ + 'list'=>[ + '11'=>'8', + '10'=>'7.5', + '9'=>'7', + '8'=>'6.5', + '7'=>'6', + '6'=>'5.5', + '5'=>'5', + '4'=>'4.5', + '3'=>'4', + '2'=>'3.5', + '1'=>'3' + ], + 'unit'=>'次', + 'value'=>'0', + 'proportion'=>'1', + 'type'=>'1', + ], + ], + '2'=>[ + '斜身引体'=>[ + 'list'=>[ + '40'=>'8', + '36'=>'7.5', + '32'=>'7', + '28'=>'6.5', + '24'=>'6', + '20'=>'5.5', + '16'=>'5', + '12'=>'4.5', + '10'=>'4', + '9'=>'3.5', + '8'=>'3', + '7'=>'2.5', + '6'=>'2', + '5'=>'1.5', + '4'=>'1', + '3'=>'0.5', + '2'=>'0' + ], + 'unit'=>'次', + 'value'=>'0', + 'proportion'=>'1', + 'type'=>'1', + ], + '仰卧起坐'=>[ + 'list'=>[ + '42'=>'8', + '40'=>'7.5', + '37'=>'7', + '34'=>'6.5', + '30'=>'6', + '26'=>'5.5', + '22'=>'5', + '21'=>'4.5', + '20'=>'4', + '19'=>'3.5', + '18'=>'3', + '17'=>'2.5', + '16'=>'2', + '15'=>'1.5', + '14'=>'1', + '13'=>'0.5', + '12'=>'0' + ], + 'unit'=>'次', + 'value'=>'0', + 'proportion'=>'1', + 'type'=>'1', + ], + ], + ], + 'xc_3'=>[ + '1'=>[ + '足球运球/射门'=>['list'=>['19.5'=>'8','20.0'=>'7.5','20.5'=>'7','21.0'=>'6.5','21.5'=>'6','22.0'=>'5.5','22.5'=>'5','23.0'=>'4.5','23.8'=>'4','24.6'=>'3.5','25.4'=>'3','26.2'=>'2.5','27.0'=>'2','27.8'=>'1.5','28.6'=>'1','29.4'=>'0.5','29.5'=>'0'],'unit'=>'秒','value'=>'00.0','proportion'=>'1','type'=>'2',], + ], + '2'=>[ + '足球运球/射门'=>['list'=>['21.0'=>'8','21.5'=>'7.5','22.0'=>'7','22.5'=>'6.5','23.0'=>'6','23.5'=>'5.5','24.0'=>'5','24.5'=>'4.5','25.3'=>'4','26.1'=>'3.5','26.9'=>'3','27.7'=>'2.5','28.5'=>'2','29.3'=>'1.5','30.1'=>'1','30.9'=>'0.5','31.0'=>'0'],'unit'=>'秒','value'=>'00.0','proportion'=>'1','type'=>'2',], + ], + ], + 'xc_4'=>[ + '1'=>[ + '100米游泳'=>['list'=>['2:25'=>'6','2:35'=>'5.5','2:45'=>'5','2:55'=>'4.5','3:05'=>'4','3:15'=>'3.5','3:30'=>'3','3:40'=>'2.5','3:50'=>'2','4:00'=>'1.5','4:10'=>'1','4:20'=>'0.5','4:21'=>'0'],'unit'=>'分/秒','value'=>'00:00','proportion'=>'1','type'=>'4',], + ], + '2'=>[ + '100米游泳'=>['list'=>['2:40'=>'6','2:48'=>'5.5','2:56'=>'5','3:04'=>'4.5','3:12'=>'4','3:20'=>'3.5','3:30'=>'3','3:40'=>'2.5','3:50'=>'2','4:00'=>'1.5','4:10'=>'1','4:20'=>'0.5','4:21'=>'0'],'unit'=>'分/秒','value'=>'00:00','proportion'=>'1','type'=>'4',], + ], + ], + ], + 'gc'=>[ + 'gc_8_m'=>[ + '1'=>[ + 'BMI'=>['list'=>['15.6'=>'80','22.5'=>'100','25.2'=>'80','100'=>'60'],'unit'=>'','value'=>'0','proportion'=>'0.15','type'=>'2',], + '肺活量'=>['list'=>['3940'=>'100','3820'=>'95','3700'=>'90','3450'=>'85','3200'=>'80','3080'=>'78','2960'=>'76','2840'=>'74','2720'=>'72','2600'=>'70','2480'=>'68','2360'=>'66','2240'=>'64','2120'=>'62','2000'=>'60','1890'=>'50','1780'=>'40','1670'=>'30','1560'=>'20','1450'=>'10',],'unit'=>'ml','value'=>'0','proportion'=>'0.15','type'=>'1',], + '50米跑'=>[ + 'list'=>[ + '7.5'=>'100', + '7.6'=>'95', + '7.7'=>'90', + '7.8'=>'85', + '7.9'=>'80', + '8.1'=>'78', + '8.3'=>'76', + '8.5'=>'74', + '8.7'=>'72', + '8.9'=>'70', + '9.1'=>'68', + '9.3'=>'66', + '9.5'=>'64', + '9.7'=>'62', + '9.9'=>'60', + '10.1'=>'50', + '10.3'=>'40', + '10.5'=>'30', + '10.7'=>'20', + '10.9'=>'10', + ], + 'unit'=>'秒', + 'value'=>'00.0', + 'proportion'=>'0.2', + 'type'=>'2', + ], + '坐位体前屈'=>[ + 'list'=>[ + '19.6'=>'100', + '17.7'=>'95', + '15.8'=>'90', + '13.7'=>'85', + '11.6'=>'80', + '10.3'=>'78', + '9'=>'76', + '7.7'=>'74', + '6.4'=>'72', + '5.1'=>'70', + '3.8'=>'68', + '2.5'=>'66', + '1.2'=>'64', + '-0.1'=>'62', + '-1.4'=>'60', + '-2.6'=>'50', + '-3.8'=>'40', + '-5'=>'30', + '-6.2'=>'20', + '-7.4'=>'10', + ], + 'unit'=>'cm', + 'value'=>'00.0', + 'proportion'=>'0.1', + 'type'=>'3', + ], + '立定跳远'=>[ + 'list'=>[ + '240'=>'100', + '233'=>'95', + '226'=>'90', + '218'=>'85', + '210'=>'80', + '206'=>'78', + '202'=>'76', + '198'=>'74', + '194'=>'72', + '190'=>'70', + '186'=>'68', + '182'=>'66', + '178'=>'64', + '174'=>'62', + '170'=>'60', + '165'=>'50', + '160'=>'40', + '155'=>'30', + '150'=>'20', + '145'=>'10', + ], + 'unit'=>'cm', + 'value'=>'0', + 'proportion'=>'0.1', + 'type'=>'1', + ], + '引体向上'=>[ + 'list'=>[ + '14'=>'100', + '13'=>'95', + '12'=>'90', + '11'=>'85', + '10'=>'80', + '9'=>'76', + '8'=>'72', + '7'=>'68', + '6'=>'64', + '5'=>'60', + '4'=>'50', + '3'=>'40', + '2'=>'30', + '1'=>'20', + '0'=>'10', + ], + 'unit'=>'个', + 'value'=>'0', + 'proportion'=>'0.1', + 'type'=>'1', + 'add_point'=>[ + '10'=>'10', + '9'=>'9', + '8'=>'8', + '7'=>'7', + '6'=>'6', + '5'=>'5', + '4'=>'4', + '3'=>'3', + '2'=>'2', + '1'=>'1', + ] + ], + '男生1000米'=>[ + 'list'=>[ + '3:50'=>'100', + '3:55'=>'95', + '4:00'=>'90', + '4:07'=>'85', + '4:15'=>'80', + '4:20'=>'78', + '4:25'=>'76', + '4:30'=>'74', + '4:35'=>'72', + '4:40'=>'70', + '4:45'=>'68', + '4:50'=>'66', + '4:55'=>'64', + '5:00'=>'62', + '5:05'=>'60', + '5:25'=>'50', + '5:45'=>'40', + '6:05'=>'30', + '6:25'=>'20', + '6:45'=>'10', + ], + 'unit'=>'分/秒', + 'value'=>'00:00', + 'proportion'=>'0.2', + 'type'=>'4', + 'add_point'=>[ + '-35'=>'10', + '-32'=>'9', + '-29'=>'8', + '-26'=>'7', + '-23'=>'6', + '-20'=>'5', + '-16'=>'4', + '-12'=>'3', + '-8'=>'2', + '-4'=>'1', + ] + ], + ], + '2'=>[ + 'BMI'=>[ + 'list'=>[ + '15.2'=>'80', + '22.2'=>'100', + '24.8'=>'80', + '100'=>'60' + ], + 'unit'=>'', + 'value'=>'00.0', + 'proportion'=>'0.15', + 'type'=>'2', + ], + '肺活量'=>[ + 'list'=>[ + '2900'=>'100', + '2850'=>'95', + '2800'=>'90', + '2650'=>'85', + '2500'=>'80', + '2400'=>'78', + '2300'=>'76', + '2200'=>'74', + '2100'=>'72', + '2000'=>'70', + '1900'=>'68', + '1800'=>'66', + '1700'=>'64', + '1600'=>'62', + '1500'=>'60', + '1460'=>'50', + '1420'=>'40', + '1380'=>'30', + '1340'=>'20', + '1300'=>'10', + ], + 'unit'=>'ml', + 'value'=>'0', + 'proportion'=>'0.15', + 'type'=>'1', + ], + '50米跑'=>[ + 'list'=>[ + '8'=>'100', + '8.1'=>'95', + '8.2'=>'90', + '8.5'=>'85', + '8.8'=>'80', + '9'=>'78', + '9.2'=>'76', + '9.4'=>'74', + '9.6'=>'72', + '9.8'=>'70', + '10'=>'68', + '10.2'=>'66', + '10.4'=>'64', + '10.6'=>'62', + '10.8'=>'60', + '11'=>'50', + '11.2'=>'40', + '11.4'=>'30', + '11.6'=>'20', + '11.8'=>'10', + ], + 'unit'=>'秒', + 'value'=>'00.0', + 'proportion'=>'0.2', + 'type'=>'2', + ], + '坐位体前屈'=>[ + 'list'=>[ + '22.7'=>'100', + '21'=>'95', + '19.3'=>'90', + '17.6'=>'85', + '15.9'=>'80', + '14.6'=>'78', + '13.3'=>'76', + '12'=>'74', + '10.7'=>'72', + '9.4'=>'70', + '8.1'=>'68', + '6.8'=>'66', + '5.5'=>'64', + '4.2'=>'62', + '2.9'=>'60', + '2.1'=>'50', + '1.3'=>'40', + '0.5'=>'30', + '-0.3'=>'20', + '-1.1'=>'10', + ], + 'unit'=>'cm', + 'value'=>'00.0', + 'proportion'=>'0.1', + 'type'=>'3', + ], + '立定跳远'=>[ + 'list'=>[ + '240'=>'100', + '233'=>'95', + '226'=>'90', + '218'=>'85', + '210'=>'80', + '206'=>'78', + '202'=>'76', + '198'=>'74', + '194'=>'72', + '190'=>'70', + '186'=>'68', + '182'=>'66', + '178'=>'64', + '174'=>'62', + '170'=>'60', + '165'=>'50', + '160'=>'40', + '155'=>'30', + '150'=>'20', + '145'=>'10', + ], + 'unit'=>'cm', + 'value'=>'0', + 'proportion'=>'0.1', + 'type'=>'1', + ], + '一分钟仰卧起坐'=>[ + 'list'=>[ + '51'=>'100', + '49'=>'95', + '47'=>'90', + '44'=>'85', + '41'=>'80', + '39'=>'78', + '37'=>'76', + '35'=>'74', + '33'=>'72', + '31'=>'70', + '29'=>'68', + '27'=>'66', + '25'=>'64', + '23'=>'62', + '21'=>'60', + '19'=>'50', + '17'=>'40', + '15'=>'30', + '13'=>'20', + '11'=>'10', + ], + 'unit'=>'个', + 'value'=>'0', + 'proportion'=>'0.1', + 'type'=>'1', + 'add_point'=>[ + '13'=>'10', + '12'=>'9', + '11'=>'8', + '10'=>'7', + '9'=>'6', + '8'=>'5', + '7'=>'4', + '6'=>'3', + '4'=>'2', + '2'=>'1', + ] + ], + '女生800米'=>[ + 'list'=>[ + '3:30'=>'100', + '3:37'=>'95', + '3:44'=>'90', + '3:52'=>'85', + '4:00'=>'80', + '4:05'=>'78', + '4:10'=>'76', + '4:15'=>'74', + '4:20'=>'72', + '4:25'=>'70', + '4:30'=>'68', + '4:35'=>'66', + '4:40'=>'64', + '4:45'=>'62', + '4:50'=>'60', + '5:00'=>'50', + '5:10'=>'40', + '5:20'=>'30', + '5:30'=>'20', + '5:40'=>'10', + ], + 'unit'=>'分/秒', + 'value'=>'00:00', + 'proportion'=>'0.2', + 'type'=>'4', + 'add_point'=>[ + '-50'=>'10', + '-45'=>'9', + '-40'=>'8', + '-35'=>'7', + '-30'=>'6', + '-25'=>'5', + '-20'=>'4', + '-15'=>'3', + '-10'=>'2', + '-5'=>'1', + ] + ], + ], + ], + 'gc_8_r'=>[ + '1'=>[ + '机测'=>[ + 'list'=>[],'unit'=>'分','value'=>'0','proportion'=>'1','type'=>'1',], + ], + '2'=>[ + '机测'=>[ + 'list'=>[],'unit'=>'分','value'=>'0','proportion'=>'1','type'=>'1',], + ] + ] + ] + ], + ]; + + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + ################################################################接口################################################################ + ################################################################接口################################################################ + ################################################################接口################################################################ + // 获取单个类型列表 + public function sportstesting_get_type_list($data = ['address'=>'上海','gender'=>'1','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('address', $data) || !array_key_exists('gender', $data) || !array_key_exists('token', $data)){ + return $this->msg(10001); + } + // cache($data['token'], time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + return $this->sportstesting_get_type_list_action($data); + } + // 获取地区类型列表 + public function sportstesting_get_region_list($data = ['parameter_data'=>'上海','gender'=>'1','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('gender', $data) || !array_key_exists('parameter_data', $data) || !array_key_exists('token', $data)){ + return $this->msg(10001); + } + // cache($data['token'], time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + return $this->sportstesting_get_region_list_action($data); + } + // 获取估分最后一次数据 + public function sportstesting_get_last_data($data = ['aud_id'=>'83','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $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']); + // cache('sportstesting_get_last_data',json_encode($data)); + return $this->sportstesting_get_last_data_action($data); + } + // 计算并存储数据 + public function sportstesting_set_once_data($data = ['aud_id'=>'83','parameter_data'=>'辽宁,沈阳市','result_data'=>'','gender'=>'1','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + // $data = json_decode(cache('sportstesting_set_once_data'),true); + // dump($data); + + // die; + // return $this->dayin_data('sportstesting_set_once_data'); + if(count(input('post.')) > 0){ + $data = input('post.'); + } + + if(!array_key_exists('aud_id', $data) || !array_key_exists('parameter_data', $data) || !array_key_exists('result_data', $data) || !array_key_exists('gender', $data) || !array_key_exists('token', $data)){ + return $this->msg(10001); + } + if(is_array($data['result_data']) && !empty($data['result_data'])){ + // 是个数组且不为空数组 + foreach ($data['result_data'] as $key => $value) { + foreach ($value['list'] as $k => $v) { + if(count($v['list']) <= 0){ + return $this->msg(10010,$v['name'].'内并未选择内容'); + } + if($v['is_choice'] >= 0 && count($v['list']) < $v['is_choice']){ + return $this->msg(10010,$v['name'].'内并缺少选项,请选择'.$v['is_choice'].'个选项'); + } + } + } + } + + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + cache('sportstesting_set_once_data',json_encode($data)); + // return $this->msg($data); + unset($data['token']); + // return $this->msg($data); + + return $this->sportstesting_set_once_data_action2($data); + // return $this->sportstesting_set_once_data_action($data); + } + // 获取估分历史列表 + public function sportstesting_get_all_list($data = ['aud_id'=>'25','page'=>'1','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $data) || !array_key_exists('token', $data) || !array_key_exists('page', $data)){ + return $this->msg(10001); + } + // cache($data['token'], time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + // cache('sportstesting_get_all_list',json_encode($data)); + return $this->sportstesting_get_all_list_action($data); + } + // 获取估分历史详情 + public function sportstesting_get_one_details($data = ['id'=>'2','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('id', $data) || !array_key_exists('token', $data)){ + return $this->msg(10001); + } + // cache($data['token'], time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + return $this->sportstesting_get_one_details_action($data); + } + + // 获取估分已有的地区列表 + public function sportstesting_get_city_list($data = ['token'=>'caadd1be045a65f30b92aa805f1de54a','type'=>'1']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('token', $data) || !array_key_exists('type', $data)){ + return $this->msg(10001); + } + // cache($data['token'], time()); + if($this->token_time_validate($data['token']) === false){ + return $this->msg(20001); + } + unset($data['token']); + return $this->sportstesting_get_city_list_action($data); + } + + ################################################################业务################################################################ + ################################################sportstesting_get_type_list + public function sportstesting_get_type_list_action($data){ + + $parameter_data = explode(',',$data['address']); + $gender = $data['gender']; + // 精准查询地市规则start + // if(count($parameter_data) == 1){ + // $db_condition = "province = '".$parameter_data[0]."'"; + // }else if(count($parameter_data) == 2){ + // $db_condition = "province = '".$parameter_data[0]."' and city = '".$parameter_data[1]."'"; + // }else if(count($parameter_data) == 3){ + // $db_condition = "province = ".$parameter_data[0]."' and city = '".$parameter_data[1]."' and area = '".$parameter_data[2]."'"; + // }else{ + // return $this->msg(10005); + // } + // 精准查询地市规则end + // 全省地市一个规则start + $db_condition = "province = '".$parameter_data[0]."'"; + // 全省地市一个规则end + + $data = Db::table('admin_estimate')->where($db_condition)->find(); + $data = json_decode($data['content'],true); + + // dump($data); + // die; + $result = $this->handle_default_rule_list_content($data,$gender); + // die; + return $this->msg($result); + } + ################################################sportstesting_get_region_list + public function sportstesting_get_region_list_action($data){ + + $parameter_data = explode(',',$data['parameter_data']); + $gender = $data['gender']; + // 精准查询地市规则start + // if(count($parameter_data) == 1){ + // $db_condition = "province = '".$parameter_data[0]."'"; + // }else if(count($parameter_data) == 2){ + // $db_condition = "province = '".$parameter_data[0]."' and city = '".$parameter_data[1]."'"; + // }else if(count($parameter_data) == 3){ + // $db_condition = "province = ".$parameter_data[0]."' and city = '".$parameter_data[1]."' and area = '".$parameter_data[2]."'"; + // }else{ + // return $this->msg(10005); + // } + // 精准查询地市规则end + // 全省地市一个规则start + $db_condition = "province = '".$parameter_data[0]."'"; + // 全省地市一个规则end + + $result['list'] = []; + $result['total_score'] = 0; + $data = Db::table('admin_estimate')->where($db_condition)->select(); + // dump($data); + // die; + if(count($data) > 0){ + if(count($data) > 1){ + // 查到不止一条规则 + return $this->msg(10004,'查询地址不够详细,请重新选择省市地区'); + } + // dump(568); + // die; + $data = json_decode($data[0]['content'],true); + $result = $this->handle_default_rule_list($data,$gender); + return $this->msg($result); + }else{ + return $this->msg(10004,'暂无该地区的估分规则,请选择其它地区'); + } + + } + ################################################sportstesting_get_last_data + public function sportstesting_get_last_data_action($data){ + $user_data = Db::table('app_sportstesting_data')->where(['aud_id'=>$data['aud_id']])->order('id desc')->find(); + + if($user_data){ + $address = explode(',',$user_data['address']); + $temporary_data = json_decode($user_data['content'],true); + + $result['list'] = $temporary_data; + $result['total_score'] = $user_data['score']; + $result['max_score'] = $user_data['max_score']; + $result['province'] = count($address)>=1?$address[0]:''; + $result['city'] = count($address)>=2?$address[1]:''; + $result['area'] = count($address)>=3?$address[2]:''; + return $this->msg($result); + }else{ + $user_msg_data = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('id,gender')->find(); + if(!$user_msg_data){ + return $this->msg(10004); + } + $address = $this->default_address; + // dump($address); + // die; + + $address_data = $this->sportstesting_get_region_list_action(['parameter_data'=>$address,'gender'=>$user_msg_data['gender']]); + // dump(json_decode($address_data->getContent(),true)); + // dump(get_object_vars($address_data)); + // die; + $address_data = json_decode($address_data->getContent(),true); + // return $this->msg($address_data); + if($address_data['code'] == 10004){ + return $this->msg(10004); + } + $address = explode(',',$address); + $result['list'] = $address_data['data']; + $result['total_score'] = 0; + $result['province'] = count($address)>=1?$address[0]:''; + $result['city'] = count($address)>=2?$address[1]:''; + $result['area'] = count($address)>=3?$address[2]:''; + + return $this->msg($result); + } + } + ################################################sportstesting_get_all_list + public function sportstesting_get_all_list_action($data){ + $user_data_num = Db::table('app_sportstesting_data')->where(['aud_id'=>$data['aud_id']])->count(); + $user_data = Db::table('app_sportstesting_data')->where(['aud_id'=>$data['aud_id']])->page($data['page'],$this->page_num)->order('id desc')->select(); + // dump($user_data); + // die; + if($user_data){ + $result = []; + $result['totalrows'] = $user_data_num; + $result['rows'] = []; + $result['pageno'] = $data['page']; + $result['pagesize'] = $this->page_num; + $result['totalpage'] = ceil($result['totalrows']/$this->page_num); + foreach ($user_data as $key => $value) { + array_push($result['rows'],[ + 'id'=>$value['id'], + 'create_time'=>$value['create_time'], + 'score'=>$value['score'], + 'max_score'=>$value['max_score'], + 'address'=>$value['address'], + ]); + } + return $this->msg($result); + }else{ + return $this->msg(10004); + } + } + ################################################sportstesting_get_one_details + public function sportstesting_get_one_details_action($data){ + $user_data = Db::table('app_sportstesting_data')->where(['id'=>$data['id']])->find(); + + if($user_data){ + + $temporary_data['list'] = json_decode($user_data['content'],true); + // 压入表头 + foreach ($temporary_data['list'] as $key => $value) { + foreach ($value['list'] as $v1k => $v1v) { + array_unshift($temporary_data['list'][$key]['list'][$v1k]['list'],[ + 'name'=>'项目名', + 'value'=>'成绩', + 'total_score'=>'满分', + 'proportion_value'=>'得分', + ]); + } + } + $temporary_data['score'] = $user_data['score']; + $temporary_data['max_score'] = $user_data['max_score']; + $temporary_data['address'] = $user_data['address']; + $temporary_data['create_time'] = $user_data['create_time']; + return $this->msg($temporary_data); + }else{ + return $this->msg(10004); + } + } + ################################################sportstesting_set_once_data + public function sportstesting_set_once_data_action2($data){ + // $ceshi = [ + + // ]; + $return_result['total_score'] = 0; + $return_result['max_score'] = 0; + + $parameter_data = explode(',',$data['parameter_data']); + $gender = $data['gender']; + if(count($parameter_data) == 1){ + $db_condition = "province = '".$parameter_data[0]."'"; + }else if(count($parameter_data) == 2){ + $db_condition = "province = '".$parameter_data[0]."' and city = '".$parameter_data[1]."'"; + }else if(count($parameter_data) == 3){ + $db_condition = "province = '".$parameter_data[0]."' and city = '".$parameter_data[1]."' and area = '".$parameter_data[2]."'"; + }else{ + return $this->msg(10005); + } + $find_data = Db::table('admin_estimate')->where($db_condition)->find(); + $find_data = json_decode($find_data['content'],true); + $recognition_rule = $find_data[$gender]; + // dump($recognition_rule); + // // 测试用删掉s + // $data['result_data'] = $this->handle_default_rule_list2($find_data,$gender); + // // 测试用删掉e + // dump($data); + // return $this->msg(10010); + foreach ($data['result_data'] as $key => $value) { + // 遍历一级($value['key'] = 现场考试) + // dump($value); + foreach ($value['list'] as $k2 => $v2) { + // 遍历二级级($v2['key'] = 第一类项目 + // dump($v2); + foreach ($v2['list'] as $k3 => $v3) { + // 遍历二级级($v3['name'] = 1000米跑) + $temporary_result = $this->obtaining_grades($recognition_rule[$value['key']][$v2['key']]['list'][$v3['name']]['content'],$v3); + $data['result_data'][$key]['list'][$k2]['list'][$k3] = $temporary_result; + // $data['result_data'][$key]['list'][$k2]['list'][$k3]['name'] = $temporary_result['name']."(该项满分:".$temporary_result['total_score'].")"; + $return_result['total_score'] = bcadd($return_result['total_score'],$temporary_result['proportion_value'],2); + $return_result['max_score'] = bcadd($return_result['max_score'],bcmul($v3['total_score'],$v3['proportion'],2),2); + } + } + } + // return $this->msg(999); + $return_result['list'] = $data['result_data']; + $user_sportstesting_set = Db::table('app_sportstesting_data')->insert([ + 'aud_id'=>$data['aud_id'], + 'content'=>json_encode($return_result['list']), + 'score'=>$return_result['total_score'], + 'max_score'=>$return_result['max_score'], + 'create_time'=>date('Y-m-d H:i:s'), + 'address'=>$data['parameter_data'], + ]); + + if($user_sportstesting_set){ + foreach ($return_result['list'] as $key => $value) { + foreach ($value['list'] as $v1k => $v1v) { + array_unshift($return_result['list'][$key]['list'][$v1k]['list'],[ + 'name'=>'项目名', + 'value'=>'成绩', + 'total_score'=>'满分', + 'proportion_value'=>'得分', + ]); + } + } + return $this->msg($return_result); + }else{ + return $this->msg(10002); + } + + } + ################################################sportstesting_get_city_list + public function sportstesting_get_city_list_action($type){ + if($type['type'] == '1'){ + // 已有地区列表 + $data = Db::table('admin_estimate')->field('id,province,city,area')->select(); + $result = []; + // 添加省份 + foreach ($data as $key => $value) { + if(!array_key_exists($value['province'],$result)){ + $result[$value['province']] = []; + } + } + // 添加市 + foreach ($data as $key => $value) { + if($value['city'] == '无'){ + continue; + }else{ + if(array_key_exists($value['province'],$result)){ + if(!array_key_exists($value['city'],$result[$value['province']])){ + $result[$value['province']][$value['city']] = []; + } + } + } + } + // 添加区县 + foreach ($data as $key => $value) { + if($value['area'] == '无'){ + continue; + }else{ + if(array_key_exists($value['province'],$result)){ + if(array_key_exists($value['city'],$result[$value['province']])){ + if(!array_key_exists($value['area'],$result[$value['province']][$value['city']])){ + array_push($result[$value['province']][$value['city']],$value['area']); + } + } + } + } + } + $return_result = []; + foreach ($result as $key => $value) { + $num = array_push($return_result,['name'=>$key,'list'=>[]]); + if(count($value)>0){ + foreach ($value as $city_k => $city_v) { + $num2 = array_push($return_result[$num-1]['list'],['name'=>$city_k,'list'=>$city_v]); + } + } + } + return $this->msg($result); + }else if($type['type'] == '2'){ + $data = Db::table('admin_estimate')->where(['type' => '2'])->field('id,content,city,area')->find(); + $result = json_decode($data['content'],true); + return $this->msg($result); + }else{ + return $this->msg(10005); + } + + + } + + + + + + ################################################################其他################################################################ + + public function calculate_minutes_seconds($a,$b){ + // 分解时间字符串 + $sjA = explode(':', $a); + $sjB = explode(':', $b); + $minutesA = $sjA[0]; + $secondsA = $sjA[1]; + $minutesB = $sjB[0]; + $secondsB = $sjB[1]; + // list($minutesA, $secondsA) = explode(':', $a); + // list($minutesB, $secondsB) = explode(':', $b); + + // 转换为秒 + $totalSecondsA = intval($minutesA) * 60 + intval($secondsA); + $totalSecondsB = intval($minutesB) * 60 + intval($secondsB); + + $result = $totalSecondsB - $totalSecondsA; + if($result <= 0){ + return [true,$result]; + }else{ + return [false,$result]; + } + // 比较两个时间(秒) + // return $totalSecondsB <= $totalSecondsA; + } + + + // 处理默认规则列表 + public function handle_default_rule_list($data,$gender){ + $temporary_arr = $data[$gender]; + $result = []; + foreach ($temporary_arr as $key => $value) { + $num = array_push($result,['name'=>$key,'key'=>$key,'list'=>[]]); + foreach ($value as $s_c_k => $s_c_v) { + if($s_c_v['choose_num'] == 0){ + $num2 = array_push($result[$num-1]['list'],[ + 'name'=>$s_c_k, + 'key'=>$s_c_k, + 'is_choice'=>$s_c_v['choose_num'], + 'list'=>[] + ]); + foreach ($s_c_v['list'] as $x_m_k => $x_m_v) { + array_push($result[$num-1]['list'][$num2-1]['list'],[ + 'name'=>$x_m_k, + 'proportion'=>$x_m_v['proportion'], + 'value'=>$x_m_v['value'], + 'proportion_value'=>null, + 'unit'=>$x_m_v['unit_data'], + 'type'=>$x_m_v['type'], + 'describe'=>$x_m_v['describe'], + 'total_score'=>$x_m_v['score'], + ]); + } + }else{ + $num2 = array_push($result[$num-1]['list'],['name'=>$s_c_k,'key'=>$s_c_k,'is_choice'=>$s_c_v['choose_num'],'list'=>[]]); + } + } + } + // dump($result); + // die; + return $result; + } + // 获取所有选择项内容 + public function handle_default_rule_list_content($data,$gender){ + $temporary_arr = $data[$gender]; + $result['list'] = []; + foreach ($temporary_arr as $key => $value) { + + foreach ($value as $k2 => $v2) { + if($v2['choose_num'] != 0){ + $temporary_arr = []; + $temporary_arr['key'] = $k2; + $temporary_arr['list'] = []; + // dump($v2); + foreach ($v2['list'] as $k3 => $v3) { + // dump($v3); + array_push($temporary_arr['list'],[ + 'name'=>$k3, + 'proportion'=>$v3['proportion'], + 'value'=>$v3['value'], + 'proportion_value'=>null, + 'unit'=>$v3['unit_data'], + 'type'=>$v3['type'], + 'describe'=>$v3['describe'], + 'total_score'=>$v3['score'], + ]); + } + // dump($temporary_arr); + array_push($result['list'],$temporary_arr); + } + } + } + return $result; + } + + // 取得成绩 + public function obtaining_grades($rule,$data){ + + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + // dump($data); + // dump($rule); + // die; + if($data['value'] != ''){ + if(count($rule) > 0){ + foreach ($rule as $key => $value) { + if($data['unit'] == '分/秒'){ + $rule_result = $this->convertMinutesSecondsToStringSeconds($value[0]); + $data_result = $this->convertMinutesSecondsToStringSeconds($data['value']); + }else{ + $rule_result = $value[0]; + $data_result = $data['value']; + } + 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]); + } + // dump($result); + if($result == true){ + $data['score'] = $value[2]; + // 计算比例后分值 + $proportional_post_score = bcmul($data['total_score'],$data['proportion'],2); + $data['proportion_value'] = bcmul($data['score'],bcdiv($proportional_post_score,100,2),2); + // 四舍五入一下结果 + $data['proportion_value'] = $this->roundToString($data['proportion_value'],1); + break; + } + } + }else{ + $data['score'] = $data['value'] <= $data['total_score']?bcmul(bcdiv($data['value'],$data['total_score'],20),100,2):100; + // 计算比例后分值 + // $proportional_post_score = bcmul($data['total_score'],$data['proportion'],2); + $data['proportion_value'] = $data['value'] <= $data['total_score']?$data['value']:$data['total_score']; + } + + }else{ + $data['score'] = 0; + // 计算比例后分值 + $proportional_post_score = bcmul($data['total_score'],$data['proportion'],2); + $data['proportion_value'] = bcmul($data['score'],bcdiv($proportional_post_score,100,2),1); + } + + return $data; + } + + // 弄一套可以计算的返回数据(删) + public function handle_default_rule_list2($data,$gender){ + $temporary_arr = $data[$gender]; + $result = []; + // dump($temporary_arr); + // die; + foreach ($temporary_arr as $key => $value) { + $num = array_push($result,['name'=>$key,'key'=>$key,'list'=>[]]); + + foreach ($value as $s_c_k => $s_c_v) { + if($s_c_v['choose_num'] == 0){ + $num2 = array_push($result[$num-1]['list'],[ + 'name'=>$s_c_k, + 'key'=>$s_c_k, + 'is_choice'=>$s_c_v['choose_num'], + 'list'=>[] + ]); + foreach ($s_c_v['list'] as $x_m_k => $x_m_v) { + $num3 = array_push($result[$num-1]['list'][$num2-1]['list'],[ + 'name'=>$x_m_k, + 'proportion'=>$x_m_v['proportion'], + 'value'=>'', + 'proportion_value'=>null, + 'unit'=>$x_m_v['unit_data'], + 'type'=>$x_m_v['type'], + 'describe'=>$x_m_v['describe'], + 'total_score'=>$x_m_v['score'], + ]); + // dump($x_m_k); + if($x_m_k == '1000米跑'){ + // dump('11'); + $result[$num-1]['list'][$num2-1]['list'][$num3-1]['value'] = '4:08'; + }else if($x_m_k == '50米跑'){ + $result[$num-1]['list'][$num2-1]['list'][$num3-1]['value'] = '7.3'; + }else if($x_m_k == '乒乓球'){ + $result[$num-1]['list'][$num2-1]['list'][$num3-1]['value'] = '25'; + }else if($x_m_k == '足球运球'){ + $result[$num-1]['list'][$num2-1]['list'][$num3-1]['value'] = '9.5'; + }else if($x_m_k == '机考'){ + $result[$num-1]['list'][$num2-1]['list'][$num3-1]['value'] = '8.3'; + }else if($x_m_k == '1000米'){ + // dump('22'); + $result[$num-1]['list'][$num2-1]['list'][$num3-1]['value'] = '4:08'; + } + // break; + } + }else{ + //循环次数 + $xh_num = $s_c_v['choose_num']; + $num2 = array_push($result[$num-1]['list'],['name'=>$s_c_k,'key'=>$s_c_k,'is_choice'=>$s_c_v['choose_num'],'list'=>[]]); + foreach ($s_c_v['list'] as $x_m_k => $x_m_v) { + array_push($result[$num-1]['list'][$num2-1]['list'],[ + 'name'=>$x_m_k, + 'proportion'=>$x_m_v['proportion'], + 'value'=>'', + 'proportion_value'=>null, + 'unit'=>$x_m_v['unit_data'], + 'type'=>$x_m_v['type'], + 'describe'=>$x_m_v['describe'], + 'total_score'=>$x_m_v['score'], + ]); + // dump($x_m_k); + if($x_m_k == '1000米跑'){ + $result[$num-1]['list'][$num2-1]['list'][0]['value'] = '4:07'; + }else if($x_m_k == '50米跑'){ + $result[$num-1]['list'][$num2-1]['list'][0]['value'] = '7.3'; + }else if($x_m_k == '乒乓球'){ + $result[$num-1]['list'][$num2-1]['list'][0]['value'] = '25'; + }else if($x_m_k == '足球运球'){ + $result[$num-1]['list'][$num2-1]['list'][0]['value'] = '9.5'; + }else if($x_m_k == '引体向上'){ + $result[$num-1]['list'][$num2-1]['list'][0]['value'] = '8'; + }else if($x_m_k == '足球--运球射门'){ + $result[$num-1]['list'][$num2-1]['list'][0]['value'] = '40'; + }else if($x_m_k == '体操双杠组合Ⅰ'){ + $result[$num-1]['list'][$num2-1]['list'][0]['value'] = '4'; + } + $xh_num = $xh_num -1; + if($xh_num <= 0){ + break; + } + + } + } + } + } + // dump($result); + // die; + // $result = json_encode($result); + return $result; + } + + + +} \ No newline at end of file diff --git a/application/appbackups/controller/Vitalcapacity.php b/application/appbackups/controller/Vitalcapacity.php new file mode 100644 index 0000000..524780b --- /dev/null +++ b/application/appbackups/controller/Vitalcapacity.php @@ -0,0 +1,404 @@ +'#FF5656','不及格'=>'#FF5656','及格'=>'#FFAB00','良好'=>'#5AD06D','优秀'=>'#6492F6','牛逼'=>'#3967D6']; + protected $curve_data_format = ['one_val'=>['第一次','容积/ml','#009DFF'],'two_val'=>['第二次','容积/ml','#009DFF'],'three_val'=>['第三次','容积/ml','#009DFF'],'average_val'=>['平均','容积/ml','#009DFF']]; + protected $standard0 = ['优秀','良好','及格','不及格','无效']; + protected $standard = [ + ['min_val'=>'90','max_val'=>'100','text'=>'优秀','color'=>'#6492F6'], + ['min_val'=>'80','max_val'=>'89','text'=>'良好','color'=>'#5AD06D'], + ['min_val'=>'60','max_val'=>'79','text'=>'及格','color'=>'#FFAB00'], + ['min_val'=>'10','max_val'=>'59','text'=>'不及格','color'=>'#FF5656'], + ['min_val'=>'0','max_val'=>'9','text'=>'无效','color'=>'#FF5656'], + ]; + + protected $result_end_data_mould = [ + 'name'=>'', + 'value'=>'', + 'unit'=>'', + 'standard'=>'', + 'color'=>'', + 'list'=>[] + ]; + + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + ################################################################接口################################################################ + ################################################################接口################################################################ + ################################################################接口################################################################ + + // 手动数据记录 + public function vitalcapacity_save_record_data($data = ['aud_id'=>'83','one'=>'1523','two'=>'1825','three'=>'1896','time'=>'2024-07-23','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $data) || !array_key_exists('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']); + $data['one'] = $this->isPositiveNumber($data['one']) === false?0:$data['one']; + $data['two'] = $this->isPositiveNumber($data['one']) === false?0:$data['two']; + $data['three'] = $this->isPositiveNumber($data['one']) === false?0:$data['three']; + return $this->vitalcapacity_save_record_data_action($data); + } + // 设备数据记录 + public function vitalcapacity_save_record_data_device($data = ['aud_id'=>'99','one'=>'1523','two'=>'1825','three'=>'1896','flow'=>'88.88','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $data) || !array_key_exists('flow', $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']); + $data['one'] = $this->isPositiveNumber($data['one']) === false?0:$data['one']; + $data['two'] = $this->isPositiveNumber($data['one']) === false?0:$data['two']; + $data['three'] = $this->isPositiveNumber($data['one']) === false?0:$data['three']; + return $this->vitalcapacity_save_record_data_action($data); + } + // 数据报告 + public function vitalcapacity_data_report($data = ['aud_id'=>'83','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $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']); + return $this->vitalcapacity_data_report_action($data); + } + // 曲线 + public function vitalcapacity_curve_chart($data = ['aud_id'=>'83','time'=>'2024','token'=>'caadd1be045a65f30b92aa805f1de54a']){ + if(count(input('post.')) > 0){ + $data = input('post.'); + } + if(!array_key_exists('aud_id', $data) || !array_key_exists('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']); + return $this->vitalcapacity_curve_chart_action($data); + } + + ################################################################业务################################################################ + + ################################################################vitalcapacity_save_record_data + public function vitalcapacity_save_record_data_action($data){ + $temporary_arr['aud_id'] = $data['aud_id']; + $temporary_arr['record_time'] = array_key_exists('time', $data)?$data['time']:date('Y-m-d H:i:s'); + $temporary_arr['one'] = $data['one']; + $temporary_arr['two'] = $data['two']; + $temporary_arr['three'] = $data['three']; + $temporary_arr['average'] = bcdiv(bcadd(bcadd($data['one'],$data['two'],2),$data['three'],2),3,2); + $temporary_arr['create_time'] = date('Y-m-d H:i:s'); + $temporary_arr['one_val'] = $data['one']; + $temporary_arr['two_val'] = $data['two']; + $temporary_arr['three_val'] = $data['three']; + $temporary_arr['average_val'] = $temporary_arr['average']; + $temporary_arr['flow_val'] = array_key_exists('flow', $data)?$data['flow']:'0.00'; + // 处理记录时间 + if(strlen($temporary_arr['record_time']) <= 12){ + $temporary_arr['record_time'] = $this->addCurrentTimeToDateString($temporary_arr['record_time']); + } + + $user_msg = Db::name('app_user_data')->where(['id'=>$data['aud_id']])->field('grade,gender')->find(); + if($user_msg){ + // 根据性别&年级&年龄查规则 + if($user_msg['grade'] != 'nothing'){ + // 有年级项 + // 等级项(及格优秀良好等) + $achievement_judge_data = $this->vitalcapacity_achievement_judge(['average'=>$temporary_arr['average'],'grade'=>$user_msg['grade'],'gender'=>$user_msg['gender']]); + + $temporary_arr['score'] = $achievement_judge_data['score'].','.$achievement_judge_data['level'].','.$this->color[$achievement_judge_data['level']]; + $temporary_arr['score_val'] = $achievement_judge_data['score']; + // 获取肺活量标准 + + }else{ + $achievement_judge_data['level'] = "无"; + $temporary_arr['score'] = "0,无,无"; + $temporary_arr['score_val'] = "0"; + } + + }else{ + return $this->msg(10004); + } + + + $standard_data = $this->get_vitalcapacity_data($data['aud_id']); + // dump($standard_data); + // die; + $temporary_arr['standard_data'] = json_encode($standard_data); + // dump($temporary_arr); + // die; + $result = Db::table('app_card_vitalcapacity_data')->insert($temporary_arr); + + if($result){ + $time = $result[0]['record_time']; + $time = strtotime($time); + $time = date('Y年m月d日 H:i:s', $time); + return $this->msg([ + 'average'=>$temporary_arr['average'].'ml', + 'level'=>$achievement_judge_data['level'], + 'time'=>$time, + 'flow_val'=>$temporary_arr['flow_val'], + 'list'=>$standard_data, + 'offset'=>$this->vitalcapacity_standard_interval($temporary_arr['average'],$standard_data) + ]); + }else{ + return $this->msg(10002); + } + } + ################################################################vitalcapacity_data_report + public function vitalcapacity_data_report_action($data){ + + $result = Db::table('app_card_vitalcapacity_data')->where(['aud_id'=>$data['aud_id']])->order('record_time desc')->field('record_time,score,average,flow_val,standard_data')->limit(1)->select(); + + if(count($result) <= 0){ + // return $this->msg(10004); + return $this->msg([ + 'average'=>'', + 'level'=>'', + 'time'=>'', + 'flow_val'=>'', + 'list'=>'', + 'offset'=>'' + ]); + + }else{ + + $time = $result[0]['record_time']; + $time = strtotime($time); + $time = date('Y年m月d日 H:i:s', $time); + $o_l = explode(',',$result[0]['score']); + // $standard_data = $this->get_vitalcapacity_data($data['aud_id']); + $standard_data = json_decode($result[0]['standard_data'],true); + // dump($result); + // die; + return $this->msg([ + 'average'=>$result[0]['average'].'ml', + 'level'=>$o_l[1], + 'time'=>$time, + 'flow_val'=>$result[0]['flow_val'] == '.00'?'0.00':$result[0]['flow_val'], + 'list'=>$standard_data, + 'offset'=>$this->vitalcapacity_standard_interval($result[0]['average'],$standard_data) + ]); + } + } + + ################################################################vitalcapacity_curve_chart + public function vitalcapacity_curve_chart_action($data){ + $audid = $data['aud_id']; + $timeData = explode('-', $data['time']); + + // 根据$timeData的长度构建不同的查询条件 + $map = ['aud_id' => $audid]; + switch (count($timeData)) { + case 3: // 年月日 + $map['record_time'] = ['between', [date('Y-m-d 00:00:00', strtotime($timeData[0] . '-' . $timeData[1] . '-' . $timeData[2])), date('Y-m-d 23:59:59', strtotime($timeData[0] . '-' . $timeData[1] . '-' . $timeData[2]))]]; + break; + case 2: // 年月 + $map['record_time'] = ['between', [date('Y-m-01 00:00:00', strtotime($timeData[0] . '-' . $timeData[1])), date('Y-m-t 23:59:59', strtotime($timeData[0] . '-' . $timeData[1]))]]; + break; + case 1: // 年 + $map['record_time'] = ['between', [date('Y-01-01 00:00:00', strtotime($timeData[0])), date('Y-12-31 23:59:59', strtotime($timeData[0]))]]; + break; + default: + return $this->msg(10005); // 无效的时间数据格式 + } + + // dump($map); + // die; + + // 使用查询构造器进行查询 + $result = Db::name('app_card_vitalcapacity_data')->where($map)->field('id,one_val,two_val,three_val,average_val,score_val,aud_id,record_time,DATEPART(hour, record_time) AS hour,DATEPART(day, record_time) AS day,DATEPART(month, record_time) AS month')->order('record_time')->select(); + // dump($map); + // dump($result); + // die; + $return_data = []; + if(count($timeData) == 3){ + $key_condition = 'hour'; + }else if(count($timeData) == 2){ + $key_condition = 'day'; + }else if(count($timeData) == 1){ + $key_condition = 'month'; + } + // dump($map); + // dump($key_condition); + // die; + foreach ($this->curve_data_format as $key => $value) { + $temporary_arr['title'] = $value[0].'('.$value[1].')'; + $temporary_arr['key'] = $key; + $temporary_arr['line']['categories'] = []; + $temporary_arr['line']['series'][0]['color'] = $value[2]; + $temporary_arr['line']['series'][0]['name'] = $value[0].'('.$value[1].')'; + $temporary_arr['line']['series'][0]['data'] = []; + // dump($temporary_arr['title']); + foreach ($result as $k => $v) { + // dump($k); + // if($result[$k][$key] == 26.43){ + // dump(123); + // } + if($key_condition == 'hour'){ + // dump($result[$k][$key]); + // die; + if(in_array($result[$k][$key_condition].'时',$temporary_arr['line']['categories'])){ + + $num = array_search($result[$k][$key_condition].'时', $temporary_arr['line']['categories']); + // $temporary_arr['line']['series'][0]['data'][$num] = bcadd($temporary_arr['line']['series'][0]['data'][$num],$result[$k][$key],2); + $temporary_arr['line']['series'][0]['data'][$num] = $temporary_arr['line']['series'][0]['data'][$num] >= $result[$k][$key]?$temporary_arr['line']['series'][0]['data'][$num]:$result[$k][$key]; + + }else{ + array_push($temporary_arr['line']['categories'],$result[$k][$key_condition].'时'); + array_push($temporary_arr['line']['series'][0]['data'],$result[$k][$key]); + } + // dump($temporary_arr['line']['series'][0]['data']); + }else if($key_condition == 'day'){ + if(in_array($result[$k]['month'].'-'.$result[$k][$key_condition],$temporary_arr['line']['categories'])){ + $num = array_search($result[$k]['month'].'-'.$result[$k][$key_condition], $temporary_arr['line']['categories']); + // $temporary_arr['line']['series'][0]['data'][$num] = bcadd($temporary_arr['line']['series'][0]['data'][$num],$result[$k][$key],2); + $temporary_arr['line']['series'][0]['data'][$num] = $temporary_arr['line']['series'][0]['data'][$num] >= $result[$k][$key]?$temporary_arr['line']['series'][0]['data'][$num]:$result[$k][$key]; + }else{ + array_push($temporary_arr['line']['categories'],$result[$k]['month'].'-'.$result[$k][$key_condition]); + array_push($temporary_arr['line']['series'][0]['data'],$result[$k][$key]); + } + }else{ + if(in_array($result[$k]['month'].'月',$temporary_arr['line']['categories'])){ + $num = array_search($result[$k]['month'].'月', $temporary_arr['line']['categories']); + // $temporary_arr['line']['series'][0]['data'][$num] = bcadd($temporary_arr['line']['series'][0]['data'][$num],$result[$k][$key],2); + $temporary_arr['line']['series'][0]['data'][$num] = $temporary_arr['line']['series'][0]['data'][$num] >= $result[$k][$key]?$temporary_arr['line']['series'][0]['data'][$num]:$result[$k][$key]; + }else{ + array_push($temporary_arr['line']['categories'],$result[$k]['month'].'月'); + array_push($temporary_arr['line']['series'][0]['data'],$result[$k][$key]); + } + } + } + // dump($temporary_arr); + array_push($return_data,$temporary_arr); + } + // dump($return_data); + // foreach ($return_data[1]['line']['series'][0]['data'] as $key => $value) { + // $return_data[1]['line']['series'][0]['data'][$key] = bcdiv($return_data[1]['line']['series'][0]['data'][$key],60,2); + // } + // // dump($temporary_arr); + // dump($return_data); + // die; + return $this->msg($return_data); + } + + + + + ################################################################肺活量数据卡片接口################################################################ + ################################################################肺活量数据卡片接口################################################################ + // 加 bcadd(,,20) + // 减 bcsub(,,20) + // 乘 bcmul(,,20) + // 除 bcdiv(,,20) + + // 肺活量成绩判断 + public function vitalcapacity_achievement_judge($data){ + $str = "sex = ".$data['gender']." and ".$data['grade']." <= ".$data['average']; + $user_achievement = Db::name('pc_vitalcapacity_standard')->where($str)->order($data['grade'] .' desc')->field('level,score,'.$data['grade'])->limit(1)->select(); + // dump($data); + // dump($user_achievement); + if(count($user_achievement)<=0){ + $user_achievement[0] = ['level'=>'无效','score'=>'0']; + } + // dump($user_achievement); + return $user_achievement[0]; + } + // 肺活量判断区间 + public function vitalcapacity_standard_interval($val,$data){ + // 缓存一周 + $result = ''; + if(count($data) <= 0){ + return $result; + } + $temporary_qj = $data; + $max = 0; + $min = 0; + $num = 0; + foreach ($temporary_qj as $key => $value) { + if($val >= $value['min_val'] && $val <= $value['max_val']){ + $max = $value['max_val']; + $min = $value['min_val']; + $num = $key; + break; + } + } + + $num = count($temporary_qj)-1-$num; + $temporary_num = bcmul(bcdiv(bcsub($val,$min,20),bcsub($max,$min,20),2),bcdiv(100,count($temporary_qj),2),2); + $result = bcadd(bcmul(bcdiv(100,count($temporary_qj),2),$num,2),$temporary_num,2); + + return $result; + } + // 肺活量判断区间(根据得分) + public function vitalcapacity_standard_interval2($val,$data){ + // 缓存一周 + $result = ''; + if(count($data) <= 0){ + return $result; + } + $temporary_qj = $data; + $max = 0; + $min = 0; + $num = 0; + foreach ($temporary_qj as $key => $value) { + if($val >= $value['min_val'] && $val <= $value['max_val']){ + $max = $value['max_val']; + $min = $value['min_val']; + $num = $key; + break; + } + } + // dump($data); + // dump($val); + // dump($max); + // dump($min); + // dump($num); + + // 计算每份占比 + $share_value = bcdiv($temporary_qj[0]['max_val'],count($temporary_qj),1); + // 计算在这一段中占多少 + $result = bcsub($val,$min,1); + // dump($result); + $result = bcdiv($result,bcsub($max,$min,1),1); + $num = count($temporary_qj)-1-$num; + $num = bcmul($num,$share_value,1); + $result = bcadd($num,$result,1); + // dump($share_value); + // $num = count($temporary_qj)-1-$num; + // $temporary_num = bcmul(bcdiv(bcsub($val,$min,20),bcsub($max,$min,20),2),bcdiv(100,count($temporary_qj),2),2); + // $result = bcadd(bcmul(bcdiv(100,count($temporary_qj),2),$num,2),$temporary_num,2); + + return $result; + } + + + ################################################################other################################################################ + ################################################################other################################################################ + ################################################################other################################################################ + + + +} \ No newline at end of file diff --git a/application/appbackups/view/download/demo.html b/application/appbackups/view/download/demo.html new file mode 100644 index 0000000..3b6977d --- /dev/null +++ b/application/appbackups/view/download/demo.html @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + 下载页面-download + + + + + +
+
+ + +
下载
+ +
+
+ + + + + + diff --git a/application/appbackups/view/download/demo2.html b/application/appbackups/view/download/demo2.html new file mode 100644 index 0000000..2d9218f --- /dev/null +++ b/application/appbackups/view/download/demo2.html @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + 下载页面 + + + + + +
+
+ +
打开微信小程序
+
下载
+ +
+
+ + + + + +