MarketingSystemDataExportTool/server/internal/constants/enums.go

318 lines
6.7 KiB
Go

// 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: "核销结算",
}
// ==================== 通用枚举 ====================
// ThirdPartyType 第三方类型映射
var ThirdPartyType = map[int]string{
1: "外部供应商",
2: "内部供应商",
}
// OrderCashReceiveStatus 红包领取状态映射
var OrderCashReceiveStatus = map[int]string{
0: "待领取",
1: "领取中",
2: "领取成功",
3: "领取失败",
}
// 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
}