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).RentStockGt(0).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 } type CannibalizeStockTask struct { Model FromStoreId uint32 `json:"from_store_id"` ToStoreId uint32 `json:"to_store_id"` TaskId uint32 `json:"task_id"` GameCardId uint32 `json:"game_card_id"` // 游戏卡id Count uint32 `json:"count"` Status uint8 `json:"status"` // 1-待填调拨卡 2-待发货 3-已发货 4-已入库 } type CannibalizeGameCardGoods struct { Model CannibalizeStockTaskId uint32 `json:"cannibalize_stock_task_id"` GameCardId uint32 `json:"game_card_id"` // 游戏卡id SerialNumber string `json:"serial_number" gorm:"index"` // 编号 }