Files
tyapi-server/internal/domains/certification/enums/failure_reason.go

270 lines
10 KiB
Go
Raw Normal View History

2025-07-21 15:13:26 +08:00
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 "请重新尝试操作"
}