394 lines
8.4 KiB
Go
394 lines
8.4 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: "核销结算",
|
||
}
|
||
|
||
// 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{
|
||
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: "官方授权领取",
|
||
2: "手机号或邮箱",
|
||
}
|
||
|
||
// YMTVoucherReceiveMode 立减金领取模式映射(易码通)
|
||
var YMTVoucherReceiveMode = map[int]string{
|
||
1: "官方授权领取",
|
||
2: "账号领取",
|
||
}
|
||
|
||
// VoucherSubjectType 立减金主体类型映射
|
||
var VoucherSubjectType = map[int]string{
|
||
1: "支付宝",
|
||
2: "微信",
|
||
3: "云闪付",
|
||
}
|
||
|
||
// 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
|
||
}
|