*/ public const EVENT_TEXT_MAP = [ self::EVENT_SNOOZE => '延迟', self::EVENT_CONTACT => '已联系', self::EVENT_MANUAL_CLOSE => '人工关闭', self::EVENT_AUTO_CLOSE_BOOKED => '自动关闭-已挂号', self::EVENT_AUTO_CLOSE_VISITED => '自动关闭-已面诊', self::EVENT_CYCLE_RESET => '周期重置', self::EVENT_REOPEN => '重新打开', self::EVENT_WECOM_PUSH => '企微推送', self::EVENT_ASSISTANT_CHANGED => '医助变更', self::EVENT_ESCALATED => '形态升级', self::EVENT_FIRST_SHOWN => '首次弹出', ]; /** * @notes 事件文本 */ public function getEventTextAttr($value, $data): string { $v = (int) ($data['event'] ?? 0); return self::EVENT_TEXT_MAP[$v] ?? '未知'; } /** * @notes 事件时间格式化(Y-m-d H:i:s) */ public function getCreateTimeTextAttr($value, $data): string { $ts = (int) ($data['create_time'] ?? 0); return $ts > 0 ? date('Y-m-d H:i:s', $ts) : ''; } /** * @notes payload JSON 解码为数组(解码失败返回空数组) * * @return array */ public function getPayloadArrAttr($value, $data): array { $raw = (string) ($data['payload'] ?? ''); if ($raw === '') { return []; } $decoded = json_decode($raw, true); return is_array($decoded) ? $decoded : []; } }