103 lines
2.4 KiB
Go
103 lines
2.4 KiB
Go
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
|
|
}
|