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 "请重新尝试操作" | ||
|  | }  |