318 lines
6.7 KiB
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
|
|
}
|