go_dreamfactory/modules/activity/model_hdlist.go

142 lines
3.6 KiB
Go

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
}