2021-06-30 02:12:05 +00:00
package model
import (
2022-01-26 08:02:21 +00:00
"encoding/json"
2021-06-30 02:12:05 +00:00
"errors"
"fmt"
"github.com/codinl/go-logger"
2022-01-16 10:47:48 +00:00
"github.com/jinzhu/gorm"
2021-06-30 02:12:05 +00:00
"math/rand"
"time"
)
const (
OrderCardStatusUnPick = 1 // 待取货中
OrderCardStatusPlaying = 2 // 游玩中
OrderCardStatusReturning = 3 // 归还中
OrderCardStatusCompleted = 4 // 已完成
2021-11-01 03:32:23 +00:00
OrderCardStatusCancel = 5 // 已取消
OrderCardStatusRefund = 6 // 已退款
2021-06-30 02:12:05 +00:00
DeliveryTypeStorePick = 1 // 门店取货
DeliveryTypeExpress = 2 // 快递取货
ExpressFeeProvince = 10 * 100 // 省内
ExpressFeeOutsideProvince = 15 * 100 // 省外
PayStatusUnPay = 1 // 未支付
PayStatusPaid = 2 // 已支付
)
//go:generate goqueryset -in order.go
// gen:qs
type Order struct {
Model
Uid uint64 ` json:"uid" gorm:"index" `
GameCardId uint64 ` json:"game_card_id" gorm:"index" ` // 游戏id
GameCardGoodsId uint64 ` json:"game_card_goods_id" gorm:"index" ` // 游戏卡id
2022-02-26 06:29:39 +00:00
GameCardSerialNumber string ` json:"game_card_serial_number" gorm:"index" ` // 游戏卡编号
StoreId uint64 ` json:"store_id" gorm:"index" ` // 门店id
2021-06-30 02:12:05 +00:00
UserAddressId uint64 ` json:"user_address_id" ` // 地址id
DeliveryType uint8 ` json:"delivery_type" ` // 取货类型 1-门店自取 2-快递
Count uint32 ` json:"count" ` // 数量
PickupCode string ` json:"pickup_code" ` // 取货码
2021-11-01 03:32:23 +00:00
CardStatus uint8 ` json:"card_status" ` // 1-待取货中 2-游玩中 3-归还中 4-已完成 5-已取消
2021-06-30 02:12:05 +00:00
DeliveryTime time . Time ` json:"delivery_time" ` // 发货时间
ReceiptTime time . Time ` json:"receipt_time" ` // 收货时间
PayTime time . Time ` json:"pay_time" ` // 支付时间
PayStatus uint8 ` json:"pay_status" ` // 支付状态 1-未支付 2-已支付
OrderSn string ` json:"order_sn" gorm:"type:varchar(255);not null;COMMENT:'订单编号'" ` // 订单编号
PayPrice uint32 ` json:"pay_price" ` // 实际付款金额(包含运费)
Postage uint32 ` json:"postage" ` // 邮费
ExpressCompany string ` json:"express_company" ` // 物流公司
ExpressCompanyNo string ` json:"express_company_no" ` // 物流公司编号
ExpressNo string ` json:"express_no" ` // 物流单号
ExpressDuration uint64 ` json:"express_duration" ` // 物流时长
RevertStoreId uint64 ` json:"revert_store_id" ` // 归还门店id
RevertTime time . Time ` json:"revert_time" ` // 归还时间
RevertExpressCompany string ` json:"revert_express_company" ` // 归还物流公司
RevertExpressCompanyNo string ` json:"revert_express_company_no" ` // 归还物流公司编号
RevertExpressNo string ` json:"revert_express_no" ` // 归还物流单号
RevertExpressDuration uint64 ` json:"revert_express_duration" ` // 归还物流时长
2021-11-01 03:32:23 +00:00
OutTradeNo string ` json:"out_trade_no" ` // 支付订单
Mchid string ` json:"mchid" ` // 商户
2022-01-29 02:21:38 +00:00
OrderCardId uint32 ` json:"order_card_id" gorm:"-" ` //
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
// gen:qs
2022-01-16 08:56:20 +00:00
type OrderCard struct {
Model
2022-01-26 08:02:21 +00:00
OrderId uint32 ` json:"order_id" gorm:"index" `
Uid uint32 ` json:"uid" gorm:"index" `
GameCardId uint32 ` json:"game_card_id" gorm:"index" ` // 游戏id
GameCardGoodsId uint32 ` json:"game_card_goods_id" gorm:"index" ` // 游戏卡id
StoreId uint32 ` json:"store_id" gorm:"index" ` // 门店id
2022-01-27 14:24:29 +00:00
CardStatus uint32 ` json:"card_status" ` // 1-待取货中 2-游玩中 3-归还中 4-已完成 5-已取消
2022-01-26 08:02:21 +00:00
DeliveryTime time . Time ` json:"delivery_time" ` // 发货时间
ReceiptTime time . Time ` json:"receipt_time" ` // 收货时间
DeliveryType uint8 ` json:"delivery_type" ` // 取货类型 1-门店自取 2-快递
SerialNumber string ` json:"serial_number" gorm:"index" ` // 编号
PayStatus uint8 ` json:"pay_status" ` // 支付状态 1-未支付 2-已支付
RevertStoreId uint64 ` json:"revert_store_id" ` // 归还门店id
RevertTime time . Time ` json:"revert_time" ` // 归还时间
RevertExpressCompany string ` json:"revert_express_company" ` // 归还物流公司
RevertExpressCompanyNo string ` json:"revert_express_company_no" ` // 归还物流公司编号
RevertExpressNo string ` json:"revert_express_no" ` // 归还物流单号
RevertExpressDuration uint64 ` json:"revert_express_duration" ` // 归还物流时长
//Status uint8 `json:"status" gorm:"index"` // 1-待领取 2-游玩中 3-已归还 4-未领取
Postage uint32 ` json:"postage" gorm:"-" ` // 邮费
ExpressCompany string ` json:"express_company" gorm:"-" ` // 物流公司
ExpressCompanyNo string ` json:"express_company_no" gorm:"-" ` // 物流公司编号
ExpressNo string ` json:"express_no" gorm:"-" ` // 物流单号
GameName string ` json:"name" gorm:"-" ` // 名称
GamePrice uint32 ` json:"price" gorm:"-" ` // 价格
GameCoverImg string ` json:"cover_img" gorm:"-" ` // 封面
Order * Order ` json:"order" gorm:"-" ` // 订单
//PickupCode string `json:"pickup_code"` // 取货码
2022-01-16 08:56:20 +00:00
}
2021-06-30 02:12:05 +00:00
func ( * Order ) TableName ( ) string {
return "order"
}
func ( m * Order ) ToInfo ( card * GameCard ) OrderInfo {
return OrderInfo {
2022-01-26 08:02:21 +00:00
Order : * m ,
2021-06-30 02:12:05 +00:00
}
}
type OrderInfo struct {
Order
2022-01-26 08:02:21 +00:00
Cards [ ] OrderCard
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
func OrderCardListSetGameInfo ( list [ ] OrderCard ) [ ] OrderCard {
//GameCardMap
ids := make ( [ ] uint32 , 0 , len ( list ) )
orderIds := make ( [ ] uint32 , 0 , len ( list ) )
for i , _ := range list {
ids = append ( ids , list [ i ] . GameCardId )
orderIds = append ( orderIds , list [ i ] . OrderId )
}
if len ( ids ) == 0 || len ( orderIds ) == 0 {
return list
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
orderMap , err := OrderMap ( orderIds )
2021-06-30 02:12:05 +00:00
if err != nil {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
return list
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
fmt . Println ( "ids:" , ids )
cardMap , err := GameCardMap ( ids )
if err != nil {
logger . Error ( "err:" , err )
return list
}
bytes , _ := json . Marshal ( & cardMap )
orderMapbytes , _ := json . Marshal ( & orderMap )
fmt . Println ( "cardMap:" , string ( bytes ) )
fmt . Println ( "orderMap:" , string ( orderMapbytes ) )
for i , _ := range list {
fmt . Println ( "list[i].GameCardId" , list [ i ] . GameCardId )
fmt . Println ( "list[i].OrderId" , list [ i ] . OrderId )
gameCard , ok1 := cardMap [ list [ i ] . GameCardId ]
order , ok2 := orderMap [ list [ i ] . OrderId ]
fmt . Printf ( "gameCard1:%#v \n" , gameCard )
if ok1 && ok2 {
2022-02-26 06:29:39 +00:00
if order . CardStatus == 2 || order . CardStatus == 3 {
order . CardStatus = 4
}
2022-01-26 08:02:21 +00:00
fmt . Printf ( "gameCard2:%#v \n" , gameCard )
list [ i ] . GameName = gameCard . Name
list [ i ] . GameCoverImg = gameCard . CoverImg
list [ i ] . GamePrice = gameCard . Price
list [ i ] . Order = & order
}
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
listbytes , _ := json . Marshal ( & list )
fmt . Println ( "listbytes:" , string ( listbytes ) )
return list
}
2021-06-30 02:12:05 +00:00
2022-01-26 08:02:21 +00:00
func GameCardMap ( ids [ ] uint32 ) ( map [ uint32 ] GameCard , error ) {
cardMap := make ( map [ uint32 ] GameCard , 0 )
var cards [ ] GameCard
err := NewGameCardQuerySet ( DB ) . IDIn ( ids ... ) . All ( & cards )
if err != nil {
logger . Error ( "err:" , err )
return cardMap , err
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
if len ( cards ) == 0 {
return cardMap , nil
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
for i , _ := range cards {
cardMap [ cards [ i ] . ID ] = cards [ i ]
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
return cardMap , nil
}
2021-06-30 02:12:05 +00:00
2022-01-26 08:02:21 +00:00
func OrderMap ( ids [ ] uint32 ) ( map [ uint32 ] Order , error ) {
cardMap := make ( map [ uint32 ] Order , 0 )
var cards [ ] Order
err := NewOrderQuerySet ( DB ) . IDIn ( ids ... ) . All ( & cards )
if err != nil {
logger . Error ( "err:" , err )
return cardMap , err
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
if len ( cards ) == 0 {
return cardMap , nil
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
for i , _ := range cards {
cardMap [ cards [ i ] . ID ] = cards [ i ]
}
return cardMap , nil
}
2021-06-30 02:12:05 +00:00
2022-01-26 08:02:21 +00:00
type OrderListReq struct {
Page int ` json:"page" `
PageSize int ` json:"page_size" `
OrderType uint32 ` json:"order_type" ` // 1-全部 2-进行中 3-已完成
Uid uint32 ` json:"uid" `
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
func ( m * OrderListReq ) GetOrderCardList ( ) ( [ ] OrderCard , uint32 , error ) {
2021-06-30 02:12:05 +00:00
var (
2022-01-26 08:02:21 +00:00
orderCards [ ] OrderCard
totalPage uint32
//orderInfos = make([]OrderInfo, 0, pageSize)
2021-06-30 02:12:05 +00:00
)
2022-01-26 08:02:21 +00:00
m . Page -= 1
if m . Page < 0 {
m . Page = 0
}
if m . PageSize == 0 {
m . PageSize = 10
}
oq := NewOrderCardQuerySet ( DB ) . PayStatusEq ( PayStatusPaid ) . UidEq ( m . Uid )
if m . OrderType == 2 {
oq = oq . CardStatusIn ( [ ] uint32 { 1 , 2 , 3 } ... )
}
if m . OrderType == 3 {
oq = oq . CardStatusEq ( 4 )
}
count , err := oq . Count ( )
2021-06-30 02:12:05 +00:00
if err != nil {
2022-01-26 08:02:21 +00:00
logger . Error ( "NewGameCardQuerySet err:" , err )
return orderCards , 0 , err
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
err = oq . OrderDescByCreatedAt ( ) . Offset ( m . Page * m . PageSize ) . Limit ( m . PageSize ) . All ( & orderCards )
2021-06-30 02:12:05 +00:00
if err != nil && err != RecordNotFound {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
return orderCards , 0 , err
}
totalPage = uint32 ( count / m . PageSize + 1 )
2022-02-26 06:29:39 +00:00
fmt . Println ( "orderCards:" , orderCards )
2022-01-26 08:02:21 +00:00
orderCards = OrderCardListSetGameInfo ( orderCards )
return orderCards , totalPage , nil
}
2022-01-27 14:24:29 +00:00
func ( m * Order ) Info ( orderCardId uint32 ) ( [ ] OrderCard , error ) {
2022-01-26 08:02:21 +00:00
//err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order)
//if err != nil {
// logger.Error("err:", err)
// return nil, err
//}
//
//err = NewGameCardQuerySet(DB).IDEq(uint32(order.GameCardId)).One(&card)
//if err != nil && err != RecordNotFound {
// logger.Error("err:", err)
// return nil, err
//}
2022-01-27 14:24:29 +00:00
qs := NewOrderCardQuerySet ( DB ) . IDEq ( orderCardId )
//qs := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId))
//if m.GameCardGoodsId != 0 {
// qs = qs.GameCardGoodsIdEq(uint32(m.GameCardGoodsId))
//}
2022-01-26 08:02:21 +00:00
var orderCards [ ] OrderCard
err := qs . All ( & orderCards )
if err != nil {
logger . Error ( "err:" , err )
2021-06-30 02:12:05 +00:00
return nil , err
}
2022-01-26 08:02:21 +00:00
orderCards = OrderCardListSetGameInfo ( orderCards )
2021-06-30 02:12:05 +00:00
2022-01-26 08:02:21 +00:00
//info := order.ToInfo(&card)
return orderCards , nil
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
func ( m * Order ) Revert ( ) error {
2021-06-30 02:12:05 +00:00
var (
2022-01-26 08:02:21 +00:00
orderCard OrderCard
//card GameCard
2021-06-30 02:12:05 +00:00
)
2021-11-01 03:32:23 +00:00
2022-01-26 08:02:21 +00:00
//qs := NewOrderQuerySet(DB).IDEq(m.ID)
//err := qs.One(&order)
//if err != nil {
// logger.Errorf("err:%#v", err)
// return err
//}
//if order.CardStatus == OrderCardStatusCompleted {
// logger.Error("order card status completed")
// return errors.New("order card status completed")
//}
2022-01-27 14:24:29 +00:00
fmt . Println ( "GameCardGoodsId------:" , m . GameCardGoodsId )
fmt . Println ( "ID------:" , m . ID )
2022-01-29 02:21:38 +00:00
fmt . Println ( "OrderCardId------:" , m . OrderCardId )
err := NewOrderCardQuerySet ( DB ) . IDEq ( m . OrderCardId ) . One ( & orderCard )
//err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard)
2021-11-01 03:32:23 +00:00
if err != nil {
logger . Errorf ( "err:%#v" , err )
2022-01-26 08:02:21 +00:00
return err
2021-11-01 03:32:23 +00:00
}
2022-01-26 08:02:21 +00:00
if orderCard . CardStatus == OrderCardStatusCompleted {
2021-11-01 03:32:23 +00:00
logger . Error ( "order card status completed" )
2022-01-26 08:02:21 +00:00
return errors . New ( "order card status completed" )
2021-11-01 03:32:23 +00:00
}
2022-01-26 08:02:21 +00:00
//err = qs.GetUpdater().
// SetCardStatus(OrderCardStatusReturning).
// SetRevertTime(time.Now()).
// SetRevertStoreId(m.RevertStoreId).
// SetRevertExpressCompany(m.RevertExpressCompany).
// SetRevertExpressCompanyNo(m.RevertExpressCompanyNo).
// SetRevertExpressNo(m.RevertExpressNo).Update()
//if err != nil {
// logger.Error("err:", err)
// return nil, err
//}
//order.CardStatus = OrderCardStatusReturning
////order.RevertTime = time.Now()
//order.RevertStoreId = m.RevertStoreId
//order.RevertExpressCompany = m.RevertExpressCompany
//order.RevertExpressCompanyNo = m.RevertExpressCompanyNo
//order.RevertExpressNo = m.RevertExpressNo
2022-01-29 02:21:38 +00:00
_ , err = NewOrderCardQuerySet ( DB ) . IDEq ( m . OrderCardId ) . GetUpdater ( ) .
//_, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater().
2021-06-30 02:12:05 +00:00
SetCardStatus ( OrderCardStatusReturning ) .
SetRevertTime ( time . Now ( ) ) .
SetRevertStoreId ( m . RevertStoreId ) .
SetRevertExpressCompany ( m . RevertExpressCompany ) .
SetRevertExpressCompanyNo ( m . RevertExpressCompanyNo ) .
2022-01-26 08:02:21 +00:00
SetRevertExpressNo ( m . RevertExpressNo ) . UpdateNum ( )
2021-06-30 02:12:05 +00:00
if err != nil {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
return err
2021-06-30 02:12:05 +00:00
}
//err = NewGameCardQuerySet(DB).IDEq(uint32(order.GameCardId)).One(&card)
//if err != nil && err != RecordNotFound {
2022-01-26 08:02:21 +00:00
// logger.Error("err:", err)
2021-06-30 02:12:05 +00:00
// return nil, err
//}
2022-01-26 08:02:21 +00:00
//info := order.ToInfo(&card)
return nil
2021-06-30 02:12:05 +00:00
}
2022-01-26 08:02:21 +00:00
func ( m * Order ) RevertCancel ( ) ( bool , error ) {
2021-11-01 03:32:23 +00:00
var (
2022-01-26 08:02:21 +00:00
orderCard OrderCard
//order Order
//card GameCard
2021-11-01 03:32:23 +00:00
)
2022-01-26 08:02:21 +00:00
//qs := NewOrderQuerySet(DB).IDEq(m.ID)
//err := qs.One(&order)
//if err != nil {
// logger.Errorf("err:%#v", err)
// return false, err
//}
//if order.CardStatus != OrderCardStatusReturning {
// logger.Error("order card status completed")
// return false, errors.New("order card status completed")
//}
2022-01-29 02:21:38 +00:00
err := NewOrderCardQuerySet ( DB ) . IDEq ( m . OrderCardId ) . One ( & orderCard )
//err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard)
2021-11-01 03:32:23 +00:00
if err != nil {
logger . Errorf ( "err:%#v" , err )
2022-01-26 08:02:21 +00:00
return false , err
2021-11-01 03:32:23 +00:00
}
2022-01-26 08:02:21 +00:00
if orderCard . CardStatus != OrderCardStatusReturning {
logger . Error ( "order card status returning" )
return false , errors . New ( "order card status returning" )
2021-11-01 03:32:23 +00:00
}
2022-01-26 08:02:21 +00:00
//err = qs.GetUpdater().
// SetCardStatus(OrderCardStatusPlaying).
// SetRevertStoreId(0).
// SetRevertExpressCompany("").
// SetRevertExpressCompanyNo("").
// SetRevertExpressNo("").Update()
//if err != nil {
// logger.Error("err:", err)
// return nil, err
//}
//order.CardStatus = OrderCardStatusCancel
////order.RevertTime = time.Now()
//order.RevertStoreId = m.RevertStoreId
//order.RevertExpressCompany = m.RevertExpressCompany
//order.RevertExpressCompanyNo = m.RevertExpressCompanyNo
//order.RevertExpressNo = m.RevertExpressNo
2022-01-29 02:21:38 +00:00
_ , err = NewOrderCardQuerySet ( DB ) . IDEq ( m . OrderCardId ) . GetUpdater ( ) .
2022-02-26 06:29:39 +00:00
//_, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater().
2021-11-01 03:32:23 +00:00
SetCardStatus ( OrderCardStatusPlaying ) .
2022-01-26 08:02:21 +00:00
//SetRevertTime(time.Time{}).
2021-11-01 03:32:23 +00:00
SetRevertStoreId ( 0 ) .
SetRevertExpressCompany ( "" ) .
SetRevertExpressCompanyNo ( "" ) .
2022-01-26 08:02:21 +00:00
SetRevertExpressNo ( "" ) . UpdateNum ( )
2021-11-01 03:32:23 +00:00
if err != nil {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
return false , err
}
isRecede := false
//if order.DeliveryType == 2 && order.Postage > 0 {
// isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID)
// if err != nil {
// logger.Error("err:", err)
// return false, err
// }
// if !isHaveOnDeliver {
// isRecede = true
// }
//}
//info := order.ToInfo(&card)
return isRecede , nil
2021-11-01 03:32:23 +00:00
}
2022-01-26 08:02:21 +00:00
func ( m * Order ) OrderCreate ( gdb * gorm . DB ) error {
err := m . Create ( gdb )
2021-06-30 02:12:05 +00:00
if err != nil {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
2021-06-30 02:12:05 +00:00
return err
}
return nil
}
func ( m * Order ) Modify ( ) ( * OrderInfo , error ) {
if m . ID == 0 {
return nil , errors . New ( "orderId is null" )
}
fields := make ( [ ] OrderDBSchemaField , 0 )
if m . CardStatus != 0 {
fields = append ( fields , OrderDBSchema . CardStatus )
}
if len ( fields ) > 0 {
err := m . Update ( DB . Where ( & Order { Model : Model { ID : m . ID } , Uid : m . Uid } ) , fields ... )
if err != nil {
logger . Error ( "err:" , err )
return nil , err
}
}
var card GameCard
err := NewGameCardQuerySet ( DB ) . IDEq ( uint32 ( m . GameCardId ) ) . One ( & card )
if err != nil && err != RecordNotFound {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
2021-06-30 02:12:05 +00:00
return nil , err
}
info := m . ToInfo ( & card )
return & info , nil
}
2022-01-26 08:02:21 +00:00
func ( m * UserRentCard ) IsHaveUnreturnedOrders ( RentCount uint32 ) ( bool , error ) {
fmt . Println ( "uid" , m . Uid )
2021-11-01 03:32:23 +00:00
2022-01-26 08:02:21 +00:00
sql := fmt . Sprintf ( "SELECT COUNT(order_card.id) FROM `order` RIGHT JOIN order_card ON `order`.id = order_card.order_id WHERE `order`.uid=%d AND `order`.pay_status=2 AND order_card.card_status IN (1,2,3) ;" , m . Uid )
//sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM `order` WHERE uid = %d AND pay_status=2 AND card_status IN (1,2,3) ;", m.Uid)
//sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM `order` WHERE uid = %d AND pay_status=2 AND card_status IN (1,2,3) ;", uid)
2021-11-01 03:32:23 +00:00
//count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Count()
//if err != nil {
// logger.Error("err:", err)
// return false, err
//}
unreturned := & struct {
Count int ` json:"count" `
} { }
2022-01-26 08:02:21 +00:00
err := DB . Raw ( sql ) . Scan ( unreturned ) . Error
if err != nil {
logger . Error ( "err:" , err )
return false , err
}
2021-11-01 03:32:23 +00:00
fmt . Println ( "订单数量count:" , unreturned . Count )
2022-01-26 08:02:21 +00:00
return uint32 ( unreturned . Count ) + RentCount > m . LevelRentCount , nil
}
func IsHaveOnDeliverOrderCards ( orderId uint32 ) ( bool , error ) {
2022-01-27 14:24:29 +00:00
count , err := NewOrderCardQuerySet ( DB ) . OrderIdEq ( orderId ) . CardStatusEq ( OrderCardStatusUnPick ) . Count ( )
2022-01-26 08:02:21 +00:00
if err != nil {
logger . Error ( "err:" , err )
return false , err
}
return count > 0 , nil
2021-06-30 02:12:05 +00:00
}
2021-12-25 08:38:30 +00:00
func IsUserHaveUnreturnedOrder ( uid uint32 ) ( bool , error ) {
fmt . Println ( "uid" , uid )
2022-03-05 03:32:38 +00:00
//sql := fmt.Sprintf("SELECT COUNT(*) AS count FROM `order` WHERE uid = %d AND pay_status IN (1,2) AND card_status IN (1,2,3) ;", uid)
sql := fmt . Sprintf ( "SELECT COUNT(*) AS count FROM order_card WHERE uid = %d AND pay_status IN (1,2) AND card_status IN (1,2,3) ;" , uid )
2021-12-25 08:38:30 +00:00
//count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Count()
//if err != nil {
// logger.Error("err:", err)
// return false, err
//}
unreturned := & struct {
Count int ` json:"count" `
} { }
DB . Raw ( sql ) . Scan ( unreturned )
fmt . Println ( "订单数量count:" , unreturned . Count )
return unreturned . Count != 0 , nil
}
2021-06-30 02:12:05 +00:00
// gen:qs
type ExpressCompany struct {
Model
CompanyName string ` json:"company_name" `
CompanyCode string ` json:"company_code" `
}
func ( * ExpressCompany ) TableName ( ) string {
return "express_company"
}
func ( * ExpressCompany ) List ( ) ( [ ] ExpressCompany , error ) {
companys := make ( [ ] ExpressCompany , 0 )
err := NewExpressCompanyQuerySet ( DB ) . OrderAscByID ( ) . All ( & companys )
if err != nil && err != RecordNotFound {
logger . Error ( "err:" , err )
return companys , err
}
return companys , nil
}
func GetPickupCode ( ) string {
for {
rand . Seed ( time . Now ( ) . UnixNano ( ) )
code := fmt . Sprintf ( "%d" , rand . Intn ( 1000000 ) + 100000 )
count , err := NewOrderQuerySet ( DB ) . PickupCodeEq ( code ) . Count ( )
if err != nil {
logger . Error ( "err:" , err )
}
if count == 0 {
return code
}
}
//将时间戳设置成种子数
}
2021-11-01 03:32:23 +00:00
2022-01-29 02:21:38 +00:00
func ( m * Order ) Cancel ( ) ( bool , Order , error ) {
2022-01-26 08:02:21 +00:00
var (
order Order
orderCard OrderCard
)
err := NewOrderQuerySet ( DB ) . IDEq ( m . ID ) . One ( & order )
2021-11-01 03:32:23 +00:00
if err != nil {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
2022-01-29 02:21:38 +00:00
return false , order , err
2021-11-01 03:32:23 +00:00
}
2022-01-27 14:24:29 +00:00
orderJson , _ := json . Marshal ( m )
fmt . Println ( "orderJson:" , string ( orderJson ) )
2022-01-26 08:02:21 +00:00
2022-01-29 02:21:38 +00:00
err = NewOrderCardQuerySet ( DB ) . IDEq ( m . OrderCardId ) . One ( & orderCard )
//err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).One(&orderCard)
2022-01-26 08:02:21 +00:00
if err != nil && err != RecordNotFound {
logger . Errorf ( "err:%#v" , err )
2022-01-29 02:21:38 +00:00
return false , order , err
2021-11-01 03:32:23 +00:00
}
2022-01-26 08:02:21 +00:00
if err == RecordNotFound {
logger . Error ( "order card status not unpick" )
2022-01-29 02:21:38 +00:00
return false , order , errors . New ( "order card status not unpick" )
}
if orderCard . CardStatus != OrderCardStatusUnPick {
logger . Error ( "order card status not unpick" )
return false , order , errors . New ( "order card status not unpick" )
2021-11-01 03:32:23 +00:00
}
2022-01-26 08:02:21 +00:00
//if userOrder.CardStatus != OrderCardStatusUnPick {
// logger.Error("card status not unpick err: ")
// return false,errors.New("card status not unpick")
//}
//if userOrder.PayStatus == PayStatusUnPay && userOrder.CreatedAt.Add(30*time.Minute).Before(time.Now()) {
// //if userOrder.PayStatus == PayStatusUnPay && userOrder.CreatedAt.Add(3*time.Minute).Before(time.Now()) {
// logger.Error("card status expire err: ")
// return errors.New("card status expire")
//}
2021-11-01 03:32:23 +00:00
//fmt.Println("PayStatus",userOrder.PayStatus)
//fmt.Println("DeliveryType",userOrder.DeliveryType)
//fmt.Println("CreatedAt",userOrder.CreatedAt.Add(4*time.Minute))
//fmt.Println("Now",time.Now())
2022-01-26 08:02:21 +00:00
//if userOrder.PayStatus == PayStatusPaid && userOrder.DeliveryType == DeliveryTypeStorePick && userOrder.CreatedAt.Add(24*time.Hour).Before(time.Now()) {
// //if userOrder.PayStatus == PayStatusPaid && userOrder.DeliveryType == DeliveryTypeStorePick && userOrder.CreatedAt.Add(4*time.Minute).Before(time.Now()) {
// logger.Error("card status expire err: ")
// return errors.New("card status expire")
//}
2021-11-01 03:32:23 +00:00
begin := DB . Begin ( )
2022-01-26 08:02:21 +00:00
//err = NewOrderQuerySet(begin).IDEq(orderCard.OrderId).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update()
//if err != nil {
// begin.Rollback()
// logger.Error("err:", err)
// return false,err
//}
_ , err = NewOrderCardQuerySet ( DB ) . IDEq ( orderCard . ID ) . GetUpdater ( ) . SetCardStatus ( OrderCardStatusCancel ) . UpdateNum ( )
2021-11-01 03:32:23 +00:00
if err != nil {
begin . Rollback ( )
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
2022-01-29 02:21:38 +00:00
return false , order , err
2021-11-01 03:32:23 +00:00
}
2022-01-26 08:02:21 +00:00
sql := fmt . Sprintf ( "UPDATE game_card_goods_stock SET rent_stock= rent_stock+1 WHERE store_id=%d AND game_card_id=%d;" , orderCard . StoreId , orderCard . GameCardId )
2021-11-01 03:32:23 +00:00
fmt . Println ( "sql:" , sql )
err = begin . Exec ( sql ) . Error
if err != nil {
begin . Rollback ( )
logger . Errorf ( "err:%#v" , err )
2022-01-29 02:21:38 +00:00
return false , order , err
2021-11-01 03:32:23 +00:00
}
2022-01-27 14:24:29 +00:00
//UserRentCard{}
sqlRent := fmt . Sprintf ( "UPDATE user_rent_card SET have_rent_count = have_rent_count-1,can_rent_count=can_rent_count+1 WHERE uid =%d;" , order . Uid )
fmt . Println ( "sqlRent:" , sqlRent )
err = begin . Exec ( sqlRent ) . Error
if err != nil {
begin . Rollback ( )
logger . Errorf ( "err:%#v" , err )
2022-01-29 02:21:38 +00:00
return false , order , err
2022-01-27 14:24:29 +00:00
}
2021-11-01 03:32:23 +00:00
err = begin . Commit ( ) . Error
if err != nil {
begin . Rollback ( )
logger . Errorf ( "err:%#v" , err )
2022-01-29 02:21:38 +00:00
return false , order , err
2022-01-26 08:02:21 +00:00
}
2022-01-27 14:24:29 +00:00
isHaveOnDeliver , err := IsHaveOnDeliverOrderCards ( m . ID )
if err != nil {
logger . Error ( "err:" , err )
2022-01-29 02:21:38 +00:00
return false , order , err
2022-01-27 14:24:29 +00:00
}
if ! isHaveOnDeliver {
err = NewOrderQuerySet ( DB ) . IDEq ( order . ID ) . GetUpdater ( ) . SetCardStatus ( OrderCardStatusCancel ) . Update ( )
2022-01-26 08:02:21 +00:00
if err != nil {
logger . Error ( "err:" , err )
2022-01-29 02:21:38 +00:00
return false , order , err
2022-01-26 08:02:21 +00:00
}
2022-01-27 14:24:29 +00:00
}
isRecede := false
if order . DeliveryType == 2 && order . Postage > 0 {
2022-01-26 08:02:21 +00:00
if ! isHaveOnDeliver {
isRecede = true
}
2021-11-01 03:32:23 +00:00
}
2022-01-29 02:21:38 +00:00
//m.ID = order.ID
//m.Uid = order.Uid
//m.PayPrice = order.PayPrice
return isRecede , order , nil
2021-11-01 03:32:23 +00:00
}
func UnPayOrderSetCancel ( uid uint32 ) {
fmt . Println ( "uid:" , uid )
var order Order
err := NewOrderQuerySet ( DB . Debug ( ) ) . UidEq ( uint64 ( uid ) ) . PayStatusEq ( PayStatusUnPay ) . CardStatusEq ( OrderCardStatusUnPick ) . One ( & order )
if err != nil {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
2021-11-01 03:32:23 +00:00
return
}
fmt . Println ( "Order:" , order )
begin := DB . Begin ( )
_ , err = NewOrderQuerySet ( begin ) . IDEq ( order . ID ) . GetUpdater ( ) .
SetCardStatus ( OrderCardStatusCancel ) . UpdateNum ( )
if err != nil {
begin . Rollback ( )
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
2021-11-01 03:32:23 +00:00
return
}
sql := fmt . Sprintf ( "UPDATE game_card_goods_stock SET rent_stock= rent_stock+1 WHERE store_id=%d AND game_card_id=%d;" , order . StoreId , order . GameCardId )
fmt . Println ( "sql:" , sql )
err = begin . Exec ( sql ) . Error
if err != nil {
begin . Rollback ( )
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
2021-11-01 03:32:23 +00:00
return
}
err = begin . Commit ( ) . Error
if err != nil {
begin . Rollback ( )
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
}
}
//func (m *Order) CreateByCardInfoList(cardInfos []CardInfo, gdb *gorm.DB) error {
// err := gdb.Create(m).Error
// if err != nil {
// logger.Error("err:", err)
// return err
// }
// if m.ID == 0 {
// return errors.New("order id is 0")
// }
// for _, v := range cardInfos {
// for i := 0; i < int(v.Count); i++ {
// //OrderCard{
// // OrderId: m.ID,
// // Uid: uint32(m.Uid),
// // GameCardId: v.GameCardId,
// // GameCardGoodsId: 0,
// // StoreId: uint32(m.StoreId),
// // Status: 0,
// //}
// }
//
// }
//
// return nil
//}
func IsCardGoodsStockEnough ( cards [ ] CardInfo , storeId uint32 ) ( bool , error ) {
for i , _ := range cards {
var gameCardGoodsStock GameCardGoodsStock
err := NewGameCardGoodsStockQuerySet ( DB ) . StoreIdEq ( uint64 ( storeId ) ) . GameCardIdEq ( uint64 ( cards [ i ] . GameCardId ) ) .
One ( & gameCardGoodsStock )
2022-01-27 14:24:29 +00:00
if err != nil && err != RecordNotFound {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
return false , err
}
2022-01-27 14:24:29 +00:00
if err == RecordNotFound {
logger . Error ( "order stock out:" )
return false , err
}
2022-01-26 08:02:21 +00:00
if gameCardGoodsStock . RentStock < cards [ i ] . Count {
logger . Error ( "order stock out " )
return false , errors . New ( "order stock out" )
}
2021-11-01 03:32:23 +00:00
}
2022-01-26 08:02:21 +00:00
return false , nil
}
2021-11-01 03:32:23 +00:00
2022-01-26 08:02:21 +00:00
func GameCardGoodsInventoryReduction ( cards [ ] CardInfo , storeId uint32 , gdb * gorm . DB ) error {
for i , _ := range cards {
sql := fmt . Sprintf ( "UPDATE game_card_goods_stock SET rent_stock= rent_stock-%d WHERE store_id=%d AND game_card_id=%d;" , cards [ i ] . Count , storeId , cards [ i ] . GameCardId )
fmt . Println ( "sql:" , sql )
err := gdb . Exec ( sql ) . Error
if err != nil {
logger . Error ( "err:" , err )
return err
}
}
return nil
2021-11-01 03:32:23 +00:00
}
2022-01-16 10:47:48 +00:00
2022-01-26 08:02:21 +00:00
func ( m * Order ) InventoryReduction ( gdb * gorm . DB ) error {
var cards [ ] OrderCard
2022-01-27 14:24:29 +00:00
err := NewOrderCardQuerySet ( DB ) . UidEq ( uint32 ( m . Uid ) ) . OrderIdEq ( m . ID ) . All ( & cards )
2022-01-16 10:47:48 +00:00
if err != nil {
2022-01-26 08:02:21 +00:00
logger . Error ( "err:" , err )
2022-01-16 10:47:48 +00:00
return err
}
2022-01-26 08:02:21 +00:00
2022-01-27 14:24:29 +00:00
//fmt.Println("cards:", cards)
2022-01-26 08:02:21 +00:00
for i , _ := range cards {
2022-01-29 02:21:38 +00:00
var gameCardGoodsStock GameCardGoodsStock
err := NewGameCardGoodsStockQuerySet ( DB ) . GameCardIdEq ( uint64 ( cards [ i ] . GameCardId ) ) . StoreIdEq ( m . StoreId ) . One ( & gameCardGoodsStock )
if err != nil {
logger . Error ( "err:" , err )
return err
}
2022-01-27 14:24:29 +00:00
//fmt.Println("cards:", cards[i].GameCardId, cards[i].StoreId, cards[i].Uid)
2022-01-29 02:21:38 +00:00
if gameCardGoodsStock . RentStock < 1 {
logger . Error ( "rent stock not enough:" )
return errors . New ( "rent stock not enough" )
}
2022-01-26 08:02:21 +00:00
sql := fmt . Sprintf ( "UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;" , m . StoreId , cards [ i ] . GameCardId )
fmt . Println ( "sql:" , sql )
2022-01-29 02:21:38 +00:00
err = gdb . Exec ( sql ) . Error
2022-01-26 08:02:21 +00:00
if err != nil {
logger . Error ( "err:" , err )
return err
}
2022-01-16 10:47:48 +00:00
}
2022-01-27 14:24:29 +00:00
err = OrderCardUserRentCard ( uint32 ( m . Uid ) , uint32 ( len ( cards ) ) , nil , gdb )
if err != nil {
logger . Error ( "err:" , err )
}
2022-01-26 08:02:21 +00:00
return nil
}
func ( m * Order ) CreatOrderCard ( cards [ ] CardInfo , storeId uint32 , gdb * gorm . DB ) error {
for _ , v := range cards {
2022-01-16 10:47:48 +00:00
for i := 0 ; i < int ( v . Count ) ; i ++ {
2022-01-26 08:02:21 +00:00
orderCard := & OrderCard {
OrderId : m . ID ,
Uid : uint32 ( m . Uid ) ,
GameCardId : v . GameCardId ,
GameCardGoodsId : 0 ,
StoreId : storeId ,
CardStatus : OrderCardStatusUnPick ,
DeliveryTime : time . Time { } ,
ReceiptTime : time . Time { } ,
DeliveryType : m . DeliveryType ,
SerialNumber : "" ,
PayStatus : m . PayStatus ,
}
err := gdb . Create ( orderCard ) . Error
if err != nil {
logger . Error ( "err:" , err )
return err
}
2022-01-16 10:47:48 +00:00
}
}
return nil
}