admin_backend/model/log.go
2025-02-19 15:27:40 +08:00

180 lines
5.1 KiB
Go

package model
import (
util "backend/util"
"encoding/json"
"fmt"
)
type Log struct {
Uid int `json:"Id"`
PageSize int `json:"PageSize"`
CurrentPage int `json:"CurrentPage"`
AppId int `json:"AppId"`
EventParam string `json:"Event"`
}
type ResAsset struct {
Total int `json:"total"`
Data []*ResAssetDetail `json:"data"`
}
type ResEvent struct {
Total int `json:"total"`
Data []*Event `json:"data"`
}
type ResOrder struct {
Total int `json:"total"`
Data []*Order `json:"data"`
}
type Order struct {
Id int `db:"id"`
Uid int `db:"Uid"`
AppId int `db:"AppId"`
ServerId int `db:"ServerId"`
OrderId string `db:"OrderId"`
Price float64 `db:"Price"`
PayChannelOrderId string `db:"PayChannelOrderId"`
ProductId int `db:"ProductId"`
CreateTime int `db:"CreateTime"`
PayTime int `db:"PayTime"`
PayType int `db:"PayType"`
Param string `db:"Param"`
Timestamp int `db:"Timestamp"`
}
type ResAssetDetail struct {
Uid int `json:"Uid"`
ChangeType string `json:"change_type"`
ChangeNum int `json:"change_num"`
ChangeAfter int `json:"change_after"`
ItemId int `json:"item_id"`
Timestamp int `json:"timestamp"`
}
type Event struct {
Id int `db:"id"`
Uid int `db:"Uid"`
AppId int `db:"AppId"`
ServerId int `db:"ServerId"`
Event string `db:"Event"`
Label string
Param string `db:"Param"`
Timestamp int `db:"Timestamp"`
}
func (m *Log) Asset() (*ResAsset, error) {
AppId, _ := util.ParseUid(m.Uid)
AppConfig, err := util.GetAppConfig(AppId)
if err != nil {
return nil, err
}
Db := util.MPool.GetTopicDB(AppConfig.Topic)
defer Db.Close()
if Db == nil {
return nil, fmt.Errorf("failed to get mysql database")
}
assets := []*Event{}
err = Db.Select(&assets, "SELECT * FROM log_event WHERE Uid = ? and `Event` = 'asset_change' ORDER BY Timestamp DESC LIMIT ?, ?", m.Uid, (m.CurrentPage-1)*m.PageSize, m.PageSize)
if err != nil {
return nil, fmt.Errorf("failed to get asset list: %v", err)
}
var total int
err = Db.QueryRow("SELECT COUNT(*) FROM log_event WHERE Uid = ? and `Event` = 'asset_change'", m.Uid).Scan(&total)
if err != nil {
return nil, fmt.Errorf("failed to get asset count: %v", err)
}
resData := []*ResAssetDetail{}
for _, asset := range assets {
param := map[string]interface{}{}
err := json.Unmarshal([]byte(asset.Param), &param)
if err != nil {
continue
}
resData = append(resData, &ResAssetDetail{
Uid: asset.Uid,
ChangeType: param["change_type"].(string),
ChangeNum: util.Int(param["change_num"]),
ChangeAfter: util.Int(param["change_after"]),
ItemId: util.Int(param["item_id"]),
Timestamp: asset.Timestamp,
})
}
return &ResAsset{
Total: total,
Data: resData,
}, nil
}
func (m *Log) Event() (*ResEvent, error) {
AppId, _ := util.ParseUid(m.Uid)
AppConfig, err := util.GetAppConfig(AppId)
if err != nil {
return nil, err
}
Db := util.MPool.GetTopicDB(AppConfig.Topic)
defer Db.Close()
if Db == nil {
return nil, fmt.Errorf("failed to get mysql database")
}
assets := []*Event{}
if m.EventParam != "" {
err = Db.Select(&assets, "SELECT * FROM log_event WHERE Uid = ? and `Event` = ? ORDER BY Timestamp DESC LIMIT ?, ?", m.Uid, m.EventParam, (m.CurrentPage-1)*m.PageSize, m.PageSize)
} else {
err = Db.Select(&assets, "SELECT * FROM log_event WHERE Uid = ? and `Event` != 'asset_change' ORDER BY Timestamp DESC LIMIT ?, ?", m.Uid, (m.CurrentPage-1)*m.PageSize, m.PageSize)
}
if err != nil {
return nil, fmt.Errorf("failed to get event list: %v", err)
}
var total int
err = Db.QueryRow("SELECT COUNT(*) FROM log_event WHERE Uid = ? and `Event` != 'asset_change'", m.Uid).Scan(&total)
if err != nil {
return nil, fmt.Errorf("failed to get event count: %v", err)
}
for _, asset := range assets {
asset.Label = asset.Event
}
return &ResEvent{
Total: total,
Data: assets,
}, nil
}
func (m *Log) Order() (*ResOrder, error) {
AppConfig, err := util.GetAppConfig(m.AppId)
if err != nil {
return nil, err
}
Db := util.MPool.GetTopicDB(AppConfig.Topic)
defer Db.Close()
if Db == nil {
return nil, fmt.Errorf("failed to get mysql database")
}
assets := []*Order{}
if m.Uid == 0 {
err = Db.Select(&assets, "SELECT * FROM log_order ORDER BY Timestamp DESC LIMIT ?, ?", (m.CurrentPage-1)*m.PageSize, m.PageSize)
} else {
err = Db.Select(&assets, "SELECT * FROM log_order WHERE Uid = ? ORDER BY Timestamp DESC LIMIT ?, ?", m.Uid, (m.CurrentPage-1)*m.PageSize, m.PageSize)
}
if err != nil {
return nil, fmt.Errorf("failed to get asset list: %v", err)
}
var total int
if m.Uid == 0 {
err = Db.QueryRow("SELECT COUNT(*) FROM log_order").Scan(&total)
} else {
err = Db.QueryRow("SELECT COUNT(*) FROM log_order WHERE Uid = ? ", m.Uid).Scan(&total)
}
if err != nil {
return nil, fmt.Errorf("failed to get asset count: %v", err)
}
return &ResOrder{
Total: total,
Data: assets,
}, nil
}