'在途', self::STATE_COLLECTED => '揽收', self::STATE_PROBLEM => '疑难', self::STATE_SIGNED => '已签收', self::STATE_RETURN_SIGNED => '退签', self::STATE_DELIVERING => '派件中', self::STATE_RETURNING => '退回', self::STATE_FORWARDING => '转投', self::STATE_CUSTOMS => '清关', self::STATE_WAIT_CUSTOMS => '待清关', self::STATE_IN_CUSTOMS => '清关中', self::STATE_CUSTOMS_DONE => '已清关', self::STATE_CUSTOMS_ERROR => '清关异常', self::STATE_REJECTED => '拒签', ]; return $map[$state] ?? '未知'; } /** * 是否为终态(不再需要更新) */ public static function isFinalState(string $state): bool { return in_array($state, [ self::STATE_SIGNED, self::STATE_RETURN_SIGNED, self::STATE_REJECTED, ], true); } /** * 是否为异常状态 */ public static function isProblemState(string $state): bool { return in_array($state, [ self::STATE_PROBLEM, self::STATE_CUSTOMS_ERROR, self::STATE_REJECTED, ], true); } /** * 关联轨迹明细 */ public function traces() { return $this->hasMany(ExpressTrace::class, 'tracking_id', 'id') ->order('trace_time_stamp', 'desc'); } /** * 关联状态变更记录 */ public function stateLogs() { return $this->hasMany(ExpressStateLog::class, 'tracking_id', 'id') ->order('change_time', 'desc'); } }