package activity import ( "context" "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/event" "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" "sync" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/x/bsonx" ) type modelHdList struct { modules.MCompModel module *Activity hlock sync.RWMutex activity map[pb.HdType]*pb.DBHuodong } func (this *modelHdList) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.TableName = string(comm.TableHdInfo) err = this.MCompModel.Init(service, module, comp, options) this.module = module.(*Activity) this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "hdid", Value: bsonx.Int32(1)}}, }) this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "itype", Value: bsonx.Int32(1)}}, }) return } func (this *modelHdList) Start() (err error) { err = this.MCompModel.Start() // 临时数据 防止清库没有hd数据 后面删除 event.RegisterGO(core.Event_ServiceStartEnd, func() { this.loadHdInfo() }) return } func (this *modelHdList) getHdInfo() (activity map[pb.HdType]*pb.DBHuodong) { this.hlock.RLock() defer this.hlock.RUnlock() return this.activity } // 通过活动ID查找 func (this *modelHdList) getHdListByHdId(oid string) (result *pb.DBHuodong, err error) { _data := this.DBModel.DB.FindOne(comm.TableHdInfo, bson.M{"_id": oid}) result = &pb.DBHuodong{} if err = _data.Decode(result); err != nil { this.module.Errorln(err) } return } // 不需要修改 此接口不调用 func (this *modelHdList) modifyHdInfo(uid string, data map[string]interface{}) error { return this.Change(uid, data) } func (this *modelHdList) addHdInfo(hd *pb.DBHuodong) error { if _, err := this.DB.InsertOne(core.SqlTable("hdinfo"), hd); err != nil { return err } return nil } func (this *modelHdList) LoadActivityData() { if c, err := this.DB.Find(core.SqlTable(this.TableName), bson.M{}); err != nil { return } else { this.hlock.Lock() defer this.hlock.Unlock() this.activity = make(map[pb.HdType]*pb.DBHuodong) for c.Next(context.Background()) { hd := &pb.DBHuodong{} if err = c.Decode(hd); err != nil { this.module.Errorf("err:%v", err) continue } this.activity[hd.Itype] = hd } } } func (this *modelHdList) getHdInfoByType(itype pb.HdType) (activity *pb.DBHuodong) { var ok bool this.hlock.RLock() activity, ok = this.activity[itype] this.hlock.RUnlock() if ok { return } return } func (this *modelHdList) loadHdInfo() (err error) { if err = this.DB.FindOne(core.SqlTable(this.TableName), bson.M{}).Decode(&pb.DBHuodong{}); err == mgo.MongodbNil { var data []interface{} for i := 1; i <= 9; i++ { data = append(data, &pb.DBHuodong{ Id: primitive.NewObjectID().Hex(), Rtime: configure.Now().Unix(), Name: "", Itype: pb.HdType(i), Etime: configure.Now().Unix() + 30*24*3600, Stime: configure.Now().Unix(), Data: &pb.ActivityInfo{}, }) } for i := 1001; i <= 1005; i++ { data = append(data, &pb.DBHuodong{ Id: primitive.NewObjectID().Hex(), Rtime: configure.Now().Unix(), Name: "", Itype: pb.HdType(i), Etime: configure.Now().Unix() + 30*24*3600, Stime: configure.Now().Unix(), Data: &pb.ActivityInfo{}, }) } if _, err = this.DB.InsertMany(core.SqlTable(this.TableName), data); err != nil { return } this.module.ReloadActivity() return } return }