*/ protected $fillable = [ 'active_skill_id', 'pet_id', 'user_id', 'skill_name', 'process_status', 'process_reason', 'process_data', 'execution_time', 'processed_at', ]; /** * 属性类型转换 * * @var array */ protected $casts = [ 'process_data' => 'array', 'execution_time' => 'float', 'processed_at' => 'datetime', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; /** * 处理状态常量 */ const STATUS_SUCCESS = 'success'; // 成功 const STATUS_FAILED = 'failed'; // 失败 const STATUS_SKIPPED = 'skipped'; // 跳过 const STATUS_EXPIRED = 'expired'; // 过期 /** * 关联激活技能 * * @return BelongsTo */ public function activeSkill(): BelongsTo { return $this->belongsTo(PetActiveSkill::class, 'active_skill_id'); } /** * 关联宠物 * * @return BelongsTo */ public function pet(): BelongsTo { return $this->belongsTo(PetUser::class, 'pet_id'); } /** * 创建成功处理日志 * * @param PetActiveSkill $activeSkill 激活技能 * @param array $processData 处理数据 * @param float $executionTime 执行时间 * @param string $reason 处理原因 * @return static */ public static function createSuccessLog( PetActiveSkill $activeSkill, array $processData = [], float $executionTime = 0.0, string $reason = '技能处理成功' ): static { return static::create([ 'active_skill_id' => $activeSkill->id, 'pet_id' => $activeSkill->pet_id, 'user_id' => $activeSkill->pet->user_id, 'skill_name' => $activeSkill->skill_name, 'process_status' => static::STATUS_SUCCESS, 'process_reason' => $reason, 'process_data' => $processData, 'execution_time' => $executionTime, 'processed_at' => now(), ]); } /** * 创建失败处理日志 * * @param PetActiveSkill $activeSkill 激活技能 * @param string $reason 失败原因 * @param array $processData 处理数据 * @param float $executionTime 执行时间 * @return static */ public static function createFailedLog( PetActiveSkill $activeSkill, string $reason, array $processData = [], float $executionTime = 0.0 ): static { return static::create([ 'active_skill_id' => $activeSkill->id, 'pet_id' => $activeSkill->pet_id, 'user_id' => $activeSkill->pet->user_id, 'skill_name' => $activeSkill->skill_name, 'process_status' => static::STATUS_FAILED, 'process_reason' => $reason, 'process_data' => $processData, 'execution_time' => $executionTime, 'processed_at' => now(), ]); } /** * 创建跳过处理日志 * * @param PetActiveSkill $activeSkill 激活技能 * @param string $reason 跳过原因 * @param array $processData 处理数据 * @return static */ public static function createSkippedLog( PetActiveSkill $activeSkill, string $reason, array $processData = [] ): static { return static::create([ 'active_skill_id' => $activeSkill->id, 'pet_id' => $activeSkill->pet_id, 'user_id' => $activeSkill->pet->user_id, 'skill_name' => $activeSkill->skill_name, 'process_status' => static::STATUS_SKIPPED, 'process_reason' => $reason, 'process_data' => $processData, 'execution_time' => 0.0, 'processed_at' => now(), ]); } /** * 创建过期处理日志 * * @param PetActiveSkill $activeSkill 激活技能 * @param string $reason 过期原因 * @return static */ public static function createExpiredLog( PetActiveSkill $activeSkill, string $reason = '技能已过期' ): static { return static::create([ 'active_skill_id' => $activeSkill->id, 'pet_id' => $activeSkill->pet_id, 'user_id' => $activeSkill->pet->user_id, 'skill_name' => $activeSkill->skill_name, 'process_status' => static::STATUS_EXPIRED, 'process_reason' => $reason, 'process_data' => [], 'execution_time' => 0.0, 'processed_at' => now(), ]); } /** * 查询成功的处理日志 * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeSuccess($query) { return $query->where('process_status', static::STATUS_SUCCESS); } /** * 查询失败的处理日志 * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeFailed($query) { return $query->where('process_status', static::STATUS_FAILED); } /** * 查询跳过的处理日志 * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ public function scopeSkipped($query) { return $query->where('process_status', static::STATUS_SKIPPED); } /** * 查询特定技能的处理日志 * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $skillName 技能名称 * @return \Illuminate\Database\Eloquent\Builder */ public function scopeBySkillName($query, string $skillName) { return $query->where('skill_name', $skillName); } /** * 查询特定宠物的处理日志 * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $petId 宠物ID * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByPet($query, int $petId) { return $query->where('pet_id', $petId); } /** * 查询特定用户的处理日志 * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $userId 用户ID * @return \Illuminate\Database\Eloquent\Builder */ public function scopeByUser($query, int $userId) { return $query->where('user_id', $userId); } }