[ 'code' => 'TPL-ACCOUNT-CERT-V2', 'version' => '2', 'name' => '收款账户证明', 'file' => '收款账户证明文件.doc', ], 'account-change' => [ 'code' => 'TPL-ACCOUNT-CHANGE-V1', 'version' => '1', 'name' => '收款账户变更', 'file' => '收款账户变更证明.doc', ], 'entity-change' => [ 'code' => 'TPL-ENTITY-CHANGE-V1', 'version' => '1', 'name' => '公司主体变更', 'file' => '公司主体变更证明.docx', ], 'shared-contract' => [ 'code' => 'TPL-SHARED-CONTRACT-V1', 'version' => '1', 'name' => '共用合同证明', 'file' => '共用合同证明.docx', ], 'cooperation-contract' => [ 'code' => 'TPL-COOPERATION-CONTRACT-V1', 'version' => '1', 'name' => '合作合同', 'file' => '保丟不保损-合同发快递2024.8.doc', ], 'authorization' => [ 'code' => 'TPL-AUTHORIZATION-V1', 'version' => '1', 'name' => '授权委托书', 'file' => '授权委托书(快递).docx', ], ]; protected $table = 'business_courier_agreement_signatures'; protected $fillable = [ 'company_id', 'business_no', 'idempotency_key', 'document_type', 'template_code', 'template_version', 'source_file_name', 'status', 'courier_name', 'company_full_name', 'organization_name', 'operator_name', 'operator_account', 'payload', 'environment', 'expires_at', 'source_pdf_path', 'source_pdf_sha256', 'esign_file_id', 'esign_sign_flow_id', 'remote_status', 'signed_pdf_path', 'signed_pdf_sha256', 'certificate_path', 'certificate_sha256', 'sent_at', 'completed_at', 'archived_at', 'last_synced_at', 'last_error', 'callback_payload_hash', 'created_by', 'updated_by', ]; protected $casts = [ 'company_id' => 'integer', 'expires_at' => 'datetime', 'sent_at' => 'datetime', 'completed_at' => 'datetime', 'archived_at' => 'datetime', 'last_synced_at' => 'datetime', 'payload' => 'encrypted:array', 'operator_account' => 'encrypted', ]; public function statusLabel(): string { return match ($this->status) { self::STATUS_PREPARED => '待推送', self::STATUS_SENDING => '推送中', self::STATUS_SIGNING => '待签署', self::STATUS_COMPLETED => '签署完成,待归档', self::STATUS_ARCHIVED => '已签署并归档', self::STATUS_REVOKED => '已撤销', self::STATUS_EXPIRED => '已过期', self::STATUS_REJECTED => '已拒签', self::STATUS_FAILED => '处理失败', self::STATUS_UNKNOWN => '状态未知,请人工核对', default => $this->status, }; } public function canSend(): bool { return in_array($this->status, [self::STATUS_PREPARED, self::STATUS_FAILED], true) && blank($this->esign_sign_flow_id); } public function documentLabel(): string { return self::DOCUMENTS[$this->document_type]['name'] ?? $this->document_type; } }