足底健康分析服务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

517 lines
16 KiB

<?php
namespace App\Http\Controllers;
use App\Http\Services\CommonService;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
class IndexController extends BaseController
{
public function index()
{
return view('http.index');
}
public function tabularData()
{
$request_data = request()->all();
$vague = 2;
$datas = [
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 6, 6, 8, 4, 2, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 4, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 4, 2, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 4, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 2, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 2, 1, 6, 8, 8, 8, 8, 6, 6, 4, 2, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 2, 4, 6, 8, 8, 8, 8, 6, 6, 4, 2, 1, 1,
1, 1, 1, 2, 4, 1, 8, 9, 8, 6, 6, 4, 4, 2, 1, 1, 1, 1, 1, 2, 4, 6, 8, 8, 8, 8, 6, 6, 4, 2, 1, 1,
1, 1, 1, 2, 4, 4, 4, 9, 8, 6, 6, 4, 4, 2, 1, 1, 1, 1, 1, 2, 4, 6, 8, 8, 8, 6, 6, 2, 2, 2, 1, 1,
1, 1, 1, 1, 1, 2, 2, 4, 4, 6, 6, 4, 2, 2, 1, 1, 1, 1, 1, 2, 4, 6, 4, 4, 4, 2, 2, 2, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 2, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 2, 2, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
];
for ($i = 0; $i < 1024; $i++){
$datas2[intval($i / 32)][$i % 32] = $datas[$i];
}
foreach ($datas2 as $key1 => $data){
foreach ($data as $key2 => $datum){
if (!empty($datas2[$key1][$key2 - 1])){
$num = $datum - $datas2[$key1][$key2 - 1];
$temp = $datum;
for ($i = $vague; $i >= 1; $i--) {
$chunk[$key1][] = $temp - ($num / ($vague + 1)) * $i;
}
}
$chunk[$key1][] = $datum;
}
}
$chunk2 = [];
$key3 = 0;
$number = 1;
foreach ($chunk as $key1 => $data){
foreach ($data as $key2 => $datum){
$number++;
if (!empty($chunk[$key1 - 1][$key2])){
$num = $datum - $chunk[$key1 - 1][$key2];
$temp = $datum;
for ($i = $vague; $i >= 1; $i--) {
$chunk2[$key3 - $i][$key2] = $temp - ($num / ($vague + 1)) * $i;
}
}
$chunk2[$key3][$key2] = $datum;
}
$key3 = $key3 + ($vague + 1);
}
$chunk3 = [];
foreach ($chunk2 as $key1 => $value) {
foreach ($value as $key2 => $value2) {
$chunk3[] = [
$key2,
$key1,
$value2 / 10,
];
}
}
return [
'pressure' => $chunk3,
'foot' => [36.2, 80, 36.1, 75, 35.9, 79, 36.3, 80]
];
// $chunk = [
// // data1[0],
// // data1[1],
// // data1[2],
// // data1[3],
// // data1[4],
// // data1[5],
// // data1[6],
// // data1[7],
// // data1[8],
// // data1[9],
// // data1[10],
// // data1[11],
// // data1[12],
// [
// 1,1,0
// ],
// [
// 10,10,0.1
// ],
// [
// 20,20,0.2
// ],
// [
// 30,30,0.3
// ],
// [
// 40,40,0.4
// ], [40,40,0.4], [50,50,0.5], [60,60,0.6], [70,70,0.7], [80,80,0.8], [90,90,0.9], [99,99,1],
//
// ];
//
// $data = [$request_data['item']*50, 0, 0, 50, 100, 150, 200, 200, 150,100, 0,
// 2, 0, 100, 100, 100, 100, 100, 100, 100,100, 0,
// 3, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 4, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 5, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 6, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 7, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 8, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 9, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 10, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 11, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// ];
//
//// for ($i = 0; $i < 121; $i++){
////
////
//// $chunk[intval($i / 11)][$i % 11] = [
//// $i % 11,
//// intval($i / 11),
//// $data[$i],
//// ];
//// }
// $chunk = [];
//
// for ($i = 0; $i < 121; $i++){
//
//
// $chunk[] = [
// $i % 11,
// intval($i / 11),
// $data[$i] / 300,
// ];
// }
// dump($chunk);
//
//
// $chunk2 = [];
// foreach ($chunk as $key1 => $items){
// foreach ($items as $key2 => $cell){
// $chunk2[$key1][$key2] = $cell[2];
//
// if (($key2 - 1) >= 0){
// $value = $cell[2] - $chunk[$key1][$key2 - 1][2];
//
// $increase = $value / 3;
// for ($i = 1; $i <= 3; $i++){
//
//
// $chunk2[$key1][$key2 + $i] = $cell[2] + $increase * $i;
// }
// }
// }
// }
// dump($chunk2);
// 模拟数据3
// $chunk = [];
// for ($i = 0; $i <= 32; $i++){
// for ($j = 0; $j <= 32; $j++){
// $num1 = $num2 = 0;
// if ($j > 6 && $j <= 16){
// $num1 = $j - 6;
// } elseif ($j > 16 && $j <= 26){
// $num1 = 27 - $j;
// }
// if ($i > 6 && $i <= 16){
// $num2 = $i - 6;
// } elseif ($i > 16 && $i <= 26){
// $num2 = 27 - $i;
// }
// if (!empty($num1) && !empty($num2)){
// $chunk[] = [
// $j,
// $i,
// ($num1 + $num2) / 30,
// ];
// } else {
// $chunk[] = [
// $j,
// $i,
// 0,
// ];
// }
// }
// }
// return [
// 'pressure' => $chunk,
// 'foot' => [36.2, 80, 36.1, 75, 35.9, 79, 36.3, 80]
// ];
}
public function lora()
{
return view('http.lora');
}
public function lora2()
{
Cache::flush();
return view('http.lora2');
}
public function getPelmaStore()
{
echo Cache::get('pelma');
return;
}
public function store()
{
// echo Cache::get('pelma');
$data = request('pelma');
Cache::put('pelma', $data);
Log::info($data);
return 'ok';
}
public function getBlood()
{
$blood = Cache::get('blood');
return $blood;
}
/**
* 上传血压数据
* http://127.0.0.1:8001/storeBlood?node=616162626365&data=0090243050005500
* @return string
*/
public function storeBlood()
{
// echo Cache::get('blood');
$request_data = request()->all();
$lora_mac = config("custom.lora_mac");
if (empty($request_data['node']) || empty($request_data['data'])){
return 'error';
}
if (!in_array($request_data['node'], $lora_mac)){
return 'error';
}
//血氧80.1
$blood = substr($request_data['data'], 0, 4);
$blood1 = hexdec(substr($blood, 0, 2));
$blood2 = substr($blood, 2, 2);
$blood2 = CommonService::customHex2dec($blood2);
Cache::put('blood' . $request_data['node'], ($blood1 + $blood2) * 100);
//体温36.1
$temperature = substr($request_data['data'], 4, 4);
$temperature1 = hexdec(substr($temperature, 0, 2));
$temperature2 = substr($temperature, 2, 2);
$temperature2 = CommonService::customHex2dec($temperature2);
Cache::put('temperature' . $request_data['node'], $temperature1 + $temperature2);
//心跳70
$heart = substr($request_data['data'], 8, 4);
$heart = hexdec(substr($heart, 0, 2));
Cache::put('heart' . $request_data['node'], $heart);
//脉搏70
$heart2 = substr($request_data['data'], 12, 4);
$heart2 = hexdec(substr($heart2, 0, 2));
Cache::put('heart2' . $request_data['node'], $heart2);
return 'ok';
}
public function loraData()
{
$request_data = request()->all();
// if (!empty($request_data['item']) && $request_data['item'] == '温度'){
// $temperature = rand(359, 366) / 10;
//
// $data = [[$temperature, 0, 0, "温度", date('m:s')]];
//
// } elseif (!empty($request_data['item']) && $request_data['item'] == '血氧'){
// $oxygen = rand(70, 100);
//
// $data = [[$oxygen, 0, 0, "血氧", date('m:s')]];
//
// } else {
// $temperature = rand(359, 366) / 10;
// $oxygen = rand(70, 100);
//
// $data = [[$temperature, 0, 0, "温度", date('m:s')],
// [$oxygen, 0, 0, "血氧", date('m:s')]];
//
// }
$temperature = rand(359, 366) / 10;
$oxygen = rand(70, 100);
$oxygen = 80 + ((time() % 3) + 1) * 5;
$data = [[$temperature, 0, 0, "温度", date('m:s')],
[$oxygen, 0, 0, "血氧", date('m:s')]];
return $data;
}
/**
* 设备列表
* @return void
*/
public function loraDeviceList()
{
$lora_mac = config("custom.lora_mac");
$devices = [];
foreach ($lora_mac as $key => $mac){
$devices[] = [
'name' => '设备' . ($key + 1),
'mac' => $mac,
'online' => 0,
];
}
return $devices;
}
public function loraData2()
{
$time = (int)(time() . '000');
$request_data = request()->all();
$node = $request_data['node'] ?? config("custom.lora_mac")[0];
$return_data = [];
$blood_data = Cache::get('blood' . $node, '');
if ($blood_data){
$return_data['blood'] = [
[
$time,
$blood_data,
]
];
}
$temperature_data = Cache::get('temperature' . $node, '');
if ($temperature_data){
$return_data['temperature'] = [
[
$time,
$temperature_data,
]
];
}
$heart_data = Cache::get('heart' . $node, '');
if ($heart_data){
$return_data['heart'] = [
[
$time,
$heart_data,
]
];
}
$heart2_data = Cache::get('heart2' . $node, '');
if ($heart2_data){
$return_data['humidity'] = [
[
$time,
$heart2_data,
]
];
}
$total = [50, 70, 90, 85, 80, 75, 70, 65, 60, 55];
$total_data = [];
foreach ($total as $key => $item){
$item_time = $time + 100 * $key;
$total_data[] = [
$item_time,
$item
];
}
return $return_data;
}
/**
* 专项对比数据
* @return void
*/
public function getSpecialCompare()
{
$request_data = request()->all();
$compare_type = $request_data['compare_type'] ?? 1;
$time = (int)(time() . '000');
$nodes = config("custom.lora_mac");
$return_data = [];
foreach ($nodes as $key => $node){
switch ($compare_type) {
case 1:
$device_data = Cache::get('blood' . $node, '');
break;
case 2:
$device_data = Cache::get('temperature' . $node, '');
break;
case 3:
$device_data = Cache::get('heart' . $node, '');
break;
case 4:
$device_data = Cache::get('heart2' . $node, '');
break;
default:
$device_data = Cache::get('blood' . $node, '');
}
if (empty($device_data)){
continue;
}
$device_id = $key + 1;
$device_name = '设备' . $device_id;
$return_data[$device_name] = [
[
$time,
$device_data
]
];
}
return $return_data;
return [
'设备1' => [
[
$time,
70,
]
],
// '设备2' => [
// [
// $time,
// 80,
// ]
// ],
'设备3' => [
[
$time,
90,
]
],
];
}
}