Files
zyt/server/app/adminapi/logic/tcm/BloodRecordLogic.php
2026-05-11 17:49:38 +08:00

244 lines
7.3 KiB
PHP
Executable File

<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台(PHP版)
// +----------------------------------------------------------------------
namespace app\adminapi\logic\tcm;
use app\common\logic\BaseLogic;
use app\common\model\tcm\BloodRecord;
/**
* 血糖血压记录逻辑
* Class BloodRecordLogic
* @package app\adminapi\logic\tcm
*/
class BloodRecordLogic extends BaseLogic
{
/**
* @notes 添加记录
* @param array $params
* @return bool
*/
public static function add(array $params): bool
{
try {
// 处理记录日期
if (isset($params['record_date'])) {
$params['record_date'] = strtotime($params['record_date']);
}
BloodRecord::create($params);
return true;
} catch (\Exception $e) {
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 编辑记录
* @param array $params
* @return bool
*/
public static function edit(array $params): bool
{
try {
// 处理记录日期
if (isset($params['record_date'])) {
$params['record_date'] = strtotime($params['record_date']);
}
BloodRecord::update($params);
return true;
} catch (\Exception $e) {
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 删除记录
* @param array $params
* @return bool
*/
public static function delete(array $params): bool
{
try {
BloodRecord::destroy($params['id']);
return true;
} catch (\Exception $e) {
self::setError($e->getMessage());
return false;
}
}
/**
* @notes 记录详情
* @param $params
* @return array
*/
public static function detail($params): array
{
$record = BloodRecord::findOrEmpty($params['id'])->toArray();
// 处理记录日期格式
if (!empty($record['record_date'])) {
$record['record_date'] = date('Y-m-d', $record['record_date']);
}
return $record;
}
/**
* @notes 获取患者的血糖血压记录列表
* @param array $params
* @return array
*/
public static function getRecordsByPatient(array $params): array
{
try {
$where = [];
if (isset($params['diagnosis_id'])) {
$where[] = ['diagnosis_id', '=', $params['diagnosis_id']];
}
if (isset($params['patient_id'])) {
$where[] = ['patient_id', '=', $params['patient_id']];
}
// 如果没有诊断ID或患者ID,返回空数组
if (empty($where)) {
return [];
}
$records = BloodRecord::where($where)
->where('delete_time', null)
->order('record_date', 'desc')
->order('record_time', 'desc')
->select()
->toArray();
// 格式化日期
foreach ($records as &$record) {
if (!empty($record['record_date'])) {
$record['record_date'] = date('Y-m-d', $record['record_date']);
}
}
return $records;
} catch (\Exception $e) {
self::setError($e->getMessage());
return [];
}
}
/**
* @notes 获取血糖趋势图数据
* @param array $params
* @return array
*/
public static function getBloodSugarTrend(array $params): array
{
$where = [];
if (isset($params['diagnosis_id'])) {
$where[] = ['diagnosis_id', '=', $params['diagnosis_id']];
}
if (isset($params['patient_id'])) {
$where[] = ['patient_id', '=', $params['patient_id']];
}
// 检查是否使用自定义日期范围
if (isset($params['start_date']) && isset($params['end_date'])) {
$startDate = intval($params['start_date']);
$endDate = intval($params['end_date']);
} else {
$days = isset($params['days']) ? intval($params['days']) : 7;
$startDate = strtotime("-{$days} days");
$endDate = time();
}
$query = BloodRecord::where($where)
->where('delete_time', null)
->where('record_date', '>=', $startDate)
->order('record_date', 'asc');
// 如果有结束日期,添加结束日期条件
if (isset($endDate)) {
$query->where('record_date', '<=', $endDate);
}
$records = $query->select()->toArray();
// 使用Map来存储每天的数据,确保同一天的多条记录能够正确处理
$dateMap = [];
foreach ($records as $record) {
$date = date('Y-m-d', $record['record_date']);
if (!isset($dateMap[$date])) {
$dateMap[$date] = [
'fasting' => null,
'postprandial_2h' => null,
'other' => null
];
}
// 空腹血糖(取第一个非空值)
if (isset($record['fasting_blood_sugar']) && $record['fasting_blood_sugar'] > 0 && $dateMap[$date]['fasting'] === null) {
$dateMap[$date]['fasting'] = $record['fasting_blood_sugar'];
}
// 餐后2小时血糖(取第一个非空值)
if (isset($record['postprandial_blood_sugar']) && $record['postprandial_blood_sugar'] > 0 && $dateMap[$date]['postprandial_2h'] === null) {
$dateMap[$date]['postprandial_2h'] = $record['postprandial_blood_sugar'];
}
// 其他血糖(取第一个非空值)
if (isset($record['other_blood_sugar']) && $record['other_blood_sugar'] > 0 && $dateMap[$date]['other'] === null) {
$dateMap[$date]['other'] = $record['other_blood_sugar'];
}
}
// 按日期排序
ksort($dateMap);
$trend = [
'dates' => [],
'fasting' => [],
'postprandial_2h' => [],
'other' => []
];
foreach ($dateMap as $date => $values) {
$trend['dates'][] = $date;
if ($values['fasting'] !== null) {
$trend['fasting'][] = [
'date' => $date,
'value' => $values['fasting']
];
}
if ($values['postprandial_2h'] !== null) {
$trend['postprandial_2h'][] = [
'date' => $date,
'value' => $values['postprandial_2h']
];
}
if ($values['other'] !== null) {
$trend['other'][] = [
'date' => $date,
'value' => $values['other']
];
}
}
return $trend;
}
}