Files
EdgeAPI/internal/db/models/server_bill_dao.go
GoEdgeLab 5a17ae9d79 v1.4.1
2024-07-27 14:15:25 +08:00

110 lines
2.8 KiB
Go

package models
import (
"math"
"time"
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
"github.com/iwind/TeaGo/maps"
)
type ServerBillDAO dbs.DAO
func NewServerBillDAO() *ServerBillDAO {
return dbs.NewDAO(&ServerBillDAO{
DAOObject: dbs.DAOObject{
DB: Tea.Env,
Table: "edgeServerBills",
Model: new(ServerBill),
PkName: "id",
},
}).(*ServerBillDAO)
}
var SharedServerBillDAO *ServerBillDAO
func init() {
dbs.OnReady(func() {
SharedServerBillDAO = NewServerBillDAO()
})
}
// CreateOrUpdateServerBill 创建账单
func (this *ServerBillDAO) CreateOrUpdateServerBill(tx *dbs.Tx,
userId int64,
serverId int64,
month string,
userPlanId int64,
planId int64,
totalTrafficBytes int64,
bandwidthPercentileBytes int64,
bandwidthPercentile int,
priceType string,
fee float64) error {
fee = math.Floor(fee*100) / 100
return this.Query(tx).
InsertOrUpdateQuickly(maps.Map{
"userId": userId,
"serverId": serverId,
"month": month,
"priceType": priceType,
"amount": fee,
"userPlanId": userPlanId,
"planId": planId,
"totalTrafficBytes": totalTrafficBytes,
"bandwidthPercentileBytes": bandwidthPercentileBytes,
"bandwidthPercentile": bandwidthPercentile,
"createdAt": time.Now().Unix(),
}, maps.Map{
"userId": userId,
"priceType": priceType,
"amount": fee,
"userPlanId": userPlanId,
"planId": planId,
"totalTrafficBytes": totalTrafficBytes,
"bandwidthPercentileBytes": bandwidthPercentileBytes,
"bandwidthPercentile": bandwidthPercentile,
"createdAt": time.Now().Unix(),
})
}
// SumUserMonthlyAmount 计算总费用
func (this *ServerBillDAO) SumUserMonthlyAmount(tx *dbs.Tx, userId int64, month string) (float64, error) {
return this.Query(tx).
Attr("userId", userId).
Attr("month", month).
Sum("amount", 0)
}
// CountServerBills 计算总账单数量
func (this *ServerBillDAO) CountServerBills(tx *dbs.Tx, userId int64, month string) (int64, error) {
var query = this.Query(tx)
if userId > 0 {
query.Attr("userId", userId)
}
if len(month) > 0 {
query.Attr("month", month)
}
return query.Count()
}
// ListServerBills 列出单页账单
func (this *ServerBillDAO) ListServerBills(tx *dbs.Tx, userId int64, month string, offset int64, size int64) (result []*ServerBill, err error) {
var query = this.Query(tx)
if userId > 0 {
query.Attr("userId", userId)
}
if len(month) > 0 {
query.Attr("month", month)
}
_, err = query.
Desc("serverId").
Offset(offset).
Limit(size).
Slice(&result).
FindAll()
return
}