feat(game): 宠物融合系统添加物品消耗异常处理 - 在宠物融合过程中添加物品扣除失败的错误检查 - 当物品不足时返回ErrInsufficientItems错误码 fix(pet): 宠物仓库管理功能增加数据库操作错误处理 - 在宠物释放到仓库和从仓库取出时验证数据库更新结果 - 添加宠物背包切换功能的错误检查机制 feat(fight):
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"blazing/common/utils"
|
||||
"blazing/cool"
|
||||
basemodel "blazing/modules/base/model"
|
||||
"blazing/modules/base/service"
|
||||
@@ -17,7 +16,7 @@ import (
|
||||
// 获取精灵信息 0是仓库,1是放生
|
||||
func (s *PetService) PetInfo(flag int) []model.Pet {
|
||||
var tt []model.Pet
|
||||
err := s.dbm(s.Model).Where("free", flag).Scan(&tt)
|
||||
err := s.dbm(s.Model).Where("free", flag).Where("is_sale", 0).Scan(&tt)
|
||||
if err != nil {
|
||||
return []model.Pet{}
|
||||
}
|
||||
@@ -42,46 +41,45 @@ func (s *PetService) PetCount(flag int) int {
|
||||
|
||||
}
|
||||
|
||||
func (s *PetService) UPdateFree(ctime uint32, free uint32) {
|
||||
func (s *PetService) UPdateFree(ctime uint32, free uint32) bool {
|
||||
|
||||
s.dbm(s.Model).Where("catch_time", ctime).Where("is_sale", 0).Data(
|
||||
res, _ := s.dbm(s.Model).Where("catch_time", ctime).Where("is_sale", 0).Data(
|
||||
|
||||
"free", free,
|
||||
).Update()
|
||||
|
||||
r, _ := res.RowsAffected()
|
||||
return r > 0
|
||||
}
|
||||
func (s *PetService) UPdatePrice(ctime uint32, Price uint32, is_sale uint32) error {
|
||||
var item1 model.Pet
|
||||
var feeRate float64
|
||||
var err1 error
|
||||
if is_sale == 1 {
|
||||
t, _ := s.dbm(s.Model).Where("is_sale", 1).Count()
|
||||
if t > 3 {
|
||||
return fmt.Errorf("精灵数量已满")
|
||||
}
|
||||
} else {
|
||||
|
||||
s.dbm(s.Model).Where("catch_time", ctime).Scan(&item1)
|
||||
_, feeRate, err1 = item1.GetOffShelfFee()
|
||||
if err1 != nil {
|
||||
return err1
|
||||
}
|
||||
}
|
||||
var p model.Pet
|
||||
s.dbm(s.Model).Where("catch_time", ctime).Scan(&p)
|
||||
if p.SalePrice != 0 && p.SalePrice != Price && utils.IsToday(p.UpdateTime) { //说明要修改价格
|
||||
return fmt.Errorf("一天只允许改价一次")
|
||||
}
|
||||
res0, err := s.dbm(s.Model).
|
||||
|
||||
res, _ := s.dbm(s.Model).
|
||||
Where("catch_time", ctime). // 限定 ctime,避免全表更新
|
||||
Where("sale_price = ?", 0). // 只筛选 sale_price=0 的记录
|
||||
//Where("sale_price = ?", 0). // 只筛选 sale_price=0 的记录
|
||||
Data(g.Map{
|
||||
"sale_price": Price,
|
||||
"is_sale": is_sale,
|
||||
}).Update()
|
||||
g, _ := res.RowsAffected()
|
||||
if g > 0 && is_sale == 0 && feeRate != 0 {
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("修改 sale_price=0 的记录失败:%w", err)
|
||||
}
|
||||
affected0, _ := res0.RowsAffected()
|
||||
if affected0 == 0 {
|
||||
priceUpper := Price * 110 / 100 // 上限 = Price * 1.1(整数运算避免浮点误差)
|
||||
priceLower := Price * 90 / 100 // 下限 = Price * 0.9
|
||||
res, _ := s.dbm(s.Model).Where("catch_time", ctime).WhereBetween("sale_price", priceLower, priceUpper).Data("sale_price", Price, "is_sale", is_sale).Update()
|
||||
t, _ := res.RowsAffected()
|
||||
if t < 0 {
|
||||
return fmt.Errorf("修改失败")
|
||||
}
|
||||
amount1 := item1.CalculateOffShelfAmount(feeRate)
|
||||
service.NewBaseSysUserService().UpdateFreeGold(s.userid, -int64(amount1*100))
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -173,19 +171,20 @@ RETURNING max_ts;
|
||||
})
|
||||
|
||||
}
|
||||
func (s *PetService) UPdate(t model.PetInfo) {
|
||||
func (s *PetService) UPdate(t model.PetInfo) error {
|
||||
|
||||
m := s.dbm(s.Model).Where("catch_time", t.CatchTime)
|
||||
var tt *model.Pet
|
||||
m.Scan(&tt)
|
||||
if tt == nil {
|
||||
return
|
||||
return fmt.Errorf("没有此精灵")
|
||||
}
|
||||
tt.Data = t
|
||||
_, err := m.OnConflict("catch_time").Update(tt)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (s *PetService) PetInfo_One(cachetime uint32) *model.Pet {
|
||||
|
||||
@@ -311,7 +310,8 @@ func NewPetService(userid uint32) *PetService {
|
||||
Service: &cool.Service{
|
||||
Model: model.NewPet(),
|
||||
ListQueryOp: &cool.QueryOp{
|
||||
FieldEQ: []string{"player_id", "free", "is_sale"},
|
||||
AddOrderby: g.MapStrStr{"updateTime": "asc"},
|
||||
FieldEQ: []string{"player_id", "free", "is_sale"},
|
||||
Where: func(ctx context.Context) [][]interface{} {
|
||||
|
||||
return [][]interface{}{
|
||||
|
||||
Reference in New Issue
Block a user