273 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			273 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package enums
 | |
| 
 | |
| // CertificationStatus 认证状态枚举
 | |
| type CertificationStatus string
 | |
| 
 | |
| const (
 | |
| 	// === 主流程状态 ===
 | |
| 	StatusPending            CertificationStatus = "pending"              // 待认证
 | |
| 	StatusInfoSubmitted      CertificationStatus = "info_submitted"       // 已提交企业信息
 | |
| 	StatusEnterpriseVerified CertificationStatus = "enterprise_verified"  // 已企业认证
 | |
| 	StatusContractApplied    CertificationStatus = "contract_applied"     // 已申请签署合同
 | |
| 	StatusContractSigned     CertificationStatus = "contract_signed"      // 已签署合同
 | |
| 	StatusCompleted          CertificationStatus = "completed"            // 认证完成
 | |
| 
 | |
| 	// === 失败状态 ===
 | |
| 	StatusInfoRejected     CertificationStatus = "info_rejected"     // 企业信息被拒绝
 | |
| 	StatusContractRejected CertificationStatus = "contract_rejected" // 合同被拒签
 | |
| 	StatusContractExpired  CertificationStatus = "contract_expired"  // 合同签署超时
 | |
| )
 | |
| 
 | |
| // AllStatuses 所有有效状态列表
 | |
| var AllStatuses = []CertificationStatus{
 | |
| 	StatusPending,
 | |
| 	StatusInfoSubmitted,
 | |
| 	StatusEnterpriseVerified,
 | |
| 	StatusContractApplied,
 | |
| 	StatusContractSigned,
 | |
| 	StatusCompleted,
 | |
| 	StatusInfoRejected,
 | |
| 	StatusContractRejected,
 | |
| 	StatusContractExpired,
 | |
| }
 | |
| 
 | |
| // MainFlowStatuses 主流程状态列表
 | |
| var MainFlowStatuses = []CertificationStatus{
 | |
| 	StatusPending,
 | |
| 	StatusInfoSubmitted,
 | |
| 	StatusEnterpriseVerified,
 | |
| 	StatusContractApplied,
 | |
| 	StatusContractSigned,
 | |
| }
 | |
| 
 | |
| // FailureStatuses 失败状态列表
 | |
| var FailureStatuses = []CertificationStatus{
 | |
| 	StatusInfoRejected,
 | |
| 	StatusContractRejected,
 | |
| 	StatusContractExpired,
 | |
| }
 | |
| 
 | |
| // IsValidStatus 检查状态是否有效
 | |
