270 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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 "请重新尝试操作"
 | |
| }  |