package cache import ( "fmt" "go_dreamfactory/pb" "go_dreamfactory/sys/db" "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/lego/sys/redis" ) const ( //Redis Redis_PackCache string = "pack:%s" ) const ( GridCapMaxNum = 90 //单个格子的最大容量 ) type IPack interface { Pack_QueryUserPack(uId string) (pack *pb.DB_UserPackData, err error) } ///查询用户背包数据 func (this *Cache) Pack_QueryUserPack(uId string) (pack *pb.DB_UserPackData, err error) { pack = &pb.DB_UserPackData{ UserId: uId, } if err = this.redis.Get(fmt.Sprintf(Redis_PackCache, uId), pack); err == nil { return } else if err == redis.RedisNil { if pack, err = db.Defsys.Pack_QueryUserPack(uId); err == nil { this.redis.Set(fmt.Sprintf(Redis_PackCache, uId), pack, -1) } else if err == mgo.MongodbNil { err = nil } } return } ///添加或则减少物品到用户背包 func (this *Cache) Pack_AddItemToUserPack(uId string, itemId int32, addnum int32) (err error) { var ( pack *pb.DB_UserPackData modifys []*pb.DB_GridData leftnum int64 num int64 ) if addnum == 0 { return } if pack, err = this.Pack_QueryUserPack(uId); err != nil { return } leftnum = int64(addnum) modifys = make([]*pb.DB_GridData, 0) for _, v := range pack.Pack { if !v.IsEmpty && v.ItemId == itemId { num = int64(v.Amount) + int64(leftnum) if num < 0 { leftnum += int64(v.Amount) v.Amount = 0 modifys = append(modifys, v) } else if num > 0 && num < int64(v.Amount) { leftnum = 0 v.Amount = uint32(num) modifys = append(modifys, v) break } else if num > 0 && num > int64(v.Amount) { if num <= GridCapMaxNum { leftnum = 0 v.Amount = uint32(num) modifys = append(modifys, v) break } else { if v.Amount < GridCapMaxNum { leftnum = int64(num - int64(v.Amount)) v.Amount = uint32(num) modifys = append(modifys, v) } } } } } return }