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() }