find()) { $sn = self::generateSn(); } $data = [ 'sn' => $sn, 'prescription_name' => $params['prescription_name'] ?? '', 'prescription_type' => $params['prescription_type'] ?? '浓缩水丸', 'diagnosis_id' => (int)($params['diagnosis_id'] ?? 0), 'appointment_id' => (int)($params['appointment_id'] ?? 0), 'patient_id' => (int)($params['patient_id'] ?? 0), 'patient_name' => $params['patient_name'] ?? '', 'gender' => (int)($params['gender'] ?? 1), 'age' => (int)($params['age'] ?? 0), 'phone' => $params['phone'] ?? '', 'visit_no' => $params['visit_no'] ?? $sn, 'prescription_date' => $params['prescription_date'] ?? date('Y-m-d'), 'pulse' => $params['pulse'] ?? '', 'pulse_condition' => $params['pulse_condition'] ?? '', 'tongue' => $params['tongue'] ?? '', 'tongue_image' => $params['tongue_image'] ?? '', 'clinical_diagnosis' => $params['clinical_diagnosis'] ?? '', 'case_record' => $params['case_record'] ?? null, 'herbs' => $herbs, 'dose_count' => (int)($params['dose_count'] ?? 1), 'dose_unit' => $params['dose_unit'] ?? '剂', 'usage_days' => (int)($params['usage_days'] ?? 7), 'usage_instruction' => $params['usage_instruction'] ?? '水煎服一日二次', 'usage_time' => $params['usage_time'] ?? '饭前', 'usage_way' => $params['usage_way'] ?? '温水送服', 'dietary_taboo' => is_array($params['dietary_taboo'] ?? null) ? implode(',', $params['dietary_taboo']) : ($params['dietary_taboo'] ?? ''), 'usage_notes' => $params['usage_notes'] ?? '', 'amount' => (float)($params['amount'] ?? 0), 'doctor_name' => $params['doctor_name'] ?? '', 'doctor_signature' => $params['doctor_signature'] ?? '', 'template_id' => (int)($params['template_id'] ?? 0), 'is_shared' => (int)($params['is_shared'] ?? 0), 'creator_id' => $adminId, ]; $prescription = new Prescription(); $prescription->save($data); return (int)$prescription->id; } /** * 编辑处方 */ public static function edit(array $params, int $adminId): bool { try { $prescription = Prescription::find($params['id']); if (!$prescription) { self::setError('处方不存在'); return false; } // 检查权限:只有创建者或共享的处方才能编辑 if ($prescription->creator_id != $adminId && $prescription->is_shared != 1) { self::setError('无权限编辑此处方'); return false; } $herbs = $params['herbs'] ?? []; if (empty($herbs) || !is_array($herbs)) { self::setError('请添加中药'); return false; } foreach ($herbs as $h) { if (empty($h['name'])) { self::setError('中药名称不能为空'); return false; } } $data = [ 'prescription_name' => $params['prescription_name'] ?? $prescription->prescription_name, 'prescription_type' => $params['prescription_type'] ?? $prescription->prescription_type, 'patient_name' => $params['patient_name'] ?? $prescription->patient_name, 'gender' => (int)($params['gender'] ?? $prescription->gender), 'age' => (int)($params['age'] ?? $prescription->age), 'visit_no' => $params['visit_no'] ?? $prescription->visit_no, 'prescription_date' => $params['prescription_date'] ?? $prescription->prescription_date, 'tongue' => $params['tongue'] ?? $prescription->tongue, 'tongue_image' => $params['tongue_image'] ?? $prescription->tongue_image, 'pulse' => $params['pulse'] ?? $prescription->pulse, 'pulse_condition' => $params['pulse_condition'] ?? $prescription->pulse_condition, 'clinical_diagnosis' => $params['clinical_diagnosis'] ?? $prescription->clinical_diagnosis, 'herbs' => $herbs, 'dose_count' => (int)($params['dose_count'] ?? $prescription->dose_count), 'dose_unit' => $params['dose_unit'] ?? $prescription->dose_unit, 'usage_days' => (int)($params['usage_days'] ?? $prescription->usage_days), 'usage_instruction' => $params['usage_instruction'] ?? $prescription->usage_instruction, 'usage_time' => $params['usage_time'] ?? $prescription->usage_time, 'usage_way' => $params['usage_way'] ?? $prescription->usage_way, 'dietary_taboo' => is_array($params['dietary_taboo'] ?? null) ? implode(',', $params['dietary_taboo']) : ($params['dietary_taboo'] ?? $prescription->dietary_taboo), 'usage_notes' => $params['usage_notes'] ?? $prescription->usage_notes, 'doctor_name' => $params['doctor_name'] ?? $prescription->doctor_name, 'is_shared' => (int)($params['is_shared'] ?? $prescription->is_shared), ]; $prescription->save($data); return true; } catch (\Exception $e) { self::setError($e->getMessage()); return false; } } /** * 删除处方 */ public static function delete(int $id): bool { try { $prescription = Prescription::find($id); if (!$prescription) { self::setError('处方不存在'); return false; } $prescription->delete(); return true; } catch (\Exception $e) { self::setError($e->getMessage()); return false; } } /** * 处方详情 */ public static function detail(int $id): ?array { $row = Prescription::find($id); if (!$row) { return null; } $arr = $row->toArray(); $arr['gender_desc'] = $arr['gender'] == 1 ? '男' : '女'; return $arr; } /** * 根据诊单ID获取处方列表 */ public static function listByDiagnosis(int $diagnosisId): array { return Prescription::where('diagnosis_id', $diagnosisId) ->whereNull('delete_time') ->order('id', 'desc') ->select() ->toArray(); } /** * 根据预约ID获取处方 */ public static function getByAppointment(int $appointmentId): ?array { $row = Prescription::where('appointment_id', $appointmentId) ->whereNull('delete_time') ->order('id', 'desc') ->find(); return $row ? $row->toArray() : null; } /** * 作废处方 */ public static function void(int $id, int $adminId, string $adminName): bool { $row = Prescription::find($id); if (!$row) { self::setError('处方不存在'); return false; } if ((int)($row->void_status ?? 0) === 1) { self::setError('该处方已作废'); return false; } $row->void_status = 1; $row->void_time = time(); $row->void_by = $adminId; $row->void_by_name = $adminName; return $row->save(); } }