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; } }