62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
package syn
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
"mongo.games.com/goserver/core/mongox"
|
|
|
|
mongomodel "mongo.games.com/game/statistics/modelmongo"
|
|
mysqlmodel "mongo.games.com/game/statistics/modelmysql"
|
|
)
|
|
|
|
func ItemGainDone(data *Data[mongomodel.ItemLog]) error {
|
|
data.MidType = mysqlmodel.MidTypeItem
|
|
data.Database = string(mongox.DatabaseLog)
|
|
data.CollectionName = mongomodel.LogItem
|
|
data.F = func(data *mongomodel.ItemLog, db *gorm.DB) (string, error) {
|
|
if data == nil || data.LogId.Hex() == "" {
|
|
return "", errors.New("null")
|
|
}
|
|
if data.LogType != 0 || data.Id != "" {
|
|
return data.LogId.Hex(), nil
|
|
}
|
|
|
|
hourTime := time.Unix(data.CreateTs, 0).Local()
|
|
hourTs := time.Date(hourTime.Year(), hourTime.Month(), hourTime.Day(), hourTime.Hour(), 0, 0, 0, time.Local).Unix()
|
|
|
|
item := &mysqlmodel.ItemGain{}
|
|
err := db.Model(item).Where("hour = ? and item_id = ?", hourTs, data.ItemId).First(item).Error
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return "", err
|
|
}
|
|
item.Hour = hourTs
|
|
item.ItemId = data.ItemId
|
|
item.ItemNum += data.Count
|
|
if item.ID == 0 {
|
|
err = db.Create(item).Error
|
|
} else {
|
|
err = db.Model(item).Updates(item).Error
|
|
}
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
itemTotal := &mysqlmodel.ItemTotalGain{}
|
|
err = db.Model(itemTotal).Where("item_id = ?", data.ItemId).First(itemTotal).Error
|
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return "", err
|
|
}
|
|
itemTotal.ItemId = data.ItemId
|
|
itemTotal.ItemNum += data.Count
|
|
if itemTotal.ID == 0 {
|
|
err = db.Create(itemTotal).Error
|
|
} else {
|
|
err = db.Model(itemTotal).Updates(itemTotal).Error
|
|
}
|
|
return data.LogId.Hex(), err
|
|
}
|
|
return data.CommonDone()
|
|
}
|