1840 lines
55 KiB
Go
1840 lines
55 KiB
Go
package model
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"github.com/codinl/go-logger"
|
|
"github.com/jinzhu/gorm"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
//go:generate goqueryset -in game_card.go
|
|
// gen:qs
|
|
type GameCard struct {
|
|
Model
|
|
|
|
Name string `json:"name" gorm:"index"` // 名称
|
|
Price uint32 `json:"price" gorm:"index"` // 价格
|
|
CoverImg string `json:"cover_img"` // 封面
|
|
OrderCount uint32 `json:"order_count" gorm:"index"` // 订单数
|
|
NewProducts uint8 `json:"new_products"` // 新品: 1-新品 2-非新品
|
|
Status uint8 `json:"status"` // 状态: 1-上架 2-下架
|
|
StockCount uint32 `json:"stock_count"` // 库存
|
|
StockState uint32 `json:"stock_state" gorm:"-"` // 1-库存 2-门店库存 3-无库存
|
|
TotalCount uint32 `json:"total_count"` // 总量
|
|
GameTypeId uint32 `json:"game_type_id"` // 游戏类型
|
|
GoodsGalleryUrl string `json:"goods_gallery_url" gorm:"type:text;comment:'轮播图'"` // 轮播图
|
|
ViewCount uint32 `json:"view_count"` // 查看人数
|
|
Playability uint32 `json:"playability"` // 耐玩度
|
|
Playfulness uint32 `json:"playfulness"` // 好玩度
|
|
GameTime uint32 `json:"game_time"` // 游戏时间
|
|
Likes uint32 `json:"likes"` // 点赞
|
|
DetailInfo string `json:"detail_info" gorm:"type:text;comment:'详情描述'"` // 详情描述
|
|
DetailImg string `json:"detail_img"` // 详情图片
|
|
EstimateVm uint32 `json:"estimate_vm" gorm:"-"` // 预计积分
|
|
RealPrice uint32 `json:"real_price"` // 真实价格
|
|
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id
|
|
CooperativeName string `json:"cooperative_name"` // 合作商名称
|
|
VideoLink string `json:"video_link"` // 链接
|
|
}
|
|
|
|
func (*GameCard) TableName() string {
|
|
return "game_card"
|
|
}
|
|
|
|
// gen:qs
|
|
type GameCardLabel struct {
|
|
Model
|
|
|
|
GameCardId uint32 `json:"game_card_id" gorm:"index"`
|
|
GameLabel string `json:"game_label" gorm:"index"`
|
|
}
|
|
|
|
func (*GameCardLabel) TableName() string {
|
|
return "game_card_label"
|
|
}
|
|
|
|
// gen:qs
|
|
type HomeCarousel struct {
|
|
Model
|
|
|
|
Name string `json:"name" gorm:"index"` // 名称
|
|
Img string `json:"img"` // 图片
|
|
Sort uint32 `json:"sort" gorm:"index"`
|
|
IsShow uint32 `json:"is_show"` // 1-显示 2-隐藏
|
|
Detail string `json:"detail" gorm:"type:text;comment:'详情描述'"`
|
|
Link string `json:"link"`
|
|
ActivityType uint32 `json:"activity_type"` // 活动类型:1-会员续费
|
|
}
|
|
|
|
func (*HomeCarousel) TableName() string {
|
|
return "home_carousel"
|
|
}
|
|
|
|
type CardInfo struct {
|
|
GameCardId uint32 `json:"game_card_id"`
|
|
Count uint32 `json:"count"`
|
|
}
|
|
|
|
func (m *User) IsMember() bool {
|
|
if m.MemberLevel == 2 || m.MemberLevel == 4 || m.MemberLevel == 5 {
|
|
return true
|
|
}
|
|
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)
|
|
totalPage uint32
|
|
count int
|
|
err error
|
|
)
|
|
page = page - 1
|
|
if page < 0 {
|
|
page = 0
|
|
//return cards, 0, errors.New("page is err")
|
|
}
|
|
if pageSize == 0 {
|
|
pageSize = 10
|
|
}
|
|
//count, err := NewGameCardQuerySet(DB).Count()
|
|
//if err != nil {
|
|
// logger.Error("NewGameCardQuerySet err:", err)
|
|
// return cards, 0, err
|
|
//}
|
|
|
|
qs := NewGameCardQuerySet(DB).IDNe(914)
|
|
switch sortType {
|
|
case 1:
|
|
// 排序类型 1-默认
|
|
//qs = qs.OrderDescByCreatedAt()
|
|
//qs = qs.OrderAscByStockState()
|
|
qs = qs.OrderAscByID()
|
|
case 2:
|
|
// 排序类型 2-新品
|
|
qs = qs.NewProductsEq(1)
|
|
//count, err = NewGameCardQuerySet(DB).NewProductsEq(1).Count()
|
|
case 3:
|
|
// 排序类型 3-销量
|
|
qs = qs.OrderDescByOrderCount()
|
|
case 4:
|
|
// 排序类型 4-价格 大到小
|
|
qs = qs.OrderDescByPrice()
|
|
case 5:
|
|
// 排序类型 5-价格 小到大
|
|
qs = qs.OrderAscByPrice()
|
|
}
|
|
qs = qs.StatusEq(1)
|
|
if len(gameTypeIds) > 0 {
|
|
gameIdByType, err := GetGameIdByType(gameTypeIds)
|
|
if err != nil {
|
|
logger.Error("GetGameIdByType err:", err)
|
|
return cards, 0, err
|
|
}
|
|
if len(gameIdByType) != 0 {
|
|
//qs = qs.GameTypeIdIn(gameIdByType...)
|
|
qs = qs.IDIn(gameIdByType...)
|
|
} else {
|
|
return cards, 0, err
|
|
}
|
|
}
|
|
|
|
hideGamePrice := uint32(30000)
|
|
var user *User
|
|
if uid != 0 {
|
|
user = GetUserByUid(uid)
|
|
if user == nil {
|
|
logger.Error("get user err:", err)
|
|
return cards, 0, err
|
|
}
|
|
if user.MemberExpire.After(time.Now()) &&
|
|
user.MemberExpire.AddDate(0, 0, -14).Before(time.Now()) {
|
|
qs = qs.RealPriceLte(hideGamePrice)
|
|
}
|
|
}
|
|
gameIds := make([]uint32, 0)
|
|
gameIdMap := make(map[uint32]uint32)
|
|
|
|
if sortType == 1 {
|
|
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
|
|
}
|
|
}
|
|
|
|
cardStocks = []GameCardGoodsStock{}
|
|
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
|
|
}
|
|
}
|
|
|
|
cardStocks = []GameCardGoodsStock{}
|
|
err = NewGameCardGoodsStockQuerySet(DB).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
|
|
}
|
|
}
|
|
|
|
if len(gameIds) > 0 {
|
|
qs = qs.IDIn(gameIds...)
|
|
}
|
|
} else {
|
|
var cardStocks []GameCardGoodsStock
|
|
err := NewGameCardGoodsStockQuerySet(DB).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
|
|
}
|
|
}
|
|
|
|
cardStocks = []GameCardGoodsStock{}
|
|
err = NewGameCardGoodsStockQuerySet(DB).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
|
|
}
|
|
}
|
|
if len(gameIds) > 0 {
|
|
qs = qs.IDIn(gameIds...)
|
|
}
|
|
}
|
|
}
|
|
|
|
count, err = qs.Count()
|
|
if err != nil {
|
|
logger.Error("count err:", err)
|
|
}
|
|
totalPage = uint32(count/pageSize + 1)
|
|
if count%pageSize == 0 {
|
|
totalPage = uint32(count / pageSize)
|
|
}
|
|
//err = qs.OrderDescByCreatedAt().Offset(page * pageSize).Limit(pageSize).All(&cards)
|
|
if sortType != 1 {
|
|
err = qs.Offset(page * pageSize).Limit(pageSize).All(&cards)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return cards, 0, err
|
|
}
|
|
|
|
GameCardListSetStockState(cards, storeId)
|
|
} else {
|
|
err = qs.OrderDescByID().All(&cards)
|
|
//err = qs.OrderAscByID().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)
|
|
}
|
|
}
|
|
count = len(list)
|
|
totalPage = uint32(count/pageSize + 1)
|
|
if count%pageSize == 0 {
|
|
totalPage = uint32(count / pageSize)
|
|
}
|
|
|
|
if uint32(page) < totalPage-1 && 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
|
|
}
|
|
}
|
|
return cards, totalPage, nil
|
|
}
|
|
|
|
func IsGameCardOnline(gameCardId uint32) (bool, error) {
|
|
count, err := NewGameCardQuerySet(DB).IDEq(gameCardId).StatusEq(1).Count()
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return false, err
|
|
}
|
|
return count == 1, nil
|
|
}
|
|
|
|
func IsGameCardListOnline(gameCards []CardInfo) (bool, error) {
|
|
for _, v := range gameCards {
|
|
count, err := NewGameCardQuerySet(DB).IDEq(v.GameCardId).StatusEq(1).Count()
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return false, err
|
|
}
|
|
if count < 1 {
|
|
return false, nil
|
|
}
|
|
}
|
|
|
|
return true, nil
|
|
}
|
|
|
|
func IsGameCardHaveStoke(storeId, gameCardId uint32) (bool, error) {
|
|
var stock GameCardGoodsStock
|
|
err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(gameCardId)).One(&stock)
|
|
//count, err := NewGameCardQuerySet(DB).IDEq(gameCardId).StatusEq(1).Count()
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return false, err
|
|
}
|
|
// 发货的时候减库存
|
|
return stock.RentStock > 0, nil
|
|
}
|
|
|
|
const (
|
|
GameCardGoodsStatusStock = 1 // 库存中
|
|
GameCardGoodsStatusInWay = 2 // 在途
|
|
GameCardGoodsStatusCustomerHold = 3 // 客户持有
|
|
GameCardGoodsStatusCannibalize = 4 // 调拨
|
|
GameCardGoodsStatusReceivingCard = 5 //
|
|
GameCardGoodsStatusReceivedCard = 6 // 调拨
|
|
GameCardGoodsStatusUnusual = 7 // 异常锁定
|
|
)
|
|
|
|
const (
|
|
GameCardGoodsTypeShare = "user_share" // 用户共享
|
|
GameCardGoodsTypeCommon = "common" // 公共
|
|
)
|
|
|
|
// gen:qs
|
|
type GameCardGoods struct {
|
|
Model
|
|
|
|
GameCardId uint64 `json:"game_card_id"` // 游戏卡id
|
|
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
|
|
Status uint32 `json:"status"` // 状态:1-库存中 2-在途 3-客户持有 4-调拨 5-待收回 6-已收回 7-锁定
|
|
StoreId uint64 `json:"store_id"` // 门店id
|
|
Provider string `json:"provider"` // 供应商
|
|
StockTime time.Time `json:"stock_time"` // 入库时间
|
|
CardType string `json:"card_type" gorm:"index"` // -用户共享 -公共
|
|
FunctionState uint32 `json:"function_state"` // 1-异常 2-正常
|
|
ShareProfitType uint32 `json:"share_profit_type"` // 1-非共享收益卡 2-共享收益卡
|
|
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id
|
|
CooperativeName string `json:"cooperative_name"` // 合作商名称
|
|
|
|
Store *Store `json:"store" gorm:"-"` // 门店
|
|
GameCard *GameCard `json:"game_card" gorm:"-"` // 游戏
|
|
UserShareCardBill *UserShareCardBill `json:"user_share_card_bill" gorm:"-"`
|
|
}
|
|
|
|
func (*GameCardGoods) TableName() string {
|
|
return "game_card_goods"
|
|
}
|
|
|
|
// gen:qs
|
|
type GameCardGoodsStock struct {
|
|
Model
|
|
|
|
StoreId uint64 `json:"store_id"` // 门店id
|
|
GameCardId uint64 `json:"game_card_id"` // 游戏卡id
|
|
StoreStock uint32 `json:"store_stock"` // 门店库存
|
|
RentStock uint32 `json:"rent_stock"` // 租借库存
|
|
UserHoldStock uint32 `json:"user_hold_stock"`
|
|
OrderCount uint32 `json:"order_count"`
|
|
TotalStock uint32 `json:"total_stock"`
|
|
CooperativeBusinessId uint32 `json:"cooperative_business_id" gorm:"index"` // 合作商id
|
|
CooperativeName string `json:"cooperative_name"` // 合作商名称
|
|
|
|
Name string `json:"name" gorm:"-"` // 名称
|
|
CoverImg string `json:"coverImg" gorm:"-"` // 封面
|
|
|
|
}
|
|
|
|
func (*GameCardGoodsStock) TableName() string {
|
|
return "game_card_goods_stock"
|
|
}
|
|
|
|
func GetGameCardInfo(id uint64, storeId uint32) (GameCard, error) {
|
|
game := GameCard{}
|
|
err := NewGameCardQuerySet(DB).IDEq(uint32(id)).One(&game)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return game, err
|
|
}
|
|
|
|
var cardStock GameCardGoodsStock
|
|
if storeId != 0 {
|
|
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(game.ID)).StoreIdEq(uint64(storeId)).One(&cardStock)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return game, nil
|
|
}
|
|
if cardStock.RentStock > 0 {
|
|
game.StockState = 1
|
|
return game, nil
|
|
}
|
|
|
|
cardStock = GameCardGoodsStock{}
|
|
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(game.ID)).
|
|
StoreIdNe(uint64(storeId)).RentStockGt(0).One(&cardStock)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return game, nil
|
|
}
|
|
if cardStock.RentStock > 0 {
|
|
game.StockState = 2
|
|
return game, nil
|
|
}
|
|
} else {
|
|
cardStock = GameCardGoodsStock{}
|
|
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(uint64(game.ID)).RentStockGt(0).One(&cardStock)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return game, nil
|
|
}
|
|
if cardStock.RentStock > 0 {
|
|
game.StockState = 1
|
|
return game, nil
|
|
}
|
|
}
|
|
|
|
game.StockState = 3
|
|
//cardStock := uint32(0)
|
|
//for i, _ := range cardStocks {
|
|
// cardStock += cardStocks[i].RentStock
|
|
//}
|
|
//game.StockCount = cardStock
|
|
|
|
return game, nil
|
|
}
|
|
|
|
func GetGameCardSearch(name string, page, pageSize int, storeId uint32) ([]GameCard, uint32, error) {
|
|
var (
|
|
cards []GameCard = make([]GameCard, 0)
|
|
totalPage uint32
|
|
cardCount = struct {
|
|
Count uint32 `json:"count"`
|
|
}{}
|
|
)
|
|
page -= 1
|
|
if page < 0 {
|
|
page = 0
|
|
}
|
|
if pageSize <= 0 {
|
|
pageSize = 10
|
|
}
|
|
//sqlStore := ""
|
|
//if storeId != 0 {
|
|
// var gameStocks []GameCardGoodsStock
|
|
// err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).All(&gameStocks)
|
|
// if err != nil {
|
|
// logger.Error("game card goods stock err:", err)
|
|
// }
|
|
// if len(gameStocks) == 0 {
|
|
// logger.Error("err:", err)
|
|
// return cards, 0, err
|
|
// }
|
|
// gameCardIds := make([]string, 0, len(gameStocks))
|
|
// for i, _ := range gameStocks {
|
|
// gameCardIds = append(gameCardIds, fmt.Sprintf("%d", gameStocks[i].GameCardId))
|
|
// }
|
|
// sqlStore = fmt.Sprintf(" AND id IN (%s) ", strings.Join(gameCardIds, ","))
|
|
//}
|
|
|
|
countSql := "SELECT COUNT(id) AS count FROM game_card WHERE status=1 AND game_card.name LIKE '%" + name + "%'"
|
|
err := DB.Raw(countSql).Scan(&cardCount).Error
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return cards, 0, err
|
|
}
|
|
|
|
sql := "SELECT game_card.* FROM game_card WHERE status=1 AND game_card.name LIKE '%" + name + "%'"
|
|
//sql := "SELECT game_card.* FROM game_card WHERE status=1 AND game_card.name LIKE '%" + name + "%'" + sqlStore +
|
|
// fmt.Sprintf(" LIMIT %d,%d;", page*pageSize, pageSize)
|
|
err = DB.Raw(sql).Scan(&cards).Error
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return cards, 0, err
|
|
}
|
|
cardMap := make(map[uint32]GameCard, 0)
|
|
cardIds := make([]uint64, 0, len(cards))
|
|
for i, _ := range cards {
|
|
if cards[i].ID == 914 {
|
|
continue
|
|
}
|
|
cardIds = append(cardIds, uint64(cards[i].ID))
|
|
cardMap[cards[i].ID] = cards[i]
|
|
}
|
|
var cardStocks []GameCardGoodsStock
|
|
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(cardIds...).RentStockGt(0).All(&cardStocks)
|
|
if err != nil {
|
|
logger.Error("game card goods stock err:", err)
|
|
return cards, totalPage, nil
|
|
}
|
|
list := make([]GameCard, 0, len(cards))
|
|
stockMap := make(map[uint64]uint32, 0)
|
|
for i, _ := range cardStocks {
|
|
_, ok := stockMap[cardStocks[i].GameCardId]
|
|
if !ok {
|
|
stockMap[cardStocks[i].GameCardId] = 1
|
|
v2, ok2 := cardMap[uint32(cardStocks[i].GameCardId)]
|
|
v2.StockState = 1
|
|
if ok2 {
|
|
list = append(list, v2)
|
|
}
|
|
}
|
|
}
|
|
|
|
for i, _ := range cardIds {
|
|
_, ok := stockMap[cardIds[i]]
|
|
if !ok {
|
|
stockMap[cardIds[i]] = 3
|
|
v2, ok2 := cardMap[uint32(cardIds[i])]
|
|
v2.StockState = 3
|
|
if ok2 {
|
|
list = append(list, v2)
|
|
}
|
|
}
|
|
}
|
|
totalPage = cardCount.Count/uint32(pageSize) + 1
|
|
if cardCount.Count%uint32(pageSize) == 0 {
|
|
totalPage = cardCount.Count / uint32(pageSize)
|
|
}
|
|
|
|
if uint32(page) < totalPage-1 && totalPage != 1 {
|
|
cards = list[page*pageSize : (page+1)*pageSize]
|
|
} else {
|
|
cards = list[page*pageSize:]
|
|
}
|
|
|
|
return cards, totalPage, nil
|
|
}
|
|
|
|
// TODO 订单
|
|
|
|
func GetHomeCarouselList() ([]HomeCarousel, error) {
|
|
carousels := make([]HomeCarousel, 0)
|
|
err := NewHomeCarouselQuerySet(DB).IsShowEq(1).OrderDescBySort().All(&carousels)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return carousels, err
|
|
}
|
|
|
|
return carousels, nil
|
|
}
|
|
|
|
// gen:qs
|
|
type GameCardType struct {
|
|
Model
|
|
|
|
Name string `json:"name"` // 游戏类型
|
|
Sort uint32 `json:"sort" gorm:"index"` // 排序
|
|
//GameCount uint32 `json:"game_count"` // 游戏数量
|
|
}
|
|
|
|
func (*GameCardType) TableName() string {
|
|
return "game_card_type"
|
|
}
|
|
|
|
func GetGameCardTypeList() ([]GameCardType, error) {
|
|
gameTypes := make([]GameCardType, 0)
|
|
err := NewGameCardTypeQuerySet(DB).OrderAscBySort().All(&gameTypes)
|
|
if err != nil {
|
|
logger.Errorf("err:%+v", err)
|
|
return gameTypes, err
|
|
}
|
|
return gameTypes, nil
|
|
}
|
|
|
|
// gen:qs
|
|
type GameType struct {
|
|
Model
|
|
|
|
GameCardId uint64 `json:"gameCardId" gorm:"column:game_card_id;index"` // 游戏卡id
|
|
GameCardTypeId uint64 `json:"gameCardTypeId" gorm:"column:game_card_type_id;index"` // 分类id
|
|
}
|
|
|
|
func (*GameType) TableName() string {
|
|
return "game_type"
|
|
}
|
|
|
|
func GetGameIdByType(gameTypeIds []uint64) ([]uint32, error) {
|
|
gameTypes := make([]GameType, 0)
|
|
err := NewGameTypeQuerySet(DB).GameCardTypeIdIn(gameTypeIds...).All(&gameTypes)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return nil, err
|
|
}
|
|
|
|
gameIds := make([]uint32, 0)
|
|
if len(gameTypes) == 0 {
|
|
return gameIds, nil
|
|
}
|
|
|
|
for i, _ := range gameTypes {
|
|
gameIds = append(gameIds, uint32(gameTypes[i].GameCardId))
|
|
}
|
|
return gameIds, nil
|
|
}
|
|
|
|
//func (m *GameType) GetGameByType(gameIds []int) ([]GameCard, error) {
|
|
// games := make([]GameCard, 0)
|
|
// gameTypes := make([]GameType,0)
|
|
// err := DB.Table(m.TableName()).Where("id in (?)", ids).Find(&gameTypes).Error
|
|
// if err != nil {
|
|
// logger.Error("err:", err)
|
|
// return games, err
|
|
// }
|
|
// gameCardId := make([]uint32,0)
|
|
// for i, _ := range gameTypes {
|
|
// gameCardId= append(gameCardId, uint32(gameTypes[i].GameCardId))
|
|
// }
|
|
// NewGameCardQuerySet(DB).IDIn(gameCardId...).All()
|
|
// return games, nil
|
|
//}
|
|
|
|
func (m *GameCard) GetGameType() ([]GameCardType, error) {
|
|
gameCardTypes := make([]GameCardType, 0)
|
|
gameTypes := make([]GameType, 0)
|
|
err := NewGameTypeQuerySet(DB).GameCardIdEq(uint64(m.ID)).All(&gameTypes)
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return gameCardTypes, err
|
|
}
|
|
gameCardTypeId := make([]uint32, 0)
|
|
for i, _ := range gameTypes {
|
|
gameCardTypeId = append(gameCardTypeId, uint32(gameTypes[i].GameCardTypeId))
|
|
}
|
|
if len(gameCardTypeId) == 0 {
|
|
return gameCardTypes, nil
|
|
}
|
|
err = NewGameCardTypeQuerySet(DB).IDIn(gameCardTypeId...).All(&gameCardTypes)
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return gameCardTypes, err
|
|
}
|
|
return gameCardTypes, nil
|
|
}
|
|
|
|
type RspAliyunStsToken struct {
|
|
AccessKeyId string `json:"access_key_id"`
|
|
AccessKeySecret string `json:"access_key_secret"`
|
|
SecurityToken string `json:"security_token"`
|
|
BucketName string `json:"bucket_name"`
|
|
Expiration uint64 `json:"expiration"`
|
|
}
|
|
|
|
func GetOrderCardMapSerialNumberUnset(list map[uint32]OrderCard, gameCardId uint32) *OrderCard {
|
|
for _, v := range list {
|
|
if v.GameCardId == gameCardId && v.SerialNumber == "" {
|
|
return &v
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *GameCardGoodsStock) AddUserHoldStock(gdb *gorm.DB) error {
|
|
if m.StoreId == 0 || m.GameCardId == 0 {
|
|
return errors.New("store id or game card id is null")
|
|
}
|
|
if gdb == nil {
|
|
gdb = DB
|
|
}
|
|
sql := fmt.Sprintf("UPDATE game_card_goods_stock SET user_hold_stock= user_hold_stock+1 WHERE store_id=%d AND game_card_id=%d;", m.StoreId, m.GameCardId)
|
|
fmt.Println("sql:", sql)
|
|
err := gdb.Exec(sql).Error
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func GetGameCardGoodsBySerialNumber(serialNumber string) (GameCardGoods, error) {
|
|
var gameGoods GameCardGoods
|
|
err := NewGameCardGoodsQuerySet(DB).SerialNumberEq(serialNumber).One(&gameGoods)
|
|
if err != nil {
|
|
logger.Error("gameGoods err:", err)
|
|
return gameGoods, err
|
|
}
|
|
return gameGoods, nil
|
|
}
|
|
|
|
func (m *GameCardGoodsStock) Add(begin *gorm.DB) error {
|
|
if begin == nil {
|
|
begin = DB
|
|
}
|
|
//err := orm.Eloquent.Table("game_card_goods_stock").Where("store_id", m.StoreId).
|
|
// Where("game_card_id", m.GameCardId).Count(&count).Error
|
|
|
|
recordExist, err := QueryRecordExist(fmt.Sprintf(
|
|
"SELECT * FROM game_card_goods_stock WHERE store_id=%d AND game_card_id=%d",
|
|
m.StoreId, m.GameCardId))
|
|
if err != nil {
|
|
logger.Error("game card goods stock record exist err:", err)
|
|
return err
|
|
}
|
|
if !recordExist {
|
|
m.StoreStock = 1
|
|
m.RentStock = 1
|
|
m.TotalStock = 1
|
|
err := begin.Create(m).Error
|
|
if err != nil {
|
|
logger.Error("create ame card goods stock record err:", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
sql := fmt.Sprintf(
|
|
"UPDATE game_card_goods_stock SET rent_stock= rent_stock+1,store_stock=store_stock+1,total_stock=total_stock+1 WHERE store_id=%d AND game_card_id=%d;", m.StoreId, m.GameCardId)
|
|
fmt.Println("sql:", sql)
|
|
err = begin.Exec(sql).Error
|
|
if err != nil {
|
|
logger.Errorf("err:%#v", err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (*GameCardGoods) Adds(cards []GameCardGoods) error {
|
|
serialNumbers := make([]string, 0, len(cards))
|
|
for i, _ := range cards {
|
|
serialNumbers = append(serialNumbers, cards[i].SerialNumber)
|
|
}
|
|
var goodsList []GameCardGoods
|
|
err := NewGameCardGoodsQuerySet(DB).SerialNumberIn(serialNumbers...).All(&goodsList)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return err
|
|
}
|
|
goodsMap := make(map[string]int, 0)
|
|
for i, _ := range goodsList {
|
|
goodsMap[goodsList[i].SerialNumber] = i
|
|
}
|
|
|
|
for i, _ := range cards {
|
|
_, ok := goodsMap[cards[i].SerialNumber]
|
|
if !ok {
|
|
begin := DB.Begin()
|
|
// 入库 公共添加数据
|
|
cards[i].StockTime = time.Now()
|
|
cards[i].FunctionState = 2
|
|
|
|
err = begin.Create(&cards[i]).Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
continue
|
|
}
|
|
|
|
stock := GameCardGoodsStock{StoreId: cards[i].StoreId, GameCardId: cards[i].GameCardId}
|
|
err = stock.Add(begin)
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
continue
|
|
}
|
|
if cards[i].CardType == GameCardGoodsTypeShare {
|
|
userShareCard := &UserShareCard{
|
|
Uid: cards[i].UserShareCardBill.Uid,
|
|
SerialNumber: cards[i].SerialNumber,
|
|
BillSn: cards[i].UserShareCardBill.BillSn,
|
|
GameCardId: uint32(cards[i].GameCardId),
|
|
State: ShareCardStateSharing,
|
|
GameCardGoodsId: cards[i].ID,
|
|
UserShareCardBillId: cards[i].UserShareCardBill.ID,
|
|
ShareCardBillGameId: 0,
|
|
StoreId: uint32(cards[i].StoreId),
|
|
ProfitState: 1,
|
|
}
|
|
if cards[i].CardType == GameCardGoodsTypeShare {
|
|
userShareCard.AllotSerialNumber = userShareCard.SerialNumber
|
|
userShareCard.AllotCardGoodsId = userShareCard.GameCardGoodsId
|
|
}
|
|
err = begin.Create(userShareCard).Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
return err
|
|
}
|
|
|
|
}
|
|
err := begin.Commit().Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
continue
|
|
}
|
|
}
|
|
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type CooperativeRentCardOrderListReq struct {
|
|
AssistantUid uint32 `json:"assistant_uid"`
|
|
Uid uint64 `json:"uid" `
|
|
OrderId uint64 `json:"order_id"`
|
|
GameCardId uint64 `json:"game_card_id"`
|
|
StoreId uint64 `json:"store_id" ` // 门店id 游戏id
|
|
CardStatus uint8 `json:"card_status"` // 1-待取货中 2-游玩中 3-归还中 4-已完成
|
|
PayStatus uint8 `json:"pay_status"` //
|
|
DeliveryType uint8 `json:"delivery_type"` //
|
|
SerialNumber string `json:"serial_number" ` // 编号
|
|
PickupCode string `json:"pickup_code"` // 取货码
|
|
StartTime time.Time `json:"start_time"` // 开始时间
|
|
EndTime time.Time `json:"end_time"` // 结束时间
|
|
PageNum int `json:"page_num"`
|
|
PageSize int `json:"page_size"`
|
|
}
|
|
|
|
func (m *CooperativeRentCardOrderListReq) List() ([]Order, int, error) {
|
|
var orderCards []OrderCard
|
|
orders := make([]Order, 0)
|
|
if m.PageSize == 0 {
|
|
m.PageSize = 10
|
|
}
|
|
assistant := GetUserByUid(m.AssistantUid)
|
|
if m.SerialNumber == "" {
|
|
m.StoreId = assistant.StoreId
|
|
}
|
|
if assistant.UserType != 2 {
|
|
return orders, 0, errors.New("not assistant")
|
|
}
|
|
qs := NewOrderQuerySet(DB).PayStatusEq(2)
|
|
isDeliver := true
|
|
if m.SerialNumber != "" {
|
|
isDeliver = false
|
|
err := NewOrderCardQuerySet(DB).SerialNumberEq(m.SerialNumber).OrderDescByID().OrderAscByCardStatus().All(&orderCards)
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return orders, 0, err
|
|
}
|
|
orderIds := make([]uint32, 0)
|
|
for i, _ := range orderCards {
|
|
orderIds = append(orderIds, orderCards[i].OrderId)
|
|
}
|
|
qs = qs.IDIn(orderIds...)
|
|
//qs = qs.Where("id in (?)", orderIds)
|
|
}
|
|
if m.PickupCode != "" {
|
|
isDeliver = false
|
|
//qs = qs.Where("pickup_code", m.PickupCode)
|
|
qs = qs.PickupCodeEq(m.PickupCode)
|
|
}
|
|
if m.PayStatus != 0 {
|
|
//qs = qs.Where("pay_status", m.PayStatus)
|
|
qs = qs.PayStatusEq(m.PayStatus)
|
|
}
|
|
if m.DeliveryType != 0 {
|
|
//qs = qs.Where("delivery_type", m.DeliveryType)
|
|
qs = qs.DeliveryTypeEq(m.DeliveryType)
|
|
}
|
|
if m.OrderId != 0 {
|
|
isDeliver = false
|
|
//qs = qs.Where("id", m.OrderId)
|
|
qs = qs.IDEq(uint32(m.OrderId))
|
|
}
|
|
if isDeliver {
|
|
}
|
|
if m.Uid != 0 {
|
|
qs = qs.UidEq(m.Uid)
|
|
}
|
|
if m.GameCardId != 0 {
|
|
qs = qs.GameCardIdEq(m.GameCardId)
|
|
}
|
|
if m.CardStatus != 0 {
|
|
qs = qs.CardStatusEq(m.CardStatus)
|
|
}
|
|
if !m.StartTime.IsZero() {
|
|
qs = qs.CreatedAtGte(m.StartTime)
|
|
}
|
|
if !m.EndTime.IsZero() {
|
|
qs = qs.CreatedAtLte(m.EndTime)
|
|
}
|
|
if m.StoreId != 0 {
|
|
qs = qs.StoreIdEq(m.StoreId)
|
|
}
|
|
count, err := qs.Count()
|
|
if err != nil {
|
|
logger.Errorf("err:%#v", err)
|
|
return orders, 0, err
|
|
}
|
|
|
|
pageSize := m.PageSize
|
|
page := m.PageNum - 1
|
|
if page < 0 {
|
|
page = 0
|
|
}
|
|
if m.PageSize == 0 {
|
|
m.PageSize = 10
|
|
}
|
|
err = qs.OrderDescByID().Offset(page * pageSize).Limit(m.PageSize).All(&orders)
|
|
if err != nil {
|
|
logger.Errorf("err:%#v", err)
|
|
return orders, 0, err
|
|
}
|
|
|
|
ids := make([]uint32, 0, len(orders))
|
|
for i, _ := range orders {
|
|
ids = append(ids, uint32(orders[i].ID))
|
|
}
|
|
if len(ids) == 0 {
|
|
logger.Error("gameIds is nil")
|
|
return orders, 0, err
|
|
}
|
|
|
|
err = NewOrderCardQuerySet(DB).OrderIdIn(ids...).All(&orderCards)
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return orders, 0, err
|
|
}
|
|
orderCards = OrderCardListSetGameInfo(orderCards)
|
|
orderCardsMap := make(map[uint32][]OrderCard, 0)
|
|
for i, _ := range orderCards {
|
|
orderCardsMap[orderCards[i].OrderId] = append(orderCardsMap[orderCards[i].OrderId], orderCards[i])
|
|
}
|
|
for i, _ := range orders {
|
|
if orders[i].CardStatus == 2 || orders[i].CardStatus == 3 {
|
|
orders[i].CardStatus = 4
|
|
}
|
|
v, ok := orderCardsMap[orders[i].ID]
|
|
if ok {
|
|
orders[i].OrderCards = v
|
|
}
|
|
}
|
|
|
|
return orders, count, nil
|
|
}
|
|
|
|
type GameCardGoodsStockAnalysisReq struct {
|
|
Name string `json:"name"`
|
|
SortType uint32 `json:"sort_type"` // 1-总库存 2-库存 3-用户持有 4-订单数量
|
|
SortDirection uint32 `json:"sort_direction"` // 1-升序 2-降序
|
|
CooperativeBusinessId uint32 `json:"cooperative_business_id"` // 合作商id
|
|
StoreId uint32 `json:"store_id"`
|
|
PageNum int `json:"page_num"`
|
|
PageSize int `json:"page_size"`
|
|
}
|
|
type GameCardGoodsStockAnalysisResp struct {
|
|
List []GameCardGoodsStock `json:"list"`
|
|
Count uint32 `json:"count"`
|
|
PageIndex int `json:"page_index"`
|
|
|
|
CardTotalCount int `json:"card_total_count"`
|
|
CardTotalStock int `json:"card_total_stock"`
|
|
CardHoldCount int `json:"card_hold_count"`
|
|
}
|
|
|
|
func (m *GameCardGoodsStockAnalysisReq) GameCardStockListAnalysis() (*GameCardGoodsStockAnalysisResp, error) {
|
|
resp := &GameCardGoodsStockAnalysisResp{PageIndex: m.PageNum}
|
|
type GameCardCount struct {
|
|
CountGame uint32 `json:"count_game"`
|
|
}
|
|
var gameCardCount GameCardCount
|
|
var goodsStocks []GameCardGoodsStock
|
|
sqlOrder := ""
|
|
switch m.SortType {
|
|
case 1:
|
|
sqlOrder = fmt.Sprintf(" ORDER BY total_stock ")
|
|
case 2:
|
|
sqlOrder = fmt.Sprintf(" ORDER BY rent_stock ")
|
|
case 3:
|
|
sqlOrder = fmt.Sprintf(" ORDER BY user_hold_stock ")
|
|
case 4:
|
|
sqlOrder = fmt.Sprintf(" ORDER BY order_count ")
|
|
}
|
|
|
|
if m.SortDirection == 1 {
|
|
sqlOrder += " DESC"
|
|
} else if m.SortDirection == 2 {
|
|
sqlOrder += " ASC"
|
|
}
|
|
sqlStore := fmt.Sprintf(" AND cooperative_business_id = %d", m.CooperativeBusinessId)
|
|
if m.StoreId != 0 {
|
|
sqlStore = fmt.Sprintf(" AND store_id = %d", m.StoreId)
|
|
}
|
|
if m.Name != "" {
|
|
var gameCards []GameCard
|
|
sqlName := "SELECT * FROM game_card WHERE `name` LIKE '%" + m.Name + "%';"
|
|
err := DB.Raw(sqlName).Scan(&gameCards).Error
|
|
//err := orm.Eloquent.Exec(sqlName).Find(&gameCards).Error
|
|
if err != nil {
|
|
return resp, err
|
|
}
|
|
//fmt.Println("--sqlName:", sqlName)
|
|
gameIds := make([]string, 0)
|
|
for i, _ := range gameCards {
|
|
gameIds = append(gameIds, fmt.Sprintf("%d", gameCards[i].ID))
|
|
}
|
|
|
|
//fmt.Println("--gameIds:", gameIds)
|
|
sqlStore += fmt.Sprintf(" AND game_card_id IN (%s)", strings.Join(gameIds, ","))
|
|
}
|
|
|
|
//var countGame int64
|
|
sqlCount := fmt.Sprintf("SELECT COUNT(*) AS count_game FROM (SELECT SUM(total_stock) AS total_stock,SUM(order_count) AS order_count,SUM(user_hold_stock) AS user_hold_stock,SUM(rent_stock) AS rent_stock FROM game_card_goods_stock WHERE 1 %s GROUP BY game_card_id) a ;", sqlStore)
|
|
fmt.Println("sqlCount:", sqlCount)
|
|
err := DB.Raw(sqlCount).Scan(&gameCardCount).Error
|
|
if err != nil {
|
|
logger.Error("sqlCount err:", err)
|
|
return resp, err
|
|
}
|
|
fmt.Println("countGame:", gameCardCount.CountGame)
|
|
resp.Count = gameCardCount.CountGame
|
|
page := int(m.PageNum) - 1
|
|
if page < 0 {
|
|
page = 0
|
|
}
|
|
if m.PageSize == 0 {
|
|
m.PageSize = 10
|
|
}
|
|
|
|
sql := fmt.Sprintf(
|
|
"SELECT * FROM (SELECT SUM(total_stock) AS total_stock,SUM(order_count) AS order_count,SUM(user_hold_stock) AS user_hold_stock,SUM(rent_stock) AS rent_stock,game_card_id FROM game_card_goods_stock WHERE 1 %s GROUP BY game_card_id) a %s LIMIT %d,%d;",
|
|
sqlStore, sqlOrder, page*m.PageSize, m.PageSize)
|
|
fmt.Println("sql:", sql)
|
|
err = DB.Raw(sql).Scan(&goodsStocks).Error
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return resp, err
|
|
}
|
|
|
|
if len(goodsStocks) == 0 {
|
|
return resp, nil
|
|
}
|
|
|
|
gameIds := make([]uint32, 0, len(goodsStocks))
|
|
for i, _ := range goodsStocks {
|
|
gameIds = append(gameIds, uint32(goodsStocks[i].GameCardId))
|
|
}
|
|
fmt.Println("gameIds:", gameIds)
|
|
var games []GameCard
|
|
err = NewGameCardQuerySet(DB).IDIn(gameIds...).All(&games)
|
|
//err = orm.Eloquent.Table("game_card").Where("id IN (?)", gameIds).Find(&games).Error
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return resp, err
|
|
}
|
|
gameMap := make(map[uint32]GameCard, 0)
|
|
for i, _ := range games {
|
|
gameMap[games[i].ID] = games[i]
|
|
}
|
|
fmt.Println("games:", games)
|
|
for i, _ := range goodsStocks {
|
|
game, ok := gameMap[uint32(goodsStocks[i].GameCardId)]
|
|
if ok {
|
|
goodsStocks[i].Name = game.Name
|
|
goodsStocks[i].CoverImg = game.CoverImg
|
|
}
|
|
}
|
|
resp.List = goodsStocks
|
|
|
|
holdQs := NewGameCardGoodsQuerySet(DB).StatusEq(GameCardGoodsStatusCustomerHold)
|
|
//holdQs := orm.Eloquent.Table("game_card_goods").Where("status", GameCardGoodsStatusCustomerHold)
|
|
if m.StoreId != 0 {
|
|
holdQs = holdQs.StoreIdEq(uint64(m.StoreId))
|
|
}
|
|
cardHoldCount, err := holdQs.Count()
|
|
if err != nil {
|
|
logger.Error("hold count err:", err)
|
|
return resp, err
|
|
}
|
|
resp.CardHoldCount = int(cardHoldCount)
|
|
|
|
var (
|
|
rentStock uint32
|
|
totalCount int
|
|
cardStocks []GameCardGoodsStock
|
|
)
|
|
|
|
if m.StoreId != 0 {
|
|
err = NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(m.StoreId)).All(&cardStocks)
|
|
} else {
|
|
err = NewGameCardGoodsStockQuerySet(DB).All(&cardStocks)
|
|
}
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return resp, err
|
|
}
|
|
for i, _ := range cardStocks {
|
|
rentStock += cardStocks[i].RentStock
|
|
}
|
|
//var game GameCardGoods
|
|
if m.StoreId != 0 {
|
|
totalCount, err = NewGameCardGoodsQuerySet(DB).StoreIdEq(uint64(m.StoreId)).StatusIn([]uint32{1, 2, 3, 4}...).Count()
|
|
} else {
|
|
totalCount, err = NewGameCardGoodsQuerySet(DB).StatusIn([]uint32{1, 2, 3, 4}...).Count()
|
|
}
|
|
if err != nil {
|
|
logger.Error("total count err:", err)
|
|
return resp, err
|
|
}
|
|
|
|
resp.CardTotalStock = int(rentStock)
|
|
resp.CardTotalCount = int(totalCount)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
func CannibalizeTaskImportGoods(taskId uint32, serials []string) (uint32, error) {
|
|
if taskId == 0 || len(serials) == 0 {
|
|
return 0, errors.New("para err")
|
|
}
|
|
var cannibalizeTask CannibalizeStockTask
|
|
err := NewCannibalizeStockTaskQuerySet(DB).IDEq(taskId).One(&cannibalizeTask)
|
|
//err := orm.Eloquent.Table("cannibalize_stock_task").Where("id = ?", taskId).Find(&cannibalizeTask).Error
|
|
if err != nil {
|
|
logger.Error("cannibalize task err:", err)
|
|
return 0, err
|
|
}
|
|
if cannibalizeTask.Status != CannibalizeTaskStatusNotImportGoods &&
|
|
cannibalizeTask.Status != CannibalizeTaskStatusNotDeliverGoods {
|
|
logger.Error("cannibalize status err:", err)
|
|
return 0, err
|
|
}
|
|
|
|
var cannibalizeGoodses []CannibalizeGameCardGoods
|
|
err = NewCannibalizeGameCardGoodsQuerySet(DB).CannibalizeStockTaskIdEq(taskId).All(&cannibalizeGoodses)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("cannibalize goods err:", err)
|
|
return 0, err
|
|
}
|
|
impotentSerialMap := make(map[string]uint32, 0)
|
|
if len(cannibalizeGoodses) > 0 {
|
|
for i, _ := range cannibalizeGoodses {
|
|
impotentSerialMap[cannibalizeGoodses[i].SerialNumber] = cannibalizeGoodses[i].GameCardId
|
|
}
|
|
}
|
|
|
|
serialNumberSql := ""
|
|
for i, _ := range serials {
|
|
serialNumberSql += "'" + serials[i] + "',"
|
|
}
|
|
serialNumberSql = serialNumberSql[:len(serialNumberSql)-1]
|
|
// 这些卡已在调拨任务中
|
|
var cannibalizeInGoodses []CannibalizeGameCardGoods
|
|
sql := fmt.Sprintf(
|
|
"SELECT cannibalize_game_card_goods.* FROM cannibalize_game_card_goods LEFT JOIN cannibalize_stock_task ON cannibalize_stock_task.id = cannibalize_game_card_goods.cannibalize_stock_task_id WHERE serial_number IN (%s) AND cannibalize_stock_task.status IN (1,2,3) ;",
|
|
serialNumberSql)
|
|
err = DB.Raw(sql).Scan(&cannibalizeInGoodses).Error
|
|
if err != nil {
|
|
logger.Error("cannibalize in goods err:", err)
|
|
return 0, err
|
|
}
|
|
cannibalizeInGoodsMap := make(map[string]uint32, 0)
|
|
if len(cannibalizeInGoodses) > 0 {
|
|
for i, _ := range cannibalizeInGoodses {
|
|
cannibalizeInGoodsMap[cannibalizeInGoodses[i].SerialNumber] = cannibalizeInGoodses[i].GameCardId
|
|
}
|
|
}
|
|
|
|
list := make([]GameCardGoods, 0)
|
|
err = DB.Table("game_card_goods").Where("serial_number in (?)", serials).Find(&list).Error
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return 0, err
|
|
}
|
|
unImpotentCount := 0
|
|
impotentCount := 0
|
|
begin := DB.Begin()
|
|
for i, _ := range list {
|
|
if list[i].Status != 1 {
|
|
unImpotentCount++
|
|
//fmt.Println("1", list[i].Status)
|
|
continue
|
|
}
|
|
_, ok := impotentSerialMap[list[i].SerialNumber]
|
|
if ok {
|
|
unImpotentCount++
|
|
//fmt.Println("2", list[i].SerialNumber)
|
|
continue
|
|
}
|
|
if uint32(list[i].StoreId) != cannibalizeTask.FromStoreId {
|
|
//fmt.Println("3", list[i].StoreId)
|
|
continue
|
|
}
|
|
_, ok2 := cannibalizeInGoodsMap[list[i].SerialNumber]
|
|
if ok2 {
|
|
unImpotentCount++
|
|
//fmt.Println("4", list[i].SerialNumber)
|
|
continue
|
|
}
|
|
|
|
cardGoods := &CannibalizeGameCardGoods{
|
|
CannibalizeStockTaskId: taskId,
|
|
GameCardId: uint32(list[i].GameCardId),
|
|
SerialNumber: list[i].SerialNumber,
|
|
}
|
|
err := begin.Create(cardGoods).Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
unImpotentCount++
|
|
continue
|
|
}
|
|
impotentCount++
|
|
}
|
|
|
|
if cannibalizeTask.Status == CannibalizeTaskStatusNotImportGoods && impotentCount > 0 {
|
|
sql := fmt.Sprintf("UPDATE cannibalize_stock_task SET status = 2 WHERE id = %d", taskId)
|
|
err = begin.Exec(sql).Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Errorf("update status err:%s", err.Error())
|
|
}
|
|
}
|
|
err = begin.Commit().Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("commit err:", err)
|
|
}
|
|
|
|
return uint32(unImpotentCount), nil
|
|
}
|
|
|
|
func CannibalizeDeliverGoods(taskId uint32) error {
|
|
var cannibalizeTask CannibalizeStockTask
|
|
err := NewCannibalizeStockTaskQuerySet(DB).IDEq(taskId).One(&cannibalizeTask)
|
|
//err := orm.Eloquent.Table("cannibalize_stock_task").Where("id = ?", taskId).Find(&cannibalizeTask).Error
|
|
if err != nil {
|
|
logger.Error("cannibalize task err:", err)
|
|
return err
|
|
}
|
|
if cannibalizeTask.Status != CannibalizeTaskStatusNotDeliverGoods {
|
|
return errors.New("cannibalize task status err")
|
|
}
|
|
var cannibalizeGoodses []CannibalizeGameCardGoods
|
|
err = NewCannibalizeGameCardGoodsQuerySet(DB).CannibalizeStockTaskIdEq(taskId).All(&cannibalizeGoodses)
|
|
//err = orm.Eloquent.Table("cannibalize_game_card_goods").Where("cannibalize_stock_task_id = ?", taskId).Find(&cannibalizeGoodses).Error
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("cannibalize goods err:", err)
|
|
return err
|
|
}
|
|
serials := make([]string, 0, len(cannibalizeGoodses))
|
|
serialMap := make(map[string]int, 0)
|
|
for i, _ := range cannibalizeGoodses {
|
|
serials = append(serials, cannibalizeGoodses[i].SerialNumber)
|
|
serialMap[cannibalizeGoodses[i].SerialNumber] = i
|
|
}
|
|
list := make([]GameCardGoods, 0)
|
|
//err = orm.Eloquent.Table("game_card_goods").Where("serial_number in (?)", serials).Find(&list).Error
|
|
err = NewGameCardGoodsQuerySet(DB).SerialNumberIn(serials...).All(&list)
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return err
|
|
}
|
|
|
|
for i, _ := range list {
|
|
if list[i].Status != 1 {
|
|
err = NewCannibalizeGameCardGoodsQuerySet(DB).SerialNumberEq(list[i].SerialNumber).Delete()
|
|
//err = orm.Eloquent.Unscoped().Table("cannibalize_game_card_goods").Where("serial_number", list[i].SerialNumber).Delete(&CannibalizeGameCardGoods{}).Error
|
|
if err != nil {
|
|
logger.Error("delete card goods err:", err)
|
|
}
|
|
continue
|
|
}
|
|
begin := DB.Begin()
|
|
sqlStatus := fmt.Sprintf("UPDATE game_card_goods SET status = 4 WHERE id = %d;", list[i].ID)
|
|
err = begin.Exec(sqlStatus).Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
continue
|
|
}
|
|
|
|
//sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1,store_stock=store_stock-1,total_stock=total_stock-1 WHERE store_id=%d AND game_card_id=%d;", list[i].StoreId, list[i].GameCardId)
|
|
sql := fmt.Sprintf(
|
|
"UPDATE game_card_goods_stock SET rent_stock= rent_stock-1,total_stock=total_stock-1 WHERE store_id=%d AND game_card_id=%d;",
|
|
list[i].StoreId, list[i].GameCardId)
|
|
fmt.Println("sql:", sql)
|
|
err = begin.Exec(sql).Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
continue
|
|
}
|
|
|
|
err = begin.Commit().Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("commit err:", err)
|
|
continue
|
|
}
|
|
delete(serialMap, list[i].SerialNumber)
|
|
|
|
}
|
|
|
|
// 没有更新库存的卡
|
|
if len(serialMap) > 0 {
|
|
for k, _ := range serialMap {
|
|
//fmt.Println("--------k", k)
|
|
err = NewCannibalizeGameCardGoodsQuerySet(DB).SerialNumberEq(k).Delete()
|
|
//err = orm.Eloquent.Unscoped().Table("cannibalize_game_card_goods").Where("serial_number=?", k).Delete(&CannibalizeGameCardGoods{}).Error
|
|
if err != nil {
|
|
logger.Error("delete card goods err:", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
if cannibalizeTask.Status == CannibalizeTaskStatusNotDeliverGoods {
|
|
sql := fmt.Sprintf("UPDATE cannibalize_stock_task SET status = 3,delivery_time=? WHERE id = %d", taskId)
|
|
err = DB.Exec(sql, time.Now()).Error
|
|
if err != nil {
|
|
logger.Errorf("update status err:%s", err.Error())
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func CannibalizePutInStorage(taskId uint32) error {
|
|
var cannibalizeTask CannibalizeStockTask
|
|
err := NewCannibalizeStockTaskQuerySet(DB).IDEq(taskId).One(&cannibalizeTask)
|
|
//err := orm.Eloquent.Table("cannibalize_stock_task").Where("id = ?", taskId).Find(&cannibalizeTask).Error
|
|
if err != nil {
|
|
logger.Error("cannibalize task err:", err)
|
|
return err
|
|
}
|
|
if cannibalizeTask.Status != CannibalizeTaskStatusDeliveredGoods {
|
|
return errors.New("cannibalize task status err")
|
|
}
|
|
var cannibalizeGoodses []CannibalizeGameCardGoods
|
|
err = NewCannibalizeGameCardGoodsQuerySet(DB).CannibalizeStockTaskIdEq(taskId).All(&cannibalizeGoodses)
|
|
//err = orm.Eloquent.Table("cannibalize_game_card_goods").Where("cannibalize_stock_task_id = ?", taskId).
|
|
// Find(&cannibalizeGoodses).Error
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("cannibalize goods err:", err)
|
|
return err
|
|
}
|
|
serials := make([]string, 0, len(cannibalizeGoodses))
|
|
for i, _ := range cannibalizeGoodses {
|
|
serials = append(serials, cannibalizeGoodses[i].SerialNumber)
|
|
}
|
|
list := make([]GameCardGoods, 0)
|
|
err = NewGameCardGoodsQuerySet(DB).SerialNumberIn(serials...).All(&list)
|
|
//err = orm.Eloquent.Table("game_card_goods").Where("serial_number in (?)", serials).Find(&list).Error
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return err
|
|
}
|
|
for i, _ := range list {
|
|
if list[i].Status != 4 {
|
|
continue
|
|
}
|
|
//if CannibalizeUserShareCardRetrieve(cannibalizeTask.ToStoreId, list[i]) {
|
|
// continue
|
|
//}
|
|
//var count int64
|
|
count, err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(cannibalizeTask.ToStoreId)).
|
|
GameCardIdEq(list[i].GameCardId).Count()
|
|
//err = orm.Eloquent.Table("game_card_goods_stock").Where("store_id = ?", cannibalizeTask.ToStoreId).
|
|
// Where("game_card_id = ?", list[i].GameCardId).Count(&count).Error
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
continue
|
|
}
|
|
|
|
begin := DB.Begin()
|
|
sqlStatus := fmt.Sprintf("UPDATE game_card_goods SET status = 1,store_id=%d,stock_time='%s' WHERE id = %d;",
|
|
cannibalizeTask.ToStoreId, time.Now().Format(TimeFormat), list[i].ID)
|
|
err = begin.Exec(sqlStatus).Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
continue
|
|
}
|
|
|
|
if count > 0 {
|
|
sql := fmt.Sprintf(
|
|
"UPDATE game_card_goods_stock SET rent_stock= rent_stock+1,store_stock=store_stock+1,total_stock=total_stock+1 WHERE store_id=%d AND game_card_id=%d;",
|
|
cannibalizeTask.ToStoreId, list[i].GameCardId)
|
|
fmt.Println("sql:", sql)
|
|
err = begin.Exec(sql).Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
continue
|
|
}
|
|
} else {
|
|
cardGoodsStock := &GameCardGoodsStock{
|
|
StoreId: uint64(cannibalizeTask.ToStoreId),
|
|
GameCardId: list[i].GameCardId,
|
|
StoreStock: 1,
|
|
RentStock: 1,
|
|
UserHoldStock: 0,
|
|
OrderCount: 0,
|
|
TotalStock: 1,
|
|
}
|
|
err := begin.Create(cardGoodsStock).Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("err:", err)
|
|
continue
|
|
}
|
|
}
|
|
|
|
err = begin.Commit().Error
|
|
if err != nil {
|
|
begin.Rollback()
|
|
logger.Error("commit err:", err)
|
|
continue
|
|
}
|
|
}
|
|
|
|
if cannibalizeTask.Status == CannibalizeTaskStatusDeliveredGoods {
|
|
sql := fmt.Sprintf("UPDATE cannibalize_stock_task SET status = 4,in_storage_time=? WHERE id = %d", taskId)
|
|
err = DB.Exec(sql, time.Now()).Error
|
|
if err != nil {
|
|
logger.Errorf("update status err:%s", err.Error())
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type CannibalizeTaskListReq struct {
|
|
PageNum int `json:"page_num"`
|
|
PageSize int `json:"page_size"`
|
|
CannibalizeDirection uint32 `json:"cannibalize_direction"` // 1-调入 2-调出
|
|
StoreId uint32 `json:"store_id" ` // 门店id
|
|
Status uint8 `json:"status"`
|
|
}
|
|
type CannibalizeTaskListResp struct {
|
|
PageSize int `json:"page_size"`
|
|
List []CannibalizeStockTask `json:"list"`
|
|
Count int `json:"count"`
|
|
PageNum int `json:"page_num"`
|
|
TotalPage int `json:"total_page"`
|
|
}
|
|
|
|
func (m *CannibalizeTaskListReq) GetCannibalizeTaskList() (*CannibalizeTaskListResp, error) {
|
|
resp := &CannibalizeTaskListResp{
|
|
PageNum: m.PageNum,
|
|
PageSize: m.PageSize,
|
|
}
|
|
|
|
qs := DB.Table("cannibalize_stock_task")
|
|
//if m.StoreId != 0 {
|
|
// qs = qs.Where("from_store_id = ?", m.StoreId).Or("to_store_id = ?", m.StoreId)
|
|
//}
|
|
if m.Status != 0 {
|
|
qs = qs.Where("status = ?", m.Status)
|
|
}
|
|
if m.CannibalizeDirection != 0 {
|
|
if m.CannibalizeDirection == 1 {
|
|
qs = qs.Where("to_store_id=?", m.StoreId)
|
|
} else if m.CannibalizeDirection == 2 {
|
|
qs = qs.Where("from_store_id=?", m.StoreId)
|
|
}
|
|
}
|
|
page := m.PageNum - 1
|
|
if page < 0 {
|
|
page = 0
|
|
}
|
|
if m.PageSize == 0 {
|
|
m.PageSize = 10
|
|
}
|
|
var (
|
|
count int64
|
|
tasks []CannibalizeStockTask
|
|
)
|
|
|
|
err := qs.Count(&count).Offset(page * m.PageSize).Limit(m.PageSize).Order("id DESC").Find(&tasks).Error
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return resp, err
|
|
}
|
|
|
|
resp.Count = int(count)
|
|
resp.List = CannibalizeStockTaskListSetInfo(tasks)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
type CannibalizeTaskGameCardGoodsListReq struct {
|
|
PageNum int `json:"page_num"`
|
|
PageSize int `json:"page_size"`
|
|
CannibalizeStockTaskId uint32 `json:"cannibalize_stock_task_id"`
|
|
}
|
|
type CannibalizeTaskGameCardGoodsListResp struct {
|
|
PageSize int `json:"pageSize"`
|
|
List []CannibalizeGameCardGoods `json:"list"`
|
|
Count int `json:"count"`
|
|
PageNum int `json:"page_num"`
|
|
TotalPage int `json:"total_page"`
|
|
}
|
|
|
|
func (m *CannibalizeTaskGameCardGoodsListReq) GetCannibalizeTaskGameCardGoodsList() (*CannibalizeTaskGameCardGoodsListResp, error) {
|
|
resp := &CannibalizeTaskGameCardGoodsListResp{
|
|
PageNum: m.PageNum,
|
|
PageSize: m.PageSize,
|
|
}
|
|
qs := DB.Table("cannibalize_game_card_goods").Where("cannibalize_stock_task_id = ?", m.CannibalizeStockTaskId)
|
|
|
|
page := m.PageNum - 1
|
|
if page < 0 {
|
|
page = 0
|
|
}
|
|
if m.PageSize == 0 {
|
|
m.PageSize = 10
|
|
}
|
|
var (
|
|
count int64
|
|
cannibalizeGoodses []CannibalizeGameCardGoods
|
|
)
|
|
//CannibalizeGameCardGoods int `json:"cannibalize_game_card_goods" gorm:"-"`
|
|
err := qs.Count(&count).Offset(page * m.PageSize).Limit(m.PageSize).Order("id DESC").Find(&cannibalizeGoodses).Error
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return resp, err
|
|
}
|
|
|
|
resp.Count = int(count)
|
|
resp.List = CannibalizeGameCardGoodsSetInfo(cannibalizeGoodses)
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
func CannibalizeTaskDel(taskId uint32) error {
|
|
var cannibalizeTask CannibalizeStockTask
|
|
err := DB.Table("cannibalize_stock_task").Where("id = ?", taskId).Find(&cannibalizeTask).Error
|
|
if err != nil {
|
|
logger.Error("cannibalize task err:", err)
|
|
return err
|
|
}
|
|
|
|
if cannibalizeTask.Status != CannibalizeTaskStatusNotImportGoods &&
|
|
cannibalizeTask.Status != CannibalizeTaskStatusNotDeliverGoods {
|
|
return errors.New("status err")
|
|
}
|
|
sql := fmt.Sprintf("UPDATE cannibalize_stock_task SET status = 5 WHERE id = %d", taskId)
|
|
err = DB.Exec(sql).Error
|
|
if err != nil {
|
|
logger.Error("update status err:", err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type CooperativeGameCardGoodsListReq struct {
|
|
PageNum int `json:"page_num"`
|
|
PageSize int `json:"page_size"`
|
|
StoreId uint32 `json:"store_id"`
|
|
Status int `json:"status"`
|
|
GameCardId int `json:"game_card_id"`
|
|
SerialNumber string `json:"serial_number" ` // 编号
|
|
AssistantUid uint32 `json:"assistant_uid"`
|
|
}
|
|
type CooperativeGameCardGoodsListResp struct {
|
|
List []GameCardGoods `json:"list"`
|
|
Count int `json:"count"`
|
|
PageNum int `json:"page_num"`
|
|
TotalPage int `json:"total_page"`
|
|
}
|
|
|
|
func (m *CooperativeGameCardGoodsListReq) List() (*CooperativeGameCardGoodsListResp, error) {
|
|
var (
|
|
cardGoods = make([]GameCardGoods, 0)
|
|
totalPage uint32
|
|
)
|
|
resp := &CooperativeGameCardGoodsListResp{List: cardGoods, PageNum: m.PageNum}
|
|
m.PageNum -= 1
|
|
if m.PageNum < 0 {
|
|
m.PageNum = 0
|
|
}
|
|
if m.PageSize == 0 {
|
|
m.PageSize = 10
|
|
}
|
|
assistant := GetUserByUid(m.AssistantUid)
|
|
m.StoreId = uint32(assistant.StoreId)
|
|
fmt.Println("GetGameCardGoodsListReq:", m)
|
|
gdb := DB.Table("game_card_goods")
|
|
if m.Status != 0 {
|
|
gdb = gdb.Where("status=?", m.Status)
|
|
}
|
|
if m.StoreId != 0 {
|
|
gdb = gdb.Where("store_id=?", m.StoreId)
|
|
}
|
|
if m.GameCardId != 0 {
|
|
gdb = gdb.Where("game_card_id=?", m.GameCardId)
|
|
}
|
|
if m.SerialNumber != "" {
|
|
gdb = gdb.Where("serial_number=?", m.SerialNumber)
|
|
}
|
|
var count int64
|
|
err := gdb.Count(&count).Error
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return resp, err
|
|
}
|
|
resp.Count = int(count)
|
|
err = gdb.Order("created_at DESC").Offset(m.PageNum * m.PageSize).Limit(m.PageSize).Find(&cardGoods).Error
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return resp, err
|
|
}
|
|
|
|
if len(cardGoods) > 0 {
|
|
//storeIds := make([]uint32, 0)
|
|
gameCardIds := make([]uint32, 0)
|
|
|
|
for i, _ := range cardGoods {
|
|
//storeIds = append(storeIds, uint32(cardGoods[i].StoreId))
|
|
gameCardIds = append(gameCardIds, uint32(cardGoods[i].GameCardId))
|
|
}
|
|
|
|
cardMap, err := GameCardMap(gameCardIds)
|
|
if err != nil {
|
|
logger.Error("game card map err:", err)
|
|
return resp, err
|
|
}
|
|
//storeMap := GetStoreMapByIds(storeIds)
|
|
|
|
for i, _ := range cardGoods {
|
|
gameCard, ok1 := cardMap[uint32(cardGoods[i].GameCardId)]
|
|
if ok1 {
|
|
cardGoods[i].GameCard = &gameCard
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
totalPage = uint32(int(count)/m.PageSize + 1)
|
|
resp.TotalPage = int(totalPage)
|
|
resp.List = cardGoods
|
|
return resp, nil
|
|
}
|
|
|
|
type AssistantMemberPromotionReq struct {
|
|
PageNum int `json:"page_num"`
|
|
PageSize int `json:"page_size"`
|
|
Date string `json:"date"`
|
|
StoreId uint32 `json:"store_id"`
|
|
AssistantUid uint32 `json:"assistant_uid"`
|
|
Assistant *User `json:"assistant"`
|
|
}
|
|
|
|
func (m *AssistantMemberPromotionReq) List() ([]InviteMemberReport, int, error) {
|
|
var reports []InviteMemberReport
|
|
|
|
m.PageNum -= 1
|
|
if m.PageNum < 0 {
|
|
m.PageNum = 0
|
|
}
|
|
if m.PageSize == 0 {
|
|
m.PageSize = 10
|
|
}
|
|
|
|
m.StoreId = uint32(m.Assistant.StoreId)
|
|
|
|
qs := NewInviteMemberReportQuerySet(DB).CooperativeBusinessIdEq(m.Assistant.CooperativeBusinessId).
|
|
StoreIdEq(m.StoreId)
|
|
if m.Date != "" {
|
|
qs = qs.DateEq(m.Date)
|
|
}
|
|
count, err := qs.Count()
|
|
if err != nil {
|
|
logger.Error("err:", err)
|
|
return reports, 0, err
|
|
}
|
|
totalPage := int(count)/m.PageSize + 1
|
|
err = qs.OrderDescByID().Offset(m.PageNum * m.PageSize).Limit(m.PageSize).All(&reports)
|
|
if err != nil && err != RecordNotFound {
|
|
logger.Error("err:", err)
|
|
return reports, totalPage, err
|
|
}
|
|
|
|
reports = InviteMemberReportListSetUser(reports)
|
|
return reports, totalPage, nil
|
|
}
|
|
|
|
func GameCardListSetStockState(list []GameCard, storeId uint32) {
|
|
gameCardIds := make([]uint64, 0, len(list))
|
|
for i, _ := range list {
|
|
gameCardIds = append(gameCardIds, uint64(list[i].ID))
|
|
}
|
|
if len(gameCardIds) == 0 {
|
|
return
|
|
}
|
|
//gameIds := make([]uint32, 0)
|
|
gameIdMap := make(map[uint32]uint32)
|
|
if storeId != 0 {
|
|
var cardStocks []GameCardGoodsStock
|
|
err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdIn(gameCardIds...).
|
|
RentStockGt(0).All(&cardStocks)
|
|
if err != nil {
|
|
logger.Error("GetGameIdByType err:", 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)).GameCardIdIn(gameCardIds...).
|
|
RentStockGt(0).All(&cardStocks)
|
|
if err != nil {
|
|
logger.Error("GetGameIdByType err:", 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).GameCardIdIn(gameCardIds...).RentStockEq(0).All(&cardStocks)
|
|
if err != nil {
|
|
logger.Error("GetGameIdByType err:", 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
|
|
}
|
|
}
|
|
|
|
} else {
|
|
var cardStocks []GameCardGoodsStock
|
|
err := NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).RentStockGt(0).
|
|
All(&cardStocks)
|
|
if err != nil {
|
|
logger.Error("GetGameIdByType err:", err)
|
|
}
|
|
for i, _ := range cardStocks {
|
|
_, ok := gameIdMap[uint32(cardStocks[i].GameCardId)]
|
|
if !ok {
|
|
gameIdMap[uint32(cardStocks[i].GameCardId)] = 1
|
|
}
|
|
}
|
|
|
|
err = NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameCardIds...).RentStockEq(0).All(&cardStocks)
|
|
if err != nil {
|
|
logger.Error("GetGameIdByType err:", err)
|
|
}
|
|
for i, _ := range cardStocks {
|
|
_, ok := gameIdMap[uint32(cardStocks[i].GameCardId)]
|
|
if !ok {
|
|
gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
for i, _ := range list {
|
|
v, ok := gameIdMap[uint32(list[i].ID)]
|
|
if ok {
|
|
//gameIdMap[uint32(cardStocks[i].GameCardId)] = 3
|
|
list[i].StockState = v
|
|
}
|
|
//gameCardIds = append(gameCardIds, uint64(list[i].ID))
|
|
}
|
|
}
|
|
|
|
func InviteMemberReportListSetUser(list []InviteMemberReport) []InviteMemberReport {
|
|
uids := make([]uint32, 0, len(list))
|
|
for i, _ := range list {
|
|
uids = append(uids, list[i].Uid)
|
|
}
|
|
userMap, err := GetUserMap(uids)
|
|
if err != nil {
|
|
logger.Error("user map err:", err)
|
|
return list
|
|
}
|
|
for i, _ := range list {
|
|
v, ok := userMap[list[i].Uid]
|
|
if ok {
|
|
list[i].User = v
|
|
}
|
|
}
|
|
return list
|
|
}
|