222 lines
5.5 KiB
Go
222 lines
5.5 KiB
Go
|
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
|
|||
|
}
|