diff --git a/server/wheelserver/api/v1/inapp_shop/inapp_shop.go b/server/wheelserver/api/v1/inapp_shop/inapp_shop.go index 996f61e1..e6c42dcc 100644 --- a/server/wheelserver/api/v1/inapp_shop/inapp_shop.go +++ b/server/wheelserver/api/v1/inapp_shop/inapp_shop.go @@ -13,6 +13,7 @@ import ( "q5" "sort" "strings" + "wheelserver/service" "github.com/gin-gonic/gin" ) @@ -146,10 +147,58 @@ func (this *InAppShopApi) Callback(c *gin.Context) { orderModel.Status = status orderModel.SpOrderId = q5.SafeToString(rec["orderId"]) orderModel.ModifyTime = int32(f5.GetApp().GetRealSeconds()) - if orderModel.UpdateFields([]string{"status","sp_order_id","modifytime"}) != nil { + if orderModel.UpdateFields([]string{"status", "sp_order_id", "modifytime"}) != nil { f5.RspErr(c, 500, "server internal error") return } f5.RspErr(c, 0, "") + + ordergoods := mt.Table.ShopGoods.GetById(int64(orderModel.GoodsId)) + if ordergoods == nil { + f5.GetSysLog().Error("fail dispatch goods:%s", orderId) + return + } + + itemcfg := mt.Table.Item.GetById(int64(ordergoods.GetItemId())) + if itemcfg == nil { + f5.GetSysLog().Error("item error, fail dispatch goods:%s, %d", orderId, ordergoods.GetItemId()) + return + } + + user := new(model.User) + nowTime := f5.GetApp().GetRealSeconds() + if err, found := user.Find(orderModel.AccountId, nowTime); err != nil { + f5.GetSysLog().Error("internal error, fail dispatch goods:%s", orderId) + return + } else if !found { + f5.GetSysLog().Error("not found user, fail dispatch goods:%s, %s", orderId, orderModel.AccountId) + return + } + + switch itemcfg.GetItemType() { + case constant.ITEM_TYPE_DICE: + user.AddDice(ordergoods.GetAmount()) + case constant.ITEM_TYPE_SPEC_DICE: + user.AddSpecDice(ordergoods.GetAmount()) + case constant.ITEM_TYPE_CHIP: + for i := int32(0); i < ordergoods.GetAmount(); i++ { + chip := new(model.Chip) + chip.AccountId = orderModel.AccountId + chip.ItemId = itemcfg.GetId() + chip.ItemNum = 1 + chip.ExpireTime = int32(nowTime) + itemcfg.GetTime()*60 + chip.CreateTime = int32(nowTime) + chip.ModifyTime = int32(nowTime) + if chip.Create() != nil { + f5.GetSysLog().Error("internal error, fail dispatch chip:%s, %s", orderId, orderModel.AccountId) + } + } + case constant.ITEM_TYPE_SCORE_DOUBLE_CARD: + buflist := []int32{} + for i := int32(0); i < ordergoods.GetAmount(); i++ { + buflist = append(buflist, itemcfg.GetBuffList()...) + } + service.Buff.Add(orderModel.AccountId, buflist) + } } diff --git a/server/wheelserver/api/v1/shop/shop.go b/server/wheelserver/api/v1/shop/shop.go index 36476b8b..907a37ed 100644 --- a/server/wheelserver/api/v1/shop/shop.go +++ b/server/wheelserver/api/v1/shop/shop.go @@ -1,13 +1,15 @@ package shop import ( - "q5" "f5" - "main/constant" "main/common" - "main/vo" - "main/mt" + "main/constant" "main/model" + "main/mt" + "main/service" + "main/vo" + "q5" + "github.com/gin-gonic/gin" ) @@ -94,5 +96,6 @@ func (this *ShopApi) Buy(c *gin.Context) { rspObj.SideEffect = new(vo.SideEffect) rspObj.SideEffect.User = new(vo.User) rspObj.SideEffect.User.FromModel(user) + rspObj.SideEffect.User.HourlyEarnings = service.Chip.GetHourEarning(user.AccountId) c.JSON(200, rspObj) } diff --git a/server/wheelserver/api/v1/user/user.go b/server/wheelserver/api/v1/user/user.go index 0ac5629f..2bdb8a6b 100644 --- a/server/wheelserver/api/v1/user/user.go +++ b/server/wheelserver/api/v1/user/user.go @@ -1,13 +1,15 @@ package user import ( - "q5" "f5" - "main/constant" "main/common" + "main/constant" "main/model" - "main/vo" "main/mt" + "main/vo" + "q5" + "wheelserver/service" + "github.com/gin-gonic/gin" ) @@ -27,7 +29,8 @@ func (this *UserApi) Login(c *gin.Context) { }{} nowTime := f5.GetApp().GetRealSeconds() rspObj.ServerTime = int32(nowTime) - if err, found := user.Find(s.GetAccountId(), nowTime); err != nil { + err, found := user.Find(s.GetAccountId(), nowTime) + if err != nil { f5.RspErr(c, 500, "server internal error") return } else if !found { @@ -55,6 +58,9 @@ func (this *UserApi) Login(c *gin.Context) { } f5.GetMsgQueue().FireEvent(constant.MSG_LOGIN, q5.Args{user}) rspObj.UserInfo.FromModel(user) + if found { + rspObj.UserInfo.HourlyEarnings = service.Chip.GetHourEarning(user.AccountId) + } c.JSON(200, rspObj) } @@ -77,5 +83,6 @@ func (this *UserApi) Info(c *gin.Context) { return } rspObj.UserInfo.FromModel(user) + rspObj.UserInfo.HourlyEarnings = service.Chip.GetHourEarning(user.AccountId) c.JSON(200, rspObj) } diff --git a/server/wheelserver/constant/constant.go b/server/wheelserver/constant/constant.go index 0ebc8ec7..1c4e00f1 100644 --- a/server/wheelserver/constant/constant.go +++ b/server/wheelserver/constant/constant.go @@ -37,6 +37,7 @@ const ( ITEM_TYPE_SCORE_DOUBLE_CARD = 4 ITEM_TYPE_SCORE_SMALL_GIFT_PACK = 5 ITEM_TYPE_SCORE_BIG_GIFT_PACK = 6 + ITEM_TYPE_DICE = 7 ) const ( diff --git a/server/wheelserver/model/user.go b/server/wheelserver/model/user.go index 0c1f1574..93cda3a1 100644 --- a/server/wheelserver/model/user.go +++ b/server/wheelserver/model/user.go @@ -1,11 +1,12 @@ package model import ( - "q5" - "f5" "errors" + "f5" "main/constant" "main/mt" + "q5" + "gorm.io/gorm" ) @@ -69,6 +70,13 @@ func (this *User) Create() error { return nil } +func (this *User) AddDice(num int32) error { + if num < 1 { + return errors.New("") + } + return this.DecDice(-num) +} + func (this *User) DecDice(num int32) error { if this.Dice < num { return errors.New("") @@ -91,7 +99,7 @@ func (this *User) AddSpecDice(num int32) error { } func (this *User) DecSpecDice(num int32) error { - if this.Score < int64(num) { + if this.SpecDice < num { return errors.New("") } oldSpecDice := this.SpecDice diff --git a/server/wheelserver/mtb/mtb.auto_gen.go b/server/wheelserver/mtb/mtb.auto_gen.go index 319ad60c..ebc55d10 100644 --- a/server/wheelserver/mtb/mtb.auto_gen.go +++ b/server/wheelserver/mtb/mtb.auto_gen.go @@ -110,6 +110,7 @@ type ShopGoods struct { shop_id int32 goods_id int32 item_id int32 + amount int32 _flags1_ uint64 _flags2_ uint64 @@ -482,6 +483,14 @@ func (this *ShopGoods) HasItemId() bool { return (this._flags1_ & (uint64(1) << 3)) > 0 } +func (this *ShopGoods) GetAmount() int32 { + return this.amount +} + +func (this *ShopGoods) HasAmount() bool { + return (this._flags1_ & (uint64(1) << 4)) > 0 +} + func (this *Config) GetShopSecret() string { return this.shop_secret } @@ -567,6 +576,7 @@ func (this *ShopGoods) LoadFromKv(kv map[string]interface{}) { f5.ReadMetaTableField(&this.shop_id, "shop_id", &this._flags1_, 1, kv) f5.ReadMetaTableField(&this.goods_id, "goods_id", &this._flags1_, 2, kv) f5.ReadMetaTableField(&this.item_id, "item_id", &this._flags1_, 3, kv) + f5.ReadMetaTableField(&this.amount, "amount", &this._flags1_, 4, kv) } func (this *Config) LoadFromKv(kv map[string]interface{}) { diff --git a/server/wheelserver/proto/mt.proto b/server/wheelserver/proto/mt.proto index fda7a0e3..4563083c 100644 --- a/server/wheelserver/proto/mt.proto +++ b/server/wheelserver/proto/mt.proto @@ -89,6 +89,7 @@ message ShopGoods optional int32 shop_id = 1; optional int32 goods_id = 2; optional int32 item_id = 3; + optional int32 amount = 4; } message Config diff --git a/server/wheelserver/service/award.go b/server/wheelserver/service/award.go index a3c55000..21e0943d 100644 --- a/server/wheelserver/service/award.go +++ b/server/wheelserver/service/award.go @@ -2,10 +2,10 @@ package service import ( "f5" - "main/vo" + "main/constant" "main/model" "main/mt" - "main/constant" + "main/vo" ) type award struct { @@ -29,6 +29,7 @@ func (this *award) AddItem(accountId string, itemId int32, itemNum int32, baseVo user.AddSpecDice(itemNum) baseVo.GetOrCreateSideEffect().User = new(vo.User) baseVo.GetOrCreateSideEffect().User.FromModel(user) + baseVo.GetOrCreateSideEffect().User.HourlyEarnings = Chip.GetHourEarning(user.AccountId) } return } diff --git a/server/wheelserver/service/chip.go b/server/wheelserver/service/chip.go index 6f6fbcd7..0b9b3e10 100644 --- a/server/wheelserver/service/chip.go +++ b/server/wheelserver/service/chip.go @@ -2,8 +2,10 @@ package service import ( "f5" - "main/model" "main/constant" + "main/model" + "main/mt" + "q5" ) type chip struct { @@ -33,3 +35,16 @@ func (this *chip) CalcScore(accountId string) { } } + +func (this *chip) GetHourEarning(accountId string) string { + err, chips := this.List(accountId) + if err == nil { + earnings := int32(0) + for _, chipitem := range chips { + itemcfg := mt.Table.Item.GetById(int64(chipitem.ItemId)) + earnings += itemcfg.GetProduce() / (itemcfg.GetTime() / int32(60)) + } + return q5.SafeToString(earnings) + } + return "0" +}