身体数据部分更新

This commit is contained in:
tsf 2024-04-20 17:38:31 +08:00
parent 972773ac53
commit 6dc2e1430b
7 changed files with 1016 additions and 59 deletions

View File

@ -52,12 +52,14 @@
<i class="iconfont nav_right">&#xe697;</i></a>
<ul class="sub-menu">
<li>
<a onclick="xadmin.add_tab('APP账号数据列表','/admin/member_list')">
<!-- <a onclick="xadmin.add_tab('APP账号数据列表','/admin/member_list')"> -->
<a onclick="xadmin.add_tab('APP账号数据列表','/admin/member/member_list')">
<i class="iconfont">&#xe6a7;</i>
<cite>APP账号数据列表</cite></a>
</li>
<li>
<a onclick="xadmin.add_tab('APP角色数据列表','/admin/user_list')">
<!-- <a onclick="xadmin.add_tab('APP角色数据列表','/admin/user_list')"> -->
<a onclick="xadmin.add_tab('APP角色数据列表','/admin/member/user_list')">
<i class="iconfont">&#xe6a7;</i>
<cite>APP角色数据列表</cite></a>
</li>
@ -304,7 +306,7 @@
</div>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<iframe src='/admin/welcome' frameborder="0" scrolling="yes" class="x-iframe"></iframe>
<iframe src='welcome' frameborder="0" scrolling="yes" class="x-iframe"></iframe>
</div>
</div>
<div id="tab_show"></div>

View File

@ -53,7 +53,7 @@
if(req.code == 10000){
layer.msg('登录成功,准备跳转',function(){
location.href='/admin/index'
location.href='/admin/index/index'
});
}else{
layer.msg('登录失败',function(){

View File

@ -0,0 +1,491 @@
<?php
namespace app\app\controller;
use think\Controller;
class Calculatebody extends Controller{
function calculate_body_data_result($data = ['weight'=>52.5,'height'=>165,'age'=>30,'adc'=>550,'gender'=>1]){
$data['gender'] = $data['gender'] == 0 ? 1 : $data['gender'];
// 加 bcadd(,,20)
// 减 bcsub(,,20)
// 乘 bcmul(,,20)
// 除 bcdiv(,,20)
$result = $this->calculate_body_data($data['height'],$data['weight'],$data['age'],$data['gender'],$data['adc']);
// dump($result);
// dump('=========================================');
// dump(1);
// die;
// $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'],3);
//肌肉量=体重-脂肪量-骨量
// $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'],3);
// $result['lbm'] = (1 - $result['fat_r'] / 100) * $data['weight'];
$result['lbm'] = bcmul(bcsub('1',bcdiv($result['fat_r'],'100',20),20),$data['weight'],2);
$return_data['体重'] = $data['weight'];
$return_data['身高'] = $data['height'];
$return_data['BMI'] = $result['bmi'];
$return_data['age'] = $result['age'];
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['脂肪量'][0] = $result['fat_w'];
$return_data['脂肪率'][0] = $result['sfr'];
if(($data['gender']==1 && $data['age']<30 && $result['sfr']<10) || ($data['gender']==1 && $data['age']>=30 && $result['sfr']<11) || ($data['gender']==2 && $data['age']<30 && $result['sfr']<20) || ($data['gender']==2 && $data['age']>=30 && $result['sfr']<21)){
$return_data['脂肪率'][1] = '偏低';
$return_data['脂肪量'][1] = '偏低';
}else if(($data['gender']==1 && $data['age']<30 && $result['sfr']>=10 && $result['sfr']<21) || ($data['gender']==1 && $data['age']>=30 && $result['sfr']>=11 && $result['sfr']<22) || ($data['gender']==2 && $data['age']<30 && $result['sfr']>=20 && $result['sfr']<31) || ($data['gender']==2 && $data['age']>=30 && $result['sfr']>=21 && $result['sfr']<32)){
$return_data['脂肪率'][1] = '标准';
$return_data['脂肪量'][1] = '标准';
}else if(($data['gender']==1 && $data['age']<30 && $result['sfr']>=21 && $result['sfr']<26) || ($data['gender']==1 && $data['age']>=30 && $result['sfr']>=22 && $result['sfr']<27) || ($data['gender']==2 && $data['age']<30 && $result['sfr']>=31 && $result['sfr']<38) || ($data['gender']==2 && $data['age']>=30 && $result['sfr']>=32 && $result['sfr']<39)){
$return_data['脂肪率'][1] = '偏高';
$return_data['脂肪量'][1] = '偏高';
}else if(($data['gender']==1 && $data['age']<30 && $result['sfr']>=26) || ($data['gender']==1 && $data['age']>=30 && $result['sfr']>=27) || ($data['gender']==2 && $data['age']<30 && $result['sfr']<38) || ($data['gender']==2 && $data['age']>=30 && $result['sfr']<39)){
$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] = '优';
}
$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] = '优';
}
$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] = '优';
}
$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] = '优';
}
$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] = '优';
}
$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] = '危险';
}
$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] = '偏高';
}
// 脂肪率:偏低 标准 偏高 高
// 肌肉率:不足 标准 优
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['肥胖等级'] = '儿童';
}
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['身体类型'] = '儿童';
}
// 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;
}
// 计算身体数据BMI、脂肪率、脂肪量、肌肉率、肌肉量....
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($bmi, '10.0', 2); // 最后除以10保留一位小数
$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;
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',1);
// $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',20);
// $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),1);
// $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',1);
// $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),20);
// $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),20);
// $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',1);
}
// $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',1);
}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.0';
}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.0';
}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.0';
}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.0';
}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.0';
}
// $result_data['protein'] = ($num8 < 10.0) ? 10.0 : $num8;
if(bccomp($num8, '10.0', 20) === -1){
$result_data['protein'] = '10.0';
}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;
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]);
}
}

