mh_server/model/share_card.go

534 lines
19 KiB
Go

package model
import (
"github.com/codinl/go-logger"
"mh-server/lib/utils"
"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:"-"` // 门店
Remark string `json:"remark"`
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:"-"` //
ShareCards []UserShareCard `json:"share_cards" gorm:"-"`
}
const (
ShareCardBillStateInCheck = "in_check" // 待审核
ShareCardBillStateInSendCard = "in_send_card" // 待递送卡
ShareCardBillStateSentCard = "sent_card" // 已递送卡
ShareCardBillStateCompleted = "completed" // 完成
ShareCardBillStateCancel = "cancel" // 取消
ShareCardBillStateAuditLose = "check_lose" // 审核失败
)
const (
ShareCardStateInCheck = "in_check" // 待审核
ShareCardStateInSendCard = "in_send_card" // 待递送卡
ShareCardStateSentCard = "sent_card" // 已递送卡
ShareCardStateSharing = "sharing" // 共享中
ShareCardStateAuditLose = "check_lose" // 审核失败
ShareCardStateCancel = "cancel" // 取消
ShareCardStateRetrieve = "retrieve" // 收回
)
// 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"`
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
ProfitState uint32 `json:"profit_state"` // 1-未生效 2-生效
TotalVm uint32 `json:"total_vm"` // 累计积分
SerialNumberRetrieve string `json:"serial_number_retrieve" gorm:"index"` // 收卡编号
GameCard GameCard `json:"game_card" gorm:"-"`
}
// gen:qs
type ShareCardGameVm struct {
Model
GameCardId uint32 `json:"game_card_id" gorm:"index"`
HoldCardCount uint32 `json:"hold_card_count"` //
StockCardCount uint32 `json:"stock_card_count"` //
TotalCardCount uint32 `json:"total_card_count"`
CardProfit uint32 `json:"card_profit"`
Vm uint32 `json:"vm"` // 发放积分
ProvideVm uint32 `json:"provide_vm"` // 发放积分
ProvideDate string `json:"provide_date" gorm:"index"`
//share_card_game_vm
}
// 用户卡积分记录
// gen:qs
type UserShareCardVm struct {
Model
ShareCardGameVmId uint32 `json:"share_card_game_vm_id" gorm:"index"`
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"`
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
CardProfit uint32 `json:"card_profit"`
Vm uint32 `json:"vm"` // 发放积分
ProvideDate string `json:"provide_date"`
}
// 用户积分记录
// gen:qs
type ShareCardDateVm struct {
Model
Uid uint32 `json:"uid" gorm:"index"`
Vm uint32 `json:"vm"` // 发放积分
TotalVm uint32 `json:"total_vm"` // 用户累计获取积分
ProvideDate string `json:"provide_date" gorm:"index"` // 收益日期
}
// 总积分记录
// gen:qs
type ShareCardVmRecord struct {
Model
TotalVm uint32 `json:"total_vm"`
ProvideVm uint32 `json:"provide_vm"` // 总发放积分
ProvideDate string `json:"provide_date" gorm:"index"` // 发放收益时间
//share_card_vm_record
}
//type UserShareCardBillInfo struct {
// GameCardId uint32 `json:"game_card_id"`
// Count uint32 `json:"count"`
//}
// 用户收回卡
// gen:qs
type ShareCardRetrieve struct {
Model
Uid uint32 `json:"uid" gorm:"index"`
State string `json:"state" gorm:"index"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
RetrieveCardType uint32 `json:"retrieve_card_type" gorm:"index"` // 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"` // 物流单号
StockRemovalTime time.Time `json:"stock_removal_time"` // 出库时间
StockTime time.Time `json:"stock_time"` // 入库时间
Remark string `json:"remark"`
Store Store `json:"store" gorm:"-"`
//TotalVm uint32 `json:"total_vm"` // 累计积分
//ShareCardBillGameId uint32 `json:"share_card_bill_game_id" gorm:"index"`
//GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
//UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
//BillSn string `json:"bill_sn" gorm:"index"`
//GameCardId uint32 `json:"game_card_id" gorm:"index"`
//SerialNumber string `json:"serial_number" gorm:"index"` // 编号
//GameCard GameCard `json:"game_card" gorm:"-"`
}
const (
RetrieveStateOutStock = "out_stock" // 暂无库存
RetrieveStateInSendCard = "in_send_card" // 待发卡
RetrieveStateInPickCard = "in_pick_card" // 待取卡
RetrieveStateSentCard = "sent_card" // 已发卡
RetrieveStateReceivedCard = "received_card" // 已收卡
RetrieveStateCancel = "cancel" // 取消
)
// gen:qs
type ShareCardRetrieveCard struct {
Model
ShareCardRetrieveId uint32 `json:"share_card_retrieve_id" gorm:"index"`
UserShareCardId uint32 `json:"user_share_card_id" gorm:"index"` // 用户共享卡收回
Uid uint32 `json:"uid" gorm:"index"`
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
State string `json:"state" gorm:"index"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
BillSn string `json:"bill_sn" gorm:"index"`
GameCardId uint32 `json:"game_card_id" gorm:"index"`
RetrieveCardType uint32 `json:"retrieve_card_type" gorm:"index"` // 1-送卡 2-邮寄
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
Remark string `json:"remark"`
GameCard GameCard `json:"game_card" gorm:"-"`
Store Store `json:"store" gorm:"-"`
//TotalVm uint32 `json:"total_vm"` // 累计积分
//ShareCardBillGameId uint32 `json:"share_card_bill_game_id" gorm:"index"`
}
func GetUserShareCardBillList(uid uint32, page, pageSize int, state string) ([]UserShareCardBill, int, error) {
page = page - 1
if page < 0 {
page = 0
}
if pageSize == 0 {
pageSize = 10
}
var shareCardBills []UserShareCardBill
qs := NewUserShareCardBillQuerySet(DB).UidEq(uid)
if state != "" {
qs = qs.StateEq(state)
}
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 GetUserShareCardBill(uid uint32, billId uint32) (UserShareCardBill, error) {
var shareCardBill UserShareCardBill
err := NewUserShareCardBillQuerySet(DB).IDEq(billId).One(&shareCardBill)
if err != nil {
logger.Error("user share card bill err:", err)
return shareCardBill, err
}
var store Store
err = NewStoreQuerySet(DB).IDEq(shareCardBill.StoreId).One(&store)
if err != nil {
logger.Error("store err:", err)
return shareCardBill, err
}
shareCardBill.Store = store
list := []UserShareCardBill{shareCardBill}
list = UserShareCardBillListSetGame(list)
if len(list) == 0 {
return shareCardBill, nil
}
err = list[0].SetShareCard()
if err != nil {
logger.Error("set share card err:", err)
return shareCardBill, err
}
return list[0], 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
}
func (m *UserShareCardBill) SetShareCard() error {
var userShareCards []UserShareCard
err := NewUserShareCardQuerySet(DB).UserShareCardBillIdEq(m.ID).All(&userShareCards)
if err != nil {
logger.Error("user share card err:", err)
return err
}
shareCardMap := make(map[uint32][]UserShareCard, 0)
for i, _ := range userShareCards {
shareCardMap[userShareCards[i].GameCardId] = append(shareCardMap[userShareCards[i].GameCardId], userShareCards[i])
}
if len(m.BillGames) == 0 {
logger.Error("bill games is nil")
return nil
}
for i, _ := range m.BillGames {
v, ok := shareCardMap[m.BillGames[i].GameCardId]
if ok {
m.BillGames[i].ShareCards = v
}
}
return nil
}
func GetUserShareCardMyCardList(uid uint32, page, pageSize int, state string) ([]UserShareCard, int, error) {
page = page - 1
if page < 0 {
page = 0
}
if pageSize == 0 {
pageSize = 10
}
states := []string{state}
if state == "" {
states = []string{ShareCardStateInCheck, ShareCardStateSharing, ShareCardStateRetrieve}
}
var shareCards []UserShareCard
qs := NewUserShareCardQuerySet(DB).UidEq(uid).StateIn(states...)
count, err := qs.Count()
if err != nil {
logger.Error("user share card bill count err:", err)
return shareCards, 0, err
}
totalPage := count/pageSize + 1
err = qs.OrderDescByID().Offset(page * pageSize).Limit(pageSize).All(&shareCards)
if err != nil && err != RecordNotFound {
logger.Error("user share card bill err:", err)
return shareCards, 0, err
}
if len(shareCards) == 0 {
return shareCards, 0, nil
}
shareCards = UserShareCardListSetGame(shareCards)
return shareCards, totalPage, nil
}
func UserShareCardListSetGame(list []UserShareCard) []UserShareCard {
gameIds := make([]uint32, 0, len(list))
for i, _ := range list {
gameIds = append(gameIds, list[i].GameCardId)
}
cardMap, err := GameCardMap(gameIds)
if err != nil {
logger.Error("game card map err:", err)
return list
}
for i, _ := range list {
v, ok := cardMap[list[i].GameCardId]
if ok {
list[i].GameCard = v
}
}
return list
}
func GetUserShareCardVmList(uid uint32, page, pageSize int, goodsId uint32) ([]UserShareCardVm, int, error) {
page = page - 1
if page < 0 {
page = 0
}
if pageSize == 0 {
pageSize = 10
}
var shareCardVms []UserShareCardVm
qs := NewUserShareCardVmQuerySet(DB).UidEq(uid).GameCardGoodsIdEq(goodsId)
count, err := qs.Count()
if err != nil {
logger.Error("user share card bill count err:", err)
return shareCardVms, 0, err
}
totalPage := count/pageSize + 1
err = qs.OrderDescByID().Offset(page * pageSize).Limit(pageSize).All(&shareCardVms)
if err != nil && err != RecordNotFound {
logger.Error("user share card bill err:", err)
return shareCardVms, 0, err
}
//if len(shareCardVms) == 0 {
// return shareCardVms, 0, nil
//}
//shareCards = UserShareCardListSetGame(shareCards)
return shareCardVms, totalPage, nil
}
func GetUserShareCardDateVm(uid uint32) (ShareCardDateVm, error) {
var cardDateVm ShareCardDateVm
err := NewShareCardDateVmQuerySet(DB).UidEq(uid).ProvideDateEq(utils.ZeroDateFormat(-1)).One(&cardDateVm)
if err != nil && err != RecordNotFound {
logger.Error("share card date vm err:", err)
}
return cardDateVm, nil
}
type ShareCardRetrieveCreateReq struct {
SerialNumbers []string `json:"serial_numbers"`
StoreId uint32 `json:"store_id"` // 门店id
RetrieveCardType uint32 `json:"retrieve_card_type"`
Uid uint32 `json:"uid"`
}
func (m *ShareCardRetrieveCreateReq) RetrieveCreate() error {
var userShareCards []UserShareCard
err := NewUserShareCardQuerySet(DB).SerialNumberIn(m.SerialNumbers...).All(&userShareCards)
if err != nil {
logger.Error("user share card err:", err)
return err
}
gameIds := make([]uint64, 0)
for i, _ := range userShareCards {
gameIds = append(gameIds, uint64(userShareCards[i].GameCardId))
}
//var gameCardGoodsStocks []GameCardGoodsStock
//err = NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(m.StoreId)).GameCardIdIn(gameIds...).All(&gameCardGoodsStocks)
//if err != nil {
// logger.Error("game card goods stock err:", err)
// return err
//}
var gameGoods []GameCardGoods
err = NewGameCardGoodsQuerySet(DB).GameCardIdIn(gameIds...).StatusEq(1).OrderAscByID().All(&gameGoods)
if err != nil && err != RecordNotFound {
logger.Error("game card goods err:", err)
return err
}
//state := RetrieveStateInSendCard
//for i, _ := range gameGoods {
// if gameGoods[i].Status == {
// }
//}
begin := DB.Begin()
retrieve := &ShareCardRetrieve{
Uid: m.Uid,
RetrieveCardType: m.RetrieveCardType,
StoreId: m.StoreId,
}
err = begin.Create(&retrieve).Error
if err != nil {
logger.Error("create share card retrieve err:", err)
return err
}
for i, _ := range userShareCards {
ShareCardRetrieveCard{
ShareCardRetrieveId: retrieve.ID,
UserShareCardId: userShareCards[i].ID,
Uid: m.Uid,
SerialNumber: userShareCards[i].SerialNumber,
State: "",
BillSn: "",
GameCardId: 0,
RetrieveCardType: 0,
GameCardGoodsId: 0,
UserShareCardBillId: 0,
StoreId: 0,
Remark: "",
GameCard: GameCard{},
Store: Store{},
}
}
return nil
}
func GetUserCardBySerialNumber(serialNumber string, list []GameCardGoods) (*GameCardGoods, bool) {
for i, _ := range list {
if list[i].SerialNumber == serialNumber {
return &list[i], true
}
}
return nil, false
}
// 用户收回卡
//// gen:qs
//type ShareCardRetrieve struct {
// Model
// Uid uint32 `json:"uid" gorm:"index"`
// State string `json:"state" gorm:"index"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
// RetrieveCardType uint32 `json:"retrieve_card_type" gorm:"index"` // 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"` // 物流单号
// StockRemovalTime time.Time `json:"stock_removal_time"` // 出库时间
// StockTime time.Time `json:"stock_time"` // 入库时间
// Remark string `json:"remark"`
//
// Store Store `json:"store" gorm:"-"`
//}
//
//// gen:qs
//type ShareCardRetrieveCard struct {
// Model
// ShareCardRetrieveId uint32 `json:"share_card_retrieve_id" gorm:"index"`
// UserShareCardId uint32 `json:"user_share_card_id" gorm:"index"` // 用户共享卡收回
// Uid uint32 `json:"uid" gorm:"index"`
// SerialNumber string `json:"serial_number" gorm:"index"` // 编号
// State string `json:"state" gorm:"index"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
// BillSn string `json:"bill_sn" gorm:"index"`
// GameCardId uint32 `json:"game_card_id" gorm:"index"`
// RetrieveCardType uint32 `json:"retrieve_card_type" gorm:"index"` // 1-送卡 2-邮寄
// GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
// UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
// StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
// Remark string `json:"remark"`
// GameCard GameCard `json:"game_card" gorm:"-"`
// Store Store `json:"store" gorm:"-"`
//
// //TotalVm uint32 `json:"total_vm"` // 累计积分
// //ShareCardBillGameId uint32 `json:"share_card_bill_game_id" gorm:"index"`
//}