tkcashgame_v4/app/eonline/internal/biz/biz.go

222 lines
5.5 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 biz
import (
"context"
"fmt"
"time"
"sandc/pkg/utils"
"github.com/google/wire"
"gorm.io/gorm"
)
// ProviderSet is biz providers.
var ProviderSet = wire.NewSet(NewEonlineUsecase)
type Cache interface {
GetValue(ctx context.Context, key string) (string, error)
DelValue(ctx context.Context, keys ...string) error
WriteValue(ctx context.Context, key string, value interface{}, timeout int32) error
Remember(ctx context.Context, key string, secone int32, fn func(ctx context.Context) (interface{}, error)) ([]byte, error)
RedisLock(ctx context.Context, key string, value interface{}, timeout int32) (bool, error)
RedisUnLock(ctx context.Context, key string) (bool, error)
IncrValue(ctx context.Context, key string) error
}
type Transaction interface {
InTx(context.Context, func(ctx context.Context) error) error
DB(ctx context.Context) *gorm.DB
}
var SignFixedParameters = []string{
"Platform",
"Deviceid",
"Version",
"Ip",
"Ts",
}
// PayoutItem 账号状态
type PayoutItemId int
const (
PayoutItemId1 PayoutItemId = iota + 1 // 提现0.1
PayoutItemId2 // 提现金币大额1
PayoutItemId3 // 提现绿钞大额1
PayoutItemId4 // 5.0美金,身份文件提交奖励
)
var PayoutItemIdAmountes = []float64{
PayoutItemId1: 5,
PayoutItemId2: 0.1,
PayoutItemId3: 0.1,
}
func (d PayoutItemId) Float64() float64 {
n := int(d)
if n < len(PayoutItemIdAmountes) && n > 0 {
return PayoutItemIdAmountes[n]
}
return 0
}
// PayoutItemStatus item状态类型
type PayoutItemStatus uint
const (
// 可提现
PayoutItemStatusAvailable PayoutItemStatus = iota + 1
// 条件未达成
PayoutItemStatusUnfinished
// 已提现
PayoutItemStatusPayouted
// 禁止提现
PayoutItemStatusForbidden
// 提现中
PayoutItemStatusPayouting
)
var PayoutItemStatusNames = []string{
PayoutItemStatusAvailable: "available",
PayoutItemStatusUnfinished: "unfinished",
PayoutItemStatusPayouted: "payouted",
PayoutItemStatusForbidden: "forbidden",
}
func (d PayoutItemStatus) String() string {
n := int(d)
if n < len(PayoutItemStatusNames) && n > 0 {
return PayoutItemStatusNames[n]
}
return ""
}
// PayoutStatus
type PayoutStatus uint
const (
// 提现中
PayoutStatusPayouting PayoutStatus = iota + 1
// 提现成功
PayoutStatusPayouted
// 提现失败
PayoutStatusPayoutFailed
)
var PayoutStatusNames = []string{
PayoutStatusPayouting: "payouting",
PayoutStatusPayouted: "payouted",
PayoutStatusPayoutFailed: "payout_failed",
}
func (d PayoutStatus) String() string {
n := int(d)
if n < len(PayoutStatusNames) && n > 0 {
return PayoutStatusNames[n]
}
return ""
}
// PayoutRecordLimit1 提现次数总限制
const PayoutRecordLimit1 = 1
const PayoutRecordLimit2 = 0
const PayoutRecordLimit3 = 0
const PayoutRecordLimit4 = 0
// PayoutAmountLimit 提现金额限制
const PayoutAmountLimit = 5
// GenPayoutUuid 生成payout_uuid
func GenPayoutUuid(deviceId string) string {
str := fmt.Sprintf("%s-tk0630", deviceId)
str = utils.MD5Any(str)
return str
}
// GetUuidPayoutRedisKey 获取uuid redis key当日提现记录
func GetUuidPayoutRedisKey(uuid string, date string, itemId uint32) string {
if date == "" {
date = time.Now().Format("20060102")
}
// uuidRedisKey := fmt.Sprintf("pt_%s_%s", uuid, date)
uuidRedisKey := fmt.Sprintf("pt:%s_%s_%d", uuid, date, itemId)
return uuidRedisKey
}
// GetUuidLockRedisKey 获取uuid redis lock key提现操作加锁防止并发
func GetUuidLockRedisKey(uuid string, date string) string {
if date == "" {
date = time.Now().Format("20060102")
}
uuidRedisKey := fmt.Sprintf("ptlock_%s_%s", uuid, date)
return uuidRedisKey
}
// GetPayoutNotifyRedisKey 获取提现通知redis key
func GetPayoutNotifyRedisKey(payoutId string, date string) string {
if date == "" {
date = time.Now().Format("20060102")
}
uuidRedisKey := fmt.Sprintf("pt_notify_%s_%s", payoutId, date)
return uuidRedisKey
}
// GetUserLoginRedisKey 获取用户登录redis key当日登录记录
func GetUserLoginRedisKey(userId string, date string) string {
if date == "" {
date = time.Now().Format("20060102")
}
uuidRedisKey := fmt.Sprintf("pt_login_%s_%s", userId, date)
return uuidRedisKey
}
// GetPayoutOrderIdRedisKey 获取提现订单对应的 提现reids记录 GetUuidPayoutRedisKey生成的 redis key
func GetPayoutOrderIdRedisKey(orderId string) string {
uuidRedisKey := fmt.Sprintf("ts:%s", orderId)
return uuidRedisKey
}
// 用户的paypal账号生成审核结果的 redis key
func GetCheckResultRedisKey(account string) string {
return fmt.Sprintf("pt_result:%s", account)
}
// 用户的paypal账号生成审核没通过的原因描述的 redis key
func GetCheckResultFailRedisKey(account string) string {
return fmt.Sprintf("pt_fail:%s", account)
}
// 用户的paypal账号生成提交审核的 redis key 存储的数据结构[paypal, uuid]
func GetCheckSubmitRedisKey(account string) string {
return fmt.Sprintf("pt_submit:%s", account)
}
// 用户的paypal账号生成提交审核的 redis key 存储的数据结构[uuid, paypal]
func GetUuid2PaypalRedisKey(uuid string) string {
return fmt.Sprintf("pt_uuid:%s", uuid)
}
// 提交审核计数的 redis key
func GetCheckSubmitNumRedisKey() string {
return fmt.Sprintf("svr_submitNum")
}
// 返回true表示t1,t2是同一天
func isSameDay(t1, t2 time.Time) bool {
y1 := t1.Year()
y2 := t2.Year()
if y1 != y2 {
return false
}
d1 := t1.YearDay()
d2 := t2.YearDay()
if d1 != d2 {
return false
}
return true
}