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 = '
+
+
+