whereNull('delete_time')->where('disable', 0)->find(); if (!$admin) { return null; } // Do not put credentials or login material in task snapshots. return ['admin_id' => $adminId, 'id' => $adminId, 'root' => (int) $admin->root, 'name' => (string) $admin->name, 'role_id' => (array) $admin->role_id, 'dept_id' => (array) $admin->dept_id]; } public static function allowed(int $adminId, array $info, string $action): bool { if ($adminId <= 0) { return false; } if ((int) ($info['root'] ?? 0) === 1) { return true; } return in_array('tcm.prescriptionai/' . strtolower($action), array_map('strtolower', AuthLogic::getAuthByAdminId($adminId)), true); } public static function canGenerate(int $adminId, array $info): bool { return self::allowed($adminId, $info, 'regenerate') && self::allowed($adminId, $info, 'detail'); } public static function prescription(int $id, int $adminId, array $info): ?array { $row = Db::name('tcm_prescription')->where('id', $id)->whereNull('delete_time')->find(); if (!$row || !PrescriptionLogic::canViewPrescription($row, $adminId, $info)) { return null; } $diagnosisId = (int) ($row['diagnosis_id'] ?? 0); if ($diagnosisId > 0 && !self::diagnosis($diagnosisId, $adminId, $info)) { return null; } return $row; } public static function diagnosis(int $id, int $adminId, array $info): bool { if ($id <= 0 || $adminId <= 0) { return false; } $query = Db::name('tcm_diagnosis')->alias('d')->where('d.id', $id)->whereNull('d.delete_time'); MyPatientLogic::applyScope($query, $adminId, $info); return $query->count() > 0; } public static function sourceIds(array $ids, int $adminId, array $info): bool { $ids = array_values(array_unique(array_filter(array_map('intval', $ids), static fn ($v): bool => $v > 0))); if ($ids === []) { return false; } $query = Db::name('tcm_diagnosis')->alias('d')->whereIn('d.id', $ids)->whereNull('d.delete_time'); MyPatientLogic::applyScope($query, $adminId, $info); return (int) $query->count() === count($ids); } }