743 lines
28 KiB
PHP
743 lines
28 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\App;
|
||
|
||
use App\Facades\CommonService;
|
||
use App\Http\Controllers\Controller;
|
||
use App\Http\Response\ResponseJson;
|
||
use App\Jobs\SyncDailyStep;
|
||
use App\Models\Band;
|
||
use App\Models\BandBlood;
|
||
use App\Models\BandConsume;
|
||
use App\Models\BandDataTime;
|
||
use App\Models\BandGoal;
|
||
use App\Models\BandGoalLog;
|
||
use App\Models\BandHrrest;
|
||
use App\Models\BandHrv;
|
||
use App\Models\BandOriginBattery;
|
||
use App\Models\BandOriginBlood;
|
||
use App\Models\BandOriginDataTime;
|
||
use App\Models\BandOriginHrrest;
|
||
use App\Models\BandOriginHrv;
|
||
use App\Models\BandOriginSleep;
|
||
use App\Models\BandOriginSyn;
|
||
use App\Models\BandOriginTemp;
|
||
use App\Models\BandSleep;
|
||
use App\Models\BandSyn;
|
||
use App\Models\BandTemp;
|
||
use App\Models\BatteryHistory;
|
||
use App\Models\SplitModel;
|
||
use App\Models\User;
|
||
use Carbon\Carbon;
|
||
use Exception;
|
||
use Illuminate\Http\Request;
|
||
use Illuminate\Support\Facades\DB;
|
||
use Illuminate\Support\Facades\Log;
|
||
|
||
class BandController extends Controller
|
||
{
|
||
use ResponseJson;
|
||
|
||
public function bindBand(Request $request)
|
||
{
|
||
$mac = $request->input('mac');
|
||
$name = $request->input('name');
|
||
$user = auth()->user();
|
||
// 手环是否已绑定账号
|
||
list($is_bind, $is_self, $mobile) = Band::bindStatus($mac, $user);
|
||
if ($is_bind)
|
||
return $this->failure("当前手环已被账号为{$mobile}绑定");
|
||
// 账号是否绑定手环
|
||
$userBand = Band::where("user_id", $user->id)->where('status', 1)->first();
|
||
if ($userBand)
|
||
return $this->failure("当前账号已绑定了手环{$userBand->name}");
|
||
DB::beginTransaction();
|
||
//绑定手环
|
||
$band = Band::bindUser($mac, $name, $user);
|
||
//设置目标
|
||
$band->setGoals();
|
||
//切換状态
|
||
Band::connectUser($mac, $user);
|
||
DB::commit();
|
||
return $this->success('ok', $band);
|
||
}
|
||
|
||
public function bands(Request $request)
|
||
{
|
||
$bands = Band::owner(auth()->id())->orderByDesc("status")->get();
|
||
return $this->success('ok', $bands);
|
||
}
|
||
|
||
public function unbindBand(Request $request)
|
||
{
|
||
$mac = $request->input('mac');
|
||
$user = auth()->user();
|
||
Band::unbindUser($mac, $user);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function connectBand(Request $request)
|
||
{
|
||
$mac = $request->input('mac');
|
||
$user = auth()->user();
|
||
Band::connectUser($mac, $user);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function breakBand(Request $request)
|
||
{
|
||
$mac = $request->input('mac');
|
||
$user = auth()->user();
|
||
Band::breakUser($mac, $user);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function setGoals(Request $request)
|
||
{
|
||
$data = $request->only(['step_num', 'distance', 'kcal', 'sleep', 'mac']);
|
||
$band = Band::owner(auth()->id())->mac($data['mac'])->first();
|
||
if (empty($band))
|
||
return $this->failure("未获取到手环信息");
|
||
$band->setGoals($data);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function goals(Request $request)
|
||
{
|
||
$mac = $request->input('mac');
|
||
$type = $request->input('type');
|
||
$band = Band::owner(auth()->id())->mac($mac)->first();
|
||
if (empty($band))
|
||
return $this->failure("未获取到手环信息");
|
||
switch ($type) {
|
||
case BandGoal::DAY_TYPE:
|
||
$goals = $band->goals;
|
||
break;
|
||
case BandGoal::WEEK_TYPE:
|
||
case BandGoal::MONTH_TYPE:
|
||
$goals = $this->getGoals($band, $type);
|
||
break;
|
||
default:
|
||
throw new \Exception("目标信息缺少参数");
|
||
}
|
||
return $this->success('ok', $goals);
|
||
}
|
||
|
||
public function getGoals($band, $type)
|
||
{
|
||
$step_num = $distance = $kcal = $sleep = 0;
|
||
$times = [];
|
||
if ($type == BandGoal::WEEK_TYPE) {
|
||
$num = BandGoal::WEEK_NUM;
|
||
} else {
|
||
$num = BandGoal::MONTH_NUM;
|
||
}
|
||
for ($i = $num - 1; $i >= 0; $i--) {
|
||
$start_time = date("Y-m-d", strtotime("-{$i} days"));
|
||
$day = $i - 1;
|
||
$end_time = date("Y-m-d", strtotime("-{$day} days"));
|
||
$times[] = ["start_time" => $start_time, 'end_time' => $end_time];
|
||
}
|
||
foreach ($times as $time) {
|
||
$start_time = $time['start_time'];
|
||
$end_time = $time['end_time'];
|
||
$log = $band->goalsLogs()->times($start_time, $end_time)->first();
|
||
if (empty($log)) {
|
||
$log = $band->goalsLogs()->where('created_at', '<', $start_time)->orderByDesc("id")->first();
|
||
if (empty($log)) {
|
||
$log = $band->goalsLogs()->orderByDesc("id")->first();
|
||
}
|
||
}
|
||
$step_num += $log->step_num;
|
||
$distance += $log->distance;
|
||
$kcal += $log->kcal;
|
||
$sleep += $log->sleep;
|
||
}
|
||
return ["step_num" => $step_num, "distance" => $distance, 'kcal' => $kcal, 'sleep' => $sleep];
|
||
}
|
||
|
||
public function uploadSleepData(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$last_time = $this->uploadData(BandSleep::class, $user, $mac, $data);
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadHrrestData(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$last_time = $this->uploadData(BandHrrest::class, $user, $mac, $data);
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadTempData(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$last_time = $this->uploadData(BandTemp::class, $user, $mac, $data);
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadHrvData(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$last_time = $this->uploadData(BandHrv::class, $user, $mac, $data);
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadBloodData(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$last_time = $this->uploadData(BandBlood::class, $user, $mac, $data);
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadSynData(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$last_time = $this->uploadData(BandSyn::class, $user, $mac, $data);
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
|
||
public function uploadData($class, $user, $mac, $data)
|
||
{
|
||
DB::beginTransaction();
|
||
$band = Band::owner($user->id)->mac($mac)->first();
|
||
if (empty($band))
|
||
throw new \Exception("未获取到手环信息", 5000);
|
||
$suffix = SplitModel::getMonthSuffix();
|
||
switch ($class) {
|
||
case BandSleep::class:
|
||
$key = "sleep_time";
|
||
break;
|
||
case BandHrrest::class:
|
||
$key = "hrrest_time";
|
||
break;
|
||
case BandTemp::class:
|
||
$key = "temp_time";
|
||
break;
|
||
case BandHrv::class:
|
||
$key = "hrv_time";
|
||
break;
|
||
case BandSyn::class:
|
||
$key = "syn_time";
|
||
break;
|
||
case BandBlood::class:
|
||
$key = "blood_time";
|
||
break;
|
||
}
|
||
$date_time = BandDataTime::owner($user->id)->band($band->id)->first();
|
||
$min_date = "";
|
||
if ($date_time && $date_time->$key) {
|
||
$min_date = date("Y-m-d H:i:s", $date_time->$key);
|
||
}
|
||
$data = collect($data)->where('date', '>', $min_date)->sortBy("date")->all();
|
||
$items = [];
|
||
foreach ($data as &$item) {
|
||
$obj = collect($items)->where('date', $item['date'])->first();
|
||
if ($obj)
|
||
continue;
|
||
$item['created_at'] = $item['updated_at'] = date("Y-m-d H:i:s");
|
||
$item['user_id'] = $user->id;
|
||
$item['band_id'] = $band->id;
|
||
$items[] = $item;
|
||
}
|
||
$limit = 1000;
|
||
$cols = collect($items)->count();
|
||
$last_time = '';
|
||
if ($cols) {
|
||
collect($items)->chunk($limit)
|
||
->each(function ($calls) use ($class, $suffix, &$last_time) {
|
||
$data = $calls->toArray();
|
||
// Log::info($data);
|
||
$class::suffix($suffix)->insert($data);
|
||
Log::info($calls->sortByDesc("date")->value('date'));
|
||
$last_time = $calls->sortByDesc("date")->value('date');
|
||
});
|
||
} else {
|
||
DB::commit();
|
||
return $min_date ? strtotime($min_date) : '';
|
||
}
|
||
if ($last_time) {
|
||
$last_time = strtotime($last_time);
|
||
$date_time = BandDataTime::owner($user->id)->band($band->id)->first();
|
||
if ($date_time) {
|
||
BandDataTime::owner($user->id)->band($band->id)->update([$key => $last_time]);
|
||
} else {
|
||
BandDataTime::create(['user_id' => $user->id, 'band_id' => $band->id, $key => $last_time]);
|
||
}
|
||
}
|
||
DB::commit();
|
||
return $last_time;
|
||
}
|
||
|
||
public function uploadOriginData($class, $user, $mac, $data, $key): array
|
||
{
|
||
DB::beginTransaction();
|
||
$band = Band::owner($user->id)->mac($mac)->first();
|
||
if (empty($band))
|
||
throw new \Exception("未获取到手环信息", 5000);
|
||
$suffix = SplitModel::getMonthSuffix();
|
||
$date_time = BandOriginDataTime::owner($user->id)->band($band->id)->first();
|
||
$min_date = "";
|
||
if ($date_time && $date_time->$key) {
|
||
$min_date = date("Y-m-d H:i:s", $date_time->$key);
|
||
}
|
||
$data = collect($data)->filter(function ($item, int $key) use ($min_date) {
|
||
$date = str_replace('.', '-', $item['date']);
|
||
return $date > $min_date;
|
||
})->all();
|
||
// $data = collect($data)->where('date', '>', $min_date)->sortBy("date")->all();
|
||
$items = [];
|
||
$date = date("Y-m-d H:i:s");
|
||
foreach ($data as &$item) {
|
||
$item['date'] = str_replace('.', '-', $item['date']);
|
||
if ($item['date'] == "2000-00-00 00:00:00")
|
||
continue;
|
||
//去重
|
||
$obj = collect($items)->where('date', $item['date'])->first();
|
||
if ($obj)
|
||
continue;
|
||
$items[] = ['date' => $item['date'], 'user_id' => $user->id, 'band_id' => $band->id, 'value' => json_encode($item), 'created_at' => $date, 'updated_at' => $date];
|
||
}
|
||
$limit = 1000;
|
||
$cols = collect($items)->count();
|
||
$last_time = '';
|
||
$start_time = "";
|
||
$prefix = config('database.connections.mysql.prefix'); // 获取表前缀
|
||
$model = new $class; // 实例化模型类
|
||
$table = $prefix . $model->getTable() . '_' . $suffix; // 获取表名
|
||
if ($cols) {
|
||
collect($items)->chunk($limit)
|
||
->each(function ($calls) use ($class, $suffix, &$start_time, &$last_time, $table) {
|
||
// Log::info('band_data:'.json_encode($insert_data));
|
||
|
||
$data = $calls->toArray();
|
||
$values = [];
|
||
foreach ($data as $value) {
|
||
$values[] = sprintf(
|
||
'(%d, %d, "%s", \'%s\', "%s", "%s")',
|
||
$value['user_id'],
|
||
$value['band_id'],
|
||
$value['date'],
|
||
$value['value'],
|
||
$value['created_at'],
|
||
$value['updated_at']
|
||
);
|
||
}
|
||
$sql = sprintf(
|
||
'REPLACE INTO %s (user_id, band_id, date, value, created_at, updated_at) VALUES %s',
|
||
$table,
|
||
implode(', ', $values)
|
||
);
|
||
DB::statement($sql);
|
||
$last_time = $calls->sortByDesc("date")->value('date');
|
||
$start_time = $calls->sortBy("date")->value('date');
|
||
$start_time = strtotime($start_time);
|
||
});
|
||
} else {
|
||
DB::commit();
|
||
return [$start_time, $min_date ? strtotime($min_date) : ''];
|
||
}
|
||
if ($last_time) {
|
||
$last_time = strtotime($last_time);
|
||
$date_time = BandOriginDataTime::owner($user->id)->band($band->id)->first();
|
||
if ($date_time) {
|
||
BandOriginDataTime::owner($user->id)->band($band->id)->update([$key => $last_time]);
|
||
} else {
|
||
BandOriginDataTime::create(['user_id' => $user->id, 'band_id' => $band->id, $key => $last_time]);
|
||
}
|
||
}
|
||
DB::commit();
|
||
return [$start_time, $last_time];
|
||
}
|
||
|
||
public function uploadOriginBatteryData(Request $request)
|
||
{
|
||
ini_set('max_execution_time', 18000);
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$res = $this->uploadOriginData(BandOriginBattery::class, $user, $mac, $data, $key = "battery_time");
|
||
$last_time = $res[1];
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadOriginSleepData(Request $request)
|
||
{
|
||
ini_set('max_execution_time', 18000);
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$res = $this->uploadOriginData(BandOriginSleep::class, $user, $mac, $data, $key = "sleep_time");
|
||
$last_time = $res[1];
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadOriginHrrestData(Request $request)
|
||
{
|
||
ini_set('max_execution_time', 18000);
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$res = $this->uploadOriginData(BandOriginHrrest::class, $user, $mac, $data, $key = "hrrest_time");
|
||
$last_time = $res[1];
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadOriginTempData(Request $request)
|
||
{
|
||
ini_set('max_execution_time', 18000);
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$res = $this->uploadOriginData(BandOriginTemp::class, $user, $mac, $data, $key = "temp_time");
|
||
$last_time = $res[1];
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadOriginHrvData(Request $request)
|
||
{
|
||
ini_set('max_execution_time', 18000);
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$res = $this->uploadOriginData(BandOriginHrv::class, $user, $mac, $data, $key = "hrv_time");
|
||
$last_time = $res[1];
|
||
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadOriginBloodData(Request $request)
|
||
{
|
||
ini_set('max_execution_time', 18000);
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$data = $request->data;
|
||
$res = $this->uploadOriginData(BandOriginBlood::class, $user, $mac, $data, $key = "blood_time");
|
||
$last_time = $res[1];
|
||
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function uploadOriginSynData(Request $request)
|
||
{
|
||
ini_set('max_execution_time', 18000);
|
||
Log::info("uploadOriginSynData");
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$band = Band::owner($user->id)->mac($mac)->first();
|
||
if (empty($band))
|
||
throw new \Exception("未获取到手环信息", 5000);
|
||
$data = $request->data;
|
||
$res = $this->uploadOriginData(BandOriginSyn::class, $user, $mac, $data, $key = "syn_time");
|
||
$start_time = $res[0];
|
||
$last_time = $res[1];
|
||
Log::info("uploadOriginSynData: user_id:{$user->id} start_time:{$start_time} end_time:{$last_time}");
|
||
if ($start_time && $last_time) {
|
||
$suffix = SplitModel::getMonthSuffix();
|
||
SyncDailyStep::dispatch($user, $start_time, $last_time, $suffix, $band->id)->onQueue('sync.daily.step');
|
||
}
|
||
return $this->success('ok', compact('last_time'));
|
||
}
|
||
|
||
public function dailyOriginBattery(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input("mac");
|
||
if (empty($mac)) {
|
||
$mac = Band::owner($user->id)->where("status", 1)->value("mac");
|
||
}
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
$res = $this->dailyData(BandOriginBattery::class, $user, $mac, $start_time, $end_time);
|
||
return $this->success("ok", $res);
|
||
}
|
||
|
||
public function dailySleep(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input("mac");
|
||
if (empty($mac)) {
|
||
$mac = Band::owner($user->id)->where("status", 1)->value("mac");
|
||
}
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
$res = $this->dailyData(BandSleep::class, $user, $mac, $start_time, $end_time);
|
||
return $this->success("ok", $res);
|
||
}
|
||
|
||
public function dailyOriginSleep(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input("mac");
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
$res = $this->dailyData(BandOriginSleep::class, $user, $mac, $start_time, $end_time);
|
||
return $this->success("ok", $res);
|
||
}
|
||
|
||
public function dailyOriginHrrest(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input("mac");
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
$res = $this->dailyData(BandOriginHrrest::class, $user, $mac, $start_time, $end_time);
|
||
return $this->success("ok", $res);
|
||
}
|
||
|
||
public function dailyOriginTemp(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input("mac");
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
$res = $this->dailyData(BandOriginTemp::class, $user, $mac, $start_time, $end_time);
|
||
return $this->success("ok", $res);
|
||
}
|
||
|
||
public function dailyOriginHrv(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input("mac");
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
$res = $this->dailyData(BandOriginHrv::class, $user, $mac, $start_time, $end_time);
|
||
return $this->success("ok", $res);
|
||
}
|
||
|
||
public function dailyOriginBlood(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input("mac");
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
$res = $this->dailyData(BandOriginBlood::class, $user, $mac, $start_time, $end_time);
|
||
return $this->success("ok", $res);
|
||
}
|
||
|
||
public function dailyOriginSyn(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input("mac");
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
$res = $this->dailyData(BandOriginSyn::class, $user, $mac, $start_time, $end_time);
|
||
return $this->success("ok", $res);
|
||
}
|
||
|
||
public function dailyData($class, $user, $mac, $start_time, $end_time)
|
||
{
|
||
Log::info($start_time);
|
||
if (strtotime($end_time) < 1717171200)
|
||
return [];
|
||
if (strtotime($start_time) < 1717171200) {
|
||
$start_time = "2024-06-01";
|
||
}
|
||
$band = Band::owner($user->id)->mac($mac)->first();
|
||
if (empty($band))
|
||
throw new \Exception("未获取到手环信息", 5000);
|
||
// $start_month = date("m", strtotime($start_time));
|
||
// $suffix = date("Y") . $start_month;
|
||
// Log::info($suffix);
|
||
// $arr = $class::suffix($suffix)->owner($user->id)->band($band->id)->time($start_time, $end_time)->orderBy("date")->get()->toArray();
|
||
// $end_month = date("m", strtotime($end_time));
|
||
// $suffix2 = date("Y") . $end_month;
|
||
// if ($start_month == $end_month) {//
|
||
// if ($end_month == 12) {
|
||
// $end_month = 1;
|
||
// $suffix2 = date("Y", strtotime("+1 year")) . $end_month;
|
||
// } else {
|
||
// $end_month = str_pad($end_month + 1, 2, 0, STR_PAD_LEFT);
|
||
// $suffix2 = date("Y") . $end_month;
|
||
// }
|
||
// }
|
||
$suffixArr = $this->getDailySuffix($start_time, $end_time);
|
||
$suffix = $suffixArr[0];
|
||
$suffix2 = $suffixArr[1];
|
||
Log::info($suffix2);
|
||
Log::info($start_time);
|
||
Log::info($end_time);
|
||
$arr = $class::suffix($suffix)->owner($user->id)->band($band->id)->time($start_time, $end_time)->orderBy("date")->get()->toArray();
|
||
$arr2 = $class::suffix($suffix2)->owner($user->id)->band($band->id)->time($start_time, $end_time)->orderBy("date")->get()->toArray();
|
||
$arr = array_merge($arr2, $arr);
|
||
return $arr;
|
||
}
|
||
|
||
public function getDailySuffix($start_time, $end_time)
|
||
{
|
||
$suffix = $suffix2 = "";
|
||
// 开始时间
|
||
$start_month = date("m", strtotime($start_time));
|
||
$start_year = date("Y", strtotime($start_time));
|
||
|
||
// 结束时间
|
||
$end_month = date("m", strtotime($end_time));
|
||
$end_year = date("Y", strtotime($end_time));
|
||
|
||
if ($start_year == $end_year && $start_month == $end_month) {// 同年 同月份
|
||
$suffix = $start_year . $start_month;
|
||
// 往后+1月
|
||
if ($end_month == 12) {
|
||
$end_year = $end_year + 1;
|
||
$end_month = "01";
|
||
} else {
|
||
$date = Carbon::parse($end_time);
|
||
$newDate = $date->addMonth();
|
||
$end_month = $newDate->format("m");
|
||
$end_year = $newDate->year;
|
||
}
|
||
$suffix2 = $end_year . $end_month;
|
||
} else {
|
||
$suffix = $start_year . $start_month;
|
||
$suffix2 = $end_year . $end_month;
|
||
}
|
||
return [$suffix, $suffix2];
|
||
}
|
||
|
||
|
||
public function bindStatus(Request $request)
|
||
{
|
||
$mac = $request->input('mac');
|
||
$user = auth()->user();
|
||
list($is_bind, $is_self, $mobile) = Band::bindStatus($mac, $user);
|
||
return $this->success('ok', compact('is_bind', 'is_self', 'mobile'));
|
||
}
|
||
|
||
public function newestDate(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$band = Band::owner($user->id)->mac($mac)->first();
|
||
if (empty($band))
|
||
return $this->failure("未获取到手环信息");
|
||
$date_time = BandDataTime::owner($user->id)->band($band->id)->first();
|
||
$sleep_time = $hrrest_time = $temp_time = $hrv_time = $syn_time = $blood_time = '';
|
||
if ($date_time) {
|
||
$sleep_time = $date_time->sleep_time ?: '';
|
||
$hrrest_time = $date_time->hrrest_time ?: "";
|
||
$temp_time = $date_time->temp_time ?: "";
|
||
$hrv_time = $date_time->hrv_time ?: '';
|
||
$syn_time = $date_time->syn_time ?: "";
|
||
$blood_time = $date_time->blood_time ?: "";
|
||
}
|
||
return $this->success('ok', compact('sleep_time', 'hrrest_time', 'temp_time', 'hrv_time', 'hrv_time', 'syn_time', 'blood_time'));
|
||
}
|
||
|
||
public function newestOriginDate(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$band = Band::owner($user->id)->mac($mac)->first();
|
||
if (empty($band))
|
||
return $this->failure("未获取到手环信息");
|
||
$date_time = BandOriginDataTime::owner($user->id)->band($band->id)->first();
|
||
$sleep_time = $hrrest_time = $temp_time = $hrv_time = $syn_time = $blood_time = $battery_time = "";
|
||
if ($date_time) {
|
||
$sleep_time = $date_time->sleep_time ?: "";
|
||
$temp_time = $date_time->temp_time ?: "";
|
||
$hrv_time = $date_time->hrv_time ?: "";
|
||
$syn_time = $date_time->syn_time ?: "";
|
||
$blood_time = $date_time->blood_time ?: "";
|
||
$battery_time = $date_time->battery_time ?: "";
|
||
$hrrest_time = $date_time->hrrest_time ?: "";
|
||
}
|
||
return $this->success('ok', compact('sleep_time', 'hrrest_time', 'temp_time', 'hrv_time', 'hrv_time', 'syn_time', 'blood_time', "battery_time"));
|
||
}
|
||
|
||
public function newestOriginFirstDate(Request $request)
|
||
{
|
||
$user = auth()->user();
|
||
$mac = $request->input('mac');
|
||
$band = Band::owner($user->id)->mac($mac)->first();
|
||
if (empty($band))
|
||
return $this->failure("未获取到手环信息");
|
||
$sleep_time = $hrrest_time = $temp_time = $hrv_time = $syn_time = $blood_time = "";
|
||
$date_time = BandOriginDataTime::owner($user->id)->band($band->id)->first();
|
||
if ($date_time) {
|
||
$sleep_time = $date_time->sleep_time ?: '';
|
||
$hrrest_time = $date_time->hrrest_time ?: "";
|
||
$temp_time = $date_time->temp_time ?: "";
|
||
$hrv_time = $date_time->hrv_time ?: '';
|
||
$syn_time = $date_time->syn_time ?: "";
|
||
$blood_time = $date_time->blood_time ?: "";
|
||
}
|
||
|
||
if ($sleep_time) {
|
||
//如果大于当天16点 开始时间为当天时间16点, 小于当天16点 开始时间为前一天的16点
|
||
$time = strtotime(date("Y-m-d 16:00:00", $sleep_time));
|
||
if ($sleep_time > $time) {
|
||
$start_time = $time;
|
||
} else {
|
||
$start_time = $time - 24 * 60 * 60;
|
||
}
|
||
$start_month = date("m", $start_time);
|
||
$end_month = date("m", $sleep_time);
|
||
|
||
$suffix = date("Y") . $start_month;
|
||
$sleep_date = BandOriginSleep::suffix($suffix)->owner($user->id)->band($band->id)->time(date("Y-m-d H:i:s", $start_time), date("Y-m-d H:i:s", $sleep_time))->orderBy("date")->value("date");
|
||
if (empty($sleep_date) && $start_month != $end_month) {
|
||
$suffix = date("Y") . $end_month;
|
||
$sleep_date = BandOriginSleep::suffix($suffix)->owner($user->id)->band($band->id)->time(date("Y-m-d H:i:s", $start_time), date("Y-m-d H:i:s", $sleep_time))->orderBy("date")->value("date");
|
||
}
|
||
$sleep_time = $sleep_date ? strtotime($sleep_date) : "";
|
||
|
||
}
|
||
|
||
if ($hrrest_time) {
|
||
$hrrest_time = $this->getFirstTime(BandOriginHrrest::class, $hrrest_time, $user->id, $band->id);
|
||
}
|
||
if ($temp_time) {
|
||
$temp_time = $this->getFirstTime(BandOriginTemp::class, $temp_time, $user->id, $band->id);
|
||
}
|
||
if ($hrv_time) {
|
||
$hrv_time = $this->getFirstTime(BandOriginHrv::class, $hrrest_time, $user->id, $band->id);
|
||
}
|
||
if ($syn_time) {
|
||
$syn_time = $this->getFirstTime(BandOriginSyn::class, $syn_time, $user->id, $band->id);
|
||
}
|
||
if ($blood_time) {
|
||
$blood_time = $this->getFirstTime(BandOriginBlood::class, $blood_time, $user->id, $band->id);
|
||
}
|
||
|
||
return $this->success('ok', compact('sleep_time', 'hrrest_time', 'temp_time', 'hrv_time', 'syn_time', 'blood_time'));
|
||
}
|
||
|
||
public function getFirstTime($class, $time, $user_id, $band_id)
|
||
{
|
||
$start_time = strtotime(date("Y-m-d 00:00:00", $time));
|
||
$end_time = $time;
|
||
$start_month = date("m", $start_time);
|
||
$suffix = date("Y") . $start_month;
|
||
$date = $class::suffix($suffix)->owner($user_id)->band($band_id)->time(date("Y-m-d H:i:s", $start_time), date("Y-m-d H:i:s", $end_time))->orderBy("date")->value("date");
|
||
$date_time = $date ? strtotime($date) : "";
|
||
return $date_time;
|
||
}
|
||
|
||
// 手环消耗数据
|
||
public function uploadBandConsumeData(Request $request)
|
||
{
|
||
$mac = $request->input("mac");
|
||
$data = $request->input("data");
|
||
$user_id = auth()->id();
|
||
$band = Band::owner($user_id)->mac($mac)->first();
|
||
if (empty($band))
|
||
return $this->failure("未获取到手环信息");
|
||
BandConsume::create(['user_id' => $user_id, "band_id" => $band->id, "data" => $data]);
|
||
return $this->success("Ok");
|
||
}
|
||
}
|