Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d0661ae40 | ||
|
|
69e72283dc | ||
|
|
a9d84c2db9 | ||
|
|
db3a2bf405 | ||
|
|
5e18d67747 | ||
|
|
8be47af097 | ||
|
|
4c24c4274c |
@@ -1,7 +1,7 @@
|
||||
package aycache
|
||||
|
||||
import (
|
||||
"github.com/ayflying/utility_go/pkg/aycache/drive"
|
||||
"github.com/ayflying/utility_go/pkg"
|
||||
"github.com/gogf/gf/v2/os/gcache"
|
||||
)
|
||||
|
||||
@@ -9,30 +9,7 @@ type Mod struct {
|
||||
client *gcache.Cache
|
||||
}
|
||||
|
||||
//func NewV1(_name ...string) *cache.Mod {
|
||||
// return pgk.Cache
|
||||
//}
|
||||
|
||||
// Deprecated:弃用,改用 pgk.Cache()
|
||||
// Deprecated:弃用,改用 pkg.Cache()
|
||||
func New(_name ...string) gcache.Adapter {
|
||||
|
||||
var cacheAdapterObj gcache.Adapter
|
||||
var name = "cache"
|
||||
if len(_name) > 0 {
|
||||
name = _name[0]
|
||||
}
|
||||
switch name {
|
||||
case "cache":
|
||||
cacheAdapterObj = drive.NewAdapterMemory()
|
||||
case "redis":
|
||||
cacheAdapterObj = drive.NewAdapterRedis()
|
||||
case "file":
|
||||
cacheAdapterObj = drive.NewAdapterFile("runtime/cache")
|
||||
//case "es":
|
||||
//cacheAdapterObj = drive.NewAdapterElasticsearch("http://127.0.0.1:9200"})
|
||||
}
|
||||
|
||||
//var client = gcache.New()
|
||||
//client.SetAdapter(cacheAdapterObj)
|
||||
return cacheAdapterObj
|
||||
return pkg.Cache(_name...)
|
||||
}
|
||||
|
||||
11
cmd/load.go
11
cmd/load.go
@@ -3,8 +3,19 @@ package cmd
|
||||
import (
|
||||
"github.com/ayflying/utility_go/controller/callback"
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||
)
|
||||
|
||||
func Load(s *ghttp.Server) {
|
||||
|
||||
//开启prometheus监控
|
||||
s.Group("/metrics", func(group *ghttp.RouterGroup) {
|
||||
group.Bind(
|
||||
ghttp.WrapH(promhttp.Handler()),
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
// 注册游客方法
|
||||
func RegistrationAnonymous(group *ghttp.RouterGroup) (res []interface{}) {
|
||||
group.Bind(
|
||||
|
||||
11
go.mod
11
go.mod
@@ -16,10 +16,11 @@ require (
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
github.com/lionsoul2014/ip2region/binding/golang v0.0.0-20241220152942-06eb5c6e8230
|
||||
github.com/minio/minio-go/v7 v7.0.85
|
||||
github.com/prometheus/client_golang v1.21.1
|
||||
github.com/xuri/excelize/v2 v2.9.0
|
||||
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602
|
||||
golang.org/x/oauth2 v0.24.0
|
||||
google.golang.org/api v0.44.0
|
||||
google.golang.org/protobuf v1.26.0
|
||||
google.golang.org/protobuf v1.36.1
|
||||
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
|
||||
)
|
||||
|
||||
@@ -27,6 +28,8 @@ require (
|
||||
cloud.google.com/go v0.81.0 // indirect
|
||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1 // indirect
|
||||
github.com/BurntSushi/toml v1.4.0 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/elastic/elastic-transport-go/v8 v8.6.1 // indirect
|
||||
@@ -54,8 +57,12 @@ require (
|
||||
github.com/minio/md5-simd v1.1.2 // indirect
|
||||
github.com/mitchellh/mapstructure v1.4.1 // indirect
|
||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||
github.com/pelletier/go-toml v1.9.3 // indirect
|
||||
github.com/prometheus/client_model v0.6.1 // indirect
|
||||
github.com/prometheus/common v0.62.0 // indirect
|
||||
github.com/prometheus/procfs v0.15.1 // indirect
|
||||
github.com/richardlehane/mscfb v1.0.4 // indirect
|
||||
github.com/richardlehane/msoleps v1.0.4 // indirect
|
||||
github.com/rivo/uniseg v0.4.7 // indirect
|
||||
|
||||
20
go.sum
20
go.sum
@@ -54,9 +54,13 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV
|
||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/ayflying/excel2json v1.1.3 h1:Qy7HnF5aib7lIknaOqICvvZsSwAieLu6KJFeUccOISo=
|
||||
github.com/ayflying/excel2json v1.1.3/go.mod h1:aNzB271bUAuRq+P4J+S8a3NAltcghLIGR2HdM6akqFU=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
@@ -279,6 +283,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
|
||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
@@ -289,7 +295,15 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||
github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk=
|
||||
github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
|
||||
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
|
||||
github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
|
||||
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
|
||||
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
|
||||
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
||||
github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
|
||||
github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
|
||||
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
|
||||
@@ -463,8 +477,9 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ
|
||||
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc=
|
||||
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
|
||||
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@@ -694,8 +709,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
|
||||
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
|
||||
google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
||||
28
internal/boot/boot.go
Normal file
28
internal/boot/boot.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package boot
|
||||
|
||||
import (
|
||||
"context"
|
||||
v1 "github.com/ayflying/utility_go/api/system/v1"
|
||||
"github.com/ayflying/utility_go/service"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
"github.com/gogf/gf/v2/os/gtimer"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
ctx = gctx.GetInitCtx()
|
||||
)
|
||||
|
||||
func Boot() (err error) {
|
||||
err = service.SystemCron().StartCron()
|
||||
|
||||
//用户活动持久化
|
||||
gtimer.SetTimeout(ctx, time.Minute, func(ctx context.Context) {
|
||||
service.SystemCron().AddCron(v1.CronType_DAILY, func() error {
|
||||
service.GameAct().Saves()
|
||||
return nil
|
||||
})
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -34,13 +34,12 @@ func init() {
|
||||
// @receiver s *sIp2region: sIp2region的实例。
|
||||
func (s *sIp2region) Load() {
|
||||
var err error
|
||||
//var dbPath = "/mnt/s3/ip2region.xdb"
|
||||
var dbPath = "lib/ip2region.xdb"
|
||||
var dbPath = "/runtime/library/ip2region.xdb"
|
||||
|
||||
if gfile.IsEmpty(dbPath) {
|
||||
//下载文件
|
||||
putData, err2 := g.Client().Discovery(nil).
|
||||
Get(ctx, "https://resource.luoe.cn/pgk/ip2region.xdb")
|
||||
Get(ctx, "https://resource.luoe.cn/attachment/ip2region.xdb")
|
||||
if err2 != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -7,13 +7,15 @@ import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gcron"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
"github.com/gogf/gf/v2/os/gtimer"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
ctx = gctx.New()
|
||||
ctx = gctx.New()
|
||||
startTime *gtime.Time
|
||||
)
|
||||
|
||||
// sSystemCron 结构体定义了系统定时任务的秒计时器。
|
||||
@@ -110,6 +112,12 @@ func (s *sSystemCron) AddCron(typ v1.CronType, _func func() error) {
|
||||
// @receiver s
|
||||
// @return err
|
||||
func (s *sSystemCron) StartCron() (err error) {
|
||||
//预防重复启动
|
||||
if startTime != nil {
|
||||
return
|
||||
}
|
||||
startTime = gtime.Now()
|
||||
|
||||
g.Log().Debug(ctx, "启动计划任务定时器详情")
|
||||
//每秒任务
|
||||
gtimer.SetInterval(ctx, time.Second, func(ctx context.Context) {
|
||||
|
||||
@@ -1,18 +1,39 @@
|
||||
package aycache
|
||||
|
||||
import (
|
||||
v1 "github.com/ayflying/utility_go/api/system/v1"
|
||||
"github.com/ayflying/utility_go/pkg/aycache/drive"
|
||||
drive2 "github.com/ayflying/utility_go/pkg/aycache/drive"
|
||||
"github.com/ayflying/utility_go/service"
|
||||
"github.com/gogf/gf/v2/os/gcache"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||
"math"
|
||||
)
|
||||
|
||||
type Mod struct {
|
||||
client *gcache.Cache
|
||||
}
|
||||
|
||||
//func NewV1(_name ...string) *cache.Mod {
|
||||
// return pgk.Cache
|
||||
//}
|
||||
var (
|
||||
QPSCount int
|
||||
QPS = promauto.NewGauge(
|
||||
prometheus.GaugeOpts{
|
||||
Name: "Cache_QPS",
|
||||
Help: "当前缓存QPS数量",
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
service.SystemCron().AddCron(v1.CronType_MINUTE, func() error {
|
||||
QPS.Set(math.Round(float64(QPSCount) / 60))
|
||||
QPSCount = 0
|
||||
return nil
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func New(_name ...string) gcache.Adapter {
|
||||
|
||||
@@ -34,5 +55,7 @@ func New(_name ...string) gcache.Adapter {
|
||||
|
||||
//var client = gcache.New()
|
||||
//client.SetAdapter(cacheAdapterObj)
|
||||
|
||||
QPSCount++
|
||||
return cacheAdapterObj
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/gogf/gf/v2/util/grand"
|
||||
"math/rand"
|
||||
"time"
|
||||
)
|
||||
@@ -50,3 +52,33 @@ func (m *randMod) RandomAll(data map[int]int, n int) []int {
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// RandByArrInt 根据传入的 interface 切片中的整数值按权重随机返回一个索引
|
||||
// 参数 s: 一个包含整数的 interface 切片,切片中的每个元素代表一个权重
|
||||
// 返回值: 随机选中的元素的索引
|
||||
func RandByArrInt(s []interface{}) int {
|
||||
// 初始化总权重为 0
|
||||
sv := 0
|
||||
// 遍历切片,累加每个元素的权重
|
||||
for i := range s {
|
||||
sv += gconv.Int(s[i])
|
||||
}
|
||||
if sv < 1 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// 使用 grand.Intn 生成一个 0 到总权重之间的随机数
|
||||
r := grand.Intn(sv)
|
||||
// 初始化当前累加的权重为 0
|
||||
var all int
|
||||
// 再次遍历切片,累加权重
|
||||
for i := range s {
|
||||
all += gconv.Int(s[i])
|
||||
// 如果当前累加的权重大于随机数,则返回当前索引
|
||||
if all > r {
|
||||
return i
|
||||
}
|
||||
}
|
||||
// 如果没有找到符合条件的索引,返回 0
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ type redis struct {
|
||||
}
|
||||
|
||||
func (r *redis) Load() {
|
||||
g.Log().Debugf(gctx.New(), "初始化工具类")
|
||||
g.Log().Debugf(gctx.New(), "初始化redis工具类")
|
||||
if Redis == nil {
|
||||
Redis = &redis{}
|
||||
}
|
||||
|
||||
@@ -121,3 +121,10 @@ func (m *timeMod) GetDailyTimeList(time1 time.Time, time2 time.Time) (timeList [
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ExcelTime2Time excel时间转时间 (12/10/24 02:03转为时间)
|
||||
func (m *timeMod) ExcelTime2Time(excelTime string) time.Time {
|
||||
layout := "01/02/06 15:04" // 月/日/年(最后两位) 小时:分钟 (24小时制)
|
||||
timeNew, _ := time.ParseInLocation(layout, excelTime, time.Local)
|
||||
return timeNew
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
@@ -30,7 +31,7 @@ type tools struct {
|
||||
}
|
||||
|
||||
func init() {
|
||||
g.Log().Debugf(gctx.New(), "初始化工具类")
|
||||
g.Log().Debugf(gctx.New(), "初始化tools工具类")
|
||||
|
||||
names := []toolsInterface{
|
||||
Tools,
|
||||
@@ -253,3 +254,33 @@ func (m *tools) ItemsMerge(_items ...[][]int64) [][]int64 {
|
||||
}
|
||||
return items
|
||||
}
|
||||
|
||||
// ProcessingMap 处理map
|
||||
// 该函数用于递归处理一个键为字符串、值为int64的map。
|
||||
// 如果键是一个JSON字符串,会尝试将其解析为一个新的map,并递归处理这个新的map。
|
||||
// 最终返回一个处理后的map,其中所有键都是非JSON字符串。
|
||||
func (m *tools) ProcessingMap(data map[string]int64) map[string]int64 {
|
||||
// 创建一个临时map,用于存储处理后的键值对
|
||||
var temp = make(map[string]int64)
|
||||
// 遍历输入的map
|
||||
for k, v := range data {
|
||||
// 创建一个新的map,用于存储解析后的JSON数据
|
||||
data_k := make(map[string]int64)
|
||||
// 尝试将键解析为JSON数据
|
||||
err := json.Unmarshal([]byte(k), &data_k)
|
||||
// 如果解析成功
|
||||
if err == nil {
|
||||
// 递归处理解析后的map
|
||||
data_kmap := m.ProcessingMap(data_k)
|
||||
// 返回处理后的map
|
||||
// 如果解析失败,直接将原键值对添加到临时map中
|
||||
// 将递归处理后的结果合并到临时map中
|
||||
for k_k, k_v := range data_kmap {
|
||||
temp[k_k] = k_v
|
||||
}
|
||||
} else {
|
||||
temp[k] = v
|
||||
}
|
||||
}
|
||||
return temp
|
||||
}
|
||||
|
||||
24
utility.go
24
utility.go
@@ -1,17 +1,11 @@
|
||||
package utility_go
|
||||
|
||||
import (
|
||||
"github.com/ayflying/utility_go/internal/boot"
|
||||
_ "github.com/ayflying/utility_go/internal/logic"
|
||||
|
||||
"context"
|
||||
"time"
|
||||
|
||||
v1 "github.com/ayflying/utility_go/api/system/v1"
|
||||
"github.com/ayflying/utility_go/service"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
"github.com/gogf/gf/v2/os/gtimer"
|
||||
|
||||
"github.com/ayflying/utility_go/config"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -20,14 +14,8 @@ var (
|
||||
)
|
||||
|
||||
func init() {
|
||||
service.SystemCron().StartCron()
|
||||
|
||||
//用户活动持久化
|
||||
gtimer.SetTimeout(ctx, time.Minute, func(ctx context.Context) {
|
||||
service.SystemCron().AddCron(v1.CronType_DAILY, func() error {
|
||||
service.GameAct().Saves()
|
||||
return nil
|
||||
})
|
||||
})
|
||||
|
||||
var err = boot.Boot()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user