package svc import ( "errors" "github.com/globalsign/mgo" "github.com/globalsign/mgo/bson" "mongo.games.com/game/dbproxy/mongo" "mongo.games.com/game/model" "mongo.games.com/goserver/core/logger" "net/rpc" ) var ( AnnouncerLogDBErr = errors.New("log_announcerlog db open failed.") ) func AnnouncerLogCollection(plt string) *mongo.Collection { s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, model.AnnouncerLogDBName) if s != nil { c, first := s.DB().C(model.AnnouncerLogCollName) if first { } return c } return nil } func InsertAnnouncerLog(logs ...*model.AnnouncerLog) (err error) { clog := AnnouncerLogCollection(logs[0].Platform) if clog == nil { return } switch len(logs) { case 0: return errors.New("no data") case 1: err = clog.Insert(logs[0]) default: docs := make([]interface{}, 0, len(logs)) for _, log := range logs { docs = append(docs, log) } err = clog.Insert(docs...) } if err != nil { logger.Logger.Warn("InsertAnnouncerLog error:", err) return } return } // 取最新100条数据 func FetchAnnouncerLog(plt string) (recs []model.AnnouncerLog, err error) { query := bson.M{} err = AnnouncerLogCollection(plt).Find(query).Sort("-_id").Limit(100).All(&recs) return } type AnnouncerLogSvc struct { } func (svc *AnnouncerLogSvc) InsertAnnouncerLog(args []*model.AnnouncerLog, ret *bool) (err error) { err = InsertAnnouncerLog(args...) if err == nil { *ret = true } return } func (svc *AnnouncerLogSvc) FetchAnnouncerLog(args *model.FetchAnnouncerLogArgs, ret *[]model.AnnouncerLog) (err error) { *ret, err = FetchAnnouncerLog(args.Plt) if err != nil && !errors.Is(err, mgo.ErrNotFound) { return err } return nil } func (svc *AwardLogSvc) UpsertAnnouncerLog(args *model.FetchAnnouncerLogArgs, ret *model.AnnouncerLog) error { cc := AnnouncerLogCollection(args.Plt) if cc == nil { return nil } _, err := cc.Upsert(bson.M{"platform": args.Plt}, args.Data) if err != nil && err != mgo.ErrNotFound { logger.Logger.Error("UpsertAnnouncerLog is err: ", err) return err } ret = args.Data return nil } func init() { rpc.Register(new(AnnouncerLogSvc)) }