MarketingSystemDataExportTool/server/internal/constants/enums.go

367 lines
7.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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: "白名单",
}
// ==================== 通用枚举 ====================
// 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
}