diff --git a/modules/pack/api_getlist.go b/modules/pack/api_getlist.go index 37fd9bb39..7f28ec71d 100644 --- a/modules/pack/api_getlist.go +++ b/modules/pack/api_getlist.go @@ -28,13 +28,13 @@ func (this *Api_Comp) Getlist(session comm.IUserSession, agrs map[string]interfa session.SendMsg(string(this.module.GetType()), GetlistResp, &pb.Pack_Getlist_Resp{Grids: grids}) if code == pb.ErrorCode_Success { go func() { //异步处理修改数据 - this.module.cache_comp.Pack_UpdateUserPack(session.GetUserId(), modifys...) - this.module.cache_comp.Pack_DeleteUserPack(session.GetUserId(), dels...) + this.module.model_pack_comp.Pack_UpdateUserPack(session.GetUserId(), modifys...) + this.module.model_pack_comp.Pack_DeleteUserPack(session.GetUserId(), dels...) }() } }() - if items, err = this.module.cache_comp.Pack_QueryUserPack(session.GetUserId()); err != nil { + if items, err = this.module.model_pack_comp.Pack_QueryUserPack(session.GetUserId()); err != nil { log.Errorf("QueryUserPackReq err:%v", err) code = pb.ErrorCode_CacheReadError return diff --git a/modules/pack/cache_comp.go b/modules/pack/model_pack_comp.go similarity index 67% rename from modules/pack/cache_comp.go rename to modules/pack/model_pack_comp.go index f775b1080..5542c1fb0 100644 --- a/modules/pack/cache_comp.go +++ b/modules/pack/model_pack_comp.go @@ -3,29 +3,45 @@ package pack import ( "fmt" "go_dreamfactory/lego/core" - "go_dreamfactory/lego/sys/mgo" - "go_dreamfactory/lego/sys/redis" "go_dreamfactory/modules" "go_dreamfactory/pb" "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/x/bsonx" ) ///背包缓存数据管理组件 -type Cache_Comp struct { +type Model_Pack_Comp struct { modules.Model_Comp module *Pack } //组件初始化接口 -func (this *Cache_Comp) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { - this.ModuleCompBase.Init(service, module, comp, options) +func (this *Model_Pack_Comp) Init(service core.IService, module core.IModule, comp core.IModuleComp, opt core.IModuleOptions) (err error) { + this.Model_Comp.Init(service, module, comp, opt) this.module = module.(*Pack) + this.TableName = "pack" + //创建uid索引 + this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ + Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, + }) return } ///查询用户背包数据 -func (this *Cache_Comp) Pack_QueryUserPack(uId string) (itmes []*pb.DB_UserItemData, err error) { +func (this *Model_Pack_Comp) Pack_QueryUserPack(uId string) (itmes []*pb.DB_UserItemData, err error) { + var ( + data map[string]*pb.DB_UserItemData = make(map[string]*pb.DB_UserItemData) + ) + if err = this.GetHM(uId, data); err == nil { + itmes = make([]*pb.DB_UserItemData, len(data)) + n := 0 + for _, v := range data { + itmes[n] = v + n++ + } + } // var ( // lists []interface{} // temp map[string]interface{} @@ -51,50 +67,58 @@ func (this *Cache_Comp) Pack_QueryUserPack(uId string) (itmes []*pb.DB_UserItemD } ///查询用户指定格子的物品数据 -func (this *Cache_Comp) Pack_QueryUserPackByGridId(uId string, grid string) (itme *pb.DB_UserItemData, err error) { - var ( - itmes []*pb.DB_UserItemData - temp map[string]interface{} - ) +func (this *Model_Pack_Comp) Pack_QueryUserPackByGridId(uId string, grid string) (itme *pb.DB_UserItemData, err error) { itme = &pb.DB_UserItemData{} - if err = this.Redis.HGet(fmt.Sprintf(Redis_PackCache, uId), grid, itme); err == nil { - return - } else if err == redis.RedisNil { - if itmes, err = this.module.db_comp.Pack_QueryUserPack(uId); err == nil { - temp = make(map[string]interface{}) - for _, v := range itmes { - temp[v.GridId] = v - } - this.Redis.HMSet(fmt.Sprintf(Redis_PackCache, uId), temp) - for _, v := range itmes { - if v.GridId == grid { - itme = v - return - } - } - err = fmt.Errorf("no found uid:%s grid:%s", uId, grid) - } else if err == mgo.MongodbNil { - err = nil - } - } + err = this.GetH(uId, grid, itme) + + // var ( + // itmes []*pb.DB_UserItemData + // temp map[string]interface{} + // ) + // itme = &pb.DB_UserItemData{} + // if err = this.Redis.HGet(fmt.Sprintf(Redis_PackCache, uId), grid, itme); err == nil { + // return + // } else if err == redis.RedisNil { + // if itmes, err = this.module.db_comp.Pack_QueryUserPack(uId); err == nil { + // temp = make(map[string]interface{}) + // for _, v := range itmes { + // temp[v.GridId] = v + // } + // this.Redis.HMSet(fmt.Sprintf(Redis_PackCache, uId), temp) + // for _, v := range itmes { + // if v.GridId == grid { + // itme = v + // return + // } + // } + // err = fmt.Errorf("no found uid:%s grid:%s", uId, grid) + // } else if err == mgo.MongodbNil { + // err = nil + // } + // } return } //更新用户的背包信息 -func (this *Cache_Comp) Pack_UpdateUserPack(uId string, itmes ...*pb.DB_UserItemData) (err error) { - temp := make(map[string]interface{}) +func (this *Model_Pack_Comp) Pack_UpdateUserPack(uId string, itmes ...*pb.DB_UserItemData) (err error) { + var data map[string]*pb.DB_UserItemData = make(map[string]*pb.DB_UserItemData) for _, v := range itmes { - temp[v.GridId] = v - } - if err = this.Redis.HMSet(fmt.Sprintf(Redis_PackCache, uId), temp); err != nil { - this.module.db_comp.Pack_UpdateGridToUserPack(uId, itmes...) + data[v.GridId] = v } + err = this.SetHM(uId, data) + // temp := make(map[string]interface{}) + // for _, v := range itmes { + // temp[v.GridId] = v + // } + // if err = this.Redis.HMSet(fmt.Sprintf(Redis_PackCache, uId), temp); err != nil { + // this.module.db_comp.Pack_UpdateGridToUserPack(uId, itmes...) + // } return } //更新用户的背包信息 -func (this *Cache_Comp) Pack_DeleteUserPack(uId string, gridIds ...string) (err error) { +func (this *Model_Pack_Comp) Pack_DeleteUserPack(uId string, gridIds ...string) (err error) { if err = this.Redis.HDel(fmt.Sprintf(Redis_PackCache, uId), gridIds...); err != nil { err = this.module.db_comp.Pack_DeleteGridToUserPack(uId, gridIds...) } @@ -102,7 +126,7 @@ func (this *Cache_Comp) Pack_DeleteUserPack(uId string, gridIds ...string) (err } //查询用户背包物品数量 -func (this *Cache_Comp) Pack_QueryUserPackItemAmount(uId string, itemid int32) (amount uint32) { +func (this *Model_Pack_Comp) Pack_QueryUserPackItemAmount(uId string, itemid int32) (amount uint32) { var ( itmes []*pb.DB_UserItemData err error @@ -119,7 +143,7 @@ func (this *Cache_Comp) Pack_QueryUserPackItemAmount(uId string, itemid int32) ( } ///添加或则减少物品到用户背包 -func (this *Cache_Comp) Pack_AddItemToUserPack(uId string, itemId int32, addnum int32) (err error) { +func (this *Model_Pack_Comp) Pack_AddItemToUserPack(uId string, itemId int32, addnum int32) (err error) { var ( itmes []*pb.DB_UserItemData modifys []*pb.DB_UserItemData @@ -144,7 +168,7 @@ func (this *Cache_Comp) Pack_AddItemToUserPack(uId string, itemId int32, addnum } ///添加或则减少多个物品到用户背包 -func (this *Cache_Comp) Pack_AddItemsToUserPack(uId string, items map[int32]int32) (err error) { +func (this *Model_Pack_Comp) Pack_AddItemsToUserPack(uId string, items map[int32]int32) (err error) { var ( itmes []*pb.DB_UserItemData modifys []*pb.DB_UserItemData @@ -182,7 +206,7 @@ func (this *Cache_Comp) Pack_AddItemsToUserPack(uId string, items map[int32]int3 } ///修改指定格子的物品数量 -func (this *Cache_Comp) Pack_AddItemToUserPackByGrid(uId string, gridid string, itemId int32, addnum int32) (err error) { +func (this *Model_Pack_Comp) Pack_AddItemToUserPackByGrid(uId string, gridid string, itemId int32, addnum int32) (err error) { var ( itme *pb.DB_UserItemData grid *pb.DB_UserItemData @@ -217,7 +241,7 @@ func (this *Cache_Comp) Pack_AddItemToUserPackByGrid(uId string, gridid string, } ///添加移除物品到用户背包 -func (this *Cache_Comp) pack_addItemToUserPack(items []*pb.DB_UserItemData, itemId int32, addnum int32) (modifys []*pb.DB_UserItemData, leftnum int64) { +func (this *Model_Pack_Comp) pack_addItemToUserPack(items []*pb.DB_UserItemData, itemId int32, addnum int32) (modifys []*pb.DB_UserItemData, leftnum int64) { var ( num int64 isNew bool diff --git a/modules/pack/module.go b/modules/pack/module.go index 0fcb946a7..98e199d1a 100644 --- a/modules/pack/module.go +++ b/modules/pack/module.go @@ -20,10 +20,10 @@ func NewModule() core.IModule { type Pack struct { modules.ModuleBase - api_comp *Api_Comp - cache_comp *Cache_Comp - db_comp *DB_Comp - configure_comp *Configure_Comp + api_comp *Api_Comp + model_pack_comp *Model_Pack_Comp + db_comp *DB_Comp + configure_comp *Configure_Comp } //模块名称 @@ -41,8 +41,7 @@ func (this *Pack) Init(service core.IService, module core.IModule, options core. func (this *Pack) OnInstallComp() { this.ModuleBase.OnInstallComp() this.api_comp = this.RegisterComp(new(Api_Comp)).(*Api_Comp) - this.cache_comp = this.RegisterComp(new(Cache_Comp)).(*Cache_Comp) - //this.db_comp = this.RegisterComp(new(DB_Comp)).(*DB_Comp) + this.model_pack_comp = this.RegisterComp(new(Model_Pack_Comp)).(*Model_Pack_Comp) this.configure_comp = this.RegisterComp(new(Configure_Comp)).(*Configure_Comp) } @@ -50,14 +49,14 @@ func (this *Pack) OnInstallComp() { ///查询用户背包物品数量 func (this *Pack) QueryUserPackItemAmount(uId string, itemid int32) (amount uint32) { defer log.Debugf("获取物品 uId:%s itemid:%d addnum:%d ", uId, itemid, amount) - amount = this.cache_comp.Pack_QueryUserPackItemAmount(uId, itemid) + amount = this.model_pack_comp.Pack_QueryUserPackItemAmount(uId, itemid) return } ///添加单个物品到背包 (可以加物品和减物品) func (this *Pack) AddItemToUserPack(uId string, itemid, addnum int32) (err error) { defer log.Debugf("给用户添加物品 uId:%s itemid:%d addnum:%d issucc:%v", uId, itemid, addnum, err == nil) - if err = this.cache_comp.Pack_AddItemToUserPack(uId, itemid, addnum); err != nil { + if err = this.model_pack_comp.Pack_AddItemToUserPack(uId, itemid, addnum); err != nil { log.Errorf("给用户添加物品 uId:%s itemid:%d addnum:%d err:%v", uId, itemid, addnum, err) } return @@ -66,7 +65,7 @@ func (this *Pack) AddItemToUserPack(uId string, itemid, addnum int32) (err error ///添加多个物品到背包 (可以加物品和减物品) func (this *Pack) AddItemsToUserPack(uId string, items map[int32]int32) (err error) { defer log.Debugf("给用户添加物品 uId:%s items:%d items:%v", uId, items, err == nil) - if err = this.cache_comp.Pack_AddItemsToUserPack(uId, items); err != nil { + if err = this.model_pack_comp.Pack_AddItemsToUserPack(uId, items); err != nil { log.Errorf("给用户添加物品 uId:%s items:%d err:%v", uId, items, err) } return diff --git a/modules/pack/pack_test.go b/modules/pack/pack_test.go index 7c9493050..688ef21c4 100644 --- a/modules/pack/pack_test.go +++ b/modules/pack/pack_test.go @@ -1,7 +1,6 @@ package pack import ( - "context" "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego" @@ -17,7 +16,10 @@ import ( "testing" "time" - "github.com/golang/protobuf/ptypes" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/bson/primitive" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" ) func newService(ops ...rpcx.Option) core.IService { @@ -74,8 +76,78 @@ func TestMain(m *testing.M) { } func Test_Log(t *testing.T) { - data, _ := ptypes.MarshalAny(&pb.Pack_Getlist_Req{}) - s_gateComp.ReceiveMsg(context.Background(), &pb.AgentMessage{Method: "pack.getlist", Message: data}, &pb.RPCMessageReply{}) + // data, _ := ptypes.MarshalAny(&pb.Pack_Getlist_Req{}) + // s_gateComp.ReceiveMsg(context.Background(), &pb.AgentMessage{Method: "pack.getlist", Message: data}, &pb.RPCMessageReply{}) + // items, err := module.db_comp.Pack_QueryUserPack("liwei1dao") // log.Debugf("item:%v err:%v", items, err) + uid := "0_62a9afd994fe03b7aaee6773" + Pack_UpdateGridToUserPack( + uid, + &pb.DB_UserItemData{ + GridId: primitive.NewObjectID().Hex(), + UId: uid, + IsEmpty: false, + ItemId: 1001, + Amount: 99, + CTime: time.Now().Unix(), + IsNewItem: true, + }, + &pb.DB_UserItemData{ + GridId: primitive.NewObjectID().Hex(), + UId: uid, + IsEmpty: false, + ItemId: 1001, + Amount: 12, + CTime: time.Now().Unix(), + IsNewItem: true, + }, + &pb.DB_UserItemData{ + GridId: primitive.NewObjectID().Hex(), + UId: uid, + IsEmpty: false, + ItemId: 1002, + Amount: 99, + CTime: time.Now().Unix(), + IsNewItem: true, + }, + &pb.DB_UserItemData{ + GridId: primitive.NewObjectID().Hex(), + UId: uid, + IsEmpty: false, + ItemId: 1003, + Amount: 78, + CTime: time.Now().Unix(), + IsNewItem: true, + }, + &pb.DB_UserItemData{ + GridId: primitive.NewObjectID().Hex(), + UId: uid, + IsEmpty: false, + ItemId: 1004, + Amount: 99, + CTime: time.Now().Unix(), + IsNewItem: true, + }, + ) + +} + +//更新背包格子数据 +func Pack_UpdateGridToUserPack(uId string, grids ...*pb.DB_UserItemData) (err error) { + models := make([]mongo.WriteModel, len(grids)) + for i, v := range grids { + models[i] = mongo.NewUpdateOneModel().SetFilter(bson.M{"_id": v.GridId}).SetUpdate( + bson.M{"$set": bson.M{ + "uid": v.UId, + "isempty": v.IsEmpty, + "itemid": v.ItemId, + "amount": v.Amount, + "ctime": v.CTime, + "etime": v.ETime, + "isnewitem": v.IsNewItem, + }}).SetUpsert(true) + } + module.model_pack_comp.DB.BulkWrite(DB_PackTable, models, options.BulkWrite().SetOrdered(false)) + return }