This commit is contained in:
@@ -5,6 +5,8 @@ import (
|
||||
"blazing/modules/player/model"
|
||||
"context"
|
||||
|
||||
dictservice "blazing/modules/dict/service"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
@@ -58,6 +60,65 @@ func (s *ItemService) UPDATE(id uint32, count int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddUniqueItems 为一组互不重复的物品各增加 1 个。
|
||||
// 返回值只包含本次实际成功增加的物品 id。
|
||||
func (s *ItemService) AddUniqueItems(ids []uint32) ([]uint32, error) {
|
||||
if len(ids) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
currentItems := s.CheakItemM(ids...)
|
||||
currentMap := make(map[uint32]int64, len(currentItems))
|
||||
for _, item := range currentItems {
|
||||
currentMap[item.ItemId] = item.ItemCnt
|
||||
}
|
||||
|
||||
updateIDs := make([]uint32, 0, len(ids))
|
||||
insertData := g.List{}
|
||||
successIDs := make([]uint32, 0, len(ids))
|
||||
|
||||
for _, id := range ids {
|
||||
if id == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
itemmax := dictservice.NewDictInfoService().GetMax(int64(id))
|
||||
if itemmax == 0 {
|
||||
continue
|
||||
}
|
||||
if currentMap[id]+1 > int64(itemmax) {
|
||||
continue
|
||||
}
|
||||
|
||||
successIDs = append(successIDs, id)
|
||||
if _, ok := currentMap[id]; ok {
|
||||
updateIDs = append(updateIDs, id)
|
||||
continue
|
||||
}
|
||||
|
||||
insertData = append(insertData, g.Map{
|
||||
"player_id": s.userid,
|
||||
"item_id": id,
|
||||
"item_cnt": 1,
|
||||
"is_vip": cool.Config.ServerInfo.IsVip,
|
||||
})
|
||||
}
|
||||
|
||||
if len(updateIDs) > 0 {
|
||||
if _, err := s.dbm(s.Model).WhereIn("item_id", updateIDs).Increment("item_cnt", 1); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if len(insertData) > 0 {
|
||||
if _, err := s.dbm(s.Model).Data(insertData).Insert(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return successIDs, nil
|
||||
}
|
||||
|
||||
// func (s *ItemService) UPDATEM(ids map[uint32]int) {
|
||||
// if cool.Config.ServerInfo.IsVip != 0 {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user