diff --git a/comm/core.go b/comm/core.go index 15d07a612..e7bd2f853 100644 --- a/comm/core.go +++ b/comm/core.go @@ -28,7 +28,7 @@ const ( SM_PackModule core.M_Modules = "pack" //背包模块 SM_MailModule core.M_Modules = "mail" //邮件模块 SM_FriendModule core.M_Modules = "friend" //好友模块 - SM_LogModelMueule core.M_Modules = "model" //日志模块 + SM_LogModelModule core.M_Modules = "model" //日志模块 ) //RPC服务接口定义处 @@ -55,6 +55,21 @@ type ISC_GateRouteComp interface { RegisterRoute(methodName string, comp reflect.Value, msg reflect.Type, fn reflect.Method) } +type Autogenerated struct { + ID string `json:"_id"` + UID string `json:"uid"` + Act string `json:"act"` // insert update delete + D []interface{} +} + +type LogHandleType string + +const ( + LogHandleType_Insert LogHandleType = "insert" + LogHandleType_Update LogHandleType = "update" + LogHandleType_Delete LogHandleType = "delete" +) + //用户会话 type IUserSession interface { GetSessionId() string diff --git a/comm/imodule.go b/comm/imodule.go index ca189ce05..b1dae9bd5 100644 --- a/comm/imodule.go +++ b/comm/imodule.go @@ -18,7 +18,4 @@ type ( ///添加多个物品到背包 (可以加物品和减物品) AddItemsToUserPack(uId string, items map[int32]int32) (err error) } - Imodel interface { - AddModelLogs() (err error) - } ) diff --git a/modules/core.go b/modules/core.go index 67c01759c..87187062b 100644 --- a/modules/core.go +++ b/modules/core.go @@ -15,13 +15,10 @@ type ( SendMsgToUser(mainType, subType string, msg proto.Message, user *pb.Cache_UserData) (err error) ///向多个用户发送消息 SendMsgToUsers(mainType, subType string, msg proto.Message, user ...*pb.Cache_UserData) (err error) + + // 向db 写日志信息 + InsertModelLogs(table string, uID string, handle interface{}) (err error) + DeleteModelLogs(table string, uID string, where interface{}) (err error) + UpdateModelLogs(table string, uID string, where interface{}, handle interface{}) (err error) } ) - -type LogHandleType string - -const ( - LogHandleType_Insert LogHandleType = "insert" - LogHandleType_Update LogHandleType = "update" - LogHandleType_Delete LogHandleType = "delete" -) diff --git a/modules/db_comp.go b/modules/db_comp.go index e04f1fbe2..5049f4ba1 100644 --- a/modules/db_comp.go +++ b/modules/db_comp.go @@ -1,11 +1,15 @@ package modules import ( + "go_dreamfactory/comm" "go_dreamfactory/lego/base" "go_dreamfactory/lego/core" "go_dreamfactory/lego/core/cbase" + "go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/sys/db" + + "go.mongodb.org/mongo-driver/bson/primitive" ) /* @@ -13,8 +17,9 @@ import ( */ type MComp_DBComp struct { cbase.ModuleCompBase - S base.IRPCXService //rpc服务对象 - M core.IModule //当前业务模块 + S base.IRPCXService //rpc服务对象 + M core.IModule //当前业务模块 + DB mgo.ISys } @@ -26,3 +31,62 @@ func (this *MComp_DBComp) Init(service core.IService, module core.IModule, comp this.DB = db.Mgo() return } +func (this *MComp_DBComp) Start() (err error) { + err = this.ModuleCompBase.Start() + return +} + +func (this *MComp_DBComp) InsertModelLogs(table string, uID string, dbType comm.LogHandleType, where interface{}, target interface{}) (err error) { + + data := &comm.Autogenerated{ + ID: primitive.NewObjectID().Hex(), + UID: uID, + Act: string(dbType), + } + data.D = append(data.D, table) // D[0] + data.D = append(data.D, target) // D[1] + + _, err = this.DB.InsertOne("model", data) + if err != nil { + log.Errorf("insert model db err %v", err) + } + + return err +} +func (this *MComp_DBComp) DeleteModelLogs(table string, uID string, dbType comm.LogHandleType, where interface{}, target interface{}) (err error) { + + data := &comm.Autogenerated{ + ID: primitive.NewObjectID().Hex(), + UID: uID, + Act: string(dbType), + } + + data.D = append(data.D, table) // D[0] + data.D = append(data.D, where) // D[1] + + _, err = this.DB.InsertOne("model", data) + if err != nil { + log.Errorf("insert model db err %v", err) + } + + return err +} + +func (this *MComp_DBComp) UpdateModelLogs(table string, uID string, dbType comm.LogHandleType, where interface{}, target interface{}) (err error) { + + data := &comm.Autogenerated{ + ID: primitive.NewObjectID().Hex(), + UID: uID, + Act: string(dbType), + } + data.D = append(data.D, table) // D[0] + data.D = append(data.D, where) // D[1] + data.D = append(data.D, target) // D[2] + + _, err = this.DB.InsertOne("model", data) + if err != nil { + log.Errorf("insert model db err %v", err) + } + + return err +} diff --git a/modules/model/db_comp.go b/modules/model/db_comp.go index fa8ad297b..a6f37b8d6 100644 --- a/modules/model/db_comp.go +++ b/modules/model/db_comp.go @@ -3,11 +3,11 @@ package model import ( "context" "errors" + "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/core/cbase" "go_dreamfactory/lego/sys/log" "go_dreamfactory/lego/sys/mgo" - "go_dreamfactory/modules" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" @@ -21,12 +21,6 @@ type DB_Comp struct { cbase.ModuleCompBase mgo mgo.ISys } -type Autogenerated struct { - ID string `json:"_id"` - UID string `json:"uid"` - Act string `json:"act"` // insert update delete - D []interface{} -} // type data struct { // Table string @@ -44,12 +38,12 @@ const ( ) type IModel interface { - Model_UpdateDBBylog() (err error) // 读取日志并更新对应的表 - Model_InsertDBBylog(data *Autogenerated) (err error) // 插入日志 - Model_UpdateUserDataByUid(uid string) (err error) // 读取指定玩家信息到db中 + Model_UpdateDBByLog() (err error) // 读取日志并更新对应的表 + Model_InsertDBByLog(data *comm.Autogenerated) (err error) // 插入日志 + Model_UpdateUserDataByUid(uid string) (err error) // 读取指定玩家信息到db中 } -func (this *DB_Comp) Model_UpdateDBBylog() (err error) { +func (this *DB_Comp) Model_UpdateDBByLog() (err error) { _delID := make([]string, 0) // 处理完成要删除的id _data, err := this.mgo.Find(DB_ModelTable, bson.M{}, options.Find().SetLimit(int64(WriteMaxNum))) @@ -57,7 +51,7 @@ func (this *DB_Comp) Model_UpdateDBBylog() (err error) { return err } for _data.Next(context.TODO()) { // 处理删除逻辑 - data := &Autogenerated{} + data := &comm.Autogenerated{} if err = _data.Decode(data); err == nil { _delID = append(_delID, data.ID) } else { @@ -66,7 +60,7 @@ func (this *DB_Comp) Model_UpdateDBBylog() (err error) { } log.Debugf("======= insert log : %+v =======", data) - if data.Act == string(modules.LogHandleType_Insert) { + if data.Act == string(comm.LogHandleType_Insert) { if len(data.D) < 2 { // 参数校验 log.Errorf("parameter len _id : %s,uid : %s d.len:%v", data.ID, data.UID, len(data.D)) return errors.New("parameter len err") @@ -76,7 +70,7 @@ func (this *DB_Comp) Model_UpdateDBBylog() (err error) { if err != nil { log.Errorf("insert %s db err:%v", data.D[0].(core.SqlTable), err) } - } else if data.Act == string(modules.LogHandleType_Delete) { + } else if data.Act == string(comm.LogHandleType_Delete) { if len(data.D) < 2 { // 参数校验 log.Errorf("parameter len _id : %s,uid : %s d.len:%v", data.ID, data.UID, len(data.D)) return errors.New("parameter len err") @@ -110,7 +104,7 @@ func (this *DB_Comp) Model_UpdateDBBylog() (err error) { return } -func (this *DB_Comp) Model_InsertDBBylog(data *Autogenerated) (err error) { +func (this *DB_Comp) Model_InsertDBByLog(data *comm.Autogenerated) (err error) { _, err = this.mgo.InsertOne(DB_ModelTable, data) if err != nil { @@ -127,7 +121,7 @@ func (this *DB_Comp) Model_UpdateUserDataByUid(uid string) (err error) { return err } for _data.Next(context.TODO()) { // 处理删除逻辑 - data := &Autogenerated{} + data := &comm.Autogenerated{} if err = _data.Decode(data); err == nil { _delID = append(_delID, data.ID) } else { @@ -136,17 +130,16 @@ func (this *DB_Comp) Model_UpdateUserDataByUid(uid string) (err error) { } log.Debugf("======= insert log : %+v =======", data) - if data.Act == string(modules.LogHandleType_Insert) { + if data.Act == string(comm.LogHandleType_Insert) { if len(data.D) < 2 { // 参数校验 log.Errorf("parameter len _id : %s,uid : %s d.len:%v", data.ID, data.UID, len(data.D)) return errors.New("parameter len err") } - query := data.D[1].([]interface{}) - _, err := this.mgo.InsertMany(data.D[0].(core.SqlTable), query) + _, err := this.mgo.InsertMany(data.D[0].(core.SqlTable), data.D[1].([]interface{})) if err != nil { log.Errorf("insert %s db err:%v", data.D[0].(core.SqlTable), err) } - } else if data.Act == string(modules.LogHandleType_Delete) { + } else if data.Act == string(comm.LogHandleType_Delete) { if len(data.D) < 2 { // 参数校验 log.Errorf("parameter len _id : %s,uid : %s d.len:%v", data.ID, data.UID, len(data.D)) return errors.New("parameter len err") diff --git a/modules/model/dbservice_comp.go b/modules/model/dbservice_comp.go index fb7ce3e74..ade6efae5 100644 --- a/modules/model/dbservice_comp.go +++ b/modules/model/dbservice_comp.go @@ -29,7 +29,7 @@ func (this *DBService_Comp) run() { case v := <-this.task: this.Model_UpdateUserDataByUid(v) case <-time.After(time.Second): - this.Model_UpdateDBBylog() + this.Model_UpdateDBByLog() } } } diff --git a/modules/model/module.go b/modules/model/module.go index f343ce609..0b32766bd 100644 --- a/modules/model/module.go +++ b/modules/model/module.go @@ -31,7 +31,7 @@ func (this *Model) Start() (err error) { } func (this *Model) GetType() core.M_Modules { - return comm.SM_LogModelMueule + return comm.SM_LogModelModule } func (this *Model) OnInstallComp() {