package model import ( "fmt" "github.com/codinl/go-logger" "golang.org/x/sync/errgroup" ) //go:generate goqueryset -in store.go // gen:qs type Store struct { Model Name string `json:"name"` // 门店名称 Img string `json:"img"` // 门面图 Tel string `json:"tel" gorm:"type:varchar(20)"` // 电话 Province string `json:"province" gorm:"type:varchar(100)"` // 省 City string `json:"city" gorm:"type:varchar(100)"` // 市 District string `json:"district" gorm:"type:varchar(100)"` // 区 Address string `json:"address" gorm:"type:varchar(100)"` // 详细地址 Longitude float64 `json:"longitude" gorm:"column:longitude"` // 经度 Latitude float64 `json:"latitude" gorm:"column:latitude"` // 纬度 } func (*Store) TableName() string { return "store" } type GameCardStock struct { Store Stock uint32 `json:"stock"` } func GetStoreList(gameId uint64) ([]GameCardStock, error) { var eg errgroup.Group stores := make([]Store, 0) stocks := make([]GameCardGoodsStock, 0) list := make([]GameCardStock, 0) storesCh := make(chan *[]Store, 0) eg.Go(func() error { gameStore := make([]Store, 0) err := NewStoreQuerySet(DB).OrderDescByCreatedAt().All(&gameStore) if err != nil && err != RecordNotFound { logger.Errorf("err:%+v", err) return err } storesCh <- &gameStore return nil }) if gameId == 0 { stores = * <-storesCh fmt.Println("stores:", stores) for i, _ := range stores { cardStock := GameCardStock{ Store: stores[i], Stock: 0, } list = append(list, cardStock) } return list, nil } eg.Go(func() error { err := NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(gameId).All(&stocks) if err != nil { logger.Errorf("err:%+v", err) return err } return nil }) stores = * <-storesCh err := eg.Wait() if err != nil { logger.Errorf("err:%+v", err) return list, err } stockMap := make(map[uint64]uint32) for i, _ := range stocks { stockMap[stocks[i].StoreId] = stocks[i].RentStock } for i, _ := range stores { rentStock, ok := stockMap[uint64(stores[i].ID)] if ok { cardStock := GameCardStock{ Store: stores[i], Stock: rentStock, } list = append(list, cardStock) } } return list, nil } func (m *Store) Info() error { err := NewStoreQuerySet(DB).IDEq(m.ID).One(m) if err != nil { logger.Error("err:", err) return err } return nil }