| func IsValidStatus(status CertificationStatus) bool {
 | |
| 	for _, validStatus := range AllStatuses {
 | |
| 		if status == validStatus {
 | |
| 			return true
 | |
| 		}
 | |
| 	}
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| // GetStatusName 获取状态的中文名称
 | |
| func GetStatusName(status CertificationStatus) string {
 | |
| 	statusNames := map[CertificationStatus]string{
 | |
| 		StatusPending:            "待认证",
 | |
| 		StatusInfoSubmitted:      "已提交企业信息",
 | |
| 		StatusEnterpriseVerified: "已企业认证",
 | |
| 		StatusContractApplied:    "已申请签署合同",
 | |
| 		StatusContractSigned:     "已签署合同",
 | |
| 		StatusCompleted:          "认证完成",
 | |
| 		StatusInfoRejected:       "企业信息被拒绝",
 | |
| 		StatusContractRejected:   "合同被拒签",
 | |
| 		StatusContractExpired:    "合同签署超时",
 | |
| 	}
 | |
| 
 | |
| 	if name, exists := statusNames[status]; exists {
 | |
| 		return name
 | |
| 	}
 | |
| 	return string(status)
 | |
| }
 | |
| 
 | |
| // IsFinalStatus 判断是否为最终状态
 | |
| func IsFinalStatus(status CertificationStatus) bool {
 | |
| 	return status == StatusCompleted
 | |
| }
 | |
| 
 | |
| // IsFailureStatus 判断是否为失败状态
 | |
| func IsFailureStatus(status CertificationStatus) bool {
 | |
| 	for _, failureStatus := range FailureStatuses {
 | |
| 		if status == failureStatus {
 | |
| 			return true
 | |
| 		}
 | |
| 	}
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| // IsMainFlowStatus 判断是否为主流程状态
 | |
| func IsMainFlowStatus(status CertificationStatus) bool {
 | |
| 	for _, mainStatus := range MainFlowStatuses {
 | |
| 		if status == mainStatus {
 | |
| 			return true
 | |
| 		}
 | |
| 	}
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| // GetStatusCategory 获取状态分类
 | |
| func GetStatusCategory(status CertificationStatus) string {
 | |
| 	if IsMainFlowStatus(status) {
 | |
| 		return "主流程"
 | |
| 	}
 | |
| 	if IsFailureStatus(status) {
 | |
| 		return "失败状态"
 | |
| 	}
 | |
| 	if status == StatusCompleted {
 | |
| 		return "完成"
 | |
| 	}
 | |
| 	return "未知"
 | |
| }
 | |
| 
 | |
| // GetStatusPriority 获取状态优先级(用于排序)
 | |
| func GetStatusPriority(status CertificationStatus) int {
 | |
| 	priorities := map[CertificationStatus]int{
 | |
| 		StatusPending:            1,
 | |
| 		StatusInfoSubmitted:      2,
 | |
| 		StatusEnterpriseVerified: 3,
 | |
| 		StatusContractApplied:    4,
 | |
| 		StatusContractSigned:     5,
 | |
| 		StatusCompleted:          6,
 | |
| 		StatusInfoRejected:       7,
 | |
| 		StatusContractRejected:   8,
 | |
| 		StatusContractExpired:    9,
 | |
| 	}
 | |
| 
 | |
| 	if priority, exists := priorities[status]; exists {
 | |
| 		return priority
 | |
| 	}
 | |
| 	return 999
 | |
| }
 | |
| 
 | |
| // GetProgressPercentage 获取进度百分比
 | |
| func GetProgressPercentage(status CertificationStatus) int {
 | |
| 	progressMap := map[CertificationStatus]int{
 | |
| 		StatusPending:            0,
 | |
| 		StatusInfoSubmitted:      25,
 | |
| 		StatusEnterpriseVerified: 50,
 | |
| 		StatusContractApplied:    75,
 | |
| 		StatusContractSigned:     100,
 | |
| 		StatusCompleted:          100,
 | |
| 		StatusInfoRejected:       25,
 | |
| 		StatusContractRejected:   75,
 | |
| 		StatusContractExpired:    75,
 | |
| 	}
 | |
| 
 | |
| 	if progress, exists := progressMap[status]; exists {
 | |
| 		return progress
 | |
| 	}
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| // IsUserActionRequired 检查是否需要用户操作
 | |
| func IsUserActionRequired(status CertificationStatus) bool {
 | |
| 	userActionRequired := map[CertificationStatus]bool{
 | |
| 		StatusPending:            true,  // 需要提交企业信息
 | |
| 		StatusInfoSubmitted:      false, // 等待系统验证
 | |
| 		StatusEnterpriseVerified: true,  // 需要申请合同
 | |
| 		StatusContractApplied:    true,  // 需要签署合同
 | |
| 		StatusContractSigned:     false, // 合同已签署,等待系统处理
 | |
| 		StatusCompleted:          false, // 已完成
 | |
| 		StatusInfoRejected:       true,  // 需要重新提交
 | |
| 		StatusContractRejected:   true,  // 需要重新申请
 | |
| 		StatusContractExpired:    true,  // 需要重新申请
 | |
| 	}
 | |
| 
 | |
| 	if required, exists := userActionRequired[status]; exists {
 | |
| 		return required
 | |
| 	}
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| // GetUserActionHint 获取用户操作提示
 | |
| func GetUserActionHint(status CertificationStatus) string {
 | |
| 	hints := map[CertificationStatus]string{
 | |
| 		StatusPending:            "请提交企业信息",
 | |
| 		StatusInfoSubmitted:      "请完成企业认证",
 | |
| 		StatusEnterpriseVerified: "企业认证完成,请申请签署合同",
 | |
| 		StatusContractApplied:    "请在规定时间内完成合同签署",
 | |
| 		StatusContractSigned:     "合同已签署,等待系统处理",
 | |
| 		StatusCompleted:          "认证已完成",
 | |
| 		StatusInfoRejected:       "企业信息验证失败,请修正后重新提交",
 | |
| 		StatusContractRejected:   "合同签署被拒绝,可重新申请",
 | |
| 		StatusContractExpired:    "合同签署已超时,请重新申请",
 | |
| 	}
 | |
| 
 | |
| 	if hint, exists := hints[status]; exists {
 | |
| 		return hint
 | |
| 	}
 | |
| 	return ""
 | |
| }
 | |
| 
 | |
| // GetNextValidStatuses 获取当前状态的下一个有效状态列表
 | |
| func GetNextValidStatuses(currentStatus CertificationStatus) []CertificationStatus {
 | |
| 	nextStatusMap := map[CertificationStatus][]CertificationStatus{
 | |
| 		StatusPending: {
 | |
| 			StatusInfoSubmitted,
 | |
| 		},
 | |
| 		StatusInfoSubmitted: {
 | |
| 			StatusEnterpriseVerified,
 | |
| 			StatusInfoRejected,
 | |
| 		},
 | |
| 		StatusEnterpriseVerified: {
 | |
| 			StatusContractApplied,
 | |
| 		},
 | |
| 		StatusContractApplied: {
 | |
| 			StatusContractSigned,
 | |
| 			StatusContractRejected,
 | |
| 			StatusContractExpired,
 | |
| 		},
 | |
| 		StatusContractSigned: {
 | |
| 			StatusCompleted, // 可以转换到完成状态
 | |
| 		},
 | |
| 		StatusCompleted: {
 | |
| 			// 最终状态,无后续状态
 | |
| 		},
 | |
| 		StatusInfoRejected: {
 | |
| 			StatusInfoSubmitted, // 可以重新提交
 | |
| 		},
 | |
| 		StatusContractRejected: {
 | |
| 			StatusEnterpriseVerified, // 重置到企业认证状态
 | |
| 		},
 | |
| 		StatusContractExpired: {
 | |
| 			StatusEnterpriseVerified, // 重置到企业认证状态
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	if nextStatuses, exists := nextStatusMap[currentStatus]; exists {
 | |
| 		return nextStatuses
 | |
| 	}
 | |
| 	return []CertificationStatus{}
 | |
| }
 | |
| 
 | |
| // CanTransitionTo 检查是否可以从当前状态转换到目标状态
 | |
| func CanTransitionTo(currentStatus, targetStatus CertificationStatus) bool {
 | |
| 	validNextStatuses := GetNextValidStatuses(currentStatus)
 | |
| 	for _, validStatus := range validNextStatuses {
 | |
| 		if validStatus == targetStatus {
 | |
| 			return true
 | |
| 		}
 | |
| 	}
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| // GetTransitionReason 获取状态转换的原因描述
 | |
| func GetTransitionReason(from, to CertificationStatus) string {
 | |
| 	transitionReasons := map[string]string{
 | |
| 		string(StatusPending) + "->" + string(StatusInfoSubmitted):         "用户提交企业信息",
 | |
| 		string(StatusInfoSubmitted) + "->" + string(StatusEnterpriseVerified): "e签宝企业认证成功",
 | |
| 		string(StatusInfoSubmitted) + "->" + string(StatusInfoRejected):       "e签宝企业认证失败",
 | |
| 		string(StatusEnterpriseVerified) + "->" + string(StatusContractApplied): "用户申请签署合同",
 | |
| 		string(StatusContractApplied) + "->" + string(StatusContractSigned):    "e签宝合同签署成功",
 | |
| 		string(StatusContractSigned) + "->" + string(StatusCompleted):         "系统处理完成,认证成功",
 | |
| 		string(StatusContractApplied) + "->" + string(StatusContractRejected):  "用户拒绝签署合同",
 | |
| 		string(StatusContractApplied) + "->" + string(StatusContractExpired):   "合同签署超时",
 | |
| 		string(StatusInfoRejected) + "->" + string(StatusInfoSubmitted):        "用户重新提交企业信息",
 | |
| 		string(StatusContractRejected) + "->" + string(StatusEnterpriseVerified): "重置状态,准备重新申请",
 | |
| 		string(StatusContractExpired) + "->" + string(StatusEnterpriseVerified):  "重置状态,准备重新申请",
 | |
| 	}
 | |
| 
 | |
| 	key := string(from) + "->" + string(to)
 | |
| 	if reason, exists := transitionReasons[key]; exists {
 | |
| 		return reason
 | |
| 	}
 | |
| 	return "未知转换"
 | |
| }
 |