package model import ( "github.com/codinl/go-logger" "time" ) //go:generate goqueryset -in share_card.go // gen:qs type UserShareCardBill struct { Model Uid uint32 `json:"uid" gorm:"index"` BillSn string `json:"bill_sn" gorm:"index"` State string `json:"state" gorm:"index"` SendCardType uint32 `json:"send_card_type"` // 1-送卡 2-邮寄 StoreId uint32 `json:"store_id" gorm:"index"` // 门店id ExpressCompany string `json:"express_company"` // 物流公司 ExpressCompanyNo string `json:"express_company_no"` // 物流公司编号 ExpressNo string `json:"express_no"` // 物流单号 SendCardTime time.Time `json:"send_card_time"` // 递送卡时间 StockTime time.Time `json:"stock_time"` // 入库时间 RetrieveTime time.Time `json:"retrieve_time"` // 收回卡时间 申请收回 StockRemovalTime time.Time `json:"stock_removal_time"` // 出库时间 Store Store `json:"store" gorm:"-"` // 门店 BillGames []ShareCardBillGame `json:"bill_games" gorm:"-"` } // gen:qs type ShareCardBillGame struct { Model UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"` Uid uint32 `json:"uid" gorm:"index"` GameCardId uint32 `json:"game_card_id" gorm:"index"` BillSn string `json:"bill_sn" gorm:"index"` Count uint32 `json:"count"` State string `json:"state" gorm:"index"` GameCard GameCard `json:"game_card" gorm:"-"` // } const ( ShareCardBillStateInCheck = "in_check" // 待审核 ShareCardBillStateInSendCard = "in_send_card" // 待递送卡 ShareCardBillStateCompleted = "completed" // 完成 ShareCardBillStateCancel = "cancel" // 取消 ShareCardBillStateAuditLose = "check_lose" // 审核失败 ) const ( ShareCardStateInCheck = "in_check" // 待审核 ShareCardStateInSendCard = "in_send_card" // 待递送卡 ShareCardStateSharing = "sharing" // 共享中 ShareCardStateAuditLose = "check_lose" // 审核失败 ShareCardStateCancel = "cancel" // 取消 ) // gen:qs type UserShareCard struct { Model Uid uint32 `json:"uid" gorm:"index"` SerialNumber string `json:"serial_number" gorm:"index"` // 编号 BillSn string `json:"bill_sn" gorm:"index"` GameCardId uint32 `json:"game_card_id" gorm:"index"` State string `json:"state" gorm:"index"` GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"` UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"` ShareCardBillGameId uint32 `json:"share_card_bill_game_id" gorm:"index"` } //type UserShareCardBillInfo struct { // GameCardId uint32 `json:"game_card_id"` // Count uint32 `json:"count"` //} func GetUserShareCardBillList(uid uint32, page, pageSize int) ([]UserShareCardBill, int, error) { page = page - 1 if page < 0 { page = 0 } if pageSize == 0 { pageSize = 10 } var shareCardBills []UserShareCardBill qs := NewUserShareCardBillQuerySet(DB).UidEq(uid) count, err := qs.Count() if err != nil { logger.Error("user share card bill count err:", err) return shareCardBills, 0, err } totalPage := count/pageSize + 1 err = qs.OrderDescByID().Offset(page * pageSize).Limit(pageSize).All(&shareCardBills) if err != nil && err != RecordNotFound { logger.Error("user share card bill err:", err) return shareCardBills, 0, err } if len(shareCardBills) == 0 { return shareCardBills, 0, nil } shareCardBills = UserShareCardBillListSetGame(shareCardBills) return shareCardBills, totalPage, nil } func UserShareCardBillListSetGame(list []UserShareCardBill) []UserShareCardBill { billIds := make([]uint32, 0, len(list)) for i, _ := range list { billIds = append(billIds, list[i].ID) } if len(billIds) == 0 { return list } billMap := make(map[uint32][]ShareCardBillGame, 0) var games []ShareCardBillGame err := NewShareCardBillGameQuerySet(DB).UserShareCardBillIdIn(billIds...).All(&games) if err != nil && err != RecordNotFound { logger.Error("share card bill err:", err) return list } gameIds := make([]uint32, 0, len(games)) for i, _ := range games { gameIds = append(gameIds, games[i].GameCardId) } cardMap, err := GameCardMap(gameIds) for i, _ := range games { v, ok := cardMap[games[i].GameCardId] if ok { games[i].GameCard = v } } for i, _ := range games { billMap[games[i].UserShareCardBillId] = append(billMap[games[i].UserShareCardBillId], games[i]) } if err != nil { logger.Error("game card map err:", err) return list } for i, _ := range list { v, ok := billMap[list[i].ID] if ok { list[i].BillGames = v } } return list }