// Package constants 枚举值映射配置 package constants // ==================== Marketing系统订单状态 ==================== // MarketingOrderStatus 营销系统订单状态映射 var MarketingOrderStatus = map[int]string{ 0: "待充值", 1: "充值中", 2: "已完成", 3: "充值失败", 4: "已取消", 5: "已过期", 6: "待支付", } // MarketingOrderType 营销系统订单类型映射 var MarketingOrderType = map[int]string{ 1: "直充卡密", 2: "立减金", 3: "红包", } // MarketingPayType 营销系统支付方式映射 var MarketingPayType = map[int]string{ 1: "支付宝", 5: "微信", } // MarketingPayStatus 营销系统支付状态映射 var MarketingPayStatus = map[int]string{ 1: "待支付", 2: "已支付", 3: "已退款", } // ==================== YMT系统订单状态 ==================== // YMTOrderStatus 易码通订单状态映射 var YMTOrderStatus = map[int]string{ 1: "待充值", 2: "充值中", 3: "充值成功", 4: "充值失败", 5: "已过期", 6: "已作废", 7: "已核销", 8: "核销失败", 9: "订单重置", 10: "卡单", } // YMTOrderType 易码通订单类型映射 var YMTOrderType = map[int]string{ 1: "红包订单", 2: "直充卡密订单", 3: "立减金订单", } // YMTPayStatus 易码通支付状态映射 var YMTPayStatus = map[int]string{ 1: "待支付", 2: "支付中", 3: "已支付", 4: "取消支付", 5: "退款中", 6: "退款成功", } // YMTIsRetry 易码通重试状态映射 var YMTIsRetry = map[int]string{ 0: "可以失败重试", 1: "可以失败重试", 2: "不可以失败重试", } // YMTIsInner 易码通供应商类型映射 var YMTIsInner = map[int]string{ 0: "外部供应商", 1: "内部供应商", } // YMTSettlementType 易码通结算类型映射 var YMTSettlementType = map[int]string{ 1: "发放结算", 2: "打开结算", 3: "领用结算", 4: "核销结算", } // MarketingSettlementType 营销系统结算方式映射 var MarketingSettlementType = map[int]string{ 0: "未设置", 1: "发放结算", 2: "打开结算", 3: "打开成功结算", 4: "领取结算", 5: "领取成功结算", 6: "使用结算", 7: "使用成功结算", 8: "官方绑定结算", 9: "官方核销结算", } // MarketingPeriodType 营销系统周期类型映射 var MarketingPeriodType = map[int]string{ 1: "不设置", 2: "自动发放", 3: "手动领取", } // MarketingSendMethod 营销系统发放方式映射 var MarketingSendMethod = map[int]string{ 0: "", 1: "邮件发放", 2: "API调用", } // MarketingRechargeType 营销系统充值类型映射 var MarketingRechargeType = map[int]string{ 1: "单个商品充值", 2: "组合商品充值", } // VoucherOpenMode 立减金打开方式映射 var VoucherOpenMode = map[int]string{ 0: "微信小程序", 1: "公众号", 2: "通用", } // KeyBatchStyle key码样式映射 var KeyBatchStyle = map[int]string{ 1: "卡密", 2: "链接", 4: "二维码", 6: "白名单", } // MarketingOrderCashStatus 营销系统红包状态映射 var MarketingOrderCashStatus = map[int]string{ 1: "正常", 2: "已过期", } // MerchantKeySendStatus key码API发放状态映射 var MerchantKeySendStatus = map[int]string{ 1: "已发放", 2: "已核销", 3: "已作废", 4: "充值中", } // ==================== 通用枚举 ==================== // ThirdPartyType 第三方类型映射 var ThirdPartyType = map[int]string{ 1: "外部供应商", 2: "内部供应商", } // OrderCashReceiveStatus 红包领取状态映射(1 待领取 2 领取中 3 领取成功 4 领取失败) var OrderCashReceiveStatus = map[int]string{ 1: "待领取", 2: "领取中", 3: "领取成功", 4: "领取失败", } // OrderCashChannel 红包渠道映射 var OrderCashChannel = map[int]string{ 1: "支付宝", 2: "微信", 3: "云闪付", } // OrderVoucherChannel 立减金渠道映射 var OrderVoucherChannel = map[int]string{ 1: "支付宝", 2: "微信", 3: "云闪付", } // YMTOrderVoucherStatus 易码通立减金状态映射 var YMTOrderVoucherStatus = map[int]string{ 1: "待发放", 2: "发放中", 3: "发放失败", 4: "待核销", 5: "已核销", 6: "已过期", 7: "已退款", } // MarketingOrderVoucherStatus 营销系统立减金状态映射 var MarketingOrderVoucherStatus = map[int]string{ 1: "可用", 2: "已实扣", 3: "已过期", 4: "已退款", 5: "领取失败", 6: "发放中", 7: "部分退款", 8: "已退回", 9: "发放失败", } // OrderVoucherReceiveMode 立减金领取模式映射 var OrderVoucherReceiveMode = map[int]string{ 1: "渠道授权用户id", 2: "手机号或邮箱", } // OrderDigitOrderType 数字订单类型映射 var OrderDigitOrderType = map[int]string{ 1: "直充", 2: "卡密", } // OrderDigitSmsChannel 短信渠道映射 var OrderDigitSmsChannel = map[int]string{ 1: "官方", 2: "专票", } // ==================== 表名中文标签 ==================== // TableLabels 表名中文标签 var TableLabels = map[string]string{ "order": "订单", "order_info": "订单", "order_detail": "订单详情", "order_cash": "红包", "order_voucher": "立减金", "plan": "计划", "activity": "活动", "merchant": "客户", "supplier": "供应商", "key_batch": "卡密批次", "code_batch": "验证码批次", "voucher": "券", "voucher_batch": "券批次", "order_digit": "数字订单", "merchant_key_send": "商户发放", } // GetTableLabel 获取表的中文标签 func GetTableLabel(table string) string { if label, ok := TableLabels[table]; ok { return label } return table } // ==================== SQL CASE WHEN 生成器 ==================== // BuildCaseWhen 生成 CASE WHEN SQL 片段 // 参数: tableName - 表名, columnName - 列名, enumMap - 枚举映射, alias - 别名 func BuildCaseWhen(tableName, columnName string, enumMap map[int]string, alias string) string { if len(enumMap) == 0 { return "" } sql := "CASE `" + tableName + "`." + columnName for k, v := range enumMap { sql += " WHEN " + itoa(k) + " THEN '" + v + "'" } sql += " ELSE '' END AS `" + alias + "`" return sql } // itoa 简单的整数转字符串 func itoa(i int) string { if i == 0 { return "0" } neg := false if i < 0 { neg = true i = -i } var b [20]byte p := len(b) - 1 for i > 0 { b[p] = byte('0' + i%10) i /= 10 p-- } if neg { b[p] = '-' p-- } return string(b[p+1:]) } // ==================== 订单类型标签解析 ==================== // ParseOrderTypeLabel 从标签解析订单类型值 func ParseOrderTypeLabel(datasource, label string) int { if datasource == "ymt" { for k, v := range YMTOrderType { if v == label { return k } } } else { for k, v := range MarketingOrderType { if v == label { return k } } } return 0 } // ==================== 已支付状态判断 ==================== // IsPaidStatus 判断是否为已支付状态 // datasource: marketing 或 ymt // status: 状态码或状态文本 func IsPaidStatus(datasource, status string) bool { if status == "" { return false } // 尝试解析为数字 numeric := -1 if isDigits(status) { numeric = parseDigits(status) } switch datasource { case "marketing": if numeric >= 0 { // 2:已支付 3:已退款 return numeric == 2 || numeric == 3 } return status == "已支付" || status == "已退款" case "ymt": if numeric >= 0 { // 3:已支付 5:退款中 6:退款成功 return numeric == 3 || numeric == 5 || numeric == 6 } return status == "已支付" || status == "退款成功" || status == "退款中" default: return contains(status, "支付") && !contains(status, "待") } } func isDigits(s string) bool { for _, c := range s { if c < '0' || c > '9' { return false } } return len(s) > 0 } func parseDigits(s string) int { n := 0 for _, c := range s { if c >= '0' && c <= '9' { n = n*10 + int(c-'0') } } return n } func contains(s, substr string) bool { return len(s) >= len(substr) && indexString(s, substr) >= 0 } func indexString(s, substr string) int { n := len(substr) for i := 0; i+n <= len(s); i++ { if s[i:i+n] == substr { return i } } return -1 }