87 lines
1.9 KiB
Go
87 lines
1.9 KiB
Go
package cache
|
|
|
|
import (
|
|
"fmt"
|
|
"go_dreamfactory/pb"
|
|
"go_dreamfactory/sys/db"
|
|
|
|
"github.com/liwei1dao/lego/sys/mgo"
|
|
"github.com/liwei1dao/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
|
|
}
|