'>70%', '60_70' => '60%~70%', '50_60' => '50%~60%', ]; /** * @notes 设置搜索条件 */ public function setSearch(): array { return [ '=' => ['run_date', 'action', 'assistant_id', 'batch_no', 'stat_month'], ]; } /** * @notes 获取列表 */ public function lists(): array { $rows = $this->buildQuery() ->order(['id' => 'desc']) ->limit($this->limitOffset, $this->limitLength) ->select() ->toArray(); foreach ($rows as &$row) { $ct = (int) ($row['create_time'] ?? 0); $row['create_time_text'] = $ct > 0 ? date('Y-m-d H:i:s', $ct) : ''; $row['action_text'] = (int) ($row['action'] ?? 0) === 1 ? '已分配' : '未分配'; $row['tier_text'] = self::TIER_LABELS[(string) ($row['tier'] ?? '')] ?? ''; $row['visit2_rate'] = $row['visit2_rate'] !== null ? (float) $row['visit2_rate'] : null; $rbTs = (int) ($row['rollback_time'] ?? 0); $row['rollback_time_text'] = $rbTs > 0 ? date('Y-m-d H:i:s', $rbTs) : ''; $row['is_rollback'] = $rbTs > 0 ? 1 : 0; $row['can_rollback'] = ((int) ($row['action'] ?? 0) === 1 && $rbTs === 0) ? 1 : 0; if ($rbTs > 0) { $row['rollback_status_text'] = '已回退' . (($row['rollback_admin_name'] ?? '') !== '' ? (' · ' . $row['rollback_admin_name']) : ''); } else { $row['rollback_status_text'] = ((int) ($row['action'] ?? 0) === 1) ? '可回退' : '—'; } } unset($row); return $rows; } /** * @notes 获取数量 */ public function count(): int { return $this->buildQuery()->count(); } /** * @return \think\db\Query */ private function buildQuery() { $query = Db::name('tcm_diagnosis_auto_assign_log')->where($this->searchWhere); $keyword = trim((string) ($this->params['keyword'] ?? '')); if ($keyword !== '') { $query->where(function ($q) use ($keyword) { $q->whereLike('patient_name', '%' . $keyword . '%') ->whereOr('patient_phone', 'like', '%' . $keyword . '%') ->whereOr('assistant_name', 'like', '%' . $keyword . '%'); if (preg_match('/^\d+$/', $keyword) === 1 && (int) $keyword > 0) { $q->whereOr('diagnosis_id', '=', (int) $keyword); } }); } $startDate = trim((string) ($this->params['start_date'] ?? '')); if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $startDate) === 1) { $query->where('run_date', '>=', $startDate); } $endDate = trim((string) ($this->params['end_date'] ?? '')); if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $endDate) === 1) { $query->where('run_date', '<=', $endDate); } // 记录时间(create_time)区间:支持 Y-m-d 或 Y-m-d H:i:s $startTs = $this->parseTimeParam((string) ($this->params['start_time'] ?? ''), false); if ($startTs > 0) { $query->where('create_time', '>=', $startTs); } $endTs = $this->parseTimeParam((string) ($this->params['end_time'] ?? ''), true); if ($endTs > 0) { $query->where('create_time', '<=', $endTs); } $rollback = trim((string) ($this->params['is_rollback'] ?? '')); if ($rollback === '1') { $query->where('rollback_time', '>', 0); } elseif ($rollback === '0') { $query->where('rollback_time', '=', 0); } return $query; } /** * @param bool $endOfDay 仅日期时是否取当天结束 */ private function parseTimeParam(string $raw, bool $endOfDay): int { $raw = trim($raw); if ($raw === '') { return 0; } if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $raw) === 1) { return (int) strtotime($raw . ($endOfDay ? ' 23:59:59' : ' 00:00:00')); } if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}(:\d{2})?$/', $raw) === 1) { if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $raw) === 1) { $raw .= $endOfDay ? ':59' : ':00'; } return (int) strtotime($raw); } return 0; } }