model = new MiniProgramDefaultSetting(); } public function getSettings(): array { $items = $this->model ->field([ 'id', 'device_type', 'device_name', 'free_minutes', 'overdue_deposit', 'min_deposit', 'max_deposit', 'sort', ]) ->order('sort', 'asc') ->order('id', 'asc') ->select() ->toArray(); foreach ($items as &$item) { $item['id'] = (int) $item['id']; $item['free_minutes'] = (int) $item['free_minutes']; $item['overdue_deposit'] = (float) $item['overdue_deposit']; $item['min_deposit'] = (float) $item['min_deposit']; $item['max_deposit'] = (float) $item['max_deposit']; $item['sort'] = (int) $item['sort']; } unset($item); return $items; } public function updateSetting(array $data): bool { $id = (int) ($data['id'] ?? 0); if ($id <= 0) { throw new ApiException('默认设置参数错误'); } $model = $this->model->findOrEmpty($id); if ($model->isEmpty()) { throw new ApiException('默认设置不存在'); } $freeMinutes = (int) $this->number($data['free_minutes'] ?? null, 0, 10080, '免费时长'); $overdueDeposit = $this->number($data['overdue_deposit'] ?? null, 0, 99999999, '超时订单押金'); $minDeposit = $this->number($data['min_deposit'] ?? null, 0, 99999999, '最低押金'); $maxDeposit = $this->number($data['max_deposit'] ?? null, 0, 99999999, '最高押金'); if ($maxDeposit < $minDeposit) { throw new ApiException('最高押金不能小于最低押金'); } return $model->save([ 'free_minutes' => $freeMinutes, 'overdue_deposit' => $overdueDeposit, 'min_deposit' => $minDeposit, 'max_deposit' => $maxDeposit, ]) !== false; } private function number(mixed $value, float $min, float $max, string $label): float { if (!is_numeric($value)) { throw new ApiException($label . '必须是数字'); } $number = (float) $value; if ($number < $min || $number > $max) { throw new ApiException($label . '超出允许范围'); } return $number; } }