package pay import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/x/bsonx" ) // /每日礼包 type modelDailyComp struct { modules.MCompModel module *Pay } // 组件初始化接口 func (this *modelDailyComp) Init(service core.IService, module core.IModule, comp core.IModuleComp, opt core.IModuleOptions) (err error) { this.MCompModel.Init(service, module, comp, opt) this.module = module.(*Pay) this.TableName = comm.TablePayDaily //创建uid索引 this.DB.CreateIndex(core.SqlTable(this.TableName), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, }) return } // 查询用户重置数据 func (this *modelDailyComp) queryUserDaily(uid string) (result *pb.DBPayDaily, err error) { result = &pb.DBPayDaily{} if err = this.Get(uid, result); err != nil && err != mgo.MongodbNil { this.module.Errorln(err) } if err == mgo.MongodbNil { result = &pb.DBPayDaily{ Id: primitive.NewObjectID().Hex(), Uid: uid, Items: make(map[int32]*pb.PayDailyItem), } err = this.Add(uid, result) } return } // 添加用户订单数据 func (this *modelDailyComp) updateUserDaily(info *pb.DBPayDaily) (err error) { if err = this.Change(info.Uid, map[string]interface{}{ "items": info.Items, }); err != nil { this.module.Errorln(err) return } return } // 每日礼包发货 func (this *modelDailyComp) delivery(session comm.IUserSession, pid int32) (errdata *pb.ErrorData, items []*pb.UserAtno) { var ( info *pb.DBPayDaily conf *cfg.GamePayPackageData err error ) if conf, err = this.module.configure.getPayPackageDataByPid(pid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } if info, err = this.queryUserDaily(session.GetUserId()); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } if info.Items[conf.Id] == nil { info.Items[conf.Id] = &pb.PayDailyItem{ Id: conf.Id, Buyunm: 0, Lastrefresh: configure.Now().Unix(), } } info.Items[conf.Id].Buyunm++ if err = this.updateUserDaily(info); err != nil { return } if errdata, items = this.module.DispenseAtno(session, conf.Item, true); errdata != nil { return } go this.module.AsynHandleSession(session.Clone(), func(session comm.IUserSession) { this.module.WriteUserLog(session.GetUserId(), comm.GMResAddType, "delivery", conf.Item) }) return }