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