package pack import ( "context" "fmt" "go_dreamfactory/lego/core/cbase" "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/pb" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) ///背包数据库数据管理组件 type DB_Comp struct { cbase.ModuleCompBase mgo mgo.ISys } // func (this *DB_Comp) Pack_InitUserPack(uId string) (pack []*pb.DB_UserItemData, err error) { // pack = &pb.DB_UserPackData{UserId: uId, Pack: make([]*pb.DB_GridData, 0)} // _, err = this.mgo.InsertOne(DB_PackTable, pack) // return // } ///查询用户背包数据 func (this *DB_Comp) Pack_QueryUserPack(uId string) (items []*pb.DB_UserItemData, err error) { var ( cursor *mongo.Cursor ) items = make([]*pb.DB_UserItemData, 0) if cursor, err = this.mgo.Find(DB_PackTable, bson.M{"uid": uId}); err != nil { return } else { for cursor.Next(context.Background()) { temp := &pb.DB_UserItemData{} if err = cursor.Decode(temp); err != nil { return } items = append(items, temp) } } return } //更新背包格子数据 func (this *DB_Comp) Pack_UpdateGridToUserPack(uId string, grids ...*pb.DB_GridData) (pack *pb.DB_UserPackData, err error) { pack = &pb.DB_UserPackData{} update := bson.M{} for _, v := range grids { update[fmt.Sprintf("pack.%d.gridid", v.GridId)] = v.GridId update[fmt.Sprintf("pack.%d.isempty", v.GridId)] = v.IsEmpty update[fmt.Sprintf("pack.%d.itemid", v.GridId)] = v.ItemId update[fmt.Sprintf("pack.%d.amount", v.GridId)] = v.Amount update[fmt.Sprintf("pack.%d.isnewitem", v.GridId)] = v.IsNewItem } err = this.mgo.FindOneAndUpdate(DB_PackTable, bson.M{"_id": uId}, bson.M{"$set": update}, options.FindOneAndUpdate().SetUpsert(true).SetReturnDocument(options.After)).Decode(pack) return } //更新背包格子物品的数据 func (this *DB_Comp) Pack_AddGridAmountToUserPack(uId string, grid int32, amount int32) (pack *pb.DB_UserPackData, err error) { pack = &pb.DB_UserPackData{} err = this.mgo.FindOneAndUpdate(DB_PackTable, bson.M{"_id": uId}, bson.M{"$inc": bson.M{ fmt.Sprintf("pack.%d.amount", grid): amount, }}, options.FindOneAndUpdate().SetUpsert(true).SetReturnDocument(options.After)).Decode(pack) return } //修改背包格子IsNew标识 func (this *DB_Comp) Pack_ModifyPackGridIsNewItem(uId string, grids []int32) (pack *pb.DB_UserPackData, err error) { pack = &pb.DB_UserPackData{} identifier := []interface{}{bson.M{"item.gridid": bson.M{"$in": grids}}} err = this.mgo.FindOneAndUpdate(DB_PackTable, bson.M{"_id": uId}, bson.M{"$set": bson.M{ "pack.$[item].isNewitem": false, }}, options.FindOneAndUpdate().SetArrayFilters(options.ArrayFilters{Filters: identifier}).SetReturnDocument(options.After)).Decode(pack) return }