diff --git a/model/autogenerated_game_card.go b/model/autogenerated_game_card.go index 193c27b..210748d 100644 --- a/model/autogenerated_game_card.go +++ b/model/autogenerated_game_card.go @@ -4151,6 +4151,12 @@ func (qs GameCardQuerySet) OrderAscByStockCount() GameCardQuerySet { return qs.w(qs.db.Order("stock_count ASC")) } +// OrderAscByStockState is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) OrderAscByStockState() GameCardQuerySet { + return qs.w(qs.db.Order("stock_state ASC")) +} + // OrderAscByTotalCount is an autogenerated method // nolint: dupl func (qs GameCardQuerySet) OrderAscByTotalCount() GameCardQuerySet { @@ -4351,6 +4357,12 @@ func (qs GameCardQuerySet) OrderDescByStockCount() GameCardQuerySet { return qs.w(qs.db.Order("stock_count DESC")) } +// OrderDescByStockState is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) OrderDescByStockState() GameCardQuerySet { + return qs.w(qs.db.Order("stock_state DESC")) +} + // OrderDescByTotalCount is an autogenerated method // nolint: dupl func (qs GameCardQuerySet) OrderDescByTotalCount() GameCardQuerySet { @@ -4705,6 +4717,62 @@ func (qs GameCardQuerySet) StockCountNotIn(stockCount ...uint32) GameCardQuerySe return qs.w(qs.db.Where("stock_count NOT IN (?)", stockCount)) } +// StockStateEq is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) StockStateEq(stockState uint32) GameCardQuerySet { + return qs.w(qs.db.Where("stock_state = ?", stockState)) +} + +// StockStateGt is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) StockStateGt(stockState uint32) GameCardQuerySet { + return qs.w(qs.db.Where("stock_state > ?", stockState)) +} + +// StockStateGte is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) StockStateGte(stockState uint32) GameCardQuerySet { + return qs.w(qs.db.Where("stock_state >= ?", stockState)) +} + +// StockStateIn is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) StockStateIn(stockState ...uint32) GameCardQuerySet { + if len(stockState) == 0 { + qs.db.AddError(errors.New("must at least pass one stockState in StockStateIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("stock_state IN (?)", stockState)) +} + +// StockStateLt is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) StockStateLt(stockState uint32) GameCardQuerySet { + return qs.w(qs.db.Where("stock_state < ?", stockState)) +} + +// StockStateLte is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) StockStateLte(stockState uint32) GameCardQuerySet { + return qs.w(qs.db.Where("stock_state <= ?", stockState)) +} + +// StockStateNe is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) StockStateNe(stockState uint32) GameCardQuerySet { + return qs.w(qs.db.Where("stock_state != ?", stockState)) +} + +// StockStateNotIn is an autogenerated method +// nolint: dupl +func (qs GameCardQuerySet) StockStateNotIn(stockState ...uint32) GameCardQuerySet { + if len(stockState) == 0 { + qs.db.AddError(errors.New("must at least pass one stockState in StockStateNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("stock_state NOT IN (?)", stockState)) +} + // TotalCountEq is an autogenerated method // nolint: dupl func (qs GameCardQuerySet) TotalCountEq(totalCount uint32) GameCardQuerySet { @@ -5000,6 +5068,13 @@ func (u GameCardUpdater) SetStockCount(stockCount uint32) GameCardUpdater { return u } +// SetStockState is an autogenerated method +// nolint: dupl +func (u GameCardUpdater) SetStockState(stockState uint32) GameCardUpdater { + u.fields[string(GameCardDBSchema.StockState)] = stockState + return u +} + // SetTotalCount is an autogenerated method // nolint: dupl func (u GameCardUpdater) SetTotalCount(totalCount uint32) GameCardUpdater { @@ -5060,6 +5135,7 @@ var GameCardDBSchema = struct { NewProducts GameCardDBSchemaField Status GameCardDBSchemaField StockCount GameCardDBSchemaField + StockState GameCardDBSchemaField TotalCount GameCardDBSchemaField GameTypeId GameCardDBSchemaField GoodsGalleryUrl GameCardDBSchemaField @@ -5086,6 +5162,7 @@ var GameCardDBSchema = struct { NewProducts: GameCardDBSchemaField("new_products"), Status: GameCardDBSchemaField("status"), StockCount: GameCardDBSchemaField("stock_count"), + StockState: GameCardDBSchemaField("stock_state"), TotalCount: GameCardDBSchemaField("total_count"), GameTypeId: GameCardDBSchemaField("game_type_id"), GoodsGalleryUrl: GameCardDBSchemaField("goods_gallery_url"), @@ -5116,6 +5193,7 @@ func (o *GameCard) Update(db *gorm.DB, fields ...GameCardDBSchemaField) error { "new_products": o.NewProducts, "status": o.Status, "stock_count": o.StockCount, + "stock_state": o.StockState, "total_count": o.TotalCount, "game_type_id": o.GameTypeId, "goods_gallery_url": o.GoodsGalleryUrl, diff --git a/model/game_card.go b/model/game_card.go index f490863..abb8417 100644 --- a/model/game_card.go +++ b/model/game_card.go @@ -21,6 +21,7 @@ type GameCard struct { NewProducts uint8 `json:"new_products"` // 新品: 1-新品 2-非新品 Status uint8 `json:"status"` // 状态: 1-上架 2-下架 StockCount uint32 `json:"stock_count"` // 库存 + StockState uint32 `json:"stock_state"` // 1-库存 2-门店库存 3-无库存 TotalCount uint32 `json:"total_count"` // 总量 GameTypeId uint32 `json:"game_type_id"` // 游戏类型 GoodsGalleryUrl string `json:"goods_gallery_url" gorm:"type:text;comment:'轮播图'"` // 轮播图 @@ -81,6 +82,8 @@ func (m *User) IsMember() bool { return false } +//var GameCardListUpdateTime = time.Time{} + func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId, uid uint32) ([]GameCard, uint32, error) { var ( cards []GameCard = make([]GameCard, 0) @@ -103,7 +106,8 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId switch sortType { case 1: // 排序类型 1-默认 - //qs = qs.OrderDescByCreatedAt() + qs = qs.OrderDescByCreatedAt() + //qs = qs.OrderAscByStockState() case 2: // 排序类型 2-新品 qs = qs.NewProductsEq(1) @@ -132,65 +136,141 @@ func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId return cards, 0, err } } - if storeId != 0 { - var cardStocks []GameCardGoodsStock - err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).RentStockGt(0).All(&cardStocks) - if err != nil { - logger.Error("GetGameIdByType err:", err) - return cards, 0, err - } - if len(cardStocks) <= 0 { - return cards, 0, nil - } - gameIds := make([]uint32, 0) - for i, _ := range cardStocks { - gameIds = append(gameIds, uint32(cardStocks[i].GameCardId)) - } - if len(gameIds) <= 0 { - return cards, 0, nil - } - qs = qs.IDIn(gameIds...) + if sortType == 1 { + } + hideGamePrice := uint32(30000) var user *User if uid != 0 { user = GetUserByUid(uid) if user.MemberExpire.After(time.Now()) && user.MemberExpire.AddDate(0, 0, -14).Before(time.Now()) { - qs = qs.RealPriceLte(30000) + qs = qs.RealPriceLte(hideGamePrice) } } + gameIds := make([]uint32, 0) + gameIdMap := make(map[uint32]uint32) + 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) + if err != nil { + logger.Error("GetGameIdByType err:", err) + return cards, 0, err + } + + for i, _ := range cardStocks { + _, ok := gameIdMap[uint32(cardStocks[i].GameCardId)] + if !ok { + gameIds = append(gameIds, uint32(cardStocks[i].GameCardId)) + gameIdMap[uint32(cardStocks[i].GameCardId)] = 1 + } + } + + err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).RentStockGt(0).OrderDescByRentStock().All(&cardStocks) + if err != nil { + logger.Error("GetGameIdByType err:", err) + return cards, 0, err + } + for i, _ := range cardStocks { + _, ok := gameIdMap[uint32(cardStocks[i].GameCardId)] + if !ok { + gameIds = append(gameIds, uint32(cardStocks[i].GameCardId)) + gameIdMap[uint32(cardStocks[i].GameCardId)] = 2 + } + } + + err = NewGameCardGoodsStockQuerySet(DB).StoreIdNe(uint64(storeId)).RentStockEq(0).All(&cardStocks) + if err != nil { + logger.Error("GetGameIdByType err:", err) + return cards, 0, err + } + for i, _ := range cardStocks { + _, ok := gameIdMap[uint32(cardStocks[i].GameCardId)] + if !ok { + gameIds = append(gameIds, uint32(cardStocks[i].GameCardId)) + gameIdMap[uint32(cardStocks[i].GameCardId)] = 3 + } + } + qs = qs.IDIn(gameIds...) + } + if count == 0 { count, err = qs.Count() } - - err = qs.OrderDescByCreatedAt().Offset(page * pageSize).Limit(pageSize).All(&cards) - if err != nil && err != RecordNotFound { - logger.Error("err:", err) - return cards, 0, err - } totalPage = uint32(count/pageSize + 1) - - 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 + //err = qs.OrderDescByCreatedAt().Offset(page * pageSize).Limit(pageSize).All(&cards) + if storeId == 0 { + err = qs.Offset(page * pageSize).Limit(pageSize).All(&cards) + if err != nil && err != RecordNotFound { + logger.Error("err:", err) + return cards, 0, err } + } else { + err = qs.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 { + cardMap[cards[i].ID] = cards[i] + } + for i, _ := range gameIds { + v, ok1 := cardMap[gameIds[i]] + v2, _ := gameIdMap[gameIds[i]] + v.StockState = v2 + if ok1 { + list = append(list, v) + } + } + if uint32(page) < totalPage && totalPage != 1 { + cards = list[page*pageSize : (page+1)*pageSize] + } else { + cards = list[page*pageSize:] + } + } + + //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 } diff --git a/model/model_test.go b/model/model_test.go index df09275..e67bace 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -105,16 +105,19 @@ func InitTestDB() { //&CooperativeDeductSettle{}, //&XcxRole{}, - &Goods{}, - &GoodsCat{}, - &GoodsAttribute{}, - &GoodsAttributeCombo{}, - &Spec{}, - &SpecValue{}, - &GoodsOrder{}, - &OperationLog{}, - &DeliverTask{}, - &DeliverTaskSub{}, + // 商城 + //&Goods{}, + //&GoodsCat{}, + //&GoodsAttribute{}, + //&GoodsAttributeCombo{}, + //&Spec{}, + //&SpecValue{}, + //&GoodsOrder{}, + //&OperationLog{}, + //&DeliverTask{}, + //&DeliverTaskSub{}, + + &GameCard{}, ) fmt.Println("DB init success") @@ -150,63 +153,64 @@ func InitDBProd() { DBProd.LogMode(false) DBProd.SingularTable(true) DBProd.AutoMigrate( - //&RedeemCode{}, - //&UserRedeemCode{}, - //&GameCardGoods{}, + //&RedeemCode{}, + //&UserRedeemCode{}, + //&GameCardGoods{}, - //&UserShareCardBill{}, - //&ShareCardBillGame{}, - //&UserShareCard{}, - //&ShareCardVmRecord{}, - //&UserShareCardVm{}, - //&ShareCardDateVm{}, - //&ShareCardGameVm{}, - //&ShareCardRetrieve{}, - //&ShareCardRetrieveCard{}, - //&GameCardLabel{}, - //&CardIssueFeedback{}, + //&UserShareCardBill{}, + //&ShareCardBillGame{}, + //&UserShareCard{}, + //&ShareCardVmRecord{}, + //&UserShareCardVm{}, + //&ShareCardDateVm{}, + //&ShareCardGameVm{}, + //&ShareCardRetrieve{}, + //&ShareCardRetrieveCard{}, + //&GameCardLabel{}, + //&CardIssueFeedback{}, - //&GameCard{}, - //&FundRecord{}, - //&User{}, + //&GameCard{}, + //&FundRecord{}, + //&User{}, - //&GameCard{}, - //&FundRecord{}, - //&User{}, - //&UserAttendance{}, - //&UserAttendanceRecord{}, + //&GameCard{}, + //&FundRecord{}, + //&User{}, + //&UserAttendance{}, + //&UserAttendanceRecord{}, - //&Store{}, - //&GameCard{}, - //&GameCardGoods{}, - //&GameCardGoodsStock{}, - //&User{}, - //&Order{}, - //&OrderCard{}, - // - //&OperationLog{}, - //&CooperativeBusiness{}, - //&CooperativeMemberDeduct{}, - //&CooperativeAssistantMemberDeduct{}, - // - //&CooperativeMemberPromotion{}, - //&CooperativeMemberPromotionStore{}, - //&CooperativeMemberPromotionDay{}, - //&CooperativeMemberPromotionStoreDay{}, - //&InviteMemberReport{}, - //&CooperativeDeductSettle{}, - //&XcxRole{}, + //&Store{}, + //&GameCard{}, + //&GameCardGoods{}, + //&GameCardGoodsStock{}, + //&User{}, + //&Order{}, + //&OrderCard{}, + // + //&OperationLog{}, + //&CooperativeBusiness{}, + //&CooperativeMemberDeduct{}, + //&CooperativeAssistantMemberDeduct{}, + // + //&CooperativeMemberPromotion{}, + //&CooperativeMemberPromotionStore{}, + //&CooperativeMemberPromotionDay{}, + //&CooperativeMemberPromotionStoreDay{}, + //&InviteMemberReport{}, + //&CooperativeDeductSettle{}, + //&XcxRole{}, - &Goods{}, - &GoodsCat{}, - &GoodsAttribute{}, - &GoodsAttributeCombo{}, - &Spec{}, - &SpecValue{}, - &GoodsOrder{}, - &OperationLog{}, - &DeliverTask{}, - &DeliverTaskSub{}, + // 商城 + //&Goods{}, + //&GoodsCat{}, + //&GoodsAttribute{}, + //&GoodsAttributeCombo{}, + //&Spec{}, + //&SpecValue{}, + //&GoodsOrder{}, + //&OperationLog{}, + //&DeliverTask{}, + //&DeliverTaskSub{}, ) if err := DBProd.DB().Ping(); err != nil {