Files
junhong_cmp_fiber/pkg/constants/constants.go
邹进 af8249158d
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m26s
feat: 停复机规则演练与终态自动关闭轮询
统一停复机规则转正的第一次发布:总开关仍关闭,现有停复机行为不变。

- 新增停复机规则演练:GET /stop-resume-rule/dry-run 按新规则对开机与停机卡只判断不执行,返回运营商账户 × 停机原因 × 判断结果汇总与分页明细,可假设通道实名管控配置;POST /stop-resume-rule/dry-run/export 导出明细(场景 stop_resume_rule_dry_run);仅超级管理员与平台账号
- 风险停机、已销户关闭轮询不再限于独立卡,只关该卡自身轮询,不级联设备
- 错误分类规则增加 auto_disable_polling,仅终态类别可勾选;停复机(含设备停复机)命中该规则时不重试、关闭该卡轮询、回写网关扩展状态并写审计 iot_card.terminal_disable_polling
- 迁移 000250 加列与约束,并为"已销户""仅支持风险复机"置位
2026-10-25 17:52:40 +09:00

642 lines
26 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
import (
"time"
"github.com/break/junhong_cmp_fiber/pkg/asynctask"
)
// Fiber Locals 的上下文键
const (
ContextKeyRequestID = "requestid" // 请求记录ID
ContextKeyStartTime = "start_time" // 请求开始时间
ContextKeyUserID = "user_id" // 用户ID
ContextKeyUserType = "user_type" // 用户类型
ContextKeyShopID = "shop_id" // 店铺ID
ContextKeyEnterpriseID = "enterprise_id" // 企业ID
ContextKeyCustomerID = "customer_id" // 个人客户ID
ContextKeyUserInfo = "user_info" // 完整的用户信息
ContextKeyIP = "ip_address" // IP地址
ContextKeyUserAgent = "user_agent" // User-Agent
ContextKeyRequestPath = "request_path" // 请求路径
ContextKeyRequestMethod = "request_method" // 请求方法
ContextKeySubordinateShopIDs = "subordinate_shop_ids" // 下级店铺ID列表(代理用户预计算)
)
// 配置环境变量
const (
EnvConfigPath = "CONFIG_PATH"
EnvConfigEnv = "CONFIG_ENV" // dev, staging, prod
)
// 默认配置值
const (
DefaultConfigPath = "configs/config.yaml"
DefaultServerAddr = ":3000"
DefaultRedisAddr = "localhost:6379"
)
// 数据库配置常量
const (
DefaultMaxOpenConns = 25
DefaultMaxIdleConns = 10
DefaultConnMaxLifetime = 5 * time.Minute
DefaultPage = 1 // 默认页码
DefaultPageSize = 20
MaxPageSize = 100
SlowQueryThreshold = 500 * time.Millisecond
)
// 任务类型常量
const (
TaskTypeEmailSend = "email:send" // 发送邮件
TaskTypeCommission = "commission:calculate" // 分佣计算
TaskTypeIotCardImport = "iot_card:import" // IoT 卡批量导入
TaskTypeDeviceImport = "device:import" // 设备批量导入
TaskTypeExportDispatch = "export:dispatch" // 导出任务分发
TaskTypeExportShard = "export:shard" // 导出任务分片执行
TaskTypeExportFinalize = "export:finalize" // 导出任务收尾汇总
TaskTypeCommissionStatsUpdate = "commission:stats:update" // 佣金统计更新
TaskTypeCommissionStatsSync = "commission:stats:sync" // 佣金统计同步
TaskTypeCommissionStatsArchive = "commission:stats:archive" // 佣金统计归档
// 轮询任务类型
TaskTypePollingRealname = "polling:realname" // 实名状态检查
TaskTypePollingCarddata = "polling:carddata" // 卡流量检查
TaskTypePollingPackage = "polling:package" // 套餐流量检查
TaskTypePollingProtect = "polling:protect" // 已下线:保护期一致性检查,仅保留空处理消化存量任务,下一次发布移除
TaskTypePollingCardStatus = "polling:card_status" // 卡开停机状态检查
// 套餐激活任务类型
TaskTypePackageFirstActivation = "package:first:activation" // 首次实名激活
TaskTypePackageQueueActivation = "package:queue:activation" // 主套餐排队激活
TaskTypePackageDataReset = "package:data:reset" // 套餐流量重置
// 订单套餐失效任务类型
TaskTypeOrderPackageInvalidate = "order:package:invalidate" // 批量失效订单套餐
TaskTypeAssetPackageBatchOrder = "asset:package:batch_order" // 资产套餐批量订购
// 店铺负责人 CSV 导入任务类型,独立成队列以隔离逐行执行的长时任务。
TaskTypeShopBusinessOwnerImport = "shop_business_owner:import"
TaskTypePhoneAssetUnbindImport = "phone_asset_unbind:import" // 手机号—资产关联 CSV 解绑导入
// 订单超时任务类型
TaskTypeOrderExpire = "order:expire" // 订单超时自动取消
TaskTypeAutoPurchaseAfterRecharge = "task:auto_purchase_after_recharge" // 充值后自动购包
// 定时任务类型(由 Asynq Scheduler 调度)
TaskTypeAlertCheck = "alert:check" // 告警检查
TaskTypeDataCleanup = "data:cleanup" // 数据清理
TaskTypeNotificationCleanup = "notification:cleanup" // 站内通知保留清理
TaskTypePackageExpiryReminder = "package:expiry:reminder" // 每日套餐临期提醒扫描
TaskTypeDailyTrafficFlush = "traffic:daily:flush" // 每日流量落盘
TaskTypeOutboxDeliver = "outbox:deliver" // 公共 Outbox 事件投递
TaskTypeCardObservationSeries = "card_observation:series" // 卡观测事件序列尝试
TaskTypeWeComApprovalSync = "wecom:approval:sync" // 企业微信审批详情异步同步
TaskTypeWeComApprovalRecovery = "wecom:approval:recovery" // 企业微信审批主动恢复与轮询
TaskTypeAgentRechargeRecovery = "agent_recharge:payment:recovery" // 代理在线充值支付恢复与查单
TaskTypeRefundChannelRecovery = "refund:channel:recovery" // 渠道原路退款结果恢复与查询
TaskTypeRefundCommissionRecovery = "refund:commission:recovery" // 退款佣金回溯后处理补偿
TaskTypePackageTrafficAlertScan = "package:traffic:alert:scan" // 每日套餐真流量达量预警扫描
TaskTypeOperationsReportSnapshot = "operations:report:snapshot" // 每日运营报表日报快照生成
// 运营商通道流量阈值任务类型(由 Asynq Scheduler 调度)
TaskTypeCarrierThresholdCycle = "carrier_threshold:cycle" // 通道阈值周期处理:跨期解锁与条件复机
TaskTypeCarrierThresholdRecovery = "carrier_threshold:recovery" // 通道阈值停复机结果恢复扫描
// 资产钱包自动续费任务类型(由 Asynq Scheduler 调度)
TaskTypeAssetAutoRenewalScan = "asset_auto_renewal:scan" // 每日自动续费扫描:终态收敛、候选判定与续购执行
TaskTypeAssetAutoRenewalRecovery = "asset_auto_renewal:recovery" // 自动续费复机结果恢复扫描
)
// 用户状态常量
const (
UserStatusActive = "active" // 激活
UserStatusInactive = "inactive" // 未激活
UserStatusSuspended = "suspended" // 暂停
)
// RBAC 用户类型常量
const (
UserTypeSuperAdmin = 1 // 超级管理员(跳过数据权限过滤)
UserTypePlatform = 2 // 平台用户
UserTypeAgent = 3 // 代理账号
UserTypeEnterprise = 4 // 企业账号
UserTypePersonalCustomer = 5 // 个人客户(C端用户)
)
const (
// AssetResolveTypeCard 表示统一资产详情中的卡类型。
AssetResolveTypeCard = "card"
// ExchangeTraceDirectionPrevious 表示换货链前代查询方向。
ExchangeTraceDirectionPrevious = "previous"
// ExchangeTraceDirectionNext 表示换货链后代查询方向。
ExchangeTraceDirectionNext = "next"
)
// RBAC 角色类型常量
const (
RoleTypePlatform = 1 // 平台角色(适用于平台用户)
RoleTypeCustomer = 2 // 客户角色(适用于代理/企业账号)
)
// RBAC 权限类型常量
const (
PermissionTypeMenu = 1 // 菜单权限
PermissionTypeButton = 2 // 按钮权限
)
// RBAC 权限端口常量
const (
PlatformAll = "all" // 全部端口(Web + H5)
PlatformWeb = "web" // Web 后台
PlatformH5 = "h5" // H5 端
)
// RBAC 状态常量
const (
StatusDisabled = 0 // 禁用
StatusEnabled = 1 // 启用
)
// 上架状态常量
const (
ShelfStatusOn = 1 // 上架
ShelfStatusOff = 2 // 下架
)
// 套餐周期类型常量
const (
PackageCalendarTypeNaturalMonth = "natural_month" // 自然月周期
PackageCalendarTypeByDay = "by_day" // 按天周期
)
// 套餐生效条件常量
const (
PackageExpiryBaseFromActivation = "from_activation" // 实名激活时生效
PackageExpiryBaseFromPurchase = "from_purchase" // 购买即生效
)
// 套餐流量重置周期常量
const (
PackageDataResetDaily = "daily" // 每日重置
PackageDataResetMonthly = "monthly" // 每月重置
PackageDataResetYearly = "yearly" // 每年重置
PackageDataResetNone = "none" // 不重置
)
// 套餐使用状态常量
const (
PackageUsageStatusPending = 0 // 待生效
PackageUsageStatusActive = 1 // 生效中
PackageUsageStatusDepleted = 2 // 已用完
PackageUsageStatusExpired = 3 // 已过期
PackageUsageStatusInvalidated = 4 // 已失效
)
// 运营商类型常量
const (
CarrierTypeCMCC = "CMCC" // 中国移动
CarrierTypeCUCC = "CUCC" // 中国联通
CarrierTypeCTCC = "CTCC" // 中国电信
CarrierTypeCBN = "CBN" // 中国广电
)
// 订单状态常量
const (
OrderStatusPending = "pending" // 待支付
OrderStatusPaid = "paid" // 已支付
OrderStatusProcessing = "processing" // 处理中
OrderStatusCompleted = "completed" // 已完成
OrderStatusCancelled = "cancelled" // 已取消
)
// 订单超时配置常量
const (
OrderExpireTimeout = 30 * time.Minute // 订单超时时间(30分钟)
OrderExpireBatchSize = 100 // 每次批量处理超时订单的数量上限
)
// 队列配置常量
const (
QueueCritical = "critical" // 旧版关键任务队列(兼容历史任务)
QueueDefault = "default" // 旧版默认队列(兼容历史任务)
QueueLow = "low" // 旧版低优先级队列(兼容历史任务)
QueueEmailSend = TaskTypeEmailSend // 发送邮件任务队列
QueueCommission = TaskTypeCommission // 分佣计算任务队列
QueueIotCardImport = TaskTypeIotCardImport // IoT 卡导入任务队列
QueueDeviceImport = TaskTypeDeviceImport // 设备导入任务队列
QueueExportDispatch = TaskTypeExportDispatch // 导出分发任务队列
QueueExportShard = TaskTypeExportShard // 导出分片任务队列
QueueExportFinalize = TaskTypeExportFinalize // 导出收尾任务队列
QueueCommissionStatsUpdate = TaskTypeCommissionStatsUpdate // 佣金统计更新任务队列
QueueCommissionStatsSync = TaskTypeCommissionStatsSync // 佣金统计同步任务队列
QueueCommissionStatsArchive = TaskTypeCommissionStatsArchive // 佣金统计归档任务队列
QueuePollingRealname = TaskTypePollingRealname // 实名轮询任务队列
QueuePollingCarddata = TaskTypePollingCarddata // 流量轮询任务队列
QueuePollingPackage = TaskTypePollingPackage // 套餐轮询任务队列
QueuePollingProtect = TaskTypePollingProtect // 已下线:保护期轮询任务队列,仅消化存量任务
QueuePollingCardStatus = TaskTypePollingCardStatus // 卡状态轮询任务队列
QueuePackageFirstActivation = TaskTypePackageFirstActivation // 首次实名激活任务队列
QueuePackageQueueActivation = TaskTypePackageQueueActivation // 主套餐排队激活任务队列
QueuePackageDataReset = TaskTypePackageDataReset // 套餐流量重置任务队列
QueueOrderPackageInvalidate = TaskTypeOrderPackageInvalidate // 批量失效订单套餐任务队列
QueueAssetPackageBatchOrder = TaskTypeAssetPackageBatchOrder // 资产套餐批量订购任务队列
QueueShopBusinessOwnerImport = TaskTypeShopBusinessOwnerImport // 店铺负责人 CSV 导入任务队列
QueuePhoneAssetUnbindImport = TaskTypePhoneAssetUnbindImport // 手机号—资产关联 CSV 解绑导入任务队列
QueueOrderExpire = TaskTypeOrderExpire // 订单超时取消任务队列
QueueAutoPurchase = TaskTypeAutoPurchaseAfterRecharge // 充值后自动购包任务队列
QueueAlertCheck = TaskTypeAlertCheck // 告警检查任务队列
QueueDataCleanup = TaskTypeDataCleanup // 数据清理任务队列
QueueDailyTrafficFlush = TaskTypeDailyTrafficFlush // 每日流量落盘任务队列
QueueOutboxDeliver = TaskTypeOutboxDeliver // 公共 Outbox 投递队列
QueueCardObservationSeries = TaskTypeCardObservationSeries // 卡观测事件序列队列
QueueWeComApproval = "wecom:approval" // 企业微信审批同步与恢复队列
DefaultRetryMax = 5 // 默认任务最大重试次数
DefaultTimeout = 10 * time.Minute // 默认任务超时时间
DefaultConcurrency = 10 // 默认 Worker 并发数
)
// QueueForTaskType 根据任务类型返回独立队列名。
func QueueForTaskType(taskType string) string {
switch taskType {
case TaskTypeEmailSend:
return QueueEmailSend
case TaskTypeCommission:
return QueueCommission
case TaskTypeIotCardImport:
return QueueIotCardImport
case TaskTypeDeviceImport:
return QueueDeviceImport
case TaskTypeExportDispatch:
return QueueExportDispatch
case TaskTypeExportShard:
return QueueExportShard
case TaskTypeExportFinalize:
return QueueExportFinalize
case TaskTypeCommissionStatsUpdate:
return QueueCommissionStatsUpdate
case TaskTypeCommissionStatsSync:
return QueueCommissionStatsSync
case TaskTypeCommissionStatsArchive:
return QueueCommissionStatsArchive
case TaskTypePollingRealname:
return QueuePollingRealname
case TaskTypePollingCarddata:
return QueuePollingCarddata
case TaskTypePollingPackage:
return QueuePollingPackage
case TaskTypePollingProtect:
return QueuePollingProtect
case TaskTypePollingCardStatus:
return QueuePollingCardStatus
case TaskTypePackageFirstActivation:
return QueuePackageFirstActivation
case TaskTypePackageQueueActivation:
return QueuePackageQueueActivation
case TaskTypePackageDataReset:
return QueuePackageDataReset
case TaskTypeOrderPackageInvalidate:
return QueueOrderPackageInvalidate
case TaskTypeAssetPackageBatchOrder:
return QueueAssetPackageBatchOrder
case TaskTypeShopBusinessOwnerImport:
return QueueShopBusinessOwnerImport
case TaskTypePhoneAssetUnbindImport:
return QueuePhoneAssetUnbindImport
case TaskTypeOrderExpire:
return QueueOrderExpire
case TaskTypeAutoPurchaseAfterRecharge:
return QueueAutoPurchase
case TaskTypeAlertCheck:
return QueueAlertCheck
case TaskTypeDataCleanup:
return QueueDataCleanup
case TaskTypeNotificationCleanup:
return QueueDataCleanup
case TaskTypePackageExpiryReminder:
return QueueDataCleanup
case TaskTypePackageTrafficAlertScan:
// 与套餐临期扫描同队列:轻量只读扫描,复用既有已监听队列,不新增队列与权重。
return QueueDataCleanup
case TaskTypeOperationsReportSnapshot:
// 与套餐临期扫描同队列:每日一次的快照整日替换(秒级),复用既有已监听队列,不新增队列与权重。
return QueueDataCleanup
case TaskTypeDailyTrafficFlush:
return QueueDailyTrafficFlush
case TaskTypeAuditDailyArchive, TaskTypeIntegrationDailyArchive, TaskTypeAuditDailyRetention:
return QueueDataCleanup
case TaskTypeOutboxDeliver:
return QueueOutboxDeliver
case TaskTypeCardObservationSeries:
return QueueCardObservationSeries
case TaskTypeWeComApprovalSync, TaskTypeWeComApprovalRecovery:
return QueueWeComApproval
case TaskTypeAgentRechargeRecovery, TaskTypeRefundChannelRecovery, TaskTypeRefundCommissionRecovery:
return QueueDefault
case TaskTypeCarrierThresholdCycle, TaskTypeCarrierThresholdRecovery:
// 与退款恢复同队列:每分钟轻量扫描,复用既有已监听队列,不新增队列与权重。
return QueueDefault
case TaskTypeAssetAutoRenewalScan, TaskTypeAssetAutoRenewalRecovery:
// 与套餐临期扫描同队列:轻量只读扫描与收敛,复用既有已监听队列,不新增队列与权重。
return QueueDataCleanup
default:
return QueueDefault
}
}
// DefaultTaskQueueWeights 返回 Worker 默认监听的全部任务队列及其权重。
func DefaultTaskQueueWeights() map[string]int {
return map[string]int{
QueueCritical: 6,
QueueIotCardImport: 6,
QueueDeviceImport: 6,
QueueAutoPurchase: 5,
QueuePackageFirstActivation: 5,
QueuePackageQueueActivation: 5,
QueueOrderPackageInvalidate: 5,
QueueAssetPackageBatchOrder: 5,
QueueShopBusinessOwnerImport: 4,
QueuePhoneAssetUnbindImport: 4,
QueueOrderExpire: 4,
QueueEmailSend: 4,
QueueExportDispatch: 4,
QueueExportFinalize: 4,
QueueCommission: 3,
QueueAlertCheck: 3,
QueueExportShard: 2,
QueueCommissionStatsUpdate: 2,
QueueCommissionStatsSync: 2,
QueueCommissionStatsArchive: 2,
QueuePollingRealname: 1,
QueuePollingCarddata: 1,
QueuePollingPackage: 1,
QueuePollingProtect: 1,
QueuePollingCardStatus: 1,
QueuePackageDataReset: 1,
QueueDataCleanup: 1,
QueueDailyTrafficFlush: 1,
QueueOutboxDeliver: 4,
QueueCardObservationSeries: 2,
QueueWeComApproval: 2,
QueueDefault: 1,
QueueLow: 1,
}
}
// 导出任务相关常量
const (
ExportTaskSceneDevice = "device" // 导出场景:设备
ExportTaskSceneIotCard = "iot_card" // 导出场景:IoT 卡
ExportTaskSceneOrder = "order" // 导出场景:订单
ExportTaskScenePackage = "package" // 导出场景:套餐
// ExportTaskSceneAgentWalletTransaction 表示代理主钱包流水导出场景。
ExportTaskSceneAgentWalletTransaction = "agent_wallet_transaction"
// ExportTaskSceneAgentRecharge 表示代理充值记录导出场景。
ExportTaskSceneAgentRecharge = "agent_recharge"
// ExportTaskSceneRefund 表示退款记录导出场景。
ExportTaskSceneRefund = "refund"
// ExportTaskSceneExchange 表示换货记录导出场景。
ExportTaskSceneExchange = "exchange"
// ExportTaskSceneCommissionRecord 表示佣金明细导出场景,原佣金与回溯明细各占一行。
ExportTaskSceneCommissionRecord = "commission_record"
// ExportTaskScenePackageTrafficAlert 表示套餐真流量达量预警导出场景,一行对应一条预警记录。
ExportTaskScenePackageTrafficAlert = "package_traffic_alert"
// ExportTaskSceneExpiringAsset 表示临期资产导出场景,一行对应一项资产,取当前生效主套餐最终到期时间。
ExportTaskSceneExpiringAsset = "expiring_asset"
// ExportTaskSceneOperationsActivation 表示设备激活情况报表导出场景,导出行与页面分组行同口径并含合计行。
ExportTaskSceneOperationsActivation = "operations_activation"
// ExportTaskSceneOperationsRenewal 表示套餐续费情况报表导出场景,导出行与页面分组行同口径并含合计行。
ExportTaskSceneOperationsRenewal = "operations_renewal"
// ExportTaskSceneStopResumeRuleDryRun 表示停复机规则演练明细导出场景,一行对应一张卡的判断结果。
ExportTaskSceneStopResumeRuleDryRun = "stop_resume_rule_dry_run"
)
// ExportTaskInvalidTimeFilterMessage 是导出任务冻结的时间边界非法时写入 error_message 的安全失败摘要。
// 该摘要不含底层错误细节,只说明任务因冻结筛选非法而终止。
const ExportTaskInvalidTimeFilterMessage = "导出筛选的时间边界非法,任务已终止"
// 导出文件格式常量
const (
ExportTaskFormatXLSX = "xlsx" // 导出格式:Excel
ExportTaskFormatCSV = "csv" // 导出格式:CSV
)
// 导出主任务状态常量
const (
ExportTaskStatusPending = asynctask.StatusPending // 待处理
ExportTaskStatusProcessing = asynctask.StatusProcessing // 处理中
ExportTaskStatusCompleted = asynctask.StatusCompleted // 已完成
ExportTaskStatusFailed = asynctask.StatusFailed // 已失败
ExportTaskStatusCancelled = asynctask.StatusCancelled // 已取消
)
// 导出分片任务状态常量
const (
ExportShardStatusPending = 1 // 待处理
ExportShardStatusProcessing = 2 // 处理中
ExportShardStatusSuccess = 3 // 已成功
ExportShardStatusFailed = 4 // 已失败
ExportShardStatusCancelled = 5 // 已取消
)
// 导出任务执行配置常量
const (
ExportDefaultShardSize = 2000 // 默认分片大小
ExportDownloadURLExpire = 24 * time.Hour // 下载链接固定有效期
ExportDispatchTaskTimeout = 10 * time.Minute // dispatch 任务超时
ExportShardTaskTimeout = 15 * time.Minute // shard 任务超时
ExportFinalizeTaskTimeout = 10 * time.Minute // finalize 任务超时
ExportFinalizeRetryMax = 30 // finalize 最大重试次数
ExportShardRetryMax = 3 // shard 最大重试次数
ExportDispatchRetryMax = 5 // dispatch 最大重试次数
)
// 店铺配置常量
const (
MaxShopLevel = 7 // 店铺最大层级
)
// 验证码配置常量
const (
VerificationCodeLength = 6 // 验证码长度(6位数字)
VerificationCodeExpiration = 5 * time.Minute // 验证码过期时间(5分钟)
VerificationCodeRateLimit = 60 * time.Second // 验证码发送频率限制(60秒)
// VerificationCodeMaxFailures 是同一手机号在一个失败计数窗口内允许的校验失败次数上限。
// 达到上限后窗口内后续校验一律拒绝(即使验证码正确),锁定随窗口到期自动解除,无需人工解锁。
VerificationCodeMaxFailures = 5
// VerificationCodeFailureWindow 是校验失败计数的滑动窗口,同时作为达到上限后的锁定上限。
// 每次失败都刷新窗口;窗口内校验成功即清零。计数与锁定的读写在存储故障时一律放行并记录。
VerificationCodeFailureWindow = 10 * time.Minute
// VerificationCodeLockedMessage 是锁定期间的对外提示。
// 只说明失败次数过多,不泄露验证码正确性、剩余可失败次数与内部键名。
VerificationCodeLockedMessage = "验证码校验失败次数过多,请稍后再试"
)
// ======== 默认超级管理员账号配置(用于系统初始化) ========
// DefaultAdminUsername 默认超级管理员用户名
const DefaultAdminUsername = "admin"
// DefaultAdminPassword 默认超级管理员密码
const DefaultAdminPassword = "Admin@123456"
// DefaultAdminPhone 默认超级管理员手机号
const DefaultAdminPhone = "13800000000"
// ======== 企业卡授权相关常量 ========
// AuthorizerType 授权人类型
const (
AuthorizerTypePlatform = UserTypePlatform // 平台用户授权(2)
AuthorizerTypeAgent = UserTypeAgent // 代理账号授权(3)
)
// 自动代购状态常量(强充二阶段异步购买)
const (
AutoPurchaseStatusPending = "pending" // 待处理
AutoPurchaseStatusSuccess = "success" // 成功
AutoPurchaseStatusFailed = "failed" // 失败
)
// DeviceProtectStatusNone 是资产详情 device_protect_status 的固定返回值:设备保护期已下线,字段仅为兼容老版本客户端保留。
const DeviceProtectStatusNone = "none"
// 设备相关时长常量
const (
DeviceRefreshCooldownDuration = 30 * time.Second // 设备网关刷新冷却时长(30秒)
)
// 换货单状态常量
const (
ExchangeStatusPendingInfo = 1 // 待填写信息(等待客户端填写收货地址)
ExchangeStatusPendingShip = 2 // 待发货(客户端已填写,等待后台发货)
ExchangeStatusShipped = 3 // 已发货待确认(后台已发货,等待确认完成)
ExchangeStatusCompleted = 4 // 已完成
ExchangeStatusCancelled = 5 // 已取消
)
// 换货流程类型常量
const (
ExchangeFlowTypeShipping = "shipping" // 物流换货
ExchangeFlowTypeDirect = "direct" // 直接换货
)
// 换货资产类型常量
const (
ExchangeAssetTypeIotCard = "iot_card" // 物联网卡
ExchangeAssetTypeDevice = "device" // 设备
)
// 换货业务数据迁移状态常量
// 与 tb_exchange_order 的 chk_exchange_order_migration_status 取值白名单保持一致。
const (
ExchangeMigrationStatusNotMigrated = "not_migrated" // 不迁移(未选择业务数据迁移)
ExchangeMigrationStatusPending = "pending" // 待迁移(已选择迁移但尚未成功完成)
ExchangeMigrationStatusMigrated = "migrated" // 已迁移(完整迁移成功)
ExchangeMigrationStatusFailed = "failed" // 迁移失败(最近一次迁移执行失败,可再次确认完成重试)
)
// GetStatusName 获取通用启用/禁用状态名称
// 用于 status 字段:0=禁用, 1=启用
func GetStatusName(status int) string {
switch status {
case StatusDisabled:
return "禁用"
case StatusEnabled:
return "启用"
default:
return "未知"
}
}
// GetShelfStatusName 获取上架状态名称
// 用于 shelf_status 字段:1=上架, 2=下架
func GetShelfStatusName(status int) string {
switch status {
case ShelfStatusOn:
return "上架"
case ShelfStatusOff:
return "下架"
default:
return "未知"
}
}
// GetExportTaskStatusName 获取导出主任务状态名称
func GetExportTaskStatusName(status int) string {
name := asynctask.StatusName(status)
if name == "" {
return "未知"
}
return name
}
// GetExportShardStatusName 获取导出分片任务状态名称
func GetExportShardStatusName(status int) string {
switch status {
case ExportShardStatusPending:
return "待处理"
case ExportShardStatusProcessing:
return "处理中"
case ExportShardStatusSuccess:
return "已成功"
case ExportShardStatusFailed:
return "已失败"
case ExportShardStatusCancelled:
return "已取消"
default:
return "未知"
}
}
// GetExchangeStatusName 获取换货单状态名称
// 用于 exchange_status 字段
func GetExchangeStatusName(status int) string {
switch status {
case ExchangeStatusPendingInfo:
return "待填写信息"
case ExchangeStatusPendingShip:
return "待发货"
case ExchangeStatusShipped:
return "已发货待确认"
case ExchangeStatusCompleted:
return "已完成"
case ExchangeStatusCancelled:
return "已取消"
default:
return "未知"
}
}
// GetExchangeFlowTypeName 获取换货流程类型名称
func GetExchangeFlowTypeName(flowType string) string {
switch flowType {
case "", ExchangeFlowTypeShipping:
return "物流换货"
case ExchangeFlowTypeDirect:
return "直接换货"
default:
return "未知"
}
}
// GetExchangeMigrationStatusName 获取换货业务数据迁移状态名称
// 用于 migration_status 字段
func GetExchangeMigrationStatusName(status string) string {
switch status {
case ExchangeMigrationStatusNotMigrated:
return "不迁移"
case ExchangeMigrationStatusPending:
return "待迁移"
case ExchangeMigrationStatusMigrated:
return "已迁移"
case ExchangeMigrationStatusFailed:
return "迁移失败"
default:
return "未知"
}
}