mh_goadmin_server/app/admin/models/share_card.go
2023-10-08 15:05:33 +08:00

2519 lines
82 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package models
import (
"errors"
"fmt"
"go-admin/app/admin/models/kuaidi"
orm "go-admin/common/global"
"go-admin/logger"
"time"
)
// gen:qs
//
//go:generate goqueryset -in share_card.go
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"` // 出库时间
Remark string `json:"remark"`
Store Store `json:"store" gorm:"-"` // 门店
// user_share_card_bill
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" // 审核失败
ShareCardBillStateReceivingCard = "receiving_card" // 收回中
ShareCardBillStateReceivedCard = "received_card" // 已收回
)
const (
ShareCardStateInCheck = "in_check" // 待审核
ShareCardStateInSendCard = "in_send_card" // 待递送卡
ShareCardStateSharing = "sharing" // 共享中
ShareCardStateAuditLose = "check_lose" // 审核失败
ShareCardStateCancel = "cancel" // 取消
ShareCardStateReceivingCard = "receiving_card" // 收回中
ShareCardStateReceivedCard = "received_card" // 已收回
)
// 用户的共享卡
// gen:qs
type UserShareCard struct {
Model
Uid uint32 `json:"uid" gorm:"index"`
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
GameCardId uint32 `json:"game_card_id" gorm:"index"`
AllotSerialNumber string `json:"allot_serial_number" gorm:"index"` // 库存共享卡编号 分配收回卡 绑定新卡编号
AllotCardGoodsId uint32 `json:"allot_card_goods_id" gorm:"index"` // 库存共享卡id
UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
BillSn string `json:"bill_sn" gorm:"index"`
State string `json:"state" 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"` // 累计积分
RetrieveSerialNumber string `json:"retrieve_serial_number" gorm:"index"` // 收卡编号
RetrieveGameCardGoodsId uint32 `json:"retrieve_game_card_goods_id" gorm:"index"` // 收回卡id
GameCard GameCard `json:"game_card" gorm:"-"`
UserInfo UserInfo `json:"user_info" gorm:"-"`
GameCardGoods *GameCardGoods `json:"game_card_goods" gorm:"-"`
UserShareCard *UserShareCard `json:"user_share_card" gorm:"-"`
// user_share_card
}
//// 用户共享卡库存状态
////gen:qs
//type UserShareCardStock struct {
// Model
// Uid uint32 `json:"uid" gorm:"index"`
// ShareSerialNumber string `json:"share_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"`
// UserShareCardId uint32 `json:"user_share_card_id"`
// StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
// ProfitState uint32 `json:"profit_state"` // 1-未生效 2-生效
// TotalVm uint32 `json:"total_vm"` // 累计积分
// RetrieveSerialNumber string `json:"retrieve_serial_number" gorm:"index"` // 收卡编号
// RetrieveGameCardGoodsId uint32 `json:"retrieve_game_card_goods_id" gorm:"index"` // 收回卡id
// GameCard GameCard `json:"game_card" gorm:"-"`
// UserInfo UserInfo `json:"user_info" gorm:"-"`
// //UserShareCard uint32 `json:"user_share_card"`
//}
type ShareBillListReq struct {
Uid uint64 `json:"uid" `
StoreId uint64 `json:"store_id" ` // 门店id
BillSn string `json:"bill_sn"`
State string `json:"state"`
SendCardType uint32 `json:"send_card_type"` // 1-送卡 2-邮寄
ExpressNo string `json:"express_no"` // 物流单号
StartTime time.Time `json:"start_time"` // 开始时间
EndTime time.Time `json:"end_time"` // 结束时间
Page int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
// 游戏每日发放收益记录
// 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"` // 发放收益时间
GameCard GameCard `json:"game_card" gorm:"-"`
//ShareCardGameVm int `json:"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" gorm:"index"`
UserInfo UserInfo `json:"user_info" gorm:"-"`
GameCard GameCard `json:"game_card" gorm:"-"`
}
// 用户每日收益列表
// 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"` // 收益日期
UserInfo UserInfo `json:"user_info" gorm:"-"`
// share_card_date_vm
}
// 总每日收益列表
// gen:qs
type ShareCardVmRecord struct {
Model
TotalVm uint32 `json:"total_vm"`
ProvideVm uint32 `json:"provide_vm"` // 总发放积分
ProvideDate string `json:"provide_date" gorm:"index"` // 发放收益时间
//ShareCardVmRecord int `json:"share_card_vm_record"`
}
// 用户收回卡
// 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"` // 入库时间
PayState uint32 `json:"pay_state"` // 1-未支付 2-已支付
PayAmount uint32 `json:"pay_amount"` // 支付金额
Remark string `json:"remark"`
OrderSn string `json:"order_sn" gorm:"index"` // 订单编号
AddressId uint32 `json:"address_id" gorm:"index"` // 收货地址
RefundOrderSn string `json:"refund_order_sn" gorm:"index"` // 订单编号退费
PickupCode string `json:"pickup_code"` // 取货码
Store Store `json:"store" gorm:"-"`
UserAddress UserAddress `json:"user_address" gorm:"-"`
ShareCardRetrieveCards []ShareCardRetrieveCard `json:"share_card_retrieve_cards" gorm:"-"`
ReceiptTime time.Time `json:"receipt_time"` // 签收时间
//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:"-"`
// share_card_retrieve
}
const (
RetrieveStateInCheck = "in_check" // 待审核
RetrieveStateCheckLose = "check_lose" // 审核失败
RetrieveStateOutStock = "out_stock" // 暂无库存
RetrieveStateInReceiveCard = "in_receive_card" // 待收卡
RetrieveStateSentCard = "sent_card" // 已发卡
RetrieveStateReceivedCard = "received_card" // 已收卡
RetrieveStateCancel = "cancel" // 取消
//RetrieveStateInPickCard = "in_pick_card" // 待取卡
)
// gen:qs
type ShareCardRetrieveCard struct {
Model
ShareCardRetrieveId uint32 `json:"share_card_retrieve_id" gorm:"index"` // 收回卡单id
UserShareCardId uint32 `json:"user_share_card_id" gorm:"index"` // 用户共享卡id
Uid uint32 `json:"uid" gorm:"index"`
State string `json:"state" gorm:"index"` // -暂无库存 -待发卡 -待取卡 -已发卡 -已收卡 -已取消
TransportType uint32 `json:"transport_type" gorm:"index"` // 1-送卡到门店 2-邮寄
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
GameCardId uint32 `json:"game_card_id" gorm:"index"`
StoreId uint32 `json:"store_id" gorm:"index"` // 共享卡门店id
UserShareCardBillId uint32 `json:"user_share_card_bill_id" gorm:"index"`
BillSn string `json:"bill_sn" gorm:"index"`
RetrieveSerialNumber string `json:"retrieve_serial_number" gorm:"index"` // 收卡编号
RetrieveGameCardGoodsId uint32 `json:"retrieve_game_card_goods_id" gorm:"index"` // 收回卡id
Remark string `json:"remark"`
OriginalCardType string `json:"original_card_type" gorm:"index"` // -公共卡 -用户共享 回收前的卡类型 原卡类型
AllotUserShareCardId uint32 `json:"allot_user_share_card_id" gorm:"index"` // 分配用户共享卡id
ReceiptTime time.Time `json:"receipt_time"` // 签收时间
GameCard GameCard `json:"game_card" gorm:"-"`
Store Store `json:"store" gorm:"-"`
ShareCardRetrieve ShareCardRetrieve `json:"share_card_retrieve" gorm:"-"`
//TotalVm uint32 `json:"total_vm"` // 累计积分
//ShareCardBillGameId uint32 `json:"share_card_bill_game_id" gorm:"index"`
// share_card_retrieve_card
}
const (
//CardIssueStateUnFollow = "unfollow" // 待处理
//CardIssueStateFollowed = "followed" // 已处理
CardIssueStateFollowing = "following" // 处理中
CardIssueStateFollowed = "followed" // 已处理
CardIssueStateInDeliver = "in_deliver" // 发货中
CardIssueStateCompleted = "completed" // 已完成
CardIssueStateCanceled = "canceled" // 已取消
)
const (
ObtainTypeRetrieveCard = "retrieve_card" // 收回卡
ObtainTypeRentCard = "rent_card" // 租卡
)
type CardIssueFeedback struct {
Model
Uid uint32 `json:"uid" gorm:"index"` // 反馈用户
GameCardId uint32 `json:"game_card_id" gorm:"index"`
SerialNumber string `json:"serial_number" gorm:"index"` // 编号
GameCardGoodsId uint32 `json:"game_card_goods_id" gorm:"index"`
StoreId uint32 `json:"store_id" gorm:"index"` // 门店id
RelevanceId uint32 `json:"relevance_id" gorm:"index"` // 关联id
ObtainType string `json:"obtain_type"` // 卡类型: -收回卡 -租卡
State string `json:"state" gorm:"index"` // 状态:
Problem string `json:"problem"` // 问题
Remark string `json:"remark"`
ExpressCompany string `json:"express_company"` // 物流公司
ExpressCompanyNo string `json:"express_company_no"` // 物流公司编号
ExpressNo string `json:"express_no" gorm:"index"` // 物流单号
IsNormalFunction uint32 `json:"is_normal_function"` // 功能是否正常:1-是 2-否
IsPackingIntact uint32 `json:"is_packing_intact"` // 包装是否完整:1-是 2-否
IsCardBreakage uint32 `json:"is_card_breakage"` // 卡带是否破损:1-是 2-否
DeliverExpressCompany string `json:"deliver_express_company"` // 发货物流公司
DeliverExpressNo string `json:"deliver_express_no" gorm:"index"` // 发货物流单号
ReissueSerialNumber string `json:"reissue_serial_number" gorm:"index"` // 补发货编码
ReissueGameCardGoodsId uint32 `json:"reissue_game_card_goods_id" gorm:"index"` // 补发货卡id
DeliverTime time.Time `json:"deliver_time"` // 发货时间
CheckTime time.Time `json:"check_time"` // 检测时间
CheckSysUid string `json:"check_sys_uid" gorm:"index"` // 检测店员账号用户id
ReceiptTime time.Time `json:"receipt_time"` // 签收时间
TransportType uint32 `json:"transport_type" gorm:"index"` // 1-送卡到门店 2-邮寄
UserAddressId uint32 `json:"user_address_id" gorm:"index"`
UserInfo *UserInfo `json:"user_info" gorm:"-"`
GameCard *GameCard `json:"game_card" gorm:"-"`
Store *Store `json:"store" gorm:"-"`
ShareCardRetrieve *ShareCardRetrieve `json:"share_card_retrieve" gorm:"-"`
Order *Order `json:"order" gorm:"-"`
UserAddress *UserAddress `json:"user_address" gorm:"-"`
// card_issue_feedback
}
func (m *ShareBillListReq) List() ([]UserShareCardBill, int64, error) {
var bills []UserShareCardBill
qs := orm.Eloquent.Table("user_share_card_bill")
if m.Uid != 0 {
qs = qs.Where("uid=?", m.Uid)
}
if m.StoreId != 0 {
qs = qs.Where("store_id=?", m.StoreId)
}
if m.BillSn != "" {
qs = qs.Where("bill_sn=?", m.BillSn)
}
if m.State != "" {
qs = qs.Where("state=?", m.State)
}
if m.SendCardType != 0 {
qs = qs.Where("send_card_type=?", m.SendCardType)
}
if m.ExpressNo != "" {
qs = qs.Where("express_no=?", m.ExpressNo)
}
if !m.StartTime.IsZero() {
qs = qs.Where("created_at>?", m.StartTime)
}
if !m.EndTime.IsZero() {
qs = qs.Where("created_at<?", m.EndTime)
}
page := m.Page - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("count err:", err)
return bills, 0, err
}
//totalPage :=int(count) /m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&bills).Error
if err != nil {
logger.Error("count err:", err)
return bills, count, err
}
if len(bills) > 0 {
bills = UserShareCardBillListSetGame(bills)
}
return bills, count, nil
}
func UserShareCardBillListSetGame(list []UserShareCardBill) []UserShareCardBill {
list = UserShareCardBillListSetStore(list)
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 := orm.Eloquent.Table("share_card_bill_game").Where("user_share_card_bill_id in (?)", billIds).Find(&games).Error
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 UserShareCardBillListSetStore(list []UserShareCardBill) []UserShareCardBill {
storeIds := make([]uint32, 0, len(list))
for i, _ := range list {
storeIds = append(storeIds, list[i].StoreId)
}
if len(storeIds) == 0 {
return list
}
storeMap := GetStoreMap()
for i, _ := range list {
v, ok := storeMap[list[i].StoreId]
if ok {
list[i].Store = v
}
}
return list
}
type ShareBillCardStorageReq struct {
UserShareCardBillId uint32 `json:"user_share_card_bill_id"`
StoreId uint64 `json:"store_id" ` // 门店id
Cards []GameCardGoods `json:"cards"`
CheckType uint32 `json:"check_type"` // 1-审核失败 2-审核成功
Remark string `json:"remark"`
}
//type BillCardStorageInfo struct {
// GameCardId uint32 `json:"game_card_id"`
// SerialNumber string `json:"serial_number"` // 编号
//}
func (m *ShareBillCardStorageReq) CardStorage() error {
if m.CheckType == 1 {
state := ShareCardBillStateInSendCard
gameState := ShareCardStateInSendCard
if m.CheckType == 1 {
state = ShareCardBillStateAuditLose
gameState = ShareCardStateAuditLose
}
begin := orm.Eloquent.Begin()
err := begin.Table("user_share_card_bill").Where("id=?", m.UserShareCardBillId).Updates(&map[string]interface{}{
"state": state,
"remark": m.Remark,
}).Error
if err != nil {
begin.Rollback()
logger.Errorf("update user share card bill err:", err)
return err
}
err = begin.Table("share_card_bill_game").Where("user_share_card_bill_id=?", m.UserShareCardBillId).Updates(&map[string]interface{}{
"state": gameState,
}).Error
if err != nil {
begin.Rollback()
logger.Errorf("update share card bill game err:", err)
return err
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Errorf("commit err:", err)
return err
}
return nil
}
for i, _ := range m.Cards {
if m.Cards[i].SerialNumber == "" {
logger.Errorf("serial number null:")
return errors.New("serial number null")
}
}
var userShareCardBill UserShareCardBill
err := orm.Eloquent.Table("user_share_card_bill").Where("id=?", m.UserShareCardBillId).Find(&userShareCardBill).Error
if err != nil {
logger.Errorf("user share card bill game err:", err)
return err
}
if userShareCardBill.State != ShareCardBillStateInSendCard && userShareCardBill.State != ShareCardBillStateSentCard {
logger.Error("state err:")
return errors.New("state err")
}
if len(m.Cards) > 0 {
gameIds := make([]uint32, 0)
for i, _ := range m.Cards {
m.Cards[i].StoreId = m.StoreId
m.Cards[i].Status = 1
m.Cards[i].StockTime = time.Now()
m.Cards[i].CardType = GameCardGoodsTypeShare
m.Cards[i].ShareProfitType = 2
m.Cards[i].UserShareCardBill = &userShareCardBill
gameIds = append(gameIds, uint32(m.Cards[i].GameCardId))
}
new(GameCardGoods).Adds(m.Cards)
begin := orm.Eloquent.Begin()
err := begin.Table("user_share_card_bill").Where("id=?", m.UserShareCardBillId).Updates(&map[string]interface{}{
"state": ShareCardBillStateCompleted,
"stock_time": time.Now(),
"remark": m.Remark,
}).Error
if err != nil {
begin.Rollback()
logger.Errorf("update user share card bill err:", err)
return err
}
err = begin.Table("share_card_bill_game").Where("user_share_card_bill_id=?", m.UserShareCardBillId).
Where("game_card_id in (?)", gameIds).Updates(&map[string]interface{}{
"state": ShareCardStateSharing,
}).Error
if err != nil {
begin.Rollback()
logger.Errorf("update share card bill game err:", err)
return err
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Errorf("commit err:", err)
return err
}
err = orm.Eloquent.Table("share_card_bill_game").Where("user_share_card_bill_id=?", m.UserShareCardBillId).
Where("state=?", ShareCardStateInCheck).Updates(&map[string]interface{}{
"state": ShareCardStateCancel,
}).Error
if err != nil {
logger.Errorf("update share card bill game err:", err)
return err
}
}
return nil
}
func GetShareBillInfo(billId uint32) (UserShareCardBill, error) {
var userShareCardBill UserShareCardBill
err := orm.Eloquent.Table("user_share_card_bill").Where("id=?", billId).Find(&userShareCardBill).Error
if err != nil {
logger.Errorf("user share card bill err:", err)
return userShareCardBill, err
}
bills := []UserShareCardBill{userShareCardBill}
bills = UserShareCardBillListSetGame(bills)
if len(bills) == 0 {
return userShareCardBill, nil
}
//userShareCardBill = bills[0]
err = bills[0].SetShareCard()
if err != nil {
logger.Errorf("set share card err:", err)
return userShareCardBill, err
}
return bills[0], nil
}
func (m *UserShareCardBill) SetShareCard() error {
var userShareCards []UserShareCard
err := orm.Eloquent.Table("user_share_card").Where("user_share_card_bill_id=?", m.ID).Find(&userShareCards).Error
if err != nil {
logger.Errorf("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
}
type UserShareCardListReq struct {
Uid uint64 `json:"uid" `
StoreId uint64 `json:"store_id" ` // 门店id
BillSn string `json:"bill_sn"`
State string `json:"state"`
SerialNumber string `json:"serial_number"` // 编号
GameCardId uint32 `json:"game_card_id"`
GameCardGoodsId uint32 `json:"game_card_goods_id"`
RetrieveSerialNumber string `json:"retrieve_serial_number"` // 收卡编号
StartTime time.Time `json:"start_time"` // 开始时间
EndTime time.Time `json:"end_time"` // 结束时间
Page int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
func (m *UserShareCardListReq) List() ([]UserShareCard, int64, error) {
var cards []UserShareCard
qs := orm.Eloquent.Table("user_share_card")
if m.Uid != 0 {
qs = qs.Where("uid=?", m.Uid)
}
if m.StoreId != 0 {
qs = qs.Where("store_id=?", m.StoreId)
}
if m.BillSn != "" {
qs = qs.Where("bill_sn=?", m.BillSn)
}
if m.State != "" {
qs = qs.Where("state=?", m.State)
}
if m.SerialNumber != "" {
qs = qs.Where("serial_number=?", m.SerialNumber)
}
if m.GameCardId != 0 {
qs = qs.Where("game_card_id=?", m.GameCardId)
}
if m.RetrieveSerialNumber != "" {
qs = qs.Where("retrieve_serial_number=?", m.RetrieveSerialNumber)
}
if !m.StartTime.IsZero() {
qs = qs.Where("created_at>?", m.StartTime)
}
if !m.EndTime.IsZero() {
qs = qs.Where("created_at<?", m.EndTime)
}
page := m.Page - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("count err:", err)
return cards, 0, err
}
//totalPage :=int(count) /m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&cards).Error
if err != nil {
logger.Error("count err:", err)
return cards, count, err
}
if len(cards) > 0 {
cards = UserShareCardListSetGame(cards)
}
return cards, count, nil
}
func UserShareCardListSetGame(list []UserShareCard) []UserShareCard {
gameIds := make([]uint32, 0, len(list))
uids := make([]uint32, 0, len(list))
for i, _ := range list {
gameIds = append(gameIds, list[i].GameCardId)
uids = append(uids, list[i].Uid)
}
cardMap, err := GameCardMap(gameIds)
if err != nil {
logger.Error("game card map err:", err)
return list
}
userInfoMap, err := GetUserInfoMap(uids)
if err != nil {
logger.Error("get user info map err:", err)
}
for i, _ := range list {
v, ok1 := cardMap[list[i].GameCardId]
if ok1 {
list[i].GameCard = v
}
userInfo, ok2 := userInfoMap[list[i].Uid]
if ok2 {
list[i].UserInfo = userInfo
}
}
return list
}
func UserShareCardVmListSetGame(list []UserShareCardVm) []UserShareCardVm {
gameIds := make([]uint32, 0, len(list))
uids := make([]uint32, 0, len(list))
for i, _ := range list {
gameIds = append(gameIds, list[i].GameCardId)
uids = append(uids, list[i].Uid)
}
cardMap, err := GameCardMap(gameIds)
if err != nil {
logger.Error("game card map err:", err)
return list
}
userInfoMap, err := GetUserInfoMap(uids)
if err != nil {
logger.Error("get user info map err:", err)
}
for i, _ := range list {
v, ok1 := cardMap[list[i].GameCardId]
if ok1 {
list[i].GameCard = v
}
userInfo, ok2 := userInfoMap[list[i].Uid]
if ok2 {
list[i].UserInfo = userInfo
}
}
return list
}
const (
CardProfitVm = 21
)
func ShareCardProfitEffectCard() {
//var shareCards []UserShareCard
//err := orm.Eloquent.Table("user_share_card").Where("profit_state=?",1).
// Where("state=?", ShareCardStateSharing).
// Find(&shareCards).Error
//if err != nil {
// logger.Error("game share cards err:", err)
// return
//}
//ids := make([]uint32,0,len(shareCards))
//for i, _ := range shareCards {
// ids = append(ids, shareCards[i].ID)
//}
err := orm.Eloquent.Table("user_share_card").Where("profit_state=?", 1).
Where("state=?", ShareCardStateSharing).Update("profit_state", 2).Error
if err != nil {
logger.Error("game share cards err:", err)
return
}
}
func ShareCardProvideVm() {
//gameCards := make([]UserShareCard, 0)
var gameCards []UserShareCard
gameSql := fmt.Sprintf("SELECT * FROM user_share_card WHERE 1 GROUP BY game_card_id ;")
err := orm.Eloquent.Raw(gameSql).Scan(&gameCards).Error
if err != nil {
logger.Error("game cards err:", err)
return
}
gameIds := make([]uint32, 0, len(gameCards))
for i, _ := range gameCards {
gameIds = append(gameIds, gameCards[i].GameCardId)
}
shareCardVmRecord := &ShareCardVmRecord{ProvideDate: ZeroDateFormat(-1)}
for i, _ := range gameIds {
shareCardVmRecord.ProvideVmGameId(gameIds[i])
}
var vmRecord ShareCardVmRecord
//orm.Eloquent.Table("share_card_vm_record").Order("id DESC").Limit(1).Find()
err = orm.Eloquent.Table("share_card_vm_record").Where("provide_date=?", ZeroDateFormat(-2)).Find(&vmRecord).Error
if err != nil && err != RecordNotFound {
logger.Error("share card vm record err:", err)
return
}
shareCardVmRecord.TotalVm = shareCardVmRecord.ProvideVm + vmRecord.TotalVm
err = orm.Eloquent.Create(shareCardVmRecord).Error
if err != nil {
logger.Error("create share card vm record err:", err)
return
}
}
func (m *ShareCardVmRecord) ProvideVmGameId(gameId uint32) {
var shareCards []UserShareCard
err := orm.Eloquent.Table("user_share_card").Where("state=?", ShareCardStateSharing).
Where("profit_state=?", 2).Where("game_card_id=?", gameId).Find(&shareCards).Error
if err != nil {
logger.Error("game cards err:", err)
return
}
if len(shareCards) == 0 {
return
}
record := &ShareCardGameVm{GameCardId: gameId, TotalCardCount: uint32(len(shareCards))}
//goodsIds := make([]uint32, 0, len(shareCards))
//for i, _ := range shareCards {
// goodsIds = append(goodsIds, shareCards[i].GameCardGoodsId)
//}
//var game GameCardGoods
var holdCount int64
//err = orm.Eloquent.Table("game_card_goods").Where("game_card_id in (?)", goodsIds).
//err = orm.Eloquent.Table("game_card_goods").Where("id in (?)", goodsIds).
err = orm.Eloquent.Table("game_card_goods").Where("game_card_id=?", gameId).Where("share_profit_type=?", 2).
Where("card_type=?", "user_share").Where("status in (?)", []uint32{2, 3}).Count(&holdCount).Error
if err != nil {
logger.Error("stock count err:", err)
return
}
//record.HoldCardCount = record.TotalCardCount - uint32(stockCount)
record.HoldCardCount = uint32(holdCount)
record.StockCardCount = record.TotalCardCount - uint32(holdCount)
//record.ProvideDate = TodayZeroDateFormat()
record.ProvideDate = m.ProvideDate
record.CardProfit = CardProfitVm
record.ProvideVm = CardProfitVm * record.HoldCardCount // 用户持有卡的数量
record.Vm = record.ProvideVm / record.TotalCardCount
err = orm.Eloquent.Create(record).Error
if err != nil {
logger.Error("share card vm record create err:", err)
return
}
m.ProvideVm += record.ProvideVm
record.ProvideVmUser(shareCards)
//var holdCount int64
//err = orm.Eloquent.Table("game_card_goods").Where("game_card_id in (?)", goodsIds).
// Where("status!=?", 1).Count(&holdCount).Error
//if err != nil {
// logger.Error("stock count err:", err)
// return
//}
}
func (m *ShareCardGameVm) ProvideVmUser(cards []UserShareCard) {
for i, _ := range cards {
userShareCardVm := &UserShareCardVm{
ShareCardGameVmId: m.ID,
Uid: cards[i].Uid,
SerialNumber: cards[i].SerialNumber,
BillSn: cards[i].BillSn,
GameCardId: m.GameCardId,
GameCardGoodsId: cards[i].GameCardGoodsId,
UserShareCardBillId: cards[i].UserShareCardBillId,
CardProfit: m.CardProfit,
Vm: m.Vm,
ProvideDate: m.ProvideDate,
}
err := orm.Eloquent.Create(userShareCardVm).Error
if err != nil {
logger.Error("user share card vm create err:", err)
}
sql := fmt.Sprintf("UPDATE user_share_card SET total_vm=total_vm+%d WHERE game_card_goods_id =%d ;", userShareCardVm.Vm, userShareCardVm.GameCardGoodsId)
err = orm.Eloquent.Exec(sql).Error
if err != nil {
logger.Error("update user share card err:", err)
}
}
}
type UserShareCardVmListReq struct {
Uid uint64 `json:"uid" `
//StoreId uint64 `json:"store_id" ` // 门店id
BillSn string `json:"bill_sn"`
//State string `json:"state"`
SerialNumber string `json:"serial_number"` // 编号
GameCardId uint32 `json:"game_card_id"`
GameCardGoodsId uint32 `json:"game_card_goods_id"`
StartTime time.Time `json:"start_time"` // 开始时间
EndTime time.Time `json:"end_time"` // 结束时间
Page int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
func (m *UserShareCardVmListReq) List() ([]UserShareCardVm, int64, error) {
var cards []UserShareCardVm
qs := orm.Eloquent.Table("user_share_card_vm")
if m.Uid != 0 {
qs = qs.Where("uid=?", m.Uid)
}
if m.GameCardGoodsId != 0 {
qs = qs.Where("game_card_goods_id=?", m.GameCardGoodsId)
}
if m.BillSn != "" {
qs = qs.Where("bill_sn=?", m.BillSn)
}
//if m.State != "" {
// qs = qs.Where("state=?", m.State)
//}
if m.SerialNumber != "" {
qs = qs.Where("serial_number=?", m.SerialNumber)
}
if m.GameCardId != 0 {
qs = qs.Where("game_card_id=?", m.GameCardId)
}
if !m.StartTime.IsZero() {
qs = qs.Where("created_at>?", m.StartTime)
}
if !m.EndTime.IsZero() {
qs = qs.Where("created_at<?", m.EndTime)
}
page := m.Page - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("count err:", err)
return cards, 0, err
}
//totalPage :=int(count) /m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&cards).Error
if err != nil {
logger.Error("count err:", err)
return cards, count, err
}
if len(cards) > 0 {
cards = UserShareCardVmListSetGame(cards)
}
return cards, count, nil
}
type UserShareCardVmDate struct {
Uid uint32 `json:"uid"`
TotalVm uint32 `json:"total_vm"`
}
func ShareCardUserVmRecord() {
var gameCards []UserShareCard
gameSql := fmt.Sprintf("SELECT * FROM user_share_card WHERE 1 GROUP BY uid ;")
err := orm.Eloquent.Raw(gameSql).Scan(&gameCards).Error
if err != nil {
logger.Error("game cards err:", err)
return
}
provideDate := ZeroDateFormat(-1)
//uids := make([]uint32, 0, len(gameCards))
for i, _ := range gameCards {
//uids = append(uids, gameCards[i].Uid)
uid := gameCards[i].Uid
var vmDate UserShareCardVmDate
userSql := fmt.Sprintf("SELECT uid,SUM(vm) AS total_vm FROM user_share_card_vm WHERE provide_date = '%s' AND uid =%d GROUP BY uid ;", provideDate, gameCards[i].Uid)
//fmt.Println("userSql:", userSql)
err := orm.Eloquent.Raw(userSql).Scan(&vmDate).Error
if err != nil {
logger.Error("user total vm err:", err)
return
}
//fmt.Println("vmDate:", vmDate)
var dateVm ShareCardDateVm
err = orm.Eloquent.Table("share_card_date_vm").Where("uid=?", uid).Where("provide_date=?", ZeroDateFormat(-2)).Find(&dateVm).Error
if err != nil && err != RecordNotFound {
logger.Error("share card date vm err:", err)
return
}
shareCardDateVm := &ShareCardDateVm{Uid: uid, ProvideDate: provideDate, TotalVm: dateVm.TotalVm}
shareCardDateVm.Vm = vmDate.TotalVm
shareCardDateVm.TotalVm += shareCardDateVm.Vm
//fmt.Println("shareCardDateVm:", shareCardDateVm)
err = UserVmUpdate(shareCardDateVm.Uid, int(shareCardDateVm.Vm), VmEventUserShareCard, "用户共享卡收益")
//err = UserVmUpdate(shareCardDateVm.Uid, int(shareCardDateVm.TotalVm), VmEventUserShareCard, "用户共享卡收益")
if err != nil {
logger.Error("user vm update err:", err)
return
}
err = orm.Eloquent.Create(shareCardDateVm).Error
if err != nil {
logger.Error("create share card date vm err:", err)
return
}
}
}
func ShareCardRetrieveCardSetStockCardCron() {
var retrieves []ShareCardRetrieve
err := orm.Eloquent.Table("share_card_retrieve").Where("state=?", RetrieveStateOutStock).
Where("pay_state", 2).Order("id ASC").Find(&retrieves).Error
if err != nil {
logger.Error("share card retrieve err:", err)
return
}
for i, _ := range retrieves {
err = ShareCardRetrieveCardSetStockCard(retrieves[i].ID, "")
if err != nil {
logger.Error("share card retrieve card set stock card cron err:", err)
}
}
}
type ShareCardGameVmListReq struct {
ProvideDate string `json:"provide_date"` // 发放收益时间
GameCardId uint32 `json:"game_card_id"`
StartTime time.Time `json:"start_time"` // 开始时间
EndTime time.Time `json:"end_time"` // 结束时间
Page int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
func (m *ShareCardGameVmListReq) List() ([]ShareCardGameVm, int64, error) {
var cards []ShareCardGameVm
qs := orm.Eloquent.Table("share_card_game_vm")
//if m.Uid != 0 {
// qs = qs.Where("uid=?", m.Uid)
//}
//if m.GameCardGoodsId != 0 {
// qs = qs.Where("game_card_goods_id=?", m.GameCardGoodsId)
//}
//if m.BillSn != "" {
// qs = qs.Where("bill_sn=?", m.BillSn)
//}
//if m.State != "" {
// qs = qs.Where("state=?", m.State)
//}
//if m.SerialNumber != "" {
// qs = qs.Where("serial_number=?", m.SerialNumber)
//}
//if m.BillSn != "" {
// qs = qs.Where("bill_sn=?", m.BillSn)
//}
if m.GameCardId != 0 {
qs = qs.Where("game_card_id=?", m.GameCardId)
}
if !m.StartTime.IsZero() {
qs = qs.Where("created_at>?", m.StartTime)
}
if !m.EndTime.IsZero() {
qs = qs.Where("created_at<?", m.EndTime)
}
page := m.Page - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("count err:", err)
return cards, 0, err
}
//totalPage :=int(count) /m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&cards).Error
if err != nil {
logger.Error("count err:", err)
return cards, count, err
}
if len(cards) > 0 {
cards = ShareCardVmListSetGame(cards)
}
return cards, count, nil
}
func ShareCardVmListSetGame(list []ShareCardGameVm) []ShareCardGameVm {
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, ok1 := cardMap[list[i].GameCardId]
if ok1 {
list[i].GameCard = v
}
}
return list
}
type ShareCardUserVmListReq struct {
ProvideDate string `json:"provide_date"` // 发放收益时间
Uid uint32 `json:"uid"`
StartTime time.Time `json:"start_time"` // 开始时间
EndTime time.Time `json:"end_time"` // 结束时间
Page int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
func (m *ShareCardUserVmListReq) List() ([]ShareCardDateVm, int64, error) {
var dateVms []ShareCardDateVm
qs := orm.Eloquent.Table("share_card_date_vm")
if m.Uid != 0 {
qs = qs.Where("uid=?", m.Uid)
}
if !m.StartTime.IsZero() {
qs = qs.Where("created_at>?", m.StartTime)
}
if !m.EndTime.IsZero() {
qs = qs.Where("created_at<?", m.EndTime)
}
page := m.Page - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("count err:", err)
return dateVms, 0, err
}
//totalPage :=int(count) /m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&dateVms).Error
if err != nil {
logger.Error("count err:", err)
return dateVms, count, err
}
if len(dateVms) > 0 {
dateVms = ShareCardUserVmListSetUser(dateVms)
}
return dateVms, count, nil
}
func ShareCardUserVmListSetUser(list []ShareCardDateVm) []ShareCardDateVm {
uids := make([]uint32, 0, len(list))
for i, _ := range list {
uids = append(uids, list[i].Uid)
}
userMap, err := GetUserInfoMap(uids)
if err != nil {
logger.Error("game card map err:", err)
return list
}
for i, _ := range list {
v, ok1 := userMap[list[i].Uid]
if ok1 {
list[i].UserInfo = v
}
}
return list
}
type ShareCardRetrieveListReq struct {
Uid uint32 `json:"uid"`
GameCardId uint32 `json:"game_card_id"`
State string `json:"state"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
RetrieveCardType uint32 `json:"retrieve_card_type"` // 1-送卡门店 2-邮寄
StoreId uint32 `json:"store_id"` // 门店id
ExpressNo string `json:"express_no"` // 物流单号
PickupCode string `json:"pickup_code"` // 取货码
RetrieveSerialNumber string `json:"retrieve_serial_number"`
StartTime time.Time `json:"start_time"` // 开始时间
EndTime time.Time `json:"end_time"` // 结束时间
Page int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
func (m *ShareCardRetrieveListReq) List() ([]ShareCardRetrieve, int64, error) {
var retrieves []ShareCardRetrieve
qs := orm.Eloquent.Table("share_card_retrieve").Where("pay_state", 2)
if m.Uid != 0 {
qs = qs.Where("uid=?", m.Uid)
}
//if m.GameCardId != 0 {
// //qs = qs.Where("game_card_goods_id=?", m.GameCardGoodsId)
//}
if m.RetrieveCardType != 0 {
qs = qs.Where("retrieve_card_type=?", m.RetrieveCardType)
}
if m.StoreId != 0 {
qs = qs.Where("store_id=?", m.StoreId)
}
if m.ExpressNo != "" {
qs = qs.Where("express_no=?", m.ExpressNo)
}
if m.State != "" {
qs = qs.Where("state=?", m.State)
}
if m.PickupCode != "" {
qs = qs.Where("pickup_code=?", m.PickupCode)
}
if m.RetrieveSerialNumber != "" {
var shareCardRetrieveCards []ShareCardRetrieveCard
err := orm.Eloquent.Table("share_card_retrieve_card").Where("retrieve_serial_number=?", m.RetrieveSerialNumber).
Find(&shareCardRetrieveCards).Error
if err != nil {
logger.Error("share card retrieve card err:", err)
return retrieves, 0, err
}
retrieveIds := make([]uint32, 0, len(shareCardRetrieveCards))
for i, _ := range shareCardRetrieveCards {
retrieveIds = append(retrieveIds, shareCardRetrieveCards[i].ShareCardRetrieveId)
}
if len(retrieveIds) > 0 {
qs = qs.Where("id in (?)", retrieveIds)
}
}
if m.GameCardId != 0 {
var shareCardRetrieveCards []ShareCardRetrieveCard
err := orm.Eloquent.Table("share_card_retrieve_card").Where("game_card_id=?", m.GameCardId).
Find(&shareCardRetrieveCards).Error
if err != nil {
logger.Error("share card retrieve card err:", err)
return retrieves, 0, err
}
retrieveIds := make([]uint32, 0, len(shareCardRetrieveCards))
for i, _ := range shareCardRetrieveCards {
retrieveIds = append(retrieveIds, shareCardRetrieveCards[i].ShareCardRetrieveId)
}
if len(retrieveIds) > 0 {
qs = qs.Where("id in (?)", retrieveIds)
}
}
if !m.StartTime.IsZero() {
qs = qs.Where("created_at>?", m.StartTime)
}
if !m.EndTime.IsZero() {
qs = qs.Where("created_at<?", m.EndTime)
}
page := m.Page - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("count err:", err)
return retrieves, 0, err
}
//totalPage :=int(count) /m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&retrieves).Error
if err != nil {
logger.Error("count err:", err)
return retrieves, count, err
}
if len(retrieves) > 0 {
retrieves = ShareCardRetrieveSetCards(retrieves)
}
return retrieves, count, nil
}
func ShareCardRetrieveSetCards(list []ShareCardRetrieve) []ShareCardRetrieve {
retrieveIds := make([]uint32, 0, len(list))
for i, _ := range list {
retrieveIds = append(retrieveIds, list[i].ID)
}
cardsMap, err := GetShareCardRetrieveMapCards(retrieveIds)
if err != nil {
logger.Error("get share card retrieve map cards err:", err)
return list
}
for i, _ := range list {
v, ok := cardsMap[list[i].ID]
if ok {
list[i].ShareCardRetrieveCards = v
}
}
return list
}
func GetShareCardRetrieveMapCards(retrieveIds []uint32) (map[uint32][]ShareCardRetrieveCard, error) {
retrieveCardMap := make(map[uint32][]ShareCardRetrieveCard, 0)
if len(retrieveIds) == 0 {
return retrieveCardMap, nil
}
var shareCardRetrieveCards []ShareCardRetrieveCard
err := orm.Eloquent.Table("share_card_retrieve_card").Where("share_card_retrieve_id in (?)", retrieveIds).
Find(&shareCardRetrieveCards).Error
if err != nil && err != RecordNotFound {
logger.Error("share card retrieve card err:", err)
return retrieveCardMap, err
}
gameIds := make([]uint32, 0, len(shareCardRetrieveCards))
for i, _ := range shareCardRetrieveCards {
gameIds = append(gameIds, shareCardRetrieveCards[i].GameCardId)
}
gameMap := make(map[uint32]GameCard, 0)
if len(gameIds) > 0 {
gameMap, err = GameCardMap(gameIds)
if err != nil {
logger.Error("game card map err:", err)
return retrieveCardMap, err
}
}
for i, _ := range shareCardRetrieveCards {
v, ok := gameMap[shareCardRetrieveCards[i].GameCardId]
if ok {
shareCardRetrieveCards[i].GameCard = v
}
retrieveCardMap[shareCardRetrieveCards[i].ShareCardRetrieveId] = append(
retrieveCardMap[shareCardRetrieveCards[i].ShareCardRetrieveId], shareCardRetrieveCards[i])
}
return retrieveCardMap, nil
}
func GetShareCardRetrieveInfo(retrieveId uint32) (ShareCardRetrieve, error) {
var retrieve ShareCardRetrieve
err := orm.Eloquent.Table("share_card_retrieve").Where("id=?", retrieveId).
Find(&retrieve).Error
if err != nil {
logger.Error("share card retrieve err:", err)
return retrieve, err
}
var cards []ShareCardRetrieveCard
err = orm.Eloquent.Table("share_card_retrieve_card").Where("share_card_retrieve_id=?", retrieveId).
Find(&cards).Error
if err != nil {
logger.Error("share card retrieve card err:", err)
return retrieve, err
}
retrieve.ShareCardRetrieveCards = ShareCardRetrieveCardListSetGame(cards)
err = retrieve.SetStore()
if err != nil {
logger.Error("store err:", err)
return retrieve, err
}
err = retrieve.SetUserAddress()
if err != nil {
logger.Error("user address err:", err)
return retrieve, err
}
return retrieve, nil
}
func ShareCardRetrieveCardListSetGame(list []ShareCardRetrieveCard) []ShareCardRetrieveCard {
gameIds := make([]uint32, 0, len(list))
retrieveIds := make([]uint32, 0, len(list))
for i, _ := range list {
gameIds = append(gameIds, list[i].GameCardId)
retrieveIds = append(retrieveIds, list[i].ShareCardRetrieveId)
}
cardMap, err := GameCardMap(gameIds)
if err != nil {
logger.Error("game card map err:", err)
return list
}
for i, _ := range list {
v, ok1 := cardMap[list[i].GameCardId]
if ok1 {
list[i].GameCard = v
}
}
return list
}
func (m *ShareCardRetrieve) SetStore() error {
err := orm.Eloquent.Table("store").Where("id=?", m.StoreId).Find(&m.Store).Error
if err != nil && err != RecordNotFound {
logger.Error("set store err:", err)
return err
}
return nil
}
func (m *ShareCardRetrieve) SetUserAddress() error {
err := orm.Eloquent.Table("user_address").Where("id=?", m.AddressId).Find(&m.UserAddress).Error
if err != nil && err != RecordNotFound {
logger.Error("set store err:", err)
return err
}
return nil
}
func RetrieveCardAudit(retrieveId, auditType uint32, remark string) error {
// 配置卡
// 锁定库存
// 更新状态
// 锁定卡修改收益状态
//retrieve, err := GetShareCardRetrieveById(retrieveId)
//if err != nil {
// logger.Error("retrieve err:", err)
// return err
//}
if auditType == 1 {
begin := orm.Eloquent.Begin()
err := begin.Table("share_card_retrieve").Where("id=?", retrieveId).Updates(map[string]interface{}{
"state": RetrieveStateCheckLose,
"pickup_code": "已取消",
"remark": remark,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve card err:", err)
return err
}
err = begin.Table("share_card_retrieve_card").Where("share_card_retrieve_id=?", retrieveId).Updates(map[string]interface{}{
"state": RetrieveStateCheckLose,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve card err:", err)
return err
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", err)
return err
}
return nil
} else if auditType == 0 {
logger.Error("audit type err:")
return nil
}
err := ShareCardRetrieveCardSetStockCard(retrieveId, remark)
if err != nil {
logger.Error("share card retrieve card set stock card err:", err)
return err
}
//retrieveCards, err := GetShareCardRetrieveCardByRetrieveId(retrieveId)
//if err != nil {
// logger.Error("retrieve err:", err)
// return err
//}
//if len(retrieveCards) == 0 {
// logger.Error("user share card ids nil")
// return errors.New("user share card ids nil")
//}
//userShareCardIds := make([]uint32, 0, len(retrieveCards))
//for i, _ := range retrieveCards {
// userShareCardIds = append(userShareCardIds, retrieveCards[i].UserShareCardId)
//}
//storeId := retrieveCards[0].StoreId
//var shareCards []UserShareCard
//err = orm.Eloquent.Table("user_share_card").Where("id in (?)", userShareCardIds).
// Find(&shareCards).Error
//if err != nil {
// logger.Error("game cards err:", err)
// return err
//}
//if len(shareCards) == 0 {
// logger.Error("share cards is nil")
// return errors.New("share cards is nil")
//}
//shareCards, err = SetUserCardSerialNumber(retrieveCards[0].StoreId, shareCards)
//if err != nil {
// logger.Error("set user card serial number err:", err)
// return err
//}
//shareCards, err = SetRandomCardSerialNumber(retrieveCards[0].StoreId, shareCards)
//if err != nil {
// logger.Error("set random card serial number err:", err)
// return err
//}
//retrieveState := RetrieveStateInSendCard
//lockGoodsIds := make([]uint32, 0, len(shareCards))
//for i, _ := range shareCards {
//
// if shareCards[i].RetrieveSerialNumber == "" || shareCards[i].RetrieveGameCardGoodsId == 0 {
// shareCards[i].State = ShareCardBillStateReceivedCard
// retrieveState = RetrieveStateOutStock
// lockGoodsIds = append(lockGoodsIds, shareCards[i].RetrieveGameCardGoodsId)
// } else {
// shareCards[i].ProfitState = 0
// }
//}
//begin := orm.Eloquent.Begin()
//err = begin.Table("share_card_retrieve").Where("id=?", retrieveId).Updates(map[string]interface{}{
// "remark": remark,
// "state": retrieveState,
//}).Error
//if err != nil {
// begin.Rollback()
// logger.Error("update share card retrieve card err:", err)
// return err
//}
//for i, _ := range shareCards {
// err = begin.Save(&shareCards[i]).Error
// if err != nil {
// begin.Rollback()
// logger.Error("user share card err:", err)
// return err
// }
// retrieveCardState := RetrieveStateInSendCard
// if shareCards[i].RetrieveSerialNumber == "" || shareCards[i].RetrieveGameCardGoodsId == 0 {
// retrieveCardState = RetrieveStateOutStock
// err = begin.Table("share_card_retrieve_card").Where("user_share_card_id=?", shareCards[i].ID).Updates(map[string]interface{}{
// "state": retrieveCardState,
// }).Error
// if err != nil {
// begin.Rollback()
// logger.Error("update share card retrieve err:", err)
// return err
// }
// continue
// }
//
// err = begin.Table("share_card_retrieve_card").Where("user_share_card_id=?", shareCards[i].ID).Updates(map[string]interface{}{
// "state": retrieveCardState,
// "retrieve_serial_number": shareCards[i].RetrieveSerialNumber,
// "retrieve_game_card_goods_id": shareCards[i].RetrieveGameCardGoodsId,
// }).Error
// if err != nil {
// begin.Rollback()
// logger.Error("update share card retrieve err:", err)
// return err
// }
// 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;", storeId, shareCards[i].GameCardId)
// fmt.Println("sql:", sql)
// err = begin.Exec(sql).Error
// if err != nil {
// begin.Rollback()
// logger.Errorf("err:", err)
// return err
// }
//}
//err = begin.Table("game_card_goods").Where("id in (?)", lockGoodsIds).Updates(map[string]interface{}{
// "status": 5,
//}).Error
//if err != nil {
// begin.Rollback()
// logger.Error("update share card retrieve card err:", err)
// return err
//}
//err = begin.Commit().Error
//if err != nil {
// begin.Rollback()
// logger.Error("commit err:", err)
// return err
//}
return nil
}
func ShareCardRetrieveCardSetStockCard(retrieveId uint32, remark string) error {
fmt.Println("---------------------retrieveId:", retrieveId)
retrieveCards, err := GetShareCardRetrieveCardByRetrieveId(retrieveId)
if err != nil {
logger.Error("retrieve err:", err)
return err
}
if len(retrieveCards) == 0 {
logger.Error("user share card ids nil")
return errors.New("user share card ids nil")
}
userShareCardIds := make([]uint32, 0, len(retrieveCards))
gameIds := make([]uint32, 0, len(retrieveCards))
for i, _ := range retrieveCards {
userShareCardIds = append(userShareCardIds, retrieveCards[i].UserShareCardId)
gameIds = append(gameIds, retrieveCards[i].GameCardId)
}
storeId := retrieveCards[0].StoreId
var shareCards []UserShareCard
err = orm.Eloquent.Table("user_share_card").Where("id in (?)", userShareCardIds).
Find(&shareCards).Error
if err != nil {
logger.Error("game cards err:", err)
return err
}
if len(shareCards) == 0 {
logger.Error("share cards is nil")
return errors.New("share cards is nil")
}
//stockMap := make(map[uint32]uint32)
//for i, _ := range shareCards {
// stockMap
//}
var cardStock []GameCardGoodsStock
err = orm.Eloquent.Table("game_card_goods_stock").Where("game_card_id in (?)", gameIds).
Where("store_id=?", retrieveCards[0].StoreId).Find(&cardStock).Error
if err != nil {
logger.Error("game cards err:", err)
return err
}
cardStockMap := make(map[uint32]uint32, 0)
for i, _ := range cardStock {
//fmt.Println("GameCardId:", cardStock[i].GameCardId)
//fmt.Println("StoreId:", cardStock[i].StoreId)
//fmt.Println("RentStock:", cardStock[i].RentStock)
cardStockMap[uint32(cardStock[i].GameCardId)] = cardStock[i].RentStock
}
shareCards, err = SetUserCardSerialNumber(retrieveCards[0].StoreId, shareCards, &cardStockMap)
if err != nil {
logger.Error("set user card serial number err:", err)
return err
}
shareCards, err = SetRandomCardSerialNumber(retrieveCards[0].StoreId, shareCards, &cardStockMap)
if err != nil {
logger.Error("set random card serial number err:", err)
return err
}
retrieveState := RetrieveStateInReceiveCard
lockGoodsIds := make([]uint32, 0, len(shareCards))
for i, _ := range shareCards {
if shareCards[i].RetrieveSerialNumber == "" || shareCards[i].RetrieveGameCardGoodsId == 0 {
//shareCards[i].State = ShareCardBillStateReceivedCard
retrieveState = RetrieveStateOutStock
} else {
shareCards[i].State = ShareCardStateReceivingCard
shareCards[i].ProfitState = 3
lockGoodsIds = append(lockGoodsIds, shareCards[i].RetrieveGameCardGoodsId)
}
}
begin := orm.Eloquent.Begin()
err = begin.Table("share_card_retrieve").Where("id=?", retrieveId).Updates(map[string]interface{}{
"remark": remark,
"state": retrieveState,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve card err:", err)
return err
}
for i, _ := range shareCards {
err = begin.Save(&shareCards[i]).Error
if err != nil {
begin.Rollback()
logger.Error("user share card err:", err)
return err
}
retrieveCardState := RetrieveStateInReceiveCard
if shareCards[i].RetrieveSerialNumber == "" || shareCards[i].RetrieveGameCardGoodsId == 0 {
retrieveCardState = RetrieveStateOutStock
err = begin.Table("share_card_retrieve_card").Where("user_share_card_id=?", shareCards[i].ID).Updates(map[string]interface{}{
"state": retrieveCardState,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve err:", err)
return err
}
continue
}
// TODO
//ShareCardRetrieveCard{}
updateShareCardRetrieveCardMap := map[string]interface{}{
"state": retrieveCardState,
"retrieve_serial_number": shareCards[i].RetrieveSerialNumber,
"retrieve_game_card_goods_id": shareCards[i].RetrieveGameCardGoodsId,
}
if shareCards[i].UserShareCard != nil {
updateShareCardRetrieveCardMap["allot_user_share_card_id"] = shareCards[i].UserShareCard.ID
}
if shareCards[i].GameCardGoods != nil {
updateShareCardRetrieveCardMap["original_card_type"] = shareCards[i].GameCardGoods.CardType
if shareCards[i].GameCardGoods.ShareProfitType == 1 {
err = begin.Table("game_card_goods").Where("id=?", shareCards[i].GameCardGoodsId).Updates(map[string]interface{}{
"card_type": GameCardGoodsTypeCommon,
"share_profit_type": 1,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve err:", err)
return err
}
}
}
// TODO
//err = begin.Table("share_card_retrieve_card").Where("user_share_card_id=?", shareCards[i].ID).Updates(updateShareCardRetrieveCardMap).Error
err = begin.Table("share_card_retrieve_card").Where("share_card_retrieve_id=?", retrieveId).
Where("user_share_card_id=?", shareCards[i].ID).Updates(updateShareCardRetrieveCardMap).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve err:", err)
return err
}
//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;", storeId, shareCards[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;", storeId, shareCards[i].GameCardId)
fmt.Println("sql:", sql)
err = begin.Exec(sql).Error
if err != nil {
begin.Rollback()
logger.Errorf("err:", err)
return err
}
if shareCards[i].GameCardGoods != nil && shareCards[i].GameCardGoods.SerialNumber != shareCards[i].SerialNumber { // 不是自己的卡
sideGoods := shareCards[i].GameCardGoods
//if sideGoods.SerialNumber != shareCards[i].SerialNumber {
//}
//UserShareCard{}
if sideGoods.ShareProfitType == 2 {
err = begin.Table("user_share_card").Where("serial_number=?", shareCards[i].RetrieveSerialNumber).Updates(map[string]interface{}{
"allot_serial_number": shareCards[i].SerialNumber,
"allot_card_goods_id": shareCards[i].GameCardGoodsId,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve err:", err)
return err
}
} else {
}
}
}
//var user ShareCardRetrieveCard
//for i, _ := range shareCards {
// err := begin.Table("share_card_retrieve_card").Where("user_share_card_id=?", retrieveCards[i].ID).Updates(map[string]interface{}{
// "retrieve_serial_number": retrieveCards[i].RetrieveSerialNumber,
// "retrieve_game_card_goods_id": retrieveCards[i].RetrieveGameCardGoodsId,
// }).Error
// if err != nil {
// begin.Rollback()
// logger.Error("update share card retrieve err:", err)
// return err
// }
// 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)
// fmt.Println("sql:", sql)
// err = begin.Exec(sql).Error
// if err != nil {
// begin.Rollback()
// logger.Errorf("err:", err)
// continue
// }
//}
if len(lockGoodsIds) > 0 {
err = begin.Table("game_card_goods").Where("id in (?)", lockGoodsIds).Updates(map[string]interface{}{
"status": 5,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve card err:", err)
return err
}
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", err)
return err
}
return nil
}
type ShareCardRetrieveCardDeliverReq struct {
//Uid uint32 `json:"uid"`
SerialNumbers []string `json:"serial_numbers"`
ShareCardRetrieveId uint32 `json:"share_card_retrieve_id"`
StoreId uint32 `json:"store_id"` // 门店id
ExpressCompany string `json:"express_company"` // 物流公司
ExpressNo string `json:"express_no"` // 物流单号
ExpressCompanyNo string `json:"express_company_no"` // 物流公司编号
}
func (m *ShareCardRetrieveCardDeliverReq) Deliver() (error, string) {
var retrieve ShareCardRetrieve
err := orm.Eloquent.Table("share_card_retrieve").Where("id=?", m.ShareCardRetrieveId).
Find(&retrieve).Error
if err != nil {
logger.Error("share card retrieve err:", err)
return err, ""
}
if retrieve.State != RetrieveStateInReceiveCard {
logger.Error("share card retrieve state err:")
return err, "用户收回卡单状态异常"
}
if m.StoreId != retrieve.StoreId {
logger.Error("store id err")
return errors.New("store id err"), "出库门店与用户申请门店不一致"
}
var cards []ShareCardRetrieveCard
err = orm.Eloquent.Table("share_card_retrieve_card").Where("share_card_retrieve_id=?", m.ShareCardRetrieveId).
Find(&cards).Error
if err != nil {
logger.Error("share card retrieve card err:", err)
return err, ""
}
retrieveSerials := make([]string, 0)
shareCardIds := make([]uint32, 0, len(cards))
for i, _ := range cards {
retrieveSerials = append(retrieveSerials, cards[i].RetrieveSerialNumber)
shareCardIds = append(shareCardIds, cards[i].UserShareCardId)
//shareCardIds = append(shareCardIds, cards[i].RetrieveGameCardGoodsId)
}
//fmt.Println("ShareCardRetrieveId:", m.ShareCardRetrieveId)
//fmt.Println("SerialNumbers:", m.SerialNumbers)
//fmt.Println("retrieveSerials:", retrieveSerials)
// 收益状态修改 锁定
if !LoopCompareStringSlice(m.SerialNumbers, retrieveSerials) {
logger.Error("serial numbers err")
return errors.New("serial numbers err"), "出库卡与系统分配的卡不一致"
}
begin := orm.Eloquent.Begin()
err = begin.Table("game_card_goods").Where("serial_number in (?)", m.SerialNumbers).Updates(map[string]interface{}{
"status": 6,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update game card goods err:", err)
return err, ""
}
err = begin.Table("user_share_card").Where("id in (?)", shareCardIds).Updates(map[string]interface{}{
"state": ShareCardStateReceivedCard,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update game card goods err:", err)
return err, ""
}
receiptTime := time.Time{}
retrieveState := RetrieveStateSentCard
if retrieve.RetrieveCardType == 1 {
retrieveState = RetrieveStateReceivedCard
receiptTime = time.Now()
}
err = begin.Table("share_card_retrieve").Where("id=?", m.ShareCardRetrieveId).Updates(map[string]interface{}{
//"state": RetrieveStateSentCard,
"state": retrieveState,
"pickup_code": "已取卡",
"express_company": m.ExpressCompany,
"express_no": m.ExpressNo,
"express_company_no": m.ExpressCompanyNo,
"stock_removal_time": time.Now(),
"receipt_time": receiptTime,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve card err:", err)
return err, ""
}
err = begin.Table("share_card_retrieve_card").Where("share_card_retrieve_id=?", m.ShareCardRetrieveId).Updates(map[string]interface{}{
//"state": RetrieveStateSentCard,
"state": retrieveState,
"receipt_time": receiptTime,
}).Error
if err != nil {
begin.Rollback()
logger.Error("update share card retrieve card err:", err)
return err, ""
}
err = begin.Commit().Error
if err != nil {
begin.Rollback()
logger.Error("commit err:", err)
return err, ""
}
if m.ExpressCompanyNo != "" && m.ExpressNo != "" {
_, err = kuaidi.SubscribeExpressState(m.ExpressCompanyNo, m.ExpressNo)
if err != nil {
logger.Error("subscribe express state err:", err)
}
}
return nil, ""
}
func SetUserCardSerialNumber(storeId uint32, list []UserShareCard, cardStockMap *map[uint32]uint32) ([]UserShareCard, error) {
for i, _ := range list {
if list[i].RetrieveSerialNumber != "" {
continue
}
cardCount, ok := (*cardStockMap)[list[i].GameCardId]
if !ok {
continue
}
fmt.Println("cardCount:", cardCount, list[i].GameCardId, storeId)
if cardCount == 0 {
continue
}
var goods GameCardGoods
err := orm.Eloquent.Table("game_card_goods").Where("store_id=?", storeId).
Where("serial_number=?", list[i].SerialNumber).Where("status=?", 1).Find(&goods).Error
//err := NewGameCardGoodsQuerySet(DB).StoreIdEq(uint64(storeId)).SerialNumberEq(list[i].SerialNumber).
// StatusEq(1).One(&goods)
if err != nil && err != RecordNotFound {
logger.Error("game card goods err:", err)
return list, err
}
if goods.ID == list[i].GameCardGoodsId {
list[i].RetrieveSerialNumber = goods.SerialNumber
list[i].RetrieveGameCardGoodsId = goods.ID
(*cardStockMap)[list[i].GameCardId] = cardCount - 1
}
}
return list, nil
}
func SetRandomCardSerialNumber(storeId uint32, list []UserShareCard, cardStockMap *map[uint32]uint32) ([]UserShareCard, error) {
//allotedCardGoodsMap := make(map[string]uint32, 0)
allotedCardGoodsIds := make([]uint32, 0)
//userShareCardMap := make(map[uint32][]UserShareCard, 0)
//for i, _ := range list {
// if list[i].RetrieveSerialNumber != "" {
// continue
// }
// userShareCardMap[list[i].GameCardId] = append(userShareCardMap[list[i].GameCardId], list[i])
//}
for i, _ := range list {
if list[i].RetrieveSerialNumber != "" {
continue
}
cardCount, ok := (*cardStockMap)[list[i].GameCardId]
if !ok {
continue
}
fmt.Println("RandomCard cardCount:", cardCount, list[i].GameCardId, storeId)
if cardCount == 0 {
continue
}
var goods GameCardGoods
qs := orm.Eloquent.Table("game_card_goods").Where("store_id=?", storeId).
Where("game_card_id=?", list[i].GameCardId).Where("status=?", 1)
if len(allotedCardGoodsIds) > 0 {
qs = qs.Where("id NOT IN (?)", allotedCardGoodsIds)
}
err := qs.Order("id ASC").Limit(1).Find(&goods).Error
//err := NewGameCardGoodsQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(list[i].GameCardId)).
// StatusEq(1).OrderAscByID().Limit(1).One(&goods)
if err != nil && err != RecordNotFound {
logger.Error("game card goods err:", err)
return list, err
}
if err != RecordNotFound {
list[i].RetrieveSerialNumber = goods.SerialNumber
list[i].RetrieveGameCardGoodsId = goods.ID
list[i].GameCardGoods = &goods
allotedCardGoodsIds = append(allotedCardGoodsIds, goods.ID)
if goods.ShareProfitType == 2 {
var userShareCard UserShareCard
err := orm.Eloquent.Table("user_share_card").Where("serial_number=?", goods.SerialNumber).Find(&userShareCard).Error
if err != nil {
logger.Error("user share card err:", err)
return list, err
}
list[i].UserShareCard = &userShareCard
}
(*cardStockMap)[list[i].GameCardId] = cardCount - 1
}
}
return list, nil
}
func LoopCompareStringSlice(a, b []string) bool {
if len(a) != len(b) {
return false
}
if (a == nil) != (b == nil) {
return false
}
aMap := make(map[string]int, 0)
for i, _ := range a {
aMap[a[i]] = i
}
bMap := make(map[string]int, 0)
for i, _ := range b {
if _, ok := aMap[b[i]]; !ok {
return false
}
bMap[b[i]] = i
}
for i, _ := range a {
if _, ok := bMap[a[i]]; !ok {
return false
}
}
return true
}
//func GetShareCardRetrieveById(retrieveId uint32) (ShareCardRetrieve, error) {
// var retrieve ShareCardRetrieve
// err := orm.Eloquent.Table("share_card_retrieve").Where("id=?", retrieveId).
// Find(&retrieve).Error
// if err != nil {
// logger.Error("share card retrieve err:", err)
// return retrieve, err
// }
// return retrieve, nil
//}
func GetShareCardRetrieveCardByRetrieveId(retrieveId uint32) ([]ShareCardRetrieveCard, error) {
var cards []ShareCardRetrieveCard
err := orm.Eloquent.Table("share_card_retrieve_card").Where("share_card_retrieve_id=?", retrieveId).
Where("retrieve_serial_number=?", "").Find(&cards).Error
if err != nil {
logger.Error("share card retrieve err:", err)
return cards, err
}
return cards, nil
}
type CardIssueListReq struct {
Uid uint32 `json:"uid"`
GameCardId uint32 `json:"game_card_id"`
State string `json:"state"` // 1-暂无库存 2-待发卡 3-待取卡 4-已发卡 5-已收卡 6-已取消
SerialNumber string `json:"serial_number"`
StoreId uint32 `json:"store_id"` // 门店id
StartTime time.Time `json:"start_time"` // 开始时间
EndTime time.Time `json:"end_time"` // 结束时间
Page int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
func (m *CardIssueListReq) List() ([]CardIssueFeedback, int64, error) {
var cardIssues []CardIssueFeedback
qs := orm.Eloquent.Table("card_issue_feedback")
if m.Uid != 0 {
qs = qs.Where("uid=?", m.Uid)
}
if m.GameCardId != 0 {
qs = qs.Where("game_card_id=?", m.GameCardId)
}
if m.StoreId != 0 {
qs = qs.Where("store_id=?", m.StoreId)
}
if m.SerialNumber != "" {
qs = qs.Where("serial_number=?", m.SerialNumber)
}
if m.State != "" {
qs = qs.Where("state=?", m.State)
}
if !m.StartTime.IsZero() {
qs = qs.Where("created_at>?", m.StartTime)
}
if !m.EndTime.IsZero() {
qs = qs.Where("created_at<?", m.EndTime)
}
page := m.Page - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("count err:", err)
return cardIssues, 0, err
}
//totalPage :=int(count) /m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&cardIssues).Error
if err != nil && err != RecordNotFound {
logger.Error("count err:", err)
return cardIssues, count, err
}
if len(cardIssues) > 0 {
cardIssues = CardIssueFeedbackListSetGame(cardIssues)
}
return cardIssues, count, nil
}
func CardIssueFeedbackListSetGame(list []CardIssueFeedback) []CardIssueFeedback {
if len(list) == 0 {
return list
}
gameIds := make([]uint32, 0, len(list))
uids := make([]uint32, 0, len(list))
for i, _ := range list {
gameIds = append(gameIds, list[i].GameCardId)
uids = append(uids, list[i].Uid)
}
gameMap, err := GameCardMap(gameIds)
if err != nil {
logger.Error("game card map err:", err)
return list
}
infoMap, err := GetUserInfoMap(uids)
if err != nil {
logger.Error("user info map err:", err)
return list
}
for i, _ := range list {
game, ok1 := gameMap[list[i].GameCardId]
if ok1 {
list[i].GameCard = &game
}
userInfo, ok2 := infoMap[list[i].Uid]
if ok2 {
list[i].UserInfo = &userInfo
}
}
return list
}
func GetCardIssueFeedbackInfo(issueId uint32) (CardIssueFeedback, error) {
var cardIssue CardIssueFeedback
err := orm.Eloquent.Table("card_issue_feedback").Where("id=?", issueId).Find(&cardIssue).Error
if err != nil {
logger.Error("card issue feedback err:")
return cardIssue, err
}
list := []CardIssueFeedback{cardIssue}
list = CardIssueFeedbackListSetGame(list)
if len(list) == 0 {
return cardIssue, nil
}
cardIssue = list[0]
var store Store
err = orm.Eloquent.Table("store").Where("id=?", cardIssue.StoreId).Find(&store).Error
if err != nil {
logger.Error("store err:")
return cardIssue, err
}
var userAddress UserAddress
err = orm.Eloquent.Table("user_address").Where("id=?", cardIssue.UserAddressId).Find(&userAddress).Error
if err != nil {
logger.Error("store err:")
return cardIssue, err
}
cardIssue.Store = &store
cardIssue.UserAddress = &userAddress
if cardIssue.ObtainType == ObtainTypeRetrieveCard {
var cardRetrieves ShareCardRetrieveCard
err = orm.Eloquent.Table("share_card_retrieve_card").Where("id=?", cardIssue.RelevanceId).Find(&cardRetrieves).Error
if err != nil {
logger.Error("card issue feedback err:")
return cardIssue, err
}
var shareCardRetrieve ShareCardRetrieve
err := orm.Eloquent.Table("share_card_retrieve").Where("id=?", cardRetrieves.ShareCardRetrieveId).Find(&shareCardRetrieve).Error
if err != nil {
logger.Error("card issue feedback err:")
return cardIssue, err
}
shareCardRetrieve.ShareCardRetrieveCards = []ShareCardRetrieveCard{cardRetrieves}
cardIssue.ShareCardRetrieve = &shareCardRetrieve
} else {
var orderCards OrderCard
err = orm.Eloquent.Table("order_card").Where("id=?", cardIssue.RelevanceId).Find(&orderCards).Error
if err != nil {
logger.Error("card issue feedback err:")
return cardIssue, err
}
var order Order
err := orm.Eloquent.Table("order").Where("id=?", orderCards.OrderId).Find(&order).Error
if err != nil {
logger.Error("card issue feedback err:")
return cardIssue, err
}
order.OrderCards = []OrderCard{orderCards}
cardIssue.Order = &order
}
return cardIssue, nil
}
type ExpressStatePushReq struct {
Status string `json:"status"`
Message string `json:"message"`
LastResult struct {
Message string `json:"message"`
Nu string `json:"nu"`
Ischeck string `json:"ischeck"`
Com string `json:"com"`
Status string `json:"status"`
State int `json:"state"`
Data []struct {
Time string `json:"time"`
Context string `json:"context"`
Ftime string `json:"ftime"`
AreaCode *string `json:"areaCode"`
AreaName *string `json:"areaName"`
Status string `json:"status"`
Location interface{} `json:"location"`
AreaCenter interface{} `json:"areaCenter"`
AreaPinYin interface{} `json:"areaPinYin"`
StatusCode interface{} `json:"statusCode"`
} `json:"data"`
Loop bool `json:"loop"`
} `json:"lastResult"`
}
func TakeExpressStatePush(pushReq *ExpressStatePushReq) {
fmt.Println("LastResult:Nu", pushReq.LastResult.Nu)
fmt.Println("LastResult:State", pushReq.LastResult.State)
if pushReq.LastResult.State == 3 {
//var cardIssue CardIssueFeedback
//err := orm.Eloquent.Table("card_issue_feedback").Where("deliver_express_no=?", pushReq.LastResult.Nu).Find(&cardIssue).Error
//if err == nil {
// err = orm.Eloquent.Table("card_issue_feedback").Where("id=?", cardIssue.ID).Updates(map[string]interface{}{
// "receipt_time": time.Now(),
// }).Error
// if err != nil {
// logger.Error("update card issue feedback err:", err)
// return
// }
//
// err = orm.Eloquent.Table("card_issue_feedback").Where("id=?", cardIssue.ID).Updates(map[string]interface{}{
// "receipt_time": time.Now(),
// }).Error
// if err != nil {
// logger.Error("update card issue feedback err:", err)
// return
// }
//
// var userInfo UserInfo
// err := orm.Eloquent.Table("user").Where("uid=?", cardIssue.Uid).Find(&userInfo).Error
// if err != nil {
// logger.Error("user info err:", err)
// return
// }
// if userInfo.Tel == "" {
// return
// }
// err = SmsSend(userInfo.Tel, "【go2switch】温馨提示您的收回卡已签收请及时检查卡带确认功能正常如有问题请于签收后48小时内通过小程序发起异常反馈。")
// if err != nil {
// logger.Errorf("SmsSend err:", err)
// return
// }
// return
//}
var shareCardRetrieve ShareCardRetrieve
err := orm.Eloquent.Table("card_issue_feedback").Where("express_no=?", pushReq.LastResult.Nu).Find(&shareCardRetrieve).Error
if err == nil {
err = orm.Eloquent.Table("share_card_retrieve").Where("id=?", shareCardRetrieve.ID).Updates(map[string]interface{}{
"receipt_time": time.Now(),
}).Error
if err != nil {
logger.Error("update card issue feedback err:", err)
return
}
err = orm.Eloquent.Table("share_card_retrieve_card").Where("share_card_retrieve_id=?", shareCardRetrieve.ID).Updates(map[string]interface{}{
"receipt_time": time.Now(),
}).Error
if err != nil {
logger.Error("update card issue feedback err:", err)
return
}
var userInfo UserInfo
err := orm.Eloquent.Table("user").Where("uid=?", shareCardRetrieve.Uid).Find(&userInfo).Error
if err != nil {
logger.Error("user info err:", err)
return
}
if userInfo.Tel == "" {
return
}
err = GtSendMessage([]string{userInfo.Tel}, "【迪为】温馨提示您的收回卡已签收请及时检查卡带确认功能正常如有问题请于签收后48小时内通过小程序发起异常反馈。")
if err != nil {
logger.Errorf("SmsSend err:", err)
return
}
return
}
//if cardIssue.ObtainType == ObtainTypeRetrieveCard {
//} else if cardIssue.ObtainType == ObtainTypeRentCard {
//}
var order Order
err = orm.Eloquent.Table("order").Where("express_no=?", pushReq.LastResult.Nu).Find(&order).Error
if err == nil {
//logger.Error("order err:", err)
err = orm.Eloquent.Table("order").Where("id=?", order.ID).Updates(map[string]interface{}{
"receipt_time": time.Now(),
}).Error
if err != nil {
logger.Error("update card issue feedback err:", err)
return
}
err = orm.Eloquent.Table("order_card").Where("order_id=?", order.ID).Updates(map[string]interface{}{
"receipt_time": time.Now(),
}).Error
if err != nil {
logger.Error("update card issue feedback err:", err)
return
}
var userInfo UserInfo
err := orm.Eloquent.Table("user").Where("uid=?", order.Uid).Find(&userInfo).Error
if err != nil {
logger.Error("user info err:", err)
return
}
if userInfo.Tel == "" {
return
}
err = GtSendMessage([]string{userInfo.Tel}, "【迪为】温馨提示您的借卡已签收请及时检查卡带确认功能正常如有问题请于签收后48小时内通过小程序发起异常反馈。")
if err != nil {
logger.Errorf("SmsSend err:", err)
return
}
return
}
}
// 修改状态 签收时间
// 推送通知
}
type FunctionUnusualCardListReq struct {
StoreId uint32 `json:"store_id"`
Status int `json:"status"`
GameCardId int `json:"game_card_id"`
SerialNumber string `json:"serial_number" ` // 编号
StartTime time.Time `json:"start_time"`
EndTime time.Time `json:"end_time"` // 结束时间
Page int `json:"pageIndex"`
PageSize int `json:"pageSize"`
}
func (m *FunctionUnusualCardListReq) List() ([]GameCardGoods, int64, error) {
var cardGoods []GameCardGoods
qs := orm.Eloquent.Table("game_card_goods").Where("function_state=?", 1)
if m.GameCardId != 0 {
qs = qs.Where("game_card_id=?", m.GameCardId)
}
if m.StoreId != 0 {
qs = qs.Where("store_id=?", m.StoreId)
}
if m.SerialNumber != "" {
qs = qs.Where("serial_number=?", m.SerialNumber)
}
if m.Status != 0 {
qs = qs.Where("state=?", m.Status)
}
if !m.StartTime.IsZero() {
qs = qs.Where("created_at>?", m.StartTime)
}
if !m.EndTime.IsZero() {
qs = qs.Where("created_at<?", m.EndTime)
}
page := m.Page - 1
if page < 0 {
page = 0
}
if m.PageSize == 0 {
m.PageSize = 10
}
var count int64
err := qs.Count(&count).Error
if err != nil {
logger.Error("count err:", err)
return cardGoods, 0, err
}
//totalPage :=int(count) /m.PageSize + 1
err = qs.Order("id DESC").Offset(page * m.PageSize).Limit(m.PageSize).Find(&cardGoods).Error
if err != nil && err != RecordNotFound {
logger.Error("count err:", err)
return cardGoods, count, err
}
if len(cardGoods) > 0 {
//cardGoods = CannibalizeGameCardGoodsSetInfo(cardGoods)
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 := GetGameCardMapByIds(gameCardIds)
storeMap := GetStoreMapByIds(storeIds)
for i, _ := range cardGoods {
gameCard, ok1 := cardMap[cardGoods[i].GameCardId]
if ok1 {
cardGoods[i].GameCard = gameCard
}
store, ok2 := storeMap[cardGoods[i].StoreId]
if ok2 {
cardGoods[i].Store = store
}
}
}
}
return cardGoods, count, nil
}
//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
//}