package enums // FailureReason 失败原因枚举 type FailureReason string const ( // === 企业信息验证失败原因 === FailureReasonEnterpriseNotExists FailureReason = "enterprise_not_exists" // 企业不存在 FailureReasonEnterpriseInfoMismatch FailureReason = "enterprise_info_mismatch" // 企业信息不匹配 FailureReasonEnterpriseStatusAbnormal FailureReason = "enterprise_status_abnormal" // 企业状态异常 FailureReasonLegalPersonMismatch FailureReason = "legal_person_mismatch" // 法定代表人信息不匹配 FailureReasonEsignVerificationFailed FailureReason = "esign_verification_failed" // e签宝验证失败 FailureReasonInvalidDocument FailureReason = "invalid_document" // 证件信息无效 // === 合同签署失败原因 === FailureReasonContractRejectedByUser FailureReason = "contract_rejected_by_user" // 用户拒绝签署 FailureReasonContractExpired FailureReason = "contract_expired" // 合同签署超时 FailureReasonSignProcessFailed FailureReason = "sign_process_failed" // 签署流程失败 FailureReasonContractGenFailed FailureReason = "contract_gen_failed" // 合同生成失败 FailureReasonEsignFlowError FailureReason = "esign_flow_error" // e签宝流程错误 // === 系统错误原因 === FailureReasonSystemError FailureReason = "system_error" // 系统错误 FailureReasonNetworkError FailureReason = "network_error" // 网络错误 FailureReasonTimeout FailureReason = "timeout" // 操作超时 FailureReasonUnknownError FailureReason = "unknown_error" // 未知错误 ) // AllFailureReasons 所有失败原因列表 var AllFailureReasons = []FailureReason{ // 企业信息验证失败 FailureReasonEnterpriseNotExists, FailureReasonEnterpriseInfoMismatch, FailureReasonEnterpriseStatusAbnormal, FailureReasonLegalPersonMismatch, FailureReasonEsignVerificationFailed, FailureReasonInvalidDocument, // 合同签署失败 FailureReasonContractRejectedByUser, FailureReasonContractExpired, FailureReasonSignProcessFailed, FailureReasonContractGenFailed, FailureReasonEsignFlowError, // 系统错误 FailureReasonSystemError, FailureReasonNetworkError, FailureReasonTimeout, FailureReasonUnknownError, } // EnterpriseVerificationFailureReasons 企业验证失败原因列表 var EnterpriseVerificationFailureReasons = []FailureReason{ FailureReasonEnterpriseNotExists, FailureReasonEnterpriseInfoMismatch, FailureReasonEnterpriseStatusAbnormal, FailureReasonLegalPersonMismatch, FailureReasonEsignVerificationFailed, FailureReasonInvalidDocument, } // ContractSignFailureReasons 合同签署失败原因列表 var ContractSignFailureReasons = []FailureReason{ FailureReasonContractRejectedByUser, FailureReasonContractExpired, FailureReasonSignProcessFailed, FailureReasonContractGenFailed, FailureReasonEsignFlowError, } // SystemErrorReasons 系统错误原因列表 var SystemErrorReasons = []FailureReason{ FailureReasonSystemError, FailureReasonNetworkError, FailureReasonTimeout, FailureReasonUnknownError, } // IsValidFailureReason 检查失败原因是否有效 func IsValidFailureReason(reason FailureReason) bool { for _, validReason := range AllFailureReasons { if reason == validReason { return true } } return false } // GetFailureReasonName 获取失败原因的中文名称 func GetFailureReasonName(reason FailureReason) string { reasonNames := map[FailureReason]string{ // 企业信息验证失败 FailureReasonEnterpriseNotExists: "企业不存在", FailureReasonEnterpriseInfoMismatch: "企业信息不匹配", FailureReasonEnterpriseStatusAbnormal: "企业状态异常", FailureReasonLegalPersonMismatch: "法定代表人信息不匹配", FailureReasonEsignVerificationFailed: "e签宝验证失败", FailureReasonInvalidDocument: "证件信息无效", // 合同签署失败 FailureReasonContractRejectedByUser: "用户拒绝签署", FailureReasonContractExpired: "合同签署超时", FailureReasonSignProcessFailed: "签署流程失败", FailureReasonContractGenFailed: "合同生成失败", FailureReasonEsignFlowError: "e签宝流程错误", // 系统错误 FailureReasonSystemError: "系统错误", FailureReasonNetworkError: "网络错误", FailureReasonTimeout: "操作超时", FailureReasonUnknownError: "未知错误", } if name, exists := reasonNames[reason]; exists { return name } return string(reason) } // GetFailureReasonCategory 获取失败原因分类 func GetFailureReasonCategory(reason FailureReason) string { categories := map[FailureReason]string{ // 企业信息验证失败 FailureReasonEnterpriseNotExists: "企业验证", FailureReasonEnterpriseInfoMismatch: "企业验证", FailureReasonEnterpriseStatusAbnormal: "企业验证", FailureReasonLegalPersonMismatch: "企业验证", FailureReasonEsignVerificationFailed: "企业验证", FailureReasonInvalidDocument: "企业验证", // 合同签署失败 FailureReasonContractRejectedByUser: "合同签署", FailureReasonContractExpired: "合同签署", FailureReasonSignProcessFailed: "合同签署", FailureReasonContractGenFailed: "合同签署", FailureReasonEsignFlowError: "合同签署", // 系统错误 FailureReasonSystemError: "系统错误", FailureReasonNetworkError: "系统错误", FailureReasonTimeout: "系统错误", FailureReasonUnknownError: "系统错误", } if category, exists := categories[reason]; exists { return category } return "未知" } // IsEnterpriseVerificationFailure 判断是否为企业验证失败 func IsEnterpriseVerificationFailure(reason FailureReason) bool { for _, verifyReason := range EnterpriseVerificationFailureReasons { if reason == verifyReason { return true } } return false } // IsContractSignFailure 判断是否为合同签署失败 func IsContractSignFailure(reason FailureReason) bool { for _, signReason := range ContractSignFailureReasons { if reason == signReason { return true } } return false } // IsSystemError 判断是否为系统错误 func IsSystemError(reason FailureReason) bool { for _, systemReason := range SystemErrorReasons { if reason == systemReason { return true } } return false } // GetSuggestedAction 获取建议的后续操作 func GetSuggestedAction(reason FailureReason) string { actions := map[FailureReason]string{ // 企业信息验证失败 FailureReasonEnterpriseNotExists: "请检查企业名称和统一社会信用代码是否正确", FailureReasonEnterpriseInfoMismatch: "请核对企业信息是否与工商登记信息一致", FailureReasonEnterpriseStatusAbnormal: "请确认企业状态正常,如有疑问请联系客服", FailureReasonLegalPersonMismatch: "请核对法定代表人信息是否正确", FailureReasonEsignVerificationFailed: "请稍后重试,如持续失败请联系客服", FailureReasonInvalidDocument: "请检查证件信息是否有效", // 合同签署失败 FailureReasonContractRejectedByUser: "您可以重新申请签署合同", FailureReasonContractExpired: "请重新申请签署合同", FailureReasonSignProcessFailed: "请重新尝试签署,如持续失败请联系客服", FailureReasonContractGenFailed: "系统正在处理,请稍后重试", FailureReasonEsignFlowError: "请稍后重试,如持续失败请联系客服", // 系统错误 FailureReasonSystemError: "系统暂时不可用,请稍后重试", FailureReasonNetworkError: "网络连接异常,请检查网络后重试", FailureReasonTimeout: "操作超时,请重新尝试", FailureReasonUnknownError: "发生未知错误,请联系客服", } if action, exists := actions[reason]; exists { return action } return "请联系客服处理" } // IsRetryable 判断是否可以重试 func IsRetryable(reason FailureReason) bool { retryableReasons := map[FailureReason]bool{ // 企业信息验证失败 - 用户数据问题,可重试 FailureReasonEnterpriseNotExists: true, FailureReasonEnterpriseInfoMismatch: true, FailureReasonEnterpriseStatusAbnormal: false, // 企业状态问题,需要外部解决 FailureReasonLegalPersonMismatch: true, FailureReasonEsignVerificationFailed: true, // 可能是临时问题 FailureReasonInvalidDocument: true, // 合同签署失败 FailureReasonContractRejectedByUser: true, // 用户可以改变主意 FailureReasonContractExpired: true, // 可以重新申请 FailureReasonSignProcessFailed: true, // 可能是临时问题 FailureReasonContractGenFailed: true, // 可能是临时问题 FailureReasonEsignFlowError: true, // 可能是临时问题 // 系统错误 - 大部分可重试 FailureReasonSystemError: true, FailureReasonNetworkError: true, FailureReasonTimeout: true, FailureReasonUnknownError: false, // 未知错误,不建议自动重试 } if retryable, exists := retryableReasons[reason]; exists { return retryable } return false } // GetRetrySuggestion 获取重试建议 func GetRetrySuggestion(reason FailureReason) string { if !IsRetryable(reason) { return "此问题不建议重试,请联系客服处理" } suggestions := map[FailureReason]string{ FailureReasonEnterpriseNotExists: "请修正企业信息后重新提交", FailureReasonEnterpriseInfoMismatch: "请核对企业信息后重新提交", FailureReasonLegalPersonMismatch: "请确认法定代表人信息后重新提交", FailureReasonEsignVerificationFailed: "请稍后重新尝试", FailureReasonInvalidDocument: "请检查证件信息后重新提交", FailureReasonContractRejectedByUser: "如需要可重新申请合同", FailureReasonContractExpired: "请重新申请合同签署", FailureReasonSignProcessFailed: "请重新尝试签署", FailureReasonContractGenFailed: "请稍后重新申请", FailureReasonEsignFlowError: "请稍后重新尝试", FailureReasonSystemError: "请稍后重试", FailureReasonNetworkError: "请检查网络连接后重试", FailureReasonTimeout: "请重新尝试操作", } if suggestion, exists := suggestions[reason]; exists { return suggestion } return "请重新尝试操作" }