1.优化首页分类游戏查询,按sort_order升序排列;

This commit is contained in:
chenlin 2025-01-03 17:36:54 +08:00
parent ffed1465d3
commit 5086ade42b

View File

@ -1944,13 +1944,14 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
// 通过sortType查询首页分类信息 // 通过sortType查询首页分类信息
var homeCategoryInfo HomeCategory var homeCategoryInfo HomeCategory
err = NewHomeCategoryQuerySet(DB).IDEq(uint32(sortType)).One(&homeCategoryInfo) err = NewHomeCategoryQuerySet(DB).IDEq(uint32(sortType)).One(&homeCategoryInfo)
if err != nil && err != RecordNotFound { if err != nil {
if err == RecordNotFound {
return nil, 0, errors.New("分类ID有误")
}
return nil, 0, err return nil, 0, err
} }
if err == RecordNotFound {
return nil, 0, errors.New("分类ID有误")
}
var gameIdList []uint32
qs := NewGameCardQuerySet(DB).IDNe(914).StatusEq(1) qs := NewGameCardQuerySet(DB).IDNe(914).StatusEq(1)
// 判断是否是全部,或者热门分类 // 判断是否是全部,或者热门分类
if homeCategoryInfo.AllFlag == 1 { // 全部分类、热门分类 if homeCategoryInfo.AllFlag == 1 { // 全部分类、热门分类
@ -1961,7 +1962,8 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
} }
} else { // 新品、经典等类型 } else { // 新品、经典等类型
var homeCategoryGameList []HomeCategoryGame var homeCategoryGameList []HomeCategoryGame
err = NewHomeCategoryGameQuerySet(DB).HomeCategoryIDEq(homeCategoryInfo.ID).All(&homeCategoryGameList) err = NewHomeCategoryGameQuerySet(DB).HomeCategoryIDEq(homeCategoryInfo.ID).OrderAscBySortOrder().
All(&homeCategoryGameList)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err
} }
@ -1970,11 +1972,9 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
return cards, 0, nil return cards, 0, nil
} }
var gameIdList []uint32
for _, item := range homeCategoryGameList { for _, item := range homeCategoryGameList {
gameIdList = append(gameIdList, item.GameID) gameIdList = append(gameIdList, item.GameID)
} }
qs = qs.IDIn(gameIdList...) qs = qs.IDIn(gameIdList...)
} }
@ -1985,7 +1985,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
return cards, 0, err return cards, 0, err
} }
if len(gameIdByType) != 0 { if len(gameIdByType) != 0 {
//qs = qs.GameTypeIdIn(gameIdByType...)
qs = qs.IDIn(gameIdByType...) qs = qs.IDIn(gameIdByType...)
} else { } else {
return cards, 0, err return cards, 0, err
@ -2015,28 +2014,9 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
} }
effectiveStoreListStr := fmt.Sprintf("(%s)", strings.Trim(strings.Join(strings.Fields(fmt.Sprint(effectiveStoreList)), ","), "[]")) effectiveStoreListStr := fmt.Sprintf("(%s)", strings.Trim(strings.Join(strings.Fields(fmt.Sprint(effectiveStoreList)), ","), "[]"))
if sortType == 1 { if homeCategoryInfo.AllFlag == 1 && homeCategoryInfo.OrderFlag != 1 {
if storeId != 0 { if storeId != 0 {
//gameIds := make([]uint32, 0)
////gameIdMap := make(map[uint32]int)
//var cardStocks []GameCardGoodsStock
//err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).RentStockGt(0).OrderDescByRentStock().All(&cardStocks)
//if err != nil {
// logger.Error("GetGameIdByType err:", err)
// return cards, 0, err
//}
//for i, _ := range cardStocks {
// gameIds = append(gameIds, uint32(cardStocks[i].GameCardId))
//}
//if len(gameIds) <= 0 {
// return cards, 0, nil
//}
//qs = qs.IDIn(gameIds...)
var cardStocks []GameCardGoodsStock var cardStocks []GameCardGoodsStock
//err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).RentStockGt(0).
// OrderDescByRentStock().All(&cardStocks)
//DB.Table("game_card_goods_stock").Joins("")
cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id=%d AND a.store_id IN %s AND a.rent_stock>0 ORDER BY b.id ASC;", storeId, effectiveStoreListStr) cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id=%d AND a.store_id IN %s AND a.rent_stock>0 ORDER BY b.id ASC;", storeId, effectiveStoreListStr)
err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error
if err != nil { if err != nil {
@ -2052,8 +2032,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
} }
cardStocks = []GameCardGoodsStock{} cardStocks = []GameCardGoodsStock{}
//err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).RentStockGt(0).
// OrderDescByRentStock().All(&cardStocks)
cardStockSql2 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id!=%d AND a.store_id IN %s AND a.rent_stock>0 ORDER BY b.id ASC;", storeId, effectiveStoreListStr) cardStockSql2 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.store_id!=%d AND a.store_id IN %s AND a.rent_stock>0 ORDER BY b.id ASC;", storeId, effectiveStoreListStr)
err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error
if err != nil { if err != nil {
@ -2069,7 +2047,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
} }
cardStocks = []GameCardGoodsStock{} cardStocks = []GameCardGoodsStock{}
//err = NewGameCardGoodsStockQuerySet(DB).RentStockEq(0).All(&cardStocks)
cardStockSql3 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock=0 AND a.store_id IN %s ORDER BY b.id ASC;", effectiveStoreListStr) cardStockSql3 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock=0 AND a.store_id IN %s ORDER BY b.id ASC;", effectiveStoreListStr)
err = DB.Raw(cardStockSql3).Scan(&cardStocks).Error err = DB.Raw(cardStockSql3).Scan(&cardStocks).Error
if err != nil { if err != nil {
@ -2084,14 +2061,8 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
} }
} }
// 有可能添加了游戏但没添加库存,添加这段代码后不会展示
//if len(gameIds) > 0 {
// qs = qs.IDIn(gameIds...)
//}
} else { } else {
var cardStocks []GameCardGoodsStock var cardStocks []GameCardGoodsStock
//err := NewGameCardGoodsStockQuerySet(DB).RentStockGt(0).
// OrderDescByRentStock().All(&cardStocks)
cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock>0 AND a.store_id IN %s ORDER BY b.id ASC;", effectiveStoreListStr) cardStockSql1 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock>0 AND a.store_id IN %s ORDER BY b.id ASC;", effectiveStoreListStr)
err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error
if err != nil { if err != nil {
@ -2107,7 +2078,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
} }
cardStocks = []GameCardGoodsStock{} cardStocks = []GameCardGoodsStock{}
//err = NewGameCardGoodsStockQuerySet(DB).RentStockEq(0).All(&cardStocks)
cardStockSql2 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock=0 AND a.store_id IN %s ORDER BY b.id ASC;", effectiveStoreListStr) cardStockSql2 := fmt.Sprintf("SELECT a.* FROM game_card_goods_stock a LEFT JOIN game_card b ON a.game_card_id=b.id WHERE a.rent_stock=0 AND a.store_id IN %s ORDER BY b.id ASC;", effectiveStoreListStr)
err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error
if err != nil { if err != nil {
@ -2121,9 +2091,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
gameIdMap[uint32(cardStocks[i].GameCardId)] = 3 gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
} }
} }
//if len(gameIds) > 0 {
// qs = qs.IDIn(gameIds...)
//}
} }
} }
@ -2135,23 +2102,51 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
if count%pageSize == 0 { if count%pageSize == 0 {
totalPage = uint32(count / pageSize) totalPage = uint32(count / pageSize)
} }
//err = qs.OrderDescByCreatedAt().Offset(page * pageSize).Limit(pageSize).All(&cards)
if sortType != 1 { if homeCategoryInfo.AllFlag != 1 {
err = qs.Offset(page * pageSize).Limit(pageSize).All(&cards) //err = qs.Offset(page * pageSize).Limit(pageSize).All(&cards)
err = qs.All(&cards)
if err != nil && err != RecordNotFound { if err != nil && err != RecordNotFound {
logger.Error("err:", err) logger.Error("err:", err)
return cards, 0, err return cards, 0, err
} }
// 根据 gameIdList 的顺序排序 gameCards
gameCardMap := make(map[uint32]GameCard)
for _, card := range cards {
gameCardMap[card.ID] = card
}
// 按照 gameIdList 的顺序重新排列 gameCards
sortedGameCards := make([]GameCard, len(gameIdList))
for i, gameId := range gameIdList {
sortedGameCards[i] = gameCardMap[gameId]
}
// 计算分页的起始和结束索引
startIndex := page * pageSize
if startIndex > len(sortedGameCards) {
startIndex = 0
page = 0
}
endIndex := startIndex + pageSize
if endIndex > len(sortedGameCards) {
endIndex = len(sortedGameCards)
}
// 分页后的数据
pagedGameCards := sortedGameCards[startIndex:endIndex]
cards = pagedGameCards
GameCardListSetStockState(cards, storeId, effectiveStoreList) GameCardListSetStockState(cards, storeId, effectiveStoreList)
} else { } else {
err = qs.OrderDescByID().All(&cards) err = qs.OrderDescByID().All(&cards)
//err = qs.OrderAscByID().All(&cards)
if err != nil && err != RecordNotFound { if err != nil && err != RecordNotFound {
logger.Error("list err:", err) logger.Error("list err:", err)
return cards, 0, err return cards, 0, err
} }
//fmt.Println("page:", page, totalPage)
list := make([]GameCard, 0, len(cards)) list := make([]GameCard, 0, len(cards))
cardMap := make(map[uint32]GameCard, 0) cardMap := make(map[uint32]GameCard, 0)
for i, _ := range cards { for i, _ := range cards {
@ -2185,27 +2180,7 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor
} }
} }
//cardIds := make([]uint64, 0)
//for i, _ := range cards {
// cardIds = append(cardIds, uint64(cards[i].ID))
//}
//var cardStocks []GameCardGoodsStock
//err = NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(cardIds...).All(&cardStocks)
//if err != nil {
// logger.Error("err:", err)
// return cards, totalPage, nil
//}
//cardStockMap := make(map[uint64]uint32, 0)
//for i, _ := range cardStocks {
// cardStockMap[cardStocks[i].GameCardId] += cardStocks[i].RentStock
//}
for i, _ := range cards { for i, _ := range cards {
//stock, ok := cardStockMap[uint64(cards[i].ID)]
//if ok {
// cards[i].StockCount = stock
//}
if user != nil && user.IsMember() { if user != nil && user.IsMember() {
cards[i].RealPrice = 0 cards[i].RealPrice = 0
} }