View File

@ -7,16 +7,64 @@ use think\Db;
use app\bj\controller\Common;
use think\Log;
use \think\Validate;
use app\app\controller\Calculatebody;
class Card extends Controller{
protected $color = ['#FF5656','#FFAB00','#5AD06D','#6492F6','#3967D6'];
protected $age_limit = 16;
protected $unit_symbol = ['score'=>'分','height'=>'CM','weight'=>'公斤','fat_r'=>'%','fat_w'=>'kg','muscle'=>'%','muscleval'=>'kg','water'=>'kg','bone'=>'kg','protein'=>'%','proteinval'=>'kg','kcal'=>'kcal','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'=>'#ffda69'],
['min_val'=>'','max_val'=>'','text'=>'正常','color'=>'#5ad06d'],
['min_val'=>'','max_val'=>'','text'=>'偏重','color'=>'#ffab00'],
['min_val'=>'','max_val'=>'50','text'=>'肥胖','color'=>'#ff5656'],
],
'height'=>[
['min_val'=>'0','max_val'=>'','text'=>'矮','color'=>'#ff5656'],
['min_val'=>'','max_val'=>'','text'=>'偏矮','color'=>'#ffab00'],
['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#5ad06d'],
['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#6492f6'],
['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#3967d6'],
],
'weight'=>[
['min_val'=>'0','max_val'=>'','text'=>'低','color'=>'#ff5656'],
['min_val'=>'','max_val'=>'','text'=>'偏低','color'=>'#ffab00'],
['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#5ad06d'],
['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#ffab00'],
['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#ff5656'],
]
];
protected $standard_color = [
'fat_r'=>['偏低'=>'#FFAB00','标准'=>'#5AD06D','偏高'=>'#6492F6','高'=>'#3967D6'],
'fat_w'=>['偏低'=>'#FFAB00','标准'=>'#5AD06D','偏高'=>'#6492F6','高'=>'#3967D6'],
'muscle'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'],
'muscleval'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'],
'water'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'],
'proteinval'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'],
'bone'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'],
'protein'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'],
'kcal'=>['偏低'=>'#FF5656','优'=>'#3967D6'],
'visceral'=>['标准'=>'#5AD06D','警惕'=>'#FFAB00','危险'=>'#FF5656'],
'sfr'=>['不足'=>'#FF5656','标准'=>'#5AD06D','偏高'=>'#6492F6'],
];
protected $result_end_data_mould = [
'name'=>'',
'value'=>'',
'unit'=>'',
'standard'=>'',
'color'=>'',
'list'=>[]
];
################################################################接口################################################################
################################################################接口################################################################
################################################################接口################################################################
// 存储卡片顺序
// $data = ['user_token'=>'xxxxxxxxxxxxxxx','order_list'=>[1,2,3,4,5]]
// $data = ['aud_id'=>'xxxxxxxxxxxxxxx','order_list'=>[1,2,3,4,5]]
public function save_card_order(){
$data = input();
if(!array_key_exists('order_list', $data) || !array_key_exists('user_token', $data)){
@ -26,7 +74,7 @@ class Card extends Controller{
return $this->msg(10002,'数据内参数格式或值错误');
}
$data['order_list'] = json_encode($data['order_list']);
$result = Db::table('app_user_data')->where(['id'=>$data['user_token']])->update(['card_order'=>$data['order_list']]);
$result = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->update(['card_order'=>$data['order_list']]);
if($result){
return $this->msg(0,'success');
}else{
@ -50,56 +98,359 @@ class Card extends Controller{
}
}
// 添加卡片规则
// $data = ['user_token'=>'xxxxxxxxxxxxxxx','order_list'=>[1,2,3,4,5]]
public function add_card_rule(){
// 获取基础卡片信息
// $data = ['id'=>'2']
public function card_data_base(){
$data = input();
if(!array_key_exists('order_list', $data) || !array_key_exists('user_token', $data)){
if(!array_key_exists('id', $data)){
return $this->msg(10001,'数据格式错误');
}
if(!$this->isNumericArray($data['order_list'])){
return $this->msg(10002,'数据内参数格式或值错误');
}
$data['order_list'] = json_encode($data['order_list']);
$result = Db::table('app_user_data')->where(['id'=>$data['user_token']])->update(['card_order'=>$data['order_list']]);
if($result){
return $this->msg(0,'success');
$result = Db::table('app_card_body_data')->where(['aud_id'=>$data['id']])->order('record_time desc')->field('record_time,height,weight,bmi')->find();
if(!$result){
return $this->msg(10002,'未找到数据');
}else{
return $this->msg(10003,'修改失败');
return $this->msg(0,'success',$result);
}
}
// 添加卡片记录
// $data = ['id'=>'2','time'=>'1991-04-20',content=>'15个']
public function add_card_data(){
$data = input();
if(!array_key_exists('ann_id', $data) || !array_key_exists('time', $data) || !array_key_exists('content', $data)){
return $this->msg(10001,'数据格式错误');
// 详细卡片信息
// $data = ['id'=>'2']
public function card_data_detailed($data=['id'=>'7','acd_id'=>'2']){
// public function body_data_detailed($data=['id'=>'9','acd_id'=>'2']){
// $data = input();
if(!array_key_exists('id', $data) || !array_key_exists('acd_id', $data)){
return $this->msg(10001,'关键参数缺失');
}
if($data['acd_id'] == '2'){
// 基础身体信息卡片
return $this->get_user_body_data($data);
}
$result = Db::table('app_card_data_log')->insert(['aud_id'=>$data['id'],'log_time'=>$data['time'],'content'=>$data['content'],'create_time'=>date('Y-m-d H:i:s')]);
if($result){
return $this->msg(0,'success');
}
// 手动记录
// $data = ['id'=>'2','time'=>'1991-04-20 10:10:10','height'=>'15.1','weight'=>'75.1']
public function card_manual_recording($data = ['acd_id'=>'2','aud_id'=>'11','time'=>'2024-04-11 10:10:10','data'=>['height'=>'175.1','weight'=>'77.1']]){
if(!array_key_exists('acd_id', $data) || !array_key_exists('aud_id', $data)){
return $this->msg(10001,'关键参数缺失');
}
$afferent_data = [];
foreach ($data as $key => $value) {
if(is_array($value)){
foreach ($value as $k => $v) {
$afferent_data[$k] = $v;
}
}else{
$afferent_data[$key] = $value;
}
}
if($data['acd_id'] == '2'){
return $this->set_user_body_data($data);
}else if($data['acd_id'] == '6'){
}
}
// 获取记录信息列表
function get_card_record_data($data = ['acd_id'=>'2','aud_id'=>'11','s_time'=>'2024-04-01 10:10:10','e_time'=>'2024-04-12 10:10:10']){
if(!array_key_exists('acd_id', $data) || !array_key_exists('aud_id', $data) || !array_key_exists('s_time', $data) || !array_key_exists('e_time', $data)){
return $this->msg(10001,'关键参数缺失');
}
if($data['acd_id'] == '2'){
return $this->get_body_record_data($data);
}else if($data['acd_id'] == '6'){
}
}
// 数据对比
function card_data_contrast($data = ['acd_id'=>'2','aud_id'=>'11','s_time'=>'2024-04-01 10:10:10','e_time'=>'2024-04-12 10:10:10']){
if(!array_key_exists('acd_id', $data) || !array_key_exists('aud_id', $data) || !array_key_exists('s_time', $data) || !array_key_exists('e_time', $data)){
return $this->msg(10001,'关键参数缺失');
}
if($data['acd_id'] == '2'){
return $this->body_data_contrast($data);
}else if($data['acd_id'] == '6'){
}
}
################################################################身体数据卡片接口################################################################
################################################################身体数据卡片接口################################################################
// weight height muscle fat
// 查询曲线数据
public function body_curve_data($data=['aud_id'=>'11','acd_id'=>'2','type'=>'weight','s_time'=>'2024-04-01 10:10:10','e_time'=>'2024-04-11 10:10:10']){
if(!array_key_exists('aud_id', $data) || !array_key_exists('acd_id', $data) || !array_key_exists('type', $data) || !array_key_exists('s_time', $data) || !array_key_exists('e_time', $data)){
return $this->msg(10001,'关键参数缺失');
}
$user_data = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('target_weight,initial_weight,initial_date')->find();
// dump($user_data);
if($user_data){
if($user_data['initial_date']){
$result_data['target_weight'] = $user_data['target_weight'].'kg';
$result_data['initial_weight'] = $user_data['initial_weight'].'kg';
$result_data['initial_date'] = $this->daysSince($user_data['initial_date']).'天';
}else{
$result_data['target_weight'] = '';
$result_data['initial_weight'] = '';
$result_data['initial_date'] = '';
}
}else{
return $this->msg(10003,'添加失败');
return $this->msg(10002,'未找到用户数据');
}
$user_data_list = Db::query("select record_time,weight,bmi,muscleval,fat_w 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");
if(in_array($data['type'], ['weight','muscleval','fat_w','bmi'])){
$data_arr = [];
foreach ($user_data_list as $key => $value) {
$data_arr[] = [$value[$data['type']],$value['record_time']];
}
}
// dump($result_data['target_weight']);
// dump($result_data['initial_weight']);
// die;
$cumulative_weight = $user_data['target_weight']-$user_data['initial_weight'];
if($cumulative_weight >= 0){
$result_data['cumulative_weight'] = [$cumulative_weight.'kg','累计减重'];
}else {
$result_data['cumulative_weight'] = [abs($cumulative_weight).'kg','累计增重'];
}
// if($user_data){
// }
$result_data['list'] = $data_arr;
return $this->msg(0,'success',$result_data);
}
// 获取身体数据记录信息列表
function get_body_record_data($data){
$result = Db::query("
select
id,
CONVERT(varchar(10), record_time, 120) AS r_t,
CONVERT(varchar(19), record_time, 120) AS record_time,
height,
weight,
bmi
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");
$return_result = [];
foreach ($result as $key => $value) {
if(array_key_exists($value['r_t'], $return_result)){
array_push($return_result[$value['r_t']], ['id'=>$value['id'],'height'=>$value['height'],'weight'=>$value['weight'],'bmi'=>$value['bmi']]);
}else{
$return_result[$value['r_t']] = [['id'=>$value['id'],'height'=>$value['height'],'weight'=>$value['weight'],'bmi'=>$value['bmi']]];
}
}
dump(['original'=>$result,'optimization'=>$return_result]);
die;
return ['original'=>$result,'optimization'=>$return_result];
}
// 身体数据对比
function body_data_contrast($data = ['acd_id'=>'2','data'=>[1,10]]){
$between_num = implode(',',$data['data']);
dump($between_num);
$result = Db::query("
select
acbd.id,
acbd.height,
acbd.weight,
acbd.bmi,
aud.nickname,
aud.gender,
aud.birthday
from app_card_body_data as acbd
left join app_user_data as aud on acbd.aud_id=aud.id
where acbd.id in (".$between_num.")
");
dump($result);
die;
}
################################################################身体数据卡片业务
// 用户身体数据卡片记录
function set_user_body_data($data){
if(!array_key_exists('time', $data) || !array_key_exists('height', $data) || !array_key_exists('weight', $data)){
return $this->msg(10001,'数据格式错误');
}
$user_data = Db::table('app_user_data')->where(['id'=>$data['aud_id']])->field('birthday,gender')->find();
$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'];
$result_data['adc'] = array_key_exists('impedance', $data)?$data['impedance']:550;
$calculate_body_formula = new Calculatebody();
$get_body_value = $calculate_body_formula->calculate_body_data_result($result_data);
$set_user_data = Db::table('app_card_body_data')->insert([
'acd_id'=>$data['acd_id'],
'aud_id'=>$data['aud_id'],
'record_time'=>$data['time'],
'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['身高'],
'weight'=>$get_body_value['体重'],
'bmi'=>$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['身体类型']
]);
if($set_user_data){
// 返回简要数据
if($data['type'] == 1){
return $this->msg(0,'success',['acd_id'=>2,'height'=>$get_body_value['身高'].'CM','weight'=>$get_body_value['体重'].'公斤','bmi'=>$get_body_value['BMI']]);
}
}else{
return $this->msg(10002,'数据存储失败');
}
}
// 用户身体数据卡片获取
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.id'=>$data['id']])
->field('acbd.*,aud.birthday,aud.gender')
->find();
if(!$result){
return $this->msg(10002,'未找到数据');
}else{
$result_end = $this->processing_return_data($result);
// dump($result_end);
// die;
return $this->msg(0,'success',$result_end);
}
}
// 返回数据处理
function processing_return_data($data){
$result_end_data = [];
$month_num = $this->calculateAgeInMonthsWithPrecision($data['birthday'])*100;
$gender_val = $data['gender'];
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'){
// 如果大于16岁成人
if($data['age'] >= $this->age_limit){
$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];
}
if(array_key_exists($key, $this->standard_color)){
$result_end_data[$key]['color'] = $this->standard_color[$key][$result_end_data[$key]['standard']];
}
}else{
if(array_key_exists($key, $this->bhw_list)){
$result_end_data[$key] = $this->result_end_data_mould;
$result_end_data[$key]['list'] = $this->bhw_list[$key];
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];
}
if(array_key_exists($key, $this->standard_color)){
$result_end_data[$key]['color'] = $this->standard_color[$key][$result_end_data[$key]['standard']];
}
if($key == 'bmi'){
// dump($month_num);
$bhw_date = Db::table('pc_bmistand2')->where("month >= $month_num and sex = '$gender_val'")->order('month')->limit(1)->select();
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_heightstand2')->where("month >= $month_num")->order('month')->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_weightstand2')->where("month >= $month_num")->order('month')->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'];
}
}
}
}
}
}
return $result_end_data;
}
################################################################other################################################################
################################################################other################################################################
################################################################other################################################################
// 检查变量是否是一个只有数字的一维数组
function isNumericArray($array) {
function isNumericArray($array = [1,2,3]) {
if (!is_array($array)) {
return false; // 变量不是数组
}
@ -108,8 +459,12 @@ class Card extends Controller{
return false; // 数组中包含非数字元素
}
}
$result = Db::table('app_card_data')->where(['is_del'=>1])->cache(true,3600)->column('id');//查询结果缓存3600秒
if(empty(array_diff($array, $result))){
// $result = Db::table('app_card_data')->where(['is_del'=>1])->cache(true,3600)->column('id');//查询结果缓存3600秒
$result = Db::table('app_card_data')->where(['is_del'=>0])->cache(true,3600)->select();//查询结果缓存3600秒
// dump(array_column($result, 'id'));
// die;
if(empty(array_diff($array, array_column($result, 'id')))){
return true;// 数组是一维的且只包含数字,且已经跟数据库比对过,每个数值都是有效
}else{
return false;//跟数据库比对过,存在无效数值
@ -117,6 +472,114 @@ class Card extends Controller{
}
// 计算年龄
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;
}
}
// 计算天数
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');
}
// 计算月份
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);
return $ageInMonthsPrecise;
}
// 计算肌肉率 删
function calculate_jiroulv(){
phpinfo();
die;
$result = $result = Db::table('pc_weightstand')->order('Month')->select();
for ($i=0; $i < count($result); $i++) {
$data[$i]['month'] = $result[$i]['Month']*100/100;
$data[$i]['sex'] = $result[$i]['Sex'];
$data[$i]['f3sd'] = $result[$i]['f1sd']*100/100;
$data[$i]['f2sd'] = $result[$i]['f1sd']*100/100;
$data[$i]['f1sd'] = $result[$i]['f1sd']*100/100;
$data[$i]['median'] = $result[$i]['median']*100/100;
$data[$i]['z1sd'] = $result[$i]['z1sd']*100/100;
$data[$i]['z2sd'] = $result[$i]['z2sd']*100/100;
$data[$i]['z3sd'] = $result[$i]['z3sd']*100/100;
$data[$i]['isdel'] = $result[$i]['IsDeleted'];
$data[$i]['create_time'] = date('Y-m-d H:i:s');
}
$result = $result = Db::table('pc_weightstand2')->insertAll($data);
dump($result);
dump($data);
die;
}
// 计算骨重
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]);

