版本更新
This commit is contained in:
parent
727acef7d6
commit
b501d07c1c
@ -42,20 +42,32 @@ func AdminAdd(c *gin.Context) {
|
||||
|
||||
func AdminLogList(c *gin.Context) {
|
||||
// 处理管理员日志列表请求
|
||||
type param struct {
|
||||
Page int `json:"page"`
|
||||
PaseSize int `json:"pageSize"`
|
||||
UserName string `json:"username"`
|
||||
Opration string `json:"operation"`
|
||||
}
|
||||
var p param
|
||||
if err := c.ShouldBindJSON(&p); err != nil {
|
||||
failed(c, "Invalid input: "+err.Error())
|
||||
return
|
||||
}
|
||||
List := []*model.AdminLog{}
|
||||
db := util.MPool.GetGameDB()
|
||||
if db == nil {
|
||||
failed(c, "Failed to get database connection")
|
||||
return
|
||||
}
|
||||
err := db.Select(&List, "SELECT * FROM admin_log ORDER BY createTime DESC")
|
||||
err := db.Select(&List, "SELECT * FROM admin_log ORDER BY createTime DESC LIMIT ? OFFSET ?", p.PaseSize, (p.Page-1)*p.PaseSize)
|
||||
if err != nil {
|
||||
failed(c, "Failed to retrieve admin logs: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
var total int
|
||||
db.Get(&total, "SELECT COUNT(*) FROM admin_log")
|
||||
success(c, &model.Result{
|
||||
Data: List,
|
||||
Result: 0,
|
||||
Data: List,
|
||||
Total: total,
|
||||
})
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ func failed(c *gin.Context, message string) {
|
||||
func USSendInfo() {
|
||||
c := cron.New()
|
||||
// 每天12:10触发
|
||||
_, err := c.AddFunc("15 12 * * *", func() {
|
||||
_, err := c.AddFunc("15 13 * * *", func() {
|
||||
feishu.SendOperationMsg2(common.US_APP_ID)
|
||||
// 这里添加你的业务逻辑
|
||||
})
|
||||
|
||||
BIN
data/data.db
Normal file
BIN
data/data.db
Normal file
Binary file not shown.
@ -42,7 +42,7 @@ func Server() {
|
||||
// 创建Client
|
||||
cli := larkws.NewClient(data.APP_ID, data.APP_SECRET,
|
||||
larkws.WithEventHandler(eventHandler),
|
||||
larkws.WithLogLevel(larkcore.LogLevelDebug),
|
||||
larkws.WithLogLevel(larkcore.LogLevelInfo),
|
||||
)
|
||||
fmt.Printf("Start Feishu server success\n")
|
||||
// 启动客户端
|
||||
|
||||
1
go.mod
1
go.mod
@ -68,6 +68,7 @@ require (
|
||||
github.com/xuri/efp v0.0.1 // indirect
|
||||
github.com/xuri/excelize/v2 v2.10.0 // indirect
|
||||
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
|
||||
go.etcd.io/bbolt v1.4.3 // indirect
|
||||
golang.org/x/arch v0.8.0 // indirect
|
||||
golang.org/x/sys v0.37.0 // indirect
|
||||
golang.org/x/text v0.30.0 // indirect
|
||||
|
||||
2
go.sum
2
go.sum
@ -227,6 +227,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
||||
github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo=
|
||||
go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E=
|
||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
|
||||
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
||||
|
||||
104
log/app.log
104
log/app.log
@ -1,104 +0,0 @@
|
||||
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
|
||||
|
||||
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
|
||||
- using env: export GIN_MODE=release
|
||||
- using code: gin.SetMode(gin.ReleaseMode)
|
||||
|
||||
[GIN-debug] POST /api/auth/login --> backend/controller.Login (3 handlers)
|
||||
[GIN-debug] GET /api/auth/Codes --> backend/controller.Codes (3 handlers)
|
||||
[GIN-debug] POST /api/auth/phoneCode --> backend/controller.PhoneCode (3 handlers)
|
||||
[GIN-debug] POST /api/auth/phoneLogin --> backend/controller.LoginCode (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/sendInfo --> backend/controller.FeishuSendInfo (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/sendInfo2 --> backend/controller.FeishuSendInfo2 (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/sendWeekInfo --> backend/controller.FeishuSendWeekInfo (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/updateApp --> backend/controller.FeishuUpdateApp (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/serverInfo --> backend/controller.FeishuServerInfo (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/notify --> backend/controller.FeishuNotify (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/notify/client --> backend/controller.FeishuNotifyClient (3 handlers)
|
||||
[GIN-debug] POST /api/feishu/notify/order --> backend/controller.FeishuNotifyOrder (3 handlers)
|
||||
[GIN-debug] POST /api/admin/list --> backend/controller.AdminList (4 handlers)
|
||||
[GIN-debug] POST /api/admin/add --> backend/controller.AdminAdd (4 handlers)
|
||||
[GIN-debug] POST /api/admin/log/list --> backend/controller.AdminLogList (4 handlers)
|
||||
[GIN-debug] POST /api/log/user --> backend/controller.UserDetail (4 handlers)
|
||||
[GIN-debug] POST /api/log/asset --> backend/controller.Asset (4 handlers)
|
||||
[GIN-debug] POST /api/log/event --> backend/controller.Event (4 handlers)
|
||||
[GIN-debug] POST /api/log/order --> backend/controller.Order (4 handlers)
|
||||
[GIN-debug] POST /api/user/list --> backend/controller.UserList (4 handlers)
|
||||
[GIN-debug] GET /api/user/info --> backend/controller.UserInfo (4 handlers)
|
||||
[GIN-debug] POST /api/user/gm --> backend/controller.UserGM (4 handlers)
|
||||
[GIN-debug] POST /api/user/ban --> backend/controller.UserBan (4 handlers)
|
||||
[GIN-debug] POST /api/server/list --> backend/controller.AppList (4 handlers)
|
||||
[GIN-debug] POST /api/server/serverList --> backend/controller.ServerList (4 handlers)
|
||||
[GIN-debug] POST /api/server/addServer --> backend/controller.AddServer (4 handlers)
|
||||
[GIN-debug] POST /api/server/nodeList --> backend/controller.NodeList (4 handlers)
|
||||
[GIN-debug] POST /api/server/addNode --> backend/controller.AddNode (4 handlers)
|
||||
[GIN-debug] POST /api/server/updateApp --> backend/controller.UpdateApp (4 handlers)
|
||||
[GIN-debug] POST /api/server/updateAppFeishu --> backend/controller.UpdateAppFeishu (4 handlers)
|
||||
[GIN-debug] POST /api/server/restart --> backend/controller.RestartServer (4 handlers)
|
||||
[GIN-debug] POST /api/server/reload --> backend/controller.ReloadServer (4 handlers)
|
||||
[GIN-debug] POST /api/statistics/level --> backend/controller.StatisticsLevel (4 handlers)
|
||||
[GIN-debug] POST /api/statistics/order --> backend/controller.StatisticsOrder (4 handlers)
|
||||
[GIN-debug] POST /api/statistics/info --> backend/controller.StatisticsInfo (4 handlers)
|
||||
[GIN-debug] POST /api/statistics/heat --> backend/controller.StatisticsHeat (4 handlers)
|
||||
[GIN-debug] POST /api/mail/send --> backend/controller.SendMail (4 handlers)
|
||||
[GIN-debug] POST /api/mail/list --> backend/controller.MailList (4 handlers)
|
||||
[GIN-debug] POST /api/mail/delete --> backend/controller.MailDelete (4 handlers)
|
||||
[GIN-debug] POST /api/language/list --> backend/controller.Language (4 handlers)
|
||||
[GIN-debug] POST /api/language/export --> backend/controller.LanguageExport (4 handlers)
|
||||
[GIN-debug] POST /api/language/save --> backend/controller.LanguageSave (4 handlers)
|
||||
[GIN-debug] POST /api/language/add --> backend/controller.LanguageAdd (4 handlers)
|
||||
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
|
||||
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
|
||||
[GIN-debug] Listening and serving HTTP on :5320
|
||||
[GIN] 2025/11/10 - 17:24:59 | 401 | 0s | ::1 | GET "/api/user/info"
|
||||
[GIN] 2025/11/10 - 17:24:59 | 404 | 0s | ::1 | POST "/api/auth/logout"
|
||||
[GIN] 2025/11/10 - 17:25:11 | 200 | 151.2899ms | ::1 | POST "/api/auth/login"
|
||||
[GIN] 2025/11/10 - 17:25:11 | 200 | 0s | ::1 | GET "/api/user/info"
|
||||
[GIN] 2025/11/10 - 17:25:11 | 200 | 0s | ::1 | GET "/api/auth/Codes"
|
||||
[GIN] 2025/11/10 - 17:25:12 | 200 | 445.1576ms | ::1 | POST "/api/statistics/info"
|
||||
[GIN] 2025/11/10 - 17:25:25 | 200 | 13.3738348s | ::1 | POST "/api/statistics/heat"
|
||||
[GIN] 2025/11/10 - 17:25:29 | 200 | 196.0188ms | ::1 | POST "/api/language/list"
|
||||
[GIN] 2025/11/10 - 17:58:13 | 200 | 114.2944ms | ::1 | POST "/api/server/list"
|
||||
[GIN] 2025/11/10 - 17:58:13 | 200 | 72.9498ms | ::1 | POST "/api/server/serverList"
|
||||
[GIN] 2025/11/10 - 17:58:34 | 400 | 21.008933s | ::1 | POST "/api/user/list"
|
||||
[GIN] 2025/11/10 - 17:58:46 | 200 | 19.7306399s | ::1 | POST "/api/user/list"
|
||||
[GIN] 2025/11/10 - 17:58:56 | 200 | 344.7428ms | ::1 | POST "/api/language/list"
|
||||
[GIN] 2025/11/10 - 17:58:58 | 200 | 54.8909ms | ::1 | POST "/api/server/list"
|
||||
[GIN] 2025/11/10 - 17:58:58 | 200 | 79.213ms | ::1 | POST "/api/server/serverList"
|
||||
[GIN] 2025/11/10 - 17:58:58 | 200 | 213.1083ms | ::1 | POST "/api/user/list"
|
||||
[GIN] 2025/11/10 - 17:58:58 | 200 | 205.0455ms | ::1 | POST "/api/user/list"
|
||||
2025/11/11 08:04:59 start statistics
|
||||
2025/11/11 08:05:00 remain 2025-11-11 success
|
||||
2025/11/11 08:05:01 remain 2025-11-10 success
|
||||
2025/11/11 08:05:02 remain 2025-11-09 success
|
||||
2025/11/11 08:05:03 remain 2025-11-08 success
|
||||
2025/11/11 08:05:04 remain 2025-11-07 success
|
||||
2025/11/11 08:05:05 remain 2025-11-06 success
|
||||
2025/11/11 08:05:05 remain 2025-11-05 success
|
||||
2025/11/11 08:05:06 remain 2025-11-04 success
|
||||
2025/11/11 08:05:07 remain 2025-11-03 success
|
||||
2025/11/11 08:05:08 remain 2025-11-02 success
|
||||
2025/11/11 08:05:09 remain 2025-11-01 success
|
||||
2025/11/11 08:05:10 remain 2025-10-31 success
|
||||
2025/11/11 08:05:10 remain 2025-10-30 success
|
||||
2025/11/11 08:05:11 remain 2025-10-29 success
|
||||
2025/11/11 08:05:12 remain 2025-10-28 success
|
||||
2025/11/11 08:05:13 remain 2025-10-27 success
|
||||
2025/11/11 08:05:14 remain 2025-10-26 success
|
||||
2025/11/11 08:05:15 remain 2025-10-25 success
|
||||
2025/11/11 08:05:15 remain 2025-10-24 success
|
||||
2025/11/11 08:05:16 remain 2025-10-23 success
|
||||
2025/11/11 08:05:17 remain 2025-10-22 success
|
||||
2025/11/11 08:05:18 remain 2025-10-21 success
|
||||
2025/11/11 08:05:19 remain 2025-10-20 success
|
||||
2025/11/11 08:05:20 remain 2025-10-19 success
|
||||
2025/11/11 08:05:21 remain 2025-10-18 success
|
||||
2025/11/11 08:05:21 remain 2025-10-17 success
|
||||
2025/11/11 08:05:22 remain 2025-10-16 success
|
||||
2025/11/11 08:05:23 remain 2025-10-15 success
|
||||
2025/11/11 08:05:24 remain 2025-10-14 success
|
||||
2025/11/11 08:05:24 remain 2025-10-13 success
|
||||
2025/11/11 08:05:25 remain 2025-10-12 success
|
||||
2025/11/11 08:05:25 end statistics
|
||||
[GIN] 2025/11/11 - 09:46:47 | 200 | 667.9479ms | ::1 | POST "/api/user/list"
|
||||
[GIN] 2025/11/11 - 09:46:50 | 200 | 504.1466ms | ::1 | POST "/api/log/user"
|
||||
2
main.go
2
main.go
@ -29,7 +29,7 @@ func init() {
|
||||
// 让 gin 的日志也写入文件,并同时输出到控制台
|
||||
gin.DefaultWriter = io.MultiWriter(file, os.Stdout)
|
||||
gin.DefaultErrorWriter = io.MultiWriter(file, os.Stderr)
|
||||
|
||||
util.InitBBolt()
|
||||
common.Init()
|
||||
}
|
||||
|
||||
|
||||
@ -19,6 +19,7 @@ type Admin struct {
|
||||
Role int `json:"role" db:"role"`
|
||||
CreateTime int `json:"createTime" db:"createTime"`
|
||||
UpdateTime int `json:"updateTime" db:"updateTime"`
|
||||
Remark string `json:"remark" db:"remark"`
|
||||
}
|
||||
|
||||
type AdminLog struct {
|
||||
@ -42,9 +43,11 @@ func (a *Admin) List() (*Result, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to scan rows: %v", err)
|
||||
}
|
||||
var total int
|
||||
db.Get(&total, "SELECT COUNT(*) FROM admin")
|
||||
return &Result{
|
||||
Data: admins,
|
||||
Result: 0,
|
||||
Data: admins,
|
||||
Total: total,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -59,13 +62,15 @@ func (a *Admin) Add() (*Result, error) {
|
||||
a.CreateTime = int(util.Now())
|
||||
a.UpdateTime = a.CreateTime
|
||||
a.Password, _ = util.Encrypt(a.Password) // 假设有一个加密函数
|
||||
_, err := db.NamedExec("INSERT INTO admin (`username`, `password`, `phone`, `email`, `token`, `group`, `status`, `role`, `createTime`, `updateTime`, `expires`) VALUES (:username, :password, :phone, :email, :token, :group, :status, :role, :createTime, :updateTime, :expires)", a)
|
||||
_, err := db.NamedExec("INSERT INTO admin (`username`, `password`, `phone`, `email`, `token`, `group`, `status`, `role`, `createTime`, `updateTime`, `expires`, `remark`) VALUES (:username, :password, :phone, :email, :token, :group, :status, :role, :createTime, :updateTime, :expires, :remark)", a)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to add admin: %v", err)
|
||||
}
|
||||
var total int
|
||||
db.Get(&total, "SELECT COUNT(*) FROM admin")
|
||||
return &Result{
|
||||
Data: a,
|
||||
Result: 0,
|
||||
Data: a,
|
||||
Total: total,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@ -86,7 +86,14 @@ func (l *LanguageMod) LanguageListAll() (map[string]interface{}, error) {
|
||||
// 导出为 xlsx 文件
|
||||
f := excelize.NewFile()
|
||||
sheet := "Sheet1"
|
||||
|
||||
SaveTime, _ := util.GetLanguageLastUpdate()
|
||||
ExportTime, _ := util.GetLanguageExportLastUpdate()
|
||||
if SaveTime <= ExportTime {
|
||||
return map[string]interface{}{
|
||||
"code": 1,
|
||||
"msg": "No changes since last export",
|
||||
}, nil
|
||||
}
|
||||
// 写表头
|
||||
headers := []string{"Id", "key", "English", "ChineseSimplified", "Portuguese"}
|
||||
|
||||
@ -135,7 +142,22 @@ func (l *LanguageMod) LanguageListAll() (map[string]interface{}, error) {
|
||||
|
||||
// 在 /data/docs 仓库中添加并提交该文件
|
||||
repoDir := "/data/docs"
|
||||
cmd := exec.Command("git", "pull")
|
||||
cmd := exec.Command("git", "checkout", "main")
|
||||
cmd.Dir = repoDir
|
||||
if _, err := cmd.CombinedOutput(); err != nil {
|
||||
// try to fetch and force-create/reset local main from origin/main
|
||||
fetch := exec.Command("git", "fetch", "origin", "main")
|
||||
fetch.Dir = repoDir
|
||||
if fout, ferr := fetch.CombinedOutput(); ferr != nil {
|
||||
return nil, fmt.Errorf("git fetch failed: %v: %s", ferr, string(fout))
|
||||
}
|
||||
cmd = exec.Command("git", "checkout", "-B", "main", "origin/main")
|
||||
cmd.Dir = repoDir
|
||||
if out2, err2 := cmd.CombinedOutput(); err2 != nil {
|
||||
return nil, fmt.Errorf("git checkout main failed: %v: %s", err2, string(out2))
|
||||
}
|
||||
}
|
||||
cmd = exec.Command("git", "pull")
|
||||
cmd.Dir = repoDir
|
||||
if out, err := cmd.CombinedOutput(); err != nil {
|
||||
return nil, fmt.Errorf("git pull failed: %v: %s", err, string(out))
|
||||
@ -165,9 +187,10 @@ func (l *LanguageMod) LanguageListAll() (map[string]interface{}, error) {
|
||||
if out, err := cmd.CombinedOutput(); err != nil {
|
||||
return nil, fmt.Errorf("git push failed: %v: %s", err, string(out))
|
||||
}
|
||||
util.SaveLanguageExportLastUpdate(util.Now())
|
||||
// 将文件路径返回到调用方
|
||||
return map[string]interface{}{
|
||||
"data": languages,
|
||||
// "data": languages,
|
||||
"total": total,
|
||||
}, nil
|
||||
}
|
||||
@ -189,6 +212,7 @@ func (l *LanguageMod) LanguageSave(langList []LanguageOp, admin string) error {
|
||||
if _, err := Db.Exec("DELETE FROM language WHERE `key` LIKE ?", "%obsolete%"); err != nil {
|
||||
return err
|
||||
}
|
||||
util.SaveLanguageLastUpdate(util.Now())
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@ -31,8 +31,9 @@ type Mail struct {
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
Data interface{} `json:"data"`
|
||||
Result int `json:"result"`
|
||||
Data interface{} `json:"data"`
|
||||
Total int `json:"total"`
|
||||
OperationList []string `json:"operationList,omitempty"`
|
||||
}
|
||||
|
||||
func (m *Mail) MailList() (*Result, error) {
|
||||
@ -48,13 +49,15 @@ func (m *Mail) MailList() (*Result, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to scan rows: %v", err)
|
||||
}
|
||||
var total int
|
||||
Db.Get(&total, "SELECT COUNT(*) FROM system_mail_info")
|
||||
for _, v := range mail {
|
||||
v.AppId = m.AppId
|
||||
v.ServerId = m.ServerId
|
||||
}
|
||||
return &Result{
|
||||
Data: mail,
|
||||
Result: 0,
|
||||
Data: mail,
|
||||
Total: total,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
BIN
release/backend
BIN
release/backend
Binary file not shown.
Binary file not shown.
@ -1,2 +1,2 @@
|
||||
cd /data/admin_backend
|
||||
GOOS=linux GOARCH=amd64 go build -o /data/admin_backend/release/shipping_service/shipping sdk/charge/main.go
|
||||
GOOS=linux GOARCH=amd64 go build -o /data/admin_backend/release/shipping_service/shipping sdk/ship/main.go
|
||||
|
||||
Binary file not shown.
@ -1,5 +0,0 @@
|
||||
App:
|
||||
name: "Admin Backend"
|
||||
version: "1.0.0"
|
||||
debug: true
|
||||
port: 5250
|
||||
@ -1,5 +1,5 @@
|
||||
App:
|
||||
name: "Admin Backend"
|
||||
version: "1.0.0"
|
||||
debug: true
|
||||
port: 5240
|
||||
name: "Admin Backend"
|
||||
version: "1.0.0"
|
||||
debug: true
|
||||
port: 5240
|
||||
|
||||
|
||||
@ -1,15 +1,34 @@
|
||||
package tuyou
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
import (
|
||||
"backend/sdk/login/model/base"
|
||||
"backend/util"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type TuyouModel struct {
|
||||
}
|
||||
|
||||
func Login(c *gin.Context) {
|
||||
type TuyouParam struct {
|
||||
Uid string `json:"uid" binding:"required"`
|
||||
}
|
||||
var p base.Param
|
||||
// read parameters from query string for GET requests
|
||||
p.Uid = c.Query("uid")
|
||||
p.Token = c.Query("token")
|
||||
p.AppId = util.Int(c.Query("appId"))
|
||||
p.AreaCode = util.Int(c.Query("areaCode"))
|
||||
|
||||
var p TuyouParam
|
||||
if err := c.BindJSON(&p); err != nil {
|
||||
c.JSON(400, gin.H{"error": err.Error()})
|
||||
if p.Uid == "" || p.Token == "" {
|
||||
c.JSON(400, gin.H{"error": "missing uid or token"})
|
||||
return
|
||||
}
|
||||
if err := (&TuyouModel{}).VerifyToken(p.Uid, p.Token); err != nil {
|
||||
c.JSON(401, gin.H{"error": "invalid token"})
|
||||
return
|
||||
}
|
||||
util.LoginResponse(c, p.AppId, p.AreaCode)
|
||||
}
|
||||
|
||||
func (t *TuyouModel) VerifyToken(Uid string, Token string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package chargecommon
|
||||
package shipcommon
|
||||
|
||||
import (
|
||||
"os"
|
||||
4
sdk/ship/conf/app.yml
Normal file
4
sdk/ship/conf/app.yml
Normal file
@ -0,0 +1,4 @@
|
||||
name: "Admin Backend"
|
||||
version: "1.0.0"
|
||||
debug: true
|
||||
port: 5250
|
||||
@ -43,11 +43,11 @@ mysqls:
|
||||
password: 'pUf9tft9GOPjV1z855Jf2DpB5NUpGEc_'
|
||||
database: 'merge_pet_%d'
|
||||
idleTimeout: Infinity
|
||||
- host: 'rm-f8zd2030feam53n43io.mysql.rds.aliyuncs.com'
|
||||
- host: '127.0.0.1'
|
||||
name: 'log'
|
||||
port: 3306
|
||||
user: 'root'
|
||||
password: 'GWFj1cHaqjpzvcsHBWTFtLWtm8MUZKROx_wvbV6jPg=='
|
||||
password: 'ggOb-PzivEoB6BqQaN3_yFYlVBqYBkE_CS8FtITy_Q=='
|
||||
database: 'game'
|
||||
idleTimeout: Infinity
|
||||
|
||||
@ -2,8 +2,10 @@ package main
|
||||
|
||||
import (
|
||||
"backend/common"
|
||||
"backend/sdk/charge/model/test"
|
||||
"backend/sdk/charge/model/tuyou"
|
||||
shipcommon "backend/sdk/ship/common"
|
||||
"backend/sdk/ship/model/test"
|
||||
"backend/sdk/ship/model/tuyou"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
@ -35,5 +37,5 @@ func main() {
|
||||
ChargeApi.POST("test/charge", test.Charge)
|
||||
ChargeApi.POST("tuyou/charge", tuyou.Charge)
|
||||
}
|
||||
r.Run(":5420")
|
||||
r.Run(fmt.Sprintf(":%d", shipcommon.AppConf.Port))
|
||||
}
|
||||
@ -2,7 +2,7 @@ package test
|
||||
|
||||
import (
|
||||
"backend/msg"
|
||||
"backend/sdk/charge/model/base"
|
||||
"backend/sdk/ship/model/base"
|
||||
"backend/util"
|
||||
"crypto/md5"
|
||||
"encoding/json"
|
||||
@ -2,7 +2,7 @@ package tuyou
|
||||
|
||||
import (
|
||||
"backend/msg"
|
||||
"backend/sdk/charge/model/base"
|
||||
"backend/sdk/ship/model/base"
|
||||
"backend/util"
|
||||
"crypto/md5"
|
||||
"encoding/json"
|
||||
@ -45,12 +45,12 @@ func TestFeishu2(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLogin(t *testing.T) {
|
||||
ServerId, Host := util.GetUserInfo(1, 156, "test", "test")
|
||||
fmt.Printf("ServerId:%d, Host:%s\n", ServerId, Host)
|
||||
Port, Host, ServerId := util.GetUserInfo(1, 156, "test", "test")
|
||||
fmt.Printf("ServerId:%d, Host:%s, Port:%d\n", ServerId, Host, Port)
|
||||
}
|
||||
|
||||
func TestEncrypt(t *testing.T) {
|
||||
str := "Z4rf7eZZe500dxa"
|
||||
str := "usSdkMysql*1133"
|
||||
enc, _ := util.Encrypt(str)
|
||||
fmt.Println(enc)
|
||||
}
|
||||
|
||||
78
util/bbolt.go
Normal file
78
util/bbolt.go
Normal file
@ -0,0 +1,78 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"go.etcd.io/bbolt"
|
||||
)
|
||||
|
||||
var bucket *bbolt.DB
|
||||
|
||||
func InitBBolt() error {
|
||||
// 初始化bbolt数据库的逻辑
|
||||
// ensure directory exists before opening DB
|
||||
dbPath := "data/data.db"
|
||||
if err := os.MkdirAll(filepath.Dir(dbPath), 0o755); err != nil {
|
||||
return err
|
||||
}
|
||||
db, err := bbolt.Open(dbPath, 0600, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// keep the DB open for the package lifecycle
|
||||
bucket = db
|
||||
|
||||
// ensure the "kv" bucket exists
|
||||
err = bucket.Update(func(tx *bbolt.Tx) error {
|
||||
_, err := tx.CreateBucketIfNotExists([]byte("kv"))
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
// cleanup on failure to initialize buckets
|
||||
_ = bucket.Close()
|
||||
bucket = nil
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func saveBBolt(key string, value interface{}) error {
|
||||
newValue := String(value)
|
||||
err := bucket.Update(func(tx *bbolt.Tx) error {
|
||||
b := tx.Bucket([]byte("kv"))
|
||||
return b.Put([]byte(key), []byte(newValue))
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func getBBolt(key string) (string, error) {
|
||||
var value string
|
||||
err := bucket.View(func(tx *bbolt.Tx) error {
|
||||
b := tx.Bucket([]byte("kv"))
|
||||
v := b.Get([]byte(key))
|
||||
value = string(v)
|
||||
return nil
|
||||
})
|
||||
return value, err
|
||||
}
|
||||
|
||||
func SaveLanguageLastUpdate(timestamp interface{}) error {
|
||||
return saveBBolt("language_last_update", timestamp)
|
||||
}
|
||||
|
||||
func GetLanguageLastUpdate() (int, error) {
|
||||
v, e := getBBolt("language_last_update")
|
||||
return Int(v), e
|
||||
}
|
||||
|
||||
func SaveLanguageExportLastUpdate(timestamp interface{}) error {
|
||||
return saveBBolt("language_export_last_update", timestamp)
|
||||
}
|
||||
|
||||
func GetLanguageExportLastUpdate() (int, error) {
|
||||
v, e := getBBolt("language_export_last_update")
|
||||
return Int(v), e
|
||||
}
|
||||
@ -13,11 +13,11 @@ type ServerConfig struct {
|
||||
func LoginResponse(c *gin.Context, AppId, AreaCode int) {
|
||||
Uid := c.GetString("Uid")
|
||||
Token := c.GetString("Token")
|
||||
Port, Host := GetUserInfo(AppId, AreaCode, Uid, Token)
|
||||
LoginSuccess(c, "login success", Port, Host)
|
||||
Port, Host, ServerId := GetUserInfo(AppId, AreaCode, Uid, Token)
|
||||
LoginSuccess(c, "login success", Port, Host, ServerId)
|
||||
}
|
||||
|
||||
func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string) {
|
||||
func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string, int) {
|
||||
Db := MPool.GetGameDB()
|
||||
defer Db.Close()
|
||||
var ServerId int
|
||||
@ -29,7 +29,7 @@ func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string) {
|
||||
}
|
||||
ServerList := GetServerInfo(AppId, AreaCode)
|
||||
if len(ServerList) == 0 {
|
||||
return 0, ""
|
||||
return 0, "", 0
|
||||
}
|
||||
if ServerId == 0 {
|
||||
ServerId = ServerList[0].ServerId
|
||||
@ -44,11 +44,11 @@ func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string) {
|
||||
}
|
||||
}
|
||||
if ServerId == 0 {
|
||||
return 0, ""
|
||||
return 0, "", 0
|
||||
}
|
||||
_, err := Db.Exec("insert into user (Uid, AppId, ServerId, AuthCode, CreateTime, UpdateTime) values (?, ?, ?, ?, ?, ?)", Uid, AppId, ServerId, Token, Now(), Now())
|
||||
if err != nil {
|
||||
return 0, ""
|
||||
return 0, "", 0
|
||||
}
|
||||
} else {
|
||||
for _, server := range ServerList {
|
||||
@ -60,7 +60,7 @@ func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string) {
|
||||
}
|
||||
Db.Exec("update user set AuthCode = ?, UpdateTime = ? where Uid = ?", Token, Now(), Uid)
|
||||
}
|
||||
return Port, Host
|
||||
return Port, Host, ServerId
|
||||
}
|
||||
|
||||
func GetServerInfo(AppId, AreaCode int) []ServerConfig {
|
||||
|
||||
49
util/util.go
49
util/util.go
@ -110,6 +110,44 @@ func Int(a interface{}) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func String(a interface{}) string {
|
||||
if a == nil {
|
||||
return ""
|
||||
}
|
||||
switch v := a.(type) {
|
||||
case string:
|
||||
return v
|
||||
case int:
|
||||
return strconv.Itoa(v)
|
||||
case int32:
|
||||
return strconv.Itoa(int(v))
|
||||
case int64:
|
||||
return strconv.FormatInt(v, 10)
|
||||
case float64:
|
||||
return strconv.FormatFloat(v, 'f', -1, 64)
|
||||
case []byte:
|
||||
return string(v)
|
||||
default:
|
||||
rv := reflect.ValueOf(a)
|
||||
if !rv.IsValid() {
|
||||
return ""
|
||||
}
|
||||
// unwrap pointer
|
||||
if rv.Kind() == reflect.Ptr && !rv.IsNil() {
|
||||
rv = rv.Elem()
|
||||
}
|
||||
kind := rv.Kind()
|
||||
// if it's a struct/map/slice/array convert to JSON
|
||||
if kind == reflect.Struct || kind == reflect.Map || kind == reflect.Slice || kind == reflect.Array {
|
||||
b, err := json.Marshal(a)
|
||||
if err == nil {
|
||||
return string(b)
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
func InArray(Id int, s []int) bool {
|
||||
for _, v := range s {
|
||||
if v == Id {
|
||||
@ -423,11 +461,12 @@ func Success(c *gin.Context, message string) {
|
||||
})
|
||||
}
|
||||
|
||||
func LoginSuccess(c *gin.Context, message string, Port int, Host string) {
|
||||
func LoginSuccess(c *gin.Context, message string, Port int, Host string, ServerId int) {
|
||||
c.JSON(200, gin.H{
|
||||
"code": 0,
|
||||
"message": message,
|
||||
"Port": Port,
|
||||
"Host": Host,
|
||||
"code": 0,
|
||||
"message": message,
|
||||
"Port": Port,
|
||||
"Host": Host,
|
||||
"ServerId": ServerId,
|
||||
})
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user