89 lines
2.7 KiB
Go
89 lines
2.7 KiB
Go
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
|
|
}
|