View File

@ -48,7 +48,8 @@ class Login extends Controller{
// die;
if($result){
$user_data = Db::table('app_user_data')->where(['aan_id'=>$result['id']])->field('id,nickname')->select();
return $this->msg(0,'success');
// $data['color'] = $this->color;
return $this->msg(0,'success',$data);
}else{
return $this->msg(10001,'未找到账户');
}

View File

@ -87,7 +87,7 @@ return [
// URL参数方式 0 按名称成对解析 1 按顺序解析
'url_param_type' => 0,
// 是否开启路由
'url_route_on' => true,
'url_route_on' => false,
// 路由使用完整匹配
'route_complete_match' => false,
// 路由配置文件(支持配置多个)
@ -95,7 +95,7 @@ return [
// 是否开启路由解析缓存
'route_check_cache' => false,
// 是否强制使用路由
'url_route_must' => true,
'url_route_must' => false,
// 域名部署
'url_domain_deploy' => false,
// 域名根如thinkphp.cn

View File

@ -10,29 +10,29 @@
// +----------------------------------------------------------------------
use think\Route;
// use think\Route;
################################################################管理后台################################################################
################################################################管理后台################################################################
// ################################################################管理后台################################################################
// ################################################################管理后台################################################################
// 管理后台登录
Route::get('/admin/login', 'admin/login/login');
Route::post('/admin/login_action', 'admin/login/login_action');
// 管理后台首页
Route::get('/admin/index', 'admin/index/index');
Route::get('/admin/welcome', 'admin/index/welcome');
// APP账号角色管理
// APP账号数据列表
Route::get('/admin/member_list', 'admin/member/member_list');
Route::get('/admin/user_list', 'admin/member/user_list');
// // 管理后台登录
// Route::get('/admin/login', 'admin/login/login');
// Route::post('/admin/login_action', 'admin/login/login_action');
// // 管理后台首页
// Route::get('/admin/index', 'admin/index/index');
// Route::get('/admin/welcome', 'admin/index/welcome');
// // APP账号角色管理
// // APP账号数据列表
// Route::get('/admin/member_list', 'admin/member/member_list');
// Route::get('/admin/user_list', 'admin/member/user_list');
################################################################APP接口################################################################
################################################################APP接口################################################################
// ################################################################APP接口################################################################
// ################################################################APP接口################################################################
// 处理404错误 z
Route::miss(function(){
return '404 Not Found';
// 或者你可以重定向到一个错误页面,或者进行其他处理
});
// // 处理404错误 z
// Route::miss(function(){
// return '404 Not Found';
// // 或者你可以重定向到一个错误页面,或者进行其他处理
// });