From 5086ade42bbd71e8590d9cb1594eaf35a43a1c5a Mon Sep 17 00:00:00 2001 From: chenlin Date: Fri, 3 Jan 2025 17:36:54 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E9=A6=96=E9=A1=B5=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E6=B8=B8=E6=88=8F=E6=9F=A5=E8=AF=A2=EF=BC=8C=E6=8C=89?= =?UTF-8?q?sort=5Forder=E5=8D=87=E5=BA=8F=E6=8E=92=E5=88=97=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/game_card.go | 107 +++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 66 deletions(-) diff --git a/model/game_card.go b/model/game_card.go index c26e89a..58532e8 100644 --- a/model/game_card.go +++ b/model/game_card.go @@ -1944,13 +1944,14 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor // 通过sortType查询首页分类信息 var homeCategoryInfo HomeCategory 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 } - if err == RecordNotFound { - return nil, 0, errors.New("分类ID有误") - } + var gameIdList []uint32 qs := NewGameCardQuerySet(DB).IDNe(914).StatusEq(1) // 判断是否是全部,或者热门分类 if homeCategoryInfo.AllFlag == 1 { // 全部分类、热门分类 @@ -1961,7 +1962,8 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor } } else { // 新品、经典等类型 var homeCategoryGameList []HomeCategoryGame - err = NewHomeCategoryGameQuerySet(DB).HomeCategoryIDEq(homeCategoryInfo.ID).All(&homeCategoryGameList) + err = NewHomeCategoryGameQuerySet(DB).HomeCategoryIDEq(homeCategoryInfo.ID).OrderAscBySortOrder(). + All(&homeCategoryGameList) if err != nil { return nil, 0, err } @@ -1970,11 +1972,9 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor return cards, 0, nil } - var gameIdList []uint32 for _, item := range homeCategoryGameList { gameIdList = append(gameIdList, item.GameID) } - qs = qs.IDIn(gameIdList...) } @@ -1985,7 +1985,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor return cards, 0, err } if len(gameIdByType) != 0 { - //qs = qs.GameTypeIdIn(gameIdByType...) qs = qs.IDIn(gameIdByType...) } else { 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)), ","), "[]")) - if sortType == 1 { + if homeCategoryInfo.AllFlag == 1 && homeCategoryInfo.OrderFlag != 1 { 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 - //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) err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error if err != nil { @@ -2052,8 +2032,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor } 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) err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error if err != nil { @@ -2069,7 +2047,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor } 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) err = DB.Raw(cardStockSql3).Scan(&cardStocks).Error 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 { 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) err = DB.Raw(cardStockSql1).Scan(&cardStocks).Error if err != nil { @@ -2107,7 +2078,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor } 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) err = DB.Raw(cardStockSql2).Scan(&cardStocks).Error if err != nil { @@ -2121,9 +2091,6 @@ func NewGetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, stor 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 { totalPage = uint32(count / pageSize) } - //err = qs.OrderDescByCreatedAt().Offset(page * pageSize).Limit(pageSize).All(&cards) - if sortType != 1 { - err = qs.Offset(page * pageSize).Limit(pageSize).All(&cards) + + if homeCategoryInfo.AllFlag != 1 { + //err = qs.Offset(page * pageSize).Limit(pageSize).All(&cards) + err = qs.All(&cards) if err != nil && err != RecordNotFound { logger.Error("err:", 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) } else { err = qs.OrderDescByID().All(&cards) - //err = qs.OrderAscByID().All(&cards) if err != nil && err != RecordNotFound { logger.Error("list err:", err) return cards, 0, err } - //fmt.Println("page:", page, totalPage) + list := make([]GameCard, 0, len(cards)) cardMap := make(map[uint32]GameCard, 0) 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 { - //stock, ok := cardStockMap[uint64(cards[i].ID)] - //if ok { - // cards[i].StockCount = stock - //} if user != nil && user.IsMember() { cards[i].RealPrice = 0 }