Commit 75970f92 authored by hujiebin's avatar hujiebin

feat:迁移代码

parent 2ca0565e
......@@ -3,6 +3,7 @@ module git.hilo.cn/hilo-common
go 1.17
require (
github.com/AgoraIO/Tools/DynamicKey/AgoraDynamicKey/go/src v0.0.0-20200910100525-12b7f1b63a6a // indirect
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1274 // indirect
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
......
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/AgoraIO/Tools/DynamicKey/AgoraDynamicKey/go/src v0.0.0-20200910100525-12b7f1b63a6a h1:+/ILLIcuKbrW4kyQ0V574aV9skXRivrcmlg0IBk7apY=
github.com/AgoraIO/Tools/DynamicKey/AgoraDynamicKey/go/src v0.0.0-20200910100525-12b7f1b63a6a/go.mod h1:4bXIK0ntDk9CqAXobmomWd7dedbfNv/aaIpmpqqzt+A=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1274 h1:u48e7I7h/BY5uDP8xiIFNaUkdTVk7hjj/Sucg8FrxNU=
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1274/go.mod h1:9CMdKNL3ynIGPpfTcdwTvIm8SGuAZYYC4jFVSSvE1YQ=
......
package redisCli
import (
"context"
"git.hilo.cn/hilo-common/mylogrus"
"time"
)
//这个用户避免多个服务器并发问题。
func SetNX(key string, value interface{}, expiration time.Duration, callBack func()) {
flag, err := RedisClient.SetNX(context.Background(), key, value, expiration).Result()
if err != nil {
mylogrus.MyLog.Errorf("key:%v lock start setNx err: %v", key, err)
}
if !flag {
mylogrus.MyLog.Infof("key:%v lock setNx has lock", key)
return
}
mylogrus.MyLog.Infof("key:%v lock setNx begin", key)
callBack()
//执行结束之后,移除key
//RedisClient.Del(context.Background(), key)
mylogrus.MyLog.Infof("key:%v lock setNx end", key)
}
func Lock(key string, expiration time.Duration) bool {
flag, err := RedisClient.SetNX(context.Background(), key, 1, expiration).Result()
if err != nil {
return false
}
if !flag {
return false
}
return true
}
......@@ -52,9 +52,10 @@ type CvSvip struct {
}
type CVSvipPrivilege struct {
Type int `json:"type"` // 1.专属勋章, 2.专属标识, 3.设备和IP踢出房间, 4.隐藏在线, 5.禁止跟随, 6.炫彩昵称, 7.隐藏礼物墙, 8.隐藏访客记录, 9.排行榜隐身, 10.房间防踢, 11.房间防抱下麦
CanSwitch bool `json:"canSwitch"` // 能否开关
UserSwitch bool `json:"userSwitch"` // 用户开关
Type int `json:"type"` // 1.专属勋章, 2.专属标识, 3.设备和IP踢出房间, 4.隐藏在线, 5.禁止跟随, 6.炫彩昵称, 7.隐藏礼物墙, 8.隐藏访客记录, 9.排行榜隐身, 10.房间防踢, 11.房间防抱下麦
CanSwitch bool `json:"canSwitch"` // 能否开关
UserSwitch bool `json:"userSwitch"` // 用户开关
MysteryCode string `json:"mysteryCode,omitempty"` // 神秘人代码,特权17的专属代码
}
// 获取svip等级
......@@ -120,6 +121,25 @@ func MGetUserSvip(model *domain.Model, userIds []mysql.ID) (map[mysql.ID]CvSvip,
return res, nil
}
// 拷贝客户端用到的privileges赋值
// 避免推送大包体
// 目前暂时只需要 svip7.神秘人特权
func CopySimpleSvip(svip CvSvip) CvSvip {
var simpleSvip CvSvip
simpleSvip.SvipLevel = svip.SvipLevel
for _, p := range svip.Privileges {
if p.Type == 17 { // 神秘人代码,特权17的专属代码
simpleSvip.Privileges = append(simpleSvip.Privileges, CVSvipPrivilege{
Type: p.Type,
CanSwitch: p.CanSwitch,
UserSwitch: p.UserSwitch,
MysteryCode: p.MysteryCode,
})
}
}
return simpleSvip
}
func getFinanceHost() string {
l := len(financeServerHost)
r := rand.Intn(l) // 随机一个
......
package main
import (
"fmt"
"git.hilo.cn/hilo-common/script/model"
"git.hilo.cn/hilo-common/script/mysql"
)
type UserSvip struct {
UserId uint64
Code string
Points int64
Level int
AcPoints int64
Diamond int64
}
var bt1 = "2023-01-04 16:42:58"
var et1 = "2023-03-04 00:00:00"
func cal(level int) int64 {
switch level {
case 1:
return 50000
case 2:
return 300000
case 3:
return 1000000
case 4:
return 2000000
case 5:
return 5000000
case 6:
return 10000000
case 7:
return 30000000
}
return 0
}
func main() {
var userSvip []UserSvip
if err := mysql.ProdReadOnlyDB.Model(UserSvip{}).Where("level > 0").Find(&userSvip).Error; err != nil {
panic(err)
}
for i, v := range userSvip {
_, userSvip[i].Diamond, _ = GetChargeMoneyDiamond2(v.UserId)
userSvip[i].AcPoints = v.Points + cal(v.Level)
var user model.User
if err := mysql.ProdReadOnlyDB.Model(model.User{}).Where("id = ? ", v.UserId).First(&user).Error; err != nil {
panic(err)
}
userSvip[i].Code = user.Code
}
fmt.Printf("UserId,Points,Level,AcPoints,Diamond\n")
for _, v := range userSvip {
fmt.Printf("%v,%v,%v,%v,%v\n", v.Code, v.Points, v.Level, v.AcPoints, v.Diamond)
}
}
func GetChargeMoneyDiamond2(uid uint64) (int64, int64, error) {
type R struct {
Money int64
Diamond int64
}
var money R
if err := mysql.ProdReadOnlyDB.Table("diamond_account_detail AS d").
Joins("INNER JOIN pay_order AS p ON d.origin_id = p.id").
Where("d.user_id in (?) AND operate_type in (?) AND add_reduce = 1",
uid, []int{int(4), int(42), int(55), int(68)}).
Where("d.created_time >= ? AND d.created_time < ?", bt1, et1).
Order("d.user_id").
Select("SUM(p.price) as money,SUM(d.num) as diamond").Scan(&money).Error; err != nil {
return 0, 0, err
}
type R2 struct {
Price int64
Diamond int64
}
var money2 R2
if err := mysql.ProdReadOnlyDB.Table("diamond_account_detail AS d").
Joins("INNER JOIN dealer_transfer_detail AS t ON d.origin_id = t.id").
Where("d.user_id in (?) AND operate_type = ? AND add_reduce = 1",
uid, 26).Select("SUM(t.dollar) as price,SUM(d.num) as diamond").
Where("d.created_time >= ? AND d.created_time < ?", bt1, et1).
Order("d.user_id").
Scan(&money2).Error; err != nil {
return 0, 0, err
}
return money.Money + money2.Price, money.Diamond + money2.Diamond, nil
}
This diff is collapsed.
......@@ -6,6 +6,7 @@ const DEFAULT_LANG = "en"
const DATETIME_FORMAT = "2006-01-02 15:04:05"
const COMPACT_DATE_FORMAT = "20060102"
const DATE_FORMAT = "2006-01-02"
const COMPACT_MONTH_FORMAT = "200601"
func GetZeroTime(t time.Time) time.Time {
return time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
......@@ -22,3 +23,7 @@ func GetLastDayOfWeek(t time.Time, n time.Weekday) time.Time {
}
return t.AddDate(0, 0, -(int(weekDay)))
}
func GetMonday(t time.Time) time.Time {
return GetLastDayOfWeek(t, time.Monday)
}
......@@ -6,6 +6,7 @@ import (
)
const DefaultAvatarMan = "hilo/manager/ea48b62d54a24a709de3c38702c89995.png"
const DEFAULT_NICK = "Hilo No.%s"
// 补全url,区分处理oss和aws两种情况
func MakeFullUrl(url string) string {
......
......@@ -2,6 +2,8 @@ package utils
import (
"encoding/json"
"git.hilo.cn/hilo-common/resource/mysql"
"time"
)
// 去除slice中的重复元素
......@@ -32,3 +34,52 @@ func SliceToMapUInt64(s []uint64) map[uint64]struct{} {
}
return m
}
func IfLogoutStr(condition bool, trueVal, falseVal string) string {
if condition {
return trueVal
}
return falseVal
}
func IfLogoutNick(condition bool, code string, nick string) string {
if condition {
return "Hilo No." + code
}
return nick
}
func IfLogout(logoutTime int64) bool {
return logoutTime > 0 && time.Now().Unix() > logoutTime
}
func BirthdayToUint64(birthday *mysql.Timestamp) *uint64 {
if *birthday == 0 {
return nil
}
return (*uint64)(birthday)
}
//空字符串转成nil
func StrNil(msg string) *string {
if msg == "" {
return nil
}
return &msg
}
func TypeToUint8(t *mysql.Type) *uint8 {
if *t == 0 {
return nil
} else {
return (*uint8)(t)
}
}
func StrToString(str *mysql.Str) *string {
return (*string)(str)
}
func NumToUint32(num *mysql.Num) *uint32 {
return (*uint32)(num)
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment