2021-06-30 02:12:05 +00:00
|
|
|
|
package model
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"github.com/codinl/go-logger"
|
|
|
|
|
"golang.org/x/sync/errgroup"
|
2022-05-10 07:17:34 +00:00
|
|
|
|
"time"
|
2021-06-30 02:12:05 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
//go:generate goqueryset -in store.go
|
|
|
|
|
// gen:qs
|
|
|
|
|
type Store struct {
|
|
|
|
|
Model
|
|
|
|
|
|
2022-05-10 07:17:34 +00:00
|
|
|
|
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"` // 纬度
|
|
|
|
|
IsOnline uint32 `json:"is_online"` // 在线
|
|
|
|
|
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id
|
|
|
|
|
CooperativeName string `json:"cooperative_name"` // 合作商名称
|
2021-06-30 02:12:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (*Store) TableName() string {
|
|
|
|
|
return "store"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type GameCardStock struct {
|
|
|
|
|
Store
|
|
|
|
|
Stock uint32 `json:"stock"`
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-26 06:29:39 +00:00
|
|
|
|
func GetStoreList(cardInfos []CardInfo) ([]GameCardStock, error) {
|
2021-06-30 02:12:05 +00:00
|
|
|
|
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)
|
2022-04-02 08:40:19 +00:00
|
|
|
|
err := NewStoreQuerySet(DB).IsOnlineEq(1).OrderDescByCreatedAt().All(&gameStore)
|
2021-06-30 02:12:05 +00:00
|
|
|
|
if err != nil && err != RecordNotFound {
|
|
|
|
|
logger.Errorf("err:%+v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
storesCh <- &gameStore
|
|
|
|
|
return nil
|
|
|
|
|
})
|
|
|
|
|
|
2022-02-26 06:29:39 +00:00
|
|
|
|
if len(cardInfos) == 0 {
|
2022-04-02 08:40:19 +00:00
|
|
|
|
stores = *<-storesCh
|
2022-05-12 05:42:45 +00:00
|
|
|
|
//fmt.Println("stores:", stores)
|
2021-06-30 02:12:05 +00:00
|
|
|
|
for i, _ := range stores {
|
|
|
|
|
cardStock := GameCardStock{
|
|
|
|
|
Store: stores[i],
|
|
|
|
|
Stock: 0,
|
|
|
|
|
}
|
|
|
|
|
list = append(list, cardStock)
|
|
|
|
|
}
|
|
|
|
|
return list, nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-26 06:29:39 +00:00
|
|
|
|
gameIds := make([]uint64, 0)
|
|
|
|
|
cardInfoMap := make(map[uint64]uint32, 0)
|
|
|
|
|
for i, _ := range cardInfos {
|
|
|
|
|
gameIds = append(gameIds, uint64(cardInfos[i].GameCardId))
|
|
|
|
|
cardInfoMap[uint64(cardInfos[i].GameCardId)] = cardInfos[i].Count
|
|
|
|
|
}
|
2021-06-30 02:12:05 +00:00
|
|
|
|
eg.Go(func() error {
|
2022-02-26 06:29:39 +00:00
|
|
|
|
//err := NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(gameId).RentStockGt(0).All(&stocks)
|
|
|
|
|
err := NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameIds...).RentStockGt(0).All(&stocks)
|
2021-06-30 02:12:05 +00:00
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Errorf("err:%+v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
})
|
2022-04-02 08:40:19 +00:00
|
|
|
|
stores = *<-storesCh
|
2021-06-30 02:12:05 +00:00
|
|
|
|
err := eg.Wait()
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Errorf("err:%+v", err)
|
|
|
|
|
return list, err
|
|
|
|
|
}
|
2022-02-26 06:29:39 +00:00
|
|
|
|
//stockMap := make(map[uint64]uint32)
|
|
|
|
|
//for i, _ := range stocks {
|
|
|
|
|
// count, ok := cardInfoMap[uint64(stocks[i].GameCardId)]
|
|
|
|
|
// if ok && count <= stocks[i].RentStock {
|
|
|
|
|
// stockMap[stocks[i].StoreId] = stocks[i].RentStock
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
storeStockMap := make(map[uint64]map[uint64]uint32, 0)
|
2021-06-30 02:12:05 +00:00
|
|
|
|
for i, _ := range stocks {
|
2022-02-26 06:29:39 +00:00
|
|
|
|
//count, ok := cardInfoMap[uint64(stocks[i].GameCardId)]
|
|
|
|
|
//if ok && count <= stocks[i].RentStock {
|
|
|
|
|
// stockMap[stocks[i].StoreId] = stocks[i].RentStock
|
|
|
|
|
//}
|
|
|
|
|
stockMap, ok := storeStockMap[stocks[i].StoreId]
|
|
|
|
|
if !ok {
|
|
|
|
|
stockMap = make(map[uint64]uint32, 0)
|
|
|
|
|
}
|
|
|
|
|
stockMap[stocks[i].GameCardId] = stocks[i].RentStock
|
|
|
|
|
storeStockMap[stocks[i].StoreId] = stockMap
|
2021-06-30 02:12:05 +00:00
|
|
|
|
}
|
2022-02-26 06:29:39 +00:00
|
|
|
|
|
2021-06-30 02:12:05 +00:00
|
|
|
|
for i, _ := range stores {
|
2022-02-26 06:29:39 +00:00
|
|
|
|
stockMap, ok := storeStockMap[uint64(stores[i].ID)]
|
|
|
|
|
if ok && IsStoreStockEnough(cardInfos, stockMap) {
|
2021-06-30 02:12:05 +00:00
|
|
|
|
cardStock := GameCardStock{
|
|
|
|
|
Store: stores[i],
|
2022-02-26 06:29:39 +00:00
|
|
|
|
Stock: 0,
|
2021-06-30 02:12:05 +00:00
|
|
|
|
}
|
|
|
|
|
list = append(list, cardStock)
|
|
|
|
|
}
|
2022-02-26 06:29:39 +00:00
|
|
|
|
|
|
|
|
|
//if ok {
|
|
|
|
|
// cardStock := GameCardStock{
|
|
|
|
|
// Store: stores[i],
|
|
|
|
|
// Stock: rentStock,
|
|
|
|
|
// }
|
|
|
|
|
// list = append(list, cardStock)
|
|
|
|
|
//}
|
2021-06-30 02:12:05 +00:00
|
|
|
|
}
|
2022-05-12 05:42:45 +00:00
|
|
|
|
//fmt.Println("list:", list)
|
2021-06-30 02:12:05 +00:00
|
|
|
|
return list, nil
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-13 09:35:10 +00:00
|
|
|
|
func GetDisplayStoreList(displayType uint32) ([]Store, error) {
|
|
|
|
|
stores := make([]Store, 0)
|
|
|
|
|
qs := NewStoreQuerySet(DB).IsOnlineEq(1)
|
|
|
|
|
if displayType == 1 {
|
|
|
|
|
qs = qs.CooperativeBusinessIdEq(1)
|
|
|
|
|
}
|
|
|
|
|
err := qs.OrderDescByID().All(&stores)
|
|
|
|
|
if err != nil && err != RecordNotFound {
|
|
|
|
|
logger.Errorf("err:%+v", err)
|
|
|
|
|
return stores, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return stores, nil
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-30 02:12:05 +00:00
|
|
|
|
func (m *Store) Info() error {
|
|
|
|
|
err := NewStoreQuerySet(DB).IDEq(m.ID).One(m)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error("err:", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
2021-12-25 08:38:30 +00:00
|
|
|
|
|
2022-05-10 07:17:34 +00:00
|
|
|
|
const (
|
|
|
|
|
CannibalizeTaskStatusNotImportGoods = 1 // 1-待填调拨卡
|
|
|
|
|
CannibalizeTaskStatusNotDeliverGoods = 2 // 2-待发货
|
|
|
|
|
CannibalizeTaskStatusDeliveredGoods = 3 // 3-已发货
|
|
|
|
|
CannibalizeTaskStatusInStorage = 4 // 4-已入库
|
|
|
|
|
CannibalizeTaskStatusDel = 5 // 4-已删除
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// gen:qs
|
2021-12-25 08:38:30 +00:00
|
|
|
|
type CannibalizeStockTask struct {
|
|
|
|
|
Model
|
|
|
|
|
FromStoreId uint32 `json:"from_store_id"`
|
|
|
|
|
ToStoreId uint32 `json:"to_store_id"`
|
|
|
|
|
TaskId uint32 `json:"task_id"`
|
2022-05-10 07:17:34 +00:00
|
|
|
|
//GameCardId uint32 `json:"game_card_id"` // 游戏卡id
|
|
|
|
|
Count uint32 `json:"count"` // 总数量
|
|
|
|
|
Status uint8 `json:"status"` // 1-待填调拨卡 2-待发货 3-已发货 4-已入库
|
|
|
|
|
DeliveryTime time.Time `json:"delivery_time"`
|
|
|
|
|
InStorageTime time.Time `json:"in_storage_time"`
|
|
|
|
|
|
|
|
|
|
FromStoreName string `json:"from_store_name" gorm:"-"`
|
|
|
|
|
ToStoreName string `json:"to_store_name" gorm:"-"`
|
|
|
|
|
// cannibalize_stock_task
|
2021-12-25 08:38:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-05-10 07:17:34 +00:00
|
|
|
|
// gen:qs
|
2021-12-25 08:38:30 +00:00
|
|
|
|
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"` // 编号
|
2022-05-10 07:17:34 +00:00
|
|
|
|
GameCardName string `json:"game_card_name" gorm:"–"`
|
|
|
|
|
// cannibalize_game_card_goods
|
2021-12-25 08:38:30 +00:00
|
|
|
|
}
|
2022-02-26 06:29:39 +00:00
|
|
|
|
|
|
|
|
|
func IsStoreStockEnough(cardInfos []CardInfo, gameStockMap map[uint64]uint32) bool {
|
|
|
|
|
//haveStock =
|
|
|
|
|
for i, _ := range cardInfos {
|
|
|
|
|
stock, ok := gameStockMap[uint64(cardInfos[i].GameCardId)]
|
|
|
|
|
if !ok || stock < cardInfos[i].Count {
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true
|
|
|
|
|
}
|
2022-05-10 07:17:34 +00:00
|
|
|
|
|
|
|
|
|
func CannibalizeStockTaskListSetInfo(tasks []CannibalizeStockTask) []CannibalizeStockTask {
|
|
|
|
|
if len(tasks) == 0 {
|
|
|
|
|
return tasks
|
|
|
|
|
}
|
|
|
|
|
storeMap := GetAllStoreMap()
|
|
|
|
|
for i, _ := range tasks {
|
|
|
|
|
toStore, ok1 := storeMap[tasks[i].ToStoreId]
|
|
|
|
|
if ok1 {
|
|
|
|
|
tasks[i].ToStoreName = toStore.Name
|
|
|
|
|
}
|
|
|
|
|
fromStore, ok2 := storeMap[tasks[i].FromStoreId]
|
|
|
|
|
if ok2 {
|
|
|
|
|
tasks[i].FromStoreName = fromStore.Name
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return tasks
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetAllStoreMap() map[uint32]Store {
|
|
|
|
|
storeMap := make(map[uint32]Store, 0)
|
|
|
|
|
var stores []Store
|
|
|
|
|
err := DB.Table("store").Find(&stores).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Errorf("err:%s", err)
|
|
|
|
|
return storeMap
|
|
|
|
|
}
|
|
|
|
|
for i, _ := range stores {
|
|
|
|
|
storeMap[stores[i].ID] = stores[i]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return storeMap
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func CannibalizeGameCardGoodsSetInfo(goodses []CannibalizeGameCardGoods) []CannibalizeGameCardGoods {
|
|
|
|
|
if len(goodses) == 0 {
|
|
|
|
|
return goodses
|
|
|
|
|
}
|
|
|
|
|
ids := make([]uint32, 0)
|
|
|
|
|
for i, _ := range goodses {
|
|
|
|
|
ids = append(ids, goodses[i].GameCardId)
|
|
|
|
|
}
|
|
|
|
|
var gameCards []GameCard
|
|
|
|
|
err := DB.Table("game_card").Where("id IN (?)", ids).Find(&gameCards).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error("err:", err)
|
|
|
|
|
return goodses
|
|
|
|
|
}
|
|
|
|
|
gameCardMap := make(map[uint32]GameCard, 0)
|
|
|
|
|
for i, _ := range gameCards {
|
|
|
|
|
gameCardMap[gameCards[i].ID] = gameCards[i]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for i, _ := range goodses {
|
|
|
|
|
v, ok := gameCardMap[goodses[i].GameCardId]
|
|
|
|
|
if ok {
|
|
|
|
|
goodses[i].GameCardName = v.Name
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//UserOpenMemberRecord{}
|
|
|
|
|
return goodses
|
|
|
|
|
}
|