142 lines
3.6 KiB
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
|
|
}
|