917 lines
26 KiB
Go
917 lines
26 KiB
Go
package ledger
|
||
|
||
import "strings"
|
||
|
||
const (
|
||
// AssetCoin 是用户送礼消费资产。
|
||
AssetCoin = "COIN"
|
||
// AssetCoinSellerCoin 是币商专用金币资产,只能通过币商转账兑换成玩家普通 COIN。
|
||
AssetCoinSellerCoin = "COIN_SELLER_COIN"
|
||
// AssetGiftPoint 是主播礼物积分,不能直接消费或提现。
|
||
AssetGiftPoint = "GIFT_POINT"
|
||
// AssetDiamond 是后续兑换用资产,当前只在余额模型中保留。
|
||
AssetDiamond = "DIAMOND"
|
||
// AssetHostPeriodDiamond 是主播工资周期钻石投影,只参与工资等级结算,不进入通用钱包余额。
|
||
AssetHostPeriodDiamond = "HOST_PERIOD_DIAMOND"
|
||
// AssetUSDBalance 是主播可提现美元余额,单位由后续提现策略固定。
|
||
AssetUSDBalance = "USD_BALANCE"
|
||
|
||
// StockTypeUSDTPurchase 表示币商线下 USDT 进货后发放专用金币库存。
|
||
StockTypeUSDTPurchase = "usdt_purchase"
|
||
// StockTypeCoinCompensation 表示平台人工补偿币商专用金币库存,不计入进货金额。
|
||
StockTypeCoinCompensation = "coin_compensation"
|
||
// PaidCurrencyUSDT 是首版币商进货支持的唯一线下付款币种。
|
||
PaidCurrencyUSDT = "USDT"
|
||
// RechargeProductStatusActive 表示内购商品已上架,可进入 App 充值页。
|
||
RechargeProductStatusActive = "active"
|
||
// RechargeProductStatusDisabled 表示内购商品未上架,仅后台可见。
|
||
RechargeProductStatusDisabled = "disabled"
|
||
// RechargeProductPlatformAndroid 表示 Google Play 侧内购商品。
|
||
RechargeProductPlatformAndroid = "android"
|
||
// RechargeProductPlatformIOS 表示 Apple IAP 侧内购商品。
|
||
RechargeProductPlatformIOS = "ios"
|
||
// RechargeChannelGoogle 是 android 平台内购渠道标识。
|
||
RechargeChannelGoogle = "google"
|
||
// RechargeChannelApple 是 iOS 平台内购渠道标识。
|
||
RechargeChannelApple = "apple"
|
||
// PaymentProviderGooglePlay 是 Google Play 一次性内购支付渠道。
|
||
PaymentProviderGooglePlay = "google_play"
|
||
// PaymentStatusCredited 表示支付已完成校验并入账。
|
||
PaymentStatusCredited = "credited"
|
||
// PaymentConsumeStatePending 表示已入账但 Google consume 尚未确认完成。
|
||
PaymentConsumeStatePending = "consume_pending"
|
||
// PaymentConsumeStateConsumed 表示 Google consume 已确认完成。
|
||
PaymentConsumeStateConsumed = "consumed"
|
||
// GooglePurchaseStatePurchased 是 Google Play 已支付完成状态。
|
||
GooglePurchaseStatePurchased = "PURCHASED"
|
||
|
||
// WithdrawalStatusPending 表示主播美元余额提现已提交,等待后台人工审核和线下转账。
|
||
WithdrawalStatusPending = "pending"
|
||
|
||
// HostSalarySettlementModeDaily 表示主播工资按日结算等级增量。
|
||
HostSalarySettlementModeDaily = "daily"
|
||
// HostSalarySettlementModeHalfMonth 表示主播工资按半月周期结算等级增量。
|
||
HostSalarySettlementModeHalfMonth = "half_month"
|
||
// HostSalarySettlementTypeMonthEnd 表示月底清算等级增量、剩余钻石折美元和周期关闭。
|
||
HostSalarySettlementTypeMonthEnd = "month_end"
|
||
// HostSalarySettlementTriggerAutomatic 表示由 cron-service 自动扫描结算的政策。
|
||
HostSalarySettlementTriggerAutomatic = "automatic"
|
||
// HostSalarySettlementTriggerManual 表示只允许后台工资结算页人工触发的政策。
|
||
HostSalarySettlementTriggerManual = "manual"
|
||
|
||
// VipStatusActive 表示 VIP 配置或用户会员状态当前有效。
|
||
VipStatusActive = "active"
|
||
// VipStatusDisabled 表示 VIP 配置被后台停用。
|
||
VipStatusDisabled = "disabled"
|
||
// VipGrantSourcePurchase 表示用户主动购买或续费 VIP。
|
||
VipGrantSourcePurchase = "vip_purchase"
|
||
// VipGrantSourceActivity 表示活动系统赠送 VIP。
|
||
VipGrantSourceActivity = "activity_grant"
|
||
// VipGrantSourceAdmin 表示后台人工赠送 VIP。
|
||
VipGrantSourceAdmin = "admin_grant"
|
||
|
||
// GameOpDebit 表示游戏平台下注、局内道具等扣金币行为。
|
||
GameOpDebit = "debit"
|
||
// GameOpCredit 表示游戏平台中奖、派奖等加金币行为。
|
||
GameOpCredit = "credit"
|
||
// GameOpRefund 表示游戏平台扣款失败或取消后的退款入账。
|
||
GameOpRefund = "refund"
|
||
// GameOpReverse 表示平台冲正;首版按扣回用户 COIN 处理。
|
||
GameOpReverse = "reverse"
|
||
|
||
// RedPacketTypeNormal 表示发出后立即可抢的普通红包。
|
||
RedPacketTypeNormal = "normal"
|
||
// RedPacketTypeDelayed 表示发出后按后台秒数延迟打开的红包。
|
||
RedPacketTypeDelayed = "delayed"
|
||
// RedPacketStatusWaitingOpen 表示延迟红包已扣款但未到打开时间。
|
||
RedPacketStatusWaitingOpen = "waiting_open"
|
||
// RedPacketStatusActive 表示红包可领取。
|
||
RedPacketStatusActive = "active"
|
||
// RedPacketStatusFinished 表示红包所有份额已领取。
|
||
RedPacketStatusFinished = "finished"
|
||
// RedPacketStatusRefunded 表示红包过期未领取金额已退回。
|
||
RedPacketStatusRefunded = "refunded"
|
||
// RedPacketClaimStatusClaimed 表示红包份额领取成功。
|
||
RedPacketClaimStatusClaimed = "claimed"
|
||
|
||
// RedPacketExpireSeconds 固定房内红包 24 小时过期退款。
|
||
RedPacketExpireSeconds int32 = 24 * 60 * 60
|
||
)
|
||
|
||
// DebitGiftCommand 是 room-service 送礼扣费的账务命令。
|
||
type DebitGiftCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
RoomID string
|
||
SenderUserID int64
|
||
TargetUserID int64
|
||
GiftID string
|
||
GiftCount int32
|
||
PriceVersion string
|
||
RegionID int64
|
||
// TargetIsHost 只能由 gateway 根据 user-service active host profile 注入,客户端输入不可信。
|
||
TargetIsHost bool
|
||
// TargetHostRegionID 是主播身份所属区域;工资政策按该区域匹配,不能用房间可见区域替代。
|
||
TargetHostRegionID int64
|
||
// TargetAgencyOwnerUserID 是送礼瞬间主播上级代理的收款用户快照;结算按快照发放,避免月底组织变化错账。
|
||
TargetAgencyOwnerUserID int64
|
||
}
|
||
|
||
// Receipt 是账务命令落账后的稳定回执。
|
||
type Receipt struct {
|
||
BillingReceiptID string
|
||
TransactionID string
|
||
CoinSpent int64
|
||
ChargeAssetType string
|
||
ChargeAmount int64
|
||
GiftPointAdded int64
|
||
HeatValue int64
|
||
GiftTypeCode string
|
||
PriceVersion string
|
||
BalanceAfter int64
|
||
// HostPeriodDiamondAdded 是本次送礼写入主播工资周期账户的钻石数;非主播恒为 0。
|
||
HostPeriodDiamondAdded int64
|
||
// HostPeriodCycleKey 是工资周期键,当前按 UTC 月生成,后续结算按此键定位周期账户。
|
||
HostPeriodCycleKey string
|
||
}
|
||
|
||
// HostSalarySettlementBatchCommand 是 cron 或测试触发结算批处理的最小输入。
|
||
type HostSalarySettlementBatchCommand struct {
|
||
AppCode string
|
||
RunID string
|
||
WorkerID string
|
||
BatchSize int
|
||
SettlementType string
|
||
// TriggerMode 决定本次批处理读取自动政策还是手动政策;空值按 automatic 处理,兼容已有定时任务。
|
||
TriggerMode string
|
||
CycleKey string
|
||
NowMs int64
|
||
}
|
||
|
||
// HostSalarySettlementBatchResult 汇总一个结算批次的扫描和入账结果。
|
||
type HostSalarySettlementBatchResult struct {
|
||
ClaimedCount int
|
||
ProcessedCount int
|
||
SuccessCount int
|
||
FailureCount int
|
||
HasMore bool
|
||
}
|
||
|
||
// HostSalaryPolicy 是 wallet-service 结算读取的后台政策运行快照。
|
||
type HostSalaryPolicy struct {
|
||
PolicyID uint64
|
||
Name string
|
||
RegionID int64
|
||
Status string
|
||
SettlementMode string
|
||
SettlementTriggerMode string
|
||
GiftCoinToDiamondRatio string
|
||
ResidualDiamondToUSDRate string
|
||
EffectiveFromMs int64
|
||
EffectiveToMs int64
|
||
Levels []HostSalaryPolicyLevel
|
||
}
|
||
|
||
// HostSalaryPolicyLevel 使用累计值表达工资和奖励,结算时只发放“当前累计 - 已发累计”的差额。
|
||
type HostSalaryPolicyLevel struct {
|
||
LevelNo int
|
||
RequiredDiamonds int64
|
||
HostSalaryUSDMinor int64
|
||
HostCoinReward int64
|
||
AgencySalaryUSDMinor int64
|
||
Status string
|
||
SortOrder int
|
||
}
|
||
|
||
// CoinSellerTransferCommand 是币商给玩家转普通金币的账务命令。
|
||
type CoinSellerTransferCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
SellerUserID int64
|
||
TargetUserID int64
|
||
SellerRegionID int64
|
||
TargetRegionID int64
|
||
Amount int64
|
||
Reason string
|
||
}
|
||
|
||
// CoinSellerTransferReceipt 是币商转账完成后的稳定回执。
|
||
type CoinSellerTransferReceipt struct {
|
||
TransactionID string
|
||
SellerBalanceAfter int64
|
||
TargetBalanceAfter int64
|
||
Amount int64
|
||
RechargeSequence int64
|
||
RechargeUSDMinor int64
|
||
RechargeCurrencyCode string
|
||
RechargePolicyID int64
|
||
RechargePolicyVersion string
|
||
RechargePolicyCoinAmount int64
|
||
RechargePolicyUSDMinorUnit int64
|
||
}
|
||
|
||
// CoinSellerStockCreditCommand 是后台给币商专用金币库存入账的最小账务命令。
|
||
type CoinSellerStockCreditCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
SellerUserID int64
|
||
StockType string
|
||
CoinAmount int64
|
||
PaidCurrencyCode string
|
||
PaidAmountMicro int64
|
||
PaymentRef string
|
||
EvidenceRef string
|
||
OperatorUserID int64
|
||
Reason string
|
||
}
|
||
|
||
// CoinSellerStockCreditReceipt 是币商库存入账成功后的稳定回执。
|
||
type CoinSellerStockCreditReceipt struct {
|
||
TransactionID string
|
||
SellerUserID int64
|
||
StockType string
|
||
CoinAmount int64
|
||
PaidCurrencyCode string
|
||
PaidAmountMicro int64
|
||
CountsAsSellerRecharge bool
|
||
BalanceAfter int64
|
||
CreatedAtMS int64
|
||
}
|
||
|
||
// RechargeBill 是充值账单的只读投影;充值事实由 wallet_recharge_records 保存。
|
||
type RechargeBill struct {
|
||
AppCode string
|
||
TransactionID string
|
||
CommandID string
|
||
RechargeType string
|
||
Status string
|
||
ExternalRef string
|
||
UserID int64
|
||
SellerUserID int64
|
||
SellerRegionID int64
|
||
TargetRegionID int64
|
||
PolicyID int64
|
||
PolicyVersion string
|
||
CurrencyCode string
|
||
CoinAmount int64
|
||
USDMinorAmount int64
|
||
ExchangeCoinAmount int64
|
||
ExchangeUSDMinorAmount int64
|
||
CreatedAtMS int64
|
||
}
|
||
|
||
// ListRechargeBillsQuery 是后台查询所有充值渠道账单的筛选条件。
|
||
type ListRechargeBillsQuery struct {
|
||
AppCode string
|
||
UserID int64
|
||
SellerUserID int64
|
||
RegionID int64
|
||
RechargeType string
|
||
Status string
|
||
Keyword string
|
||
StartAtMS int64
|
||
EndAtMS int64
|
||
Page int32
|
||
PageSize int32
|
||
}
|
||
|
||
// WalletFeatureFlags 是 App 钱包入口的开关投影;首版由 wallet-service 固定返回,后续可迁移到配置表。
|
||
type WalletFeatureFlags struct {
|
||
RechargeEnabled bool
|
||
DiamondExchangeEnabled bool
|
||
WithdrawEnabled bool
|
||
}
|
||
|
||
// WalletOverview 是我的页和钱包首页共同使用的轻量摘要。
|
||
type WalletOverview struct {
|
||
Balances []AssetBalance
|
||
FeatureFlags WalletFeatureFlags
|
||
}
|
||
|
||
// WalletValueSummary 是我的页钱包卡片的最小余额投影。
|
||
type WalletValueSummary struct {
|
||
CoinAmount int64
|
||
UpdatedAtMS int64
|
||
}
|
||
|
||
// GiftWallResource 是礼物墙展示所需的资源快照字段,避免读取接口再依赖资源配置实时状态。
|
||
type GiftWallResource struct {
|
||
AppCode string
|
||
ResourceID int64
|
||
ResourceCode string
|
||
ResourceType string
|
||
Name string
|
||
Status string
|
||
Grantable bool
|
||
GrantStrategy string
|
||
WalletAssetType string
|
||
WalletAssetAmount int64
|
||
UsageScopes []string
|
||
AssetURL string
|
||
PreviewURL string
|
||
AnimationURL string
|
||
MetadataJSON string
|
||
SortOrder int32
|
||
CreatedAtMS int64
|
||
UpdatedAtMS int64
|
||
}
|
||
|
||
// GiftWallItem 是当前用户收到礼物的按 gift_id 聚合投影。
|
||
type GiftWallItem struct {
|
||
GiftID string
|
||
GiftName string
|
||
ResourceID int64
|
||
Resource GiftWallResource
|
||
ResourceSnapshotJSON string
|
||
GiftTypeCode string
|
||
PresentationJSON string
|
||
GiftCount int64
|
||
TotalValue int64
|
||
TotalCoinValue int64
|
||
TotalDiamondValue int64
|
||
TotalGiftPoint int64
|
||
TotalHeatValue int64
|
||
ChargeAssetType string
|
||
LastPriceVersion string
|
||
FirstReceivedAtMS int64
|
||
LastReceivedAtMS int64
|
||
SortOrder int32
|
||
}
|
||
|
||
// UserGiftWall 汇总礼物墙首屏需要的全量统计和按礼物类型聚合列表。
|
||
type UserGiftWall struct {
|
||
Items []GiftWallItem
|
||
GiftKindCount int64
|
||
GiftTotalCount int64
|
||
TotalValue int64
|
||
TotalCoinValue int64
|
||
TotalDiamondValue int64
|
||
TotalGiftPoint int64
|
||
TotalHeatValue int64
|
||
}
|
||
|
||
// RechargeProduct 是用户充值页读取的充值档位。
|
||
type RechargeProduct struct {
|
||
AppCode string
|
||
ProductID int64
|
||
ProductCode string
|
||
ProductName string
|
||
Description string
|
||
Platform string
|
||
Channel string
|
||
CurrencyCode string
|
||
AmountMicro int64
|
||
AmountMinor int64
|
||
CoinAmount int64
|
||
PolicyVersion string
|
||
Enabled bool
|
||
Status string
|
||
SortOrder int32
|
||
RegionIDs []int64
|
||
ResourceAssetType string
|
||
CreatedByUserID int64
|
||
UpdatedByUserID int64
|
||
CreatedAtMS int64
|
||
UpdatedAtMS int64
|
||
}
|
||
|
||
// ListRechargeProductsQuery 是后台内购商品配置列表的筛选条件。
|
||
type ListRechargeProductsQuery struct {
|
||
AppCode string
|
||
Status string
|
||
Platform string
|
||
RegionID int64
|
||
Keyword string
|
||
Page int32
|
||
PageSize int32
|
||
}
|
||
|
||
// RechargeProductCommand 是后台创建或更新内购商品配置的完整事实输入。
|
||
type RechargeProductCommand struct {
|
||
AppCode string
|
||
ProductID int64
|
||
AmountMicro int64
|
||
CoinAmount int64
|
||
ProductName string
|
||
Description string
|
||
Platform string
|
||
RegionIDs []int64
|
||
Enabled bool
|
||
OperatorUserID int64
|
||
}
|
||
|
||
// GooglePaymentCommand 是 App 完成 Google Play 支付后提交给后端确认和入账的命令。
|
||
type GooglePaymentCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
UserID int64
|
||
RegionID int64
|
||
ProductID int64
|
||
ProductCode string
|
||
PackageName string
|
||
PurchaseToken string
|
||
OrderID string
|
||
PurchaseTimeMS int64
|
||
}
|
||
|
||
// GooglePlayPurchase 是 Google Play Developer API 返回的一次性商品购买状态快照。
|
||
type GooglePlayPurchase struct {
|
||
PackageName string
|
||
ProductID string
|
||
OrderID string
|
||
PurchaseState string
|
||
ConsumptionState string
|
||
AcknowledgementState string
|
||
PurchaseCompletionTime string
|
||
RawJSON string
|
||
}
|
||
|
||
// GooglePaymentReceipt 是 Google 支付确认接口返回给 App 的稳定入账回执。
|
||
type GooglePaymentReceipt struct {
|
||
PaymentOrderID string
|
||
TransactionID string
|
||
Status string
|
||
ProductID int64
|
||
ProductCode string
|
||
CoinAmount int64
|
||
Balance AssetBalance
|
||
IdempotentReplay bool
|
||
ConsumeState string
|
||
}
|
||
|
||
// DiamondExchangeRule 是钻石兑换金币或余额的固定规则投影。
|
||
type DiamondExchangeRule struct {
|
||
ExchangeType string
|
||
FromAssetType string
|
||
ToAssetType string
|
||
FromAmount int64
|
||
ToAmount int64
|
||
Enabled bool
|
||
}
|
||
|
||
// WalletTransaction 是钱包流水页按用户分录查询的投影。
|
||
type WalletTransaction struct {
|
||
EntryID int64
|
||
TransactionID string
|
||
BizType string
|
||
AssetType string
|
||
AvailableDelta int64
|
||
FrozenDelta int64
|
||
AvailableAfter int64
|
||
FrozenAfter int64
|
||
CounterpartyUserID int64
|
||
RoomID string
|
||
CreatedAtMS int64
|
||
}
|
||
|
||
// ListWalletTransactionsQuery 描述 App 钱包流水分页条件。
|
||
type ListWalletTransactionsQuery struct {
|
||
AppCode string
|
||
UserID int64
|
||
AssetType string
|
||
Page int32
|
||
PageSize int32
|
||
}
|
||
|
||
// WithdrawalCommand 是主播余额提现申请命令。人工审核和线下转账不在 App 主链路完成。
|
||
type WithdrawalCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
UserID int64
|
||
Amount int64
|
||
PayoutAccount string
|
||
Reason string
|
||
}
|
||
|
||
// WithdrawalRequest 是提现申请事实。
|
||
type WithdrawalRequest struct {
|
||
WithdrawalID string
|
||
UserID int64
|
||
AssetType string
|
||
Amount int64
|
||
Status string
|
||
PayoutAccount string
|
||
Reason string
|
||
CreatedAtMS int64
|
||
UpdatedAtMS int64
|
||
}
|
||
|
||
// VipRewardItem 是 VIP 资源组权益的轻量展示投影。
|
||
type VipRewardItem struct {
|
||
ResourceID int64
|
||
ResourceCode string
|
||
ResourceType string
|
||
Name string
|
||
Quantity int64
|
||
ExpiresAtMS int64
|
||
AssetURL string
|
||
PreviewURL string
|
||
AnimationURL string
|
||
}
|
||
|
||
// VipLevel 是可购买 VIP 等级配置。
|
||
type VipLevel struct {
|
||
Level int32
|
||
Name string
|
||
Status string
|
||
PriceCoin int64
|
||
DurationMS int64
|
||
RewardResourceGroupID int64
|
||
RequiredRechargeCoinAmount int64
|
||
UserRechargeCoinAmount int64
|
||
RechargeGateRequired bool
|
||
PurchaseLockedReason string
|
||
RewardItems []VipRewardItem
|
||
CanPurchase bool
|
||
SortOrder int32
|
||
CreatedAtMS int64
|
||
UpdatedAtMS int64
|
||
}
|
||
|
||
// UserVip 是用户当前会员状态。是否有效以 ExpiresAtMS 和当前时间判断。
|
||
type UserVip struct {
|
||
UserID int64
|
||
Level int32
|
||
Name string
|
||
Active bool
|
||
StartedAtMS int64
|
||
ExpiresAtMS int64
|
||
UpdatedAtMS int64
|
||
}
|
||
|
||
// PurchaseVipCommand 是 App 购买或升级 VIP 的账务命令。
|
||
type PurchaseVipCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
UserID int64
|
||
Level int32
|
||
}
|
||
|
||
// PurchaseVipReceipt 是购买 VIP 成功后的稳定回执。
|
||
type PurchaseVipReceipt struct {
|
||
OrderID string
|
||
TransactionID string
|
||
Vip UserVip
|
||
CoinSpent int64
|
||
CoinBalanceAfter int64
|
||
RewardItems []VipRewardItem
|
||
}
|
||
|
||
// GrantVipCommand 是活动或后台发放 VIP 的统一入口命令。
|
||
type GrantVipCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
TargetUserID int64
|
||
Level int32
|
||
GrantSource string
|
||
OperatorUserID int64
|
||
Reason string
|
||
}
|
||
|
||
// GrantVipReceipt 是赠送 VIP 成功后的稳定回执。
|
||
type GrantVipReceipt struct {
|
||
TransactionID string
|
||
Vip UserVip
|
||
RewardItems []VipRewardItem
|
||
}
|
||
|
||
// AdminVipLevelCommand 是后台保存 VIP 等级配置的完整事实输入。
|
||
type AdminVipLevelCommand struct {
|
||
Level int32
|
||
Name string
|
||
Status string
|
||
PriceCoin int64
|
||
DurationMS int64
|
||
RewardResourceGroupID int64
|
||
RequiredRechargeCoinAmount int64
|
||
SortOrder int32
|
||
}
|
||
|
||
// AssetBalance 是账户当前可用/冻结余额投影。
|
||
type AssetBalance struct {
|
||
AppCode string
|
||
UserID int64
|
||
AssetType string
|
||
AvailableAmount int64
|
||
FrozenAmount int64
|
||
Version int64
|
||
UpdatedAtMs int64
|
||
}
|
||
|
||
// AdminCreditAssetCommand 是后台手动调账的最小审计命令,Amount 为正数入账、负数扣账。
|
||
type AdminCreditAssetCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
TargetUserID int64
|
||
AssetType string
|
||
Amount int64
|
||
OperatorUserID int64
|
||
Reason string
|
||
EvidenceRef string
|
||
}
|
||
|
||
// TaskRewardCommand 是 activity-service 任务领奖的 COIN 入账命令。
|
||
type TaskRewardCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
TargetUserID int64
|
||
Amount int64
|
||
TaskType string
|
||
TaskID string
|
||
CycleKey string
|
||
Reason string
|
||
}
|
||
|
||
// TaskRewardReceipt 是任务奖励入账后的稳定回执。
|
||
type TaskRewardReceipt struct {
|
||
TransactionID string
|
||
Balance AssetBalance
|
||
Amount int64
|
||
GrantedAtMS int64
|
||
}
|
||
|
||
// LuckyGiftRewardCommand 是 activity-service 用抽奖 draw_id 发起的 COIN 入账命令。
|
||
type LuckyGiftRewardCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
TargetUserID int64
|
||
Amount int64
|
||
DrawID string
|
||
RoomID string
|
||
VisibleRegionID int64
|
||
GiftID string
|
||
PoolID string
|
||
Reason string
|
||
}
|
||
|
||
// LuckyGiftRewardReceipt 是幸运礼物返奖入账后的稳定回执。
|
||
type LuckyGiftRewardReceipt struct {
|
||
TransactionID string
|
||
Balance AssetBalance
|
||
Amount int64
|
||
GrantedAtMS int64
|
||
}
|
||
|
||
// GameCoinChangeCommand 是 game-service 对钱包发起的游戏专用金币改账命令。
|
||
type GameCoinChangeCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
UserID int64
|
||
PlatformCode string
|
||
GameID string
|
||
ProviderOrderID string
|
||
ProviderRoundID string
|
||
OpType string
|
||
CoinAmount int64
|
||
RoomID string
|
||
RequestHash string
|
||
}
|
||
|
||
// GameCoinChangeReceipt 是游戏改账成功或幂等重放后的稳定回执。
|
||
type GameCoinChangeReceipt struct {
|
||
TransactionID string
|
||
BalanceAfter int64
|
||
IdempotentReplay bool
|
||
}
|
||
|
||
// RedPacketConfig 是后台红包配置的服务端事实,发送路径必须由 wallet-service 强校验。
|
||
type RedPacketConfig struct {
|
||
AppCode string
|
||
Enabled bool
|
||
CountTiers []int32
|
||
AmountTiers []int64
|
||
DelayedOpenSeconds int32
|
||
ExpireSeconds int32
|
||
DailySendLimit int32
|
||
UpdatedByAdminID int64
|
||
RuleURL string
|
||
CreatedAtMS int64
|
||
UpdatedAtMS int64
|
||
}
|
||
|
||
// RedPacket 是红包资金池和状态的只读投影。
|
||
type RedPacket struct {
|
||
AppCode string
|
||
PacketID string
|
||
CommandID string
|
||
SenderUserID int64
|
||
RoomID string
|
||
RegionID int64
|
||
PacketType string
|
||
TotalAmount int64
|
||
PacketCount int32
|
||
RemainingAmount int64
|
||
RemainingCount int32
|
||
Status string
|
||
OpenAtMS int64
|
||
ExpiresAtMS int64
|
||
CreatedAtMS int64
|
||
UpdatedAtMS int64
|
||
ClaimedByViewer bool
|
||
ViewerClaimAmount int64
|
||
Claims []RedPacketClaim
|
||
RefundAmount int64
|
||
RefundStatus string
|
||
RefundedAtMS int64
|
||
}
|
||
|
||
// RedPacketClaim 是单个用户抢红包的到账事实。
|
||
type RedPacketClaim struct {
|
||
AppCode string
|
||
ClaimID string
|
||
CommandID string
|
||
PacketID string
|
||
UserID int64
|
||
Amount int64
|
||
WalletTransactionID string
|
||
Status string
|
||
FailureReason string
|
||
CreatedAtMS int64
|
||
UpdatedAtMS int64
|
||
}
|
||
|
||
type RedPacketCreateCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
SenderUserID int64
|
||
RoomID string
|
||
RegionID int64
|
||
PacketType string
|
||
TotalAmount int64
|
||
PacketCount int32
|
||
}
|
||
|
||
type RedPacketCreateReceipt struct {
|
||
Packet RedPacket
|
||
BalanceAfter int64
|
||
}
|
||
|
||
type RedPacketClaimCommand struct {
|
||
AppCode string
|
||
CommandID string
|
||
PacketID string
|
||
UserID int64
|
||
}
|
||
|
||
type RedPacketClaimReceipt struct {
|
||
Claim RedPacketClaim
|
||
Packet RedPacket
|
||
BalanceAfter int64
|
||
}
|
||
|
||
type RedPacketRefundReceipt struct {
|
||
Packet RedPacket
|
||
RefundedAmount int64
|
||
}
|
||
|
||
type RedPacketQuery struct {
|
||
AppCode string
|
||
RoomID string
|
||
SenderUserID int64
|
||
RegionID int64
|
||
PacketType string
|
||
Status string
|
||
ViewerUserID int64
|
||
StartAtMS int64
|
||
EndAtMS int64
|
||
Page int32
|
||
PageSize int32
|
||
}
|
||
|
||
type RedPacketExpireResult struct {
|
||
ExpiredCount int32
|
||
RefundedAmount int64
|
||
}
|
||
|
||
// ValidAssetType 限定账本允许落账的资产类型,避免写入任意字符串资产。
|
||
func ValidAssetType(assetType string) bool {
|
||
switch assetType {
|
||
case AssetCoin, AssetCoinSellerCoin, AssetGiftPoint, AssetDiamond, AssetUSDBalance:
|
||
return true
|
||
default:
|
||
return false
|
||
}
|
||
}
|
||
|
||
func NormalizeGiftChargeAssetType(assetType string) string {
|
||
switch strings.ToUpper(strings.TrimSpace(assetType)) {
|
||
case AssetDiamond:
|
||
return AssetDiamond
|
||
default:
|
||
return AssetCoin
|
||
}
|
||
}
|
||
|
||
func NormalizeVipGrantSource(source string) string {
|
||
switch strings.ToLower(strings.TrimSpace(source)) {
|
||
case VipGrantSourcePurchase:
|
||
return VipGrantSourcePurchase
|
||
case VipGrantSourceActivity:
|
||
return VipGrantSourceActivity
|
||
case VipGrantSourceAdmin:
|
||
return VipGrantSourceAdmin
|
||
default:
|
||
return ""
|
||
}
|
||
}
|
||
|
||
func ValidGiftChargeAssetType(assetType string) bool {
|
||
switch strings.ToUpper(strings.TrimSpace(assetType)) {
|
||
case AssetCoin, AssetDiamond:
|
||
return true
|
||
default:
|
||
return false
|
||
}
|
||
}
|
||
|
||
func NormalizeCoinSellerStockType(stockType string) string {
|
||
switch strings.ToLower(strings.TrimSpace(stockType)) {
|
||
case StockTypeUSDTPurchase:
|
||
return StockTypeUSDTPurchase
|
||
case StockTypeCoinCompensation:
|
||
return StockTypeCoinCompensation
|
||
default:
|
||
return ""
|
||
}
|
||
}
|
||
|
||
func NormalizeRechargeProductStatus(status string) string {
|
||
switch strings.ToLower(strings.TrimSpace(status)) {
|
||
case RechargeProductStatusActive:
|
||
return RechargeProductStatusActive
|
||
case RechargeProductStatusDisabled:
|
||
return RechargeProductStatusDisabled
|
||
default:
|
||
return ""
|
||
}
|
||
}
|
||
|
||
func NormalizeRechargeProductPlatform(platform string) string {
|
||
switch strings.ToLower(strings.TrimSpace(platform)) {
|
||
case RechargeProductPlatformAndroid:
|
||
return RechargeProductPlatformAndroid
|
||
case RechargeProductPlatformIOS:
|
||
return RechargeProductPlatformIOS
|
||
default:
|
||
return ""
|
||
}
|
||
}
|
||
|
||
func RechargeChannelForPlatform(platform string) string {
|
||
switch NormalizeRechargeProductPlatform(platform) {
|
||
case RechargeProductPlatformAndroid:
|
||
return RechargeChannelGoogle
|
||
case RechargeProductPlatformIOS:
|
||
return RechargeChannelApple
|
||
default:
|
||
return ""
|
||
}
|
||
}
|
||
|
||
func NormalizeGameOpType(opType string) string {
|
||
switch strings.ToLower(strings.TrimSpace(opType)) {
|
||
case GameOpDebit:
|
||
return GameOpDebit
|
||
case GameOpCredit:
|
||
return GameOpCredit
|
||
case GameOpRefund:
|
||
return GameOpRefund
|
||
case GameOpReverse:
|
||
return GameOpReverse
|
||
default:
|
||
return ""
|
||
}
|
||
}
|
||
|
||
func NormalizeRedPacketType(packetType string) string {
|
||
switch strings.ToUpper(strings.TrimSpace(packetType)) {
|
||
case "IMMEDIATE":
|
||
return RedPacketTypeNormal
|
||
case "DELAYED":
|
||
return RedPacketTypeDelayed
|
||
}
|
||
switch strings.ToLower(strings.TrimSpace(packetType)) {
|
||
case RedPacketTypeNormal:
|
||
return RedPacketTypeNormal
|
||
case RedPacketTypeDelayed:
|
||
return RedPacketTypeDelayed
|
||
default:
|
||
return ""
|
||
}
|
||
}
|
||
|
||
func NormalizeRedPacketStatus(status string) string {
|
||
switch strings.ToLower(strings.TrimSpace(status)) {
|
||
case RedPacketStatusWaitingOpen:
|
||
return RedPacketStatusWaitingOpen
|
||
case RedPacketStatusActive:
|
||
return RedPacketStatusActive
|
||
case RedPacketStatusFinished:
|
||
return RedPacketStatusFinished
|
||
case RedPacketStatusRefunded:
|
||
return RedPacketStatusRefunded
|
||
default:
|
||
return ""
|
||
}
|
||
}
|