From 6792e0e79a1c421d850ea1b00dd8d08a5c6a3366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=94=E5=BF=B5?= <12574910+72wo@users.noreply.github.com> Date: Tue, 10 Mar 2026 22:20:36 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(pet):=20=E6=B7=BB=E5=8A=A0=E5=AE=A0?= =?UTF-8?q?=E7=89=A9=E4=BA=A4=E6=98=93=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增ModPrise接口用于修改宠物售价 - 新增BuyPet接口用于购买宠物 - 修改Pet模型中SalePrice字段类型为float32 - 实现宠物购买逻辑,包括价格验证、余额检查和交易处理 - 更新查询条件以支持宠物交易状态筛选 ``` --- modules/player/controller/admin/pet.go | 31 ++++++++++++++++++ modules/player/model/pet.go | 10 +++--- modules/player/service/pet.go | 45 ++++++++++++++++++++++---- 3 files changed, 75 insertions(+), 11 deletions(-) diff --git a/modules/player/controller/admin/pet.go b/modules/player/controller/admin/pet.go index f88c7511..d3a37d8b 100644 --- a/modules/player/controller/admin/pet.go +++ b/modules/player/controller/admin/pet.go @@ -84,3 +84,34 @@ type PetLevelRes struct { //ID ID int `json:"id"` } +type PriseReq struct { + g.Meta `path:"/modpirse" method:"POST"` + Ctime uint32 `json:"catch_time"` + Price float32 `json:"sale_price"` +} + +func (c *PetBagController) ModPrise(ctx context.Context, req *PriseReq) (res *cool.BaseRes, err error) { + admin := cool.GetAdmin(ctx) + + res = &cool.BaseRes{} + service.NewPetService(uint32(admin.UserId)).UPdatePrice(req.Ctime, req.Price) + + return + +} + +type BuyPetReq struct { + g.Meta `path:"/buy" method:"POST"` + Cid uint32 `json:"id"` +} + +func (c *PetBagController) BuyPet(ctx context.Context, req *BuyPetReq) (res *cool.BaseRes, err error) { + admin := cool.GetAdmin(ctx) + + res = &cool.BaseRes{} + + service.NewPetService(uint32(admin.UserId)).BuyPet(req.Cid) + + return + +} diff --git a/modules/player/model/pet.go b/modules/player/model/pet.go index e15038a5..cead9588 100644 --- a/modules/player/model/pet.go +++ b/modules/player/model/pet.go @@ -25,11 +25,11 @@ const TableNamePet = "player_pet" // Pet mapped from table type Pet struct { Base - PlayerID uint32 `gorm:"not null;index:idx_pet_by_player_id;comment:'所属玩家ID'" json:"player_id"` - Free int `gorm:"not null;default:0;comment:'是否放生'" json:"free"` //"0为放入仓库,1为放入背包 - CatchTime uint32 `gorm:"not null;comment:'捕捉时间'" json:"catch_time"` //唯一键 - IsSale int `gorm:"not null;default:0;comment:'是否出售'" json:"is_sale"` - SalePrice int `gorm:"not null;default:0;comment:'出售价格'" json:"sale_price"` + PlayerID uint32 `gorm:"not null;index:idx_pet_by_player_id;comment:'所属玩家ID'" json:"player_id"` + Free int `gorm:"not null;default:0;comment:'是否放生'" json:"free"` //"0为放入仓库,1为放入背包 + CatchTime uint32 `gorm:"not null;comment:'捕捉时间'" json:"catch_time"` //唯一键 + IsSale int `gorm:"not null;default:0;comment:'是否出售'" json:"is_sale"` + SalePrice float32 `gorm:"not null;default:0;comment:'出售价格'" json:"sale_price"` // Owner uint32 `struc:"skip"` //仅作为存储 // FreedTime uint32 `struc:"skip"` //放生时间 //是否可交易,这里应该定义在精灵ID里 diff --git a/modules/player/service/pet.go b/modules/player/service/pet.go index a2188136..479b8c98 100644 --- a/modules/player/service/pet.go +++ b/modules/player/service/pet.go @@ -43,6 +43,39 @@ func (s *PetService) UPdateFree(ctime uint32, free uint32) { "free", free, ).Update() +} +func (s *PetService) UPdatePrice(ctime uint32, Price float32) { + + s.dbm(s.Model).Where("catch_time", ctime).Data("sale_price", Price).Update() + +} +func (s *PetService) BuyPet(pid uint32) error { + var tt *model.Pet + + s.dbm(s.Model).Where("id", pid).Scan(&tt) + if tt == nil { + return fmt.Errorf("没有此精灵") + } + if tt.IsVip != 0 { + return fmt.Errorf("不允许交易") + } + if tt.IsSale == 0 { + return fmt.Errorf("未上架") + } + if tt.SalePrice == 0 { + return fmt.Errorf("未设置价格") + } + + if service.NewBaseSysUserService().GetGold(uint(s.userid)) < int64(tt.SalePrice)*100 { + return fmt.Errorf("余额不足") + } + service.NewBaseSysUserService().UpdateGold(tt.PlayerID, int64(tt.SalePrice)*100) + service.NewBaseSysUserService().UpdateGold(s.userid, -int64(tt.SalePrice)*100) + s.PetAdd(&tt.Data) + s.dbm(s.Model).Where("id", pid).Delete() //删除旧精灵 + + return nil + } func (s *PetService) UPdate(t model.PetInfo) { @@ -168,14 +201,14 @@ func NewPetService(userid uint32) *PetService { Service: &cool.Service{ Model: model.NewPet(), PageQueryOp: &cool.QueryOp{ - FieldEQ: []string{"player_id", "free"}, + FieldEQ: []string{"player_id", "free", "is_sale"}, Where: func(ctx context.Context) [][]interface{} { - var ( - admin = cool.GetAdmin(ctx) - userId = admin.UserId - ) + // var ( + // admin = cool.GetAdmin(ctx) + // // userId = admin.UserId + // ) return [][]interface{}{ - {"player_id", userId, true}, + // {"player_id", userId, true}, {"free", 1, true}, {"is_vip", 0, true}, }