From b5972292abbf323d3f1c911b5c14b9a4b0a7b2a9 Mon Sep 17 00:00:00 2001 From: li Date: Sat, 15 Jan 2022 21:10:00 +0800 Subject: [PATCH 01/11] fix: --- controller/account.go | 2 + controller/game_card.go | 9 +- controller/store.go | 111 +++++++++++++++++++++++++ controller/user.go | 28 ++----- lib/wxpay/wx_pay.go | 43 ++++++++++ model/autogenerated_shopping_cart.go | 120 +++++---------------------- model/model_test.go | 5 ++ model/redeem_code.go | 5 +- model/shopping_cart.go | 80 +++++++++++++++++- model/user.go | 28 +++++++ router/router_app.go | 11 ++- 11 files changed, 316 insertions(+), 126 deletions(-) diff --git a/controller/account.go b/controller/account.go index ed4836d..f1a2a86 100644 --- a/controller/account.go +++ b/controller/account.go @@ -28,6 +28,8 @@ func AuthLogin(c *gin.Context) { } fmt.Println("WxAppId", config.AppConfig.WxAppId) fmt.Println("WxAppSecret", config.AppConfig.WxAppSecret) + model.AuthLoginMutex.Lock() + defer model.AuthLoginMutex.Unlock() resp, err := weapp.Login(config.AppConfig.WxAppId, config.AppConfig.WxAppSecret, req.Code) if err != nil { diff --git a/controller/game_card.go b/controller/game_card.go index b68f3c0..7e22b7e 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -334,7 +334,7 @@ func PushWXPayNotice(c *gin.Context) { if invite.FromUid != 0 { inviteUser := model.GetUserByUid(invite.FromUid) if inviteUser.UserType != 2 && user.MemberLevel != 2 { - err := model.CodeSendToUser(invite.FromUid, model.CodeTypeMemberCard30) + err := model.CodeSendToUser(invite.FromUid, model.CodeTypeMemberCard30,model.RedeemCodeActivityTypeUserInvite) if err != nil { logger.Error("err:", err) } @@ -343,6 +343,13 @@ func PushWXPayNotice(c *gin.Context) { } } + if user.MemberLevel != 2 { + err = model.CodeSendToUser(user.Uid, model.CodeTypeMemberCard30,model.RedeemCodeActivityTypeStore) + if err != nil { + logger.Error("err:", err) + } + } + } fmt.Println("notify.TotalFee:", notify.TotalFee) diff --git a/controller/store.go b/controller/store.go index d110413..48eb361 100644 --- a/controller/store.go +++ b/controller/store.go @@ -3,6 +3,7 @@ package controller import ( "github.com/codinl/go-logger" "github.com/gin-gonic/gin" + "mh-server/lib/auth" "mh-server/lib/status" "mh-server/model" ) @@ -45,3 +46,113 @@ func StoreInfo(c *gin.Context) { RespOK(c, store) return } + +func ShoppingCartAdd(c *gin.Context) { + req := &struct { + GameCardId uint32 `json:"game_card_id"` + AddType uint32 `json:"add_type"` // 1-加 2-减 + }{} + if err := c.ShouldBindJSON(&req); err != nil { + logger.Error(err) + RespJson(c, status.BadRequest, nil) + return + } + if req.GameCardId == 0 { + logger.Error("GameCardId is 0") + RespJson(c, status.BadRequest, nil) + return + } + uc := auth.GetCurrentUser(c) + if uc == nil { + RespJson(c, status.Unauthorized, nil) + return + } + + var shoppingCart model.ShoppingCart + err := model.NewShoppingCartQuerySet(model.DB).UidEq(uint64(uc.Uid)).GameCardIdEq(uint64(req.GameCardId)).One(&shoppingCart) + if err != nil && err != model.RecordNotFound { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + if err == model.RecordNotFound { + shoppingCart = model.ShoppingCart{ + Uid: uint64(uc.Uid), + GameCardId: uint64(req.GameCardId), + Count: 1, + } + err := model.DB.Create(&shoppingCart).Error + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + RespOK(c, shoppingCart) + return + } + + if req.AddType == 1 { + shoppingCart.Count += 1 + } else if req.AddType == 2 { + shoppingCart.Count -= 1 + } + + _, err = model.NewShoppingCartQuerySet(model.DB).IDEq(shoppingCart.ID).GetUpdater().SetCount(shoppingCart.Count).UpdateNum() + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + RespOK(c, shoppingCart) + return +} + +func ShoppingCartList(c *gin.Context) { + req := &model.ShoppingCartListReq{} + if err := c.ShouldBindJSON(&req); err != nil { + logger.Error(err) + RespJson(c, status.BadRequest, nil) + return + } + uc := auth.GetCurrentUser(c) + if uc == nil { + RespJson(c, status.Unauthorized, nil) + return + } + req.Uid = uc.Uid + list, err := req.List() + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + RespOK(c, list) + return +} + +func ShoppingCartDel(c *gin.Context) { + req := &struct { + ShoppingCartIds []uint32 `json:"shopping_cart_ids"` + }{} + if err := c.ShouldBindJSON(&req); err != nil { + logger.Error(err) + RespJson(c, status.BadRequest, nil) + return + } + uc := auth.GetCurrentUser(c) + if uc == nil { + RespJson(c, status.Unauthorized, nil) + return + } + err := model.NewShoppingCartQuerySet(model.DB).UidEq(uint64(uc.Uid)).IDIn(req.ShoppingCartIds...).Delete() + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + RespOK(c, nil) + return +} diff --git a/controller/user.go b/controller/user.go index a195a04..c57c59a 100644 --- a/controller/user.go +++ b/controller/user.go @@ -205,14 +205,6 @@ func UserInfoUpdate(c *gin.Context) { } func OpenMember(c *gin.Context) { - //req := struct { - // PayType uint32 `json:"pay_type"` // 1-开通会员 2- - //}{} - //if c.ShouldBindJSON(&req) != nil { - // RespJson(c, status.BadRequest, nil) - // return - //} - uc := auth.GetCurrentUser(c) if uc == nil { RespJson(c, status.Unauthorized, nil) @@ -220,16 +212,6 @@ func OpenMember(c *gin.Context) { } user := model.GetUserByUid(uc.Uid) - //uid := fmt.Sprintf("%d", uc.Uid) - //totalFee := MemberFee + DepositFee - //uid := "623892011" - //user := model.GetUserByUid(62389201) - - //totalFee = uint32(3) - //if user.MemberLevel > 1 { - // totalFee = DepositFee - // //totalFee = uint32(1) - //} configInfo, err := model.PayConfigInfo() if err != nil { @@ -356,7 +338,7 @@ func RefundDeposit(c *gin.Context) { return } - count, err := model.NewDepositRefundRecordQuerySet(model.DB).UidEq(uc.Uid).StatusNotIn(model.DepositRefundStatusRefunded,model.DepositRefundStatusRefused).Count() + count, err := model.NewDepositRefundRecordQuerySet(model.DB).UidEq(uc.Uid).StatusNotIn(model.DepositRefundStatusRefunded, model.DepositRefundStatusRefused).Count() if err != nil || count > 0 { logger.Error("count is not 0") RespJson(c, status.RefundDepositSubmitted, nil) @@ -396,3 +378,11 @@ func UserDepositRefundRecordList(c *gin.Context) { RespOK(c, resp) } + +// 升级 1-黄金会员 2-白金会员 3-黑金会员 +// 开通会员 +// 升级会员 +// 订单 +// 购物车 +// 押金 + diff --git a/lib/wxpay/wx_pay.go b/lib/wxpay/wx_pay.go index dc3fcc1..4f6617f 100644 --- a/lib/wxpay/wx_pay.go +++ b/lib/wxpay/wx_pay.go @@ -230,11 +230,21 @@ type ( FeeType string `xml:"fee_type,CDATA" json:"fee_type"` CashFee uint `xml:"cash_fee,CDATA" json:"cash_fee"` CashFeeType string `xml:"cash_fee_type,CDATA" json:"cash_fee_type"` + CouponFee uint `xml:"coupon_fee,CDATA" json:"coupon_fee"` CouponCount uint `xml:"coupon_count,CDATA" json:"coupon_count"` CouponType0 uint `xml:"coupon_type_0,CDATA" json:"coupon_type"` CouponId0 string `xml:"coupon_id_0,CDATA" json:"coupon_id"` CouponFee0 uint `xml:"coupon_fee_0,CDATA" json:"coupon_fee0"` + //CouponCount string `json:"coupon_count"` + //CouponFee string `json:"coupon_fee"` + //CouponFee0 string `json:"coupon_fee_0"` + //CouponId0 string `json:"coupon_id_0"` + + CouponFee1 uint `xml:"coupon_fee_1,CDATA" json:"coupon_fee_1"` + CouponId1 string `xml:"coupon_id_1,CDATA" json:"coupon_id_1"` + + TransactionId string `xml:"transaction_id,CDATA" json:"transaction_id"` OutTradeNo string `xml:"out_trade_no,CDATA" json:"out_trade_no"` Attach string `xml:"attach,CDATA" json:"attach"` @@ -262,6 +272,39 @@ type ( } ) +//type T struct { +// Xml struct { +// Appid string `json:"appid"` +// Attach string `json:"attach"` +// BankType string `json:"bank_type"` +// CashFee string `json:"cash_fee"` +// +// +// CouponCount string `json:"coupon_count"` +// CouponFee string `json:"coupon_fee"` +// CouponFee0 string `json:"coupon_fee_0"` +// CouponFee1 string `json:"coupon_fee_1"` +// CouponId0 string `json:"coupon_id_0"` +// CouponId1 string `json:"coupon_id_1"` +// +// +// DeviceInfo string `json:"device_info"` +// FeeType string `json:"fee_type"` +// IsSubscribe string `json:"is_subscribe"` +// MchId string `json:"mch_id"` +// NonceStr string `json:"nonce_str"` +// Openid string `json:"openid"` +// OutTradeNo string `json:"out_trade_no"` +// ResultCode string `json:"result_code"` +// ReturnCode string `json:"return_code"` +// Sign string `json:"sign"` +// TimeEnd string `json:"time_end"` +// TotalFee string `json:"total_fee"` +// TradeType string `json:"trade_type"` +// TransactionId string `json:"transaction_id"` +// } `json:"xml"` +//} + ////app 微信支付 ////totalFee 单位是分 //func AppPay(totalFee int, openId string) (*AppWxPayRet, string, error) { diff --git a/model/autogenerated_shopping_cart.go b/model/autogenerated_shopping_cart.go index 15d7863..c925b35 100644 --- a/model/autogenerated_shopping_cart.go +++ b/model/autogenerated_shopping_cart.go @@ -215,62 +215,6 @@ func (qs ShoppingCartQuerySet) DeletedAtNe(deletedAt time.Time) ShoppingCartQuer return qs.w(qs.db.Where("deleted_at != ?", deletedAt)) } -// DeliveryTypeEq is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) DeliveryTypeEq(deliveryType uint8) ShoppingCartQuerySet { - return qs.w(qs.db.Where("delivery_type = ?", deliveryType)) -} - -// DeliveryTypeGt is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) DeliveryTypeGt(deliveryType uint8) ShoppingCartQuerySet { - return qs.w(qs.db.Where("delivery_type > ?", deliveryType)) -} - -// DeliveryTypeGte is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) DeliveryTypeGte(deliveryType uint8) ShoppingCartQuerySet { - return qs.w(qs.db.Where("delivery_type >= ?", deliveryType)) -} - -// DeliveryTypeIn is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) DeliveryTypeIn(deliveryType ...uint8) ShoppingCartQuerySet { - if len(deliveryType) == 0 { - qs.db.AddError(errors.New("must at least pass one deliveryType in DeliveryTypeIn")) - return qs.w(qs.db) - } - return qs.w(qs.db.Where("delivery_type IN (?)", deliveryType)) -} - -// DeliveryTypeLt is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) DeliveryTypeLt(deliveryType uint8) ShoppingCartQuerySet { - return qs.w(qs.db.Where("delivery_type < ?", deliveryType)) -} - -// DeliveryTypeLte is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) DeliveryTypeLte(deliveryType uint8) ShoppingCartQuerySet { - return qs.w(qs.db.Where("delivery_type <= ?", deliveryType)) -} - -// DeliveryTypeNe is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) DeliveryTypeNe(deliveryType uint8) ShoppingCartQuerySet { - return qs.w(qs.db.Where("delivery_type != ?", deliveryType)) -} - -// DeliveryTypeNotIn is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) DeliveryTypeNotIn(deliveryType ...uint8) ShoppingCartQuerySet { - if len(deliveryType) == 0 { - qs.db.AddError(errors.New("must at least pass one deliveryType in DeliveryTypeNotIn")) - return qs.w(qs.db) - } - return qs.w(qs.db.Where("delivery_type NOT IN (?)", deliveryType)) -} - // GameCardIdEq is an autogenerated method // nolint: dupl func (qs ShoppingCartQuerySet) GameCardIdEq(gameCardId uint64) ShoppingCartQuerySet { @@ -431,12 +375,6 @@ func (qs ShoppingCartQuerySet) OrderAscByDeletedAt() ShoppingCartQuerySet { return qs.w(qs.db.Order("deleted_at ASC")) } -// OrderAscByDeliveryType is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) OrderAscByDeliveryType() ShoppingCartQuerySet { - return qs.w(qs.db.Order("delivery_type ASC")) -} - // OrderAscByGameCardId is an autogenerated method // nolint: dupl func (qs ShoppingCartQuerySet) OrderAscByGameCardId() ShoppingCartQuerySet { @@ -479,12 +417,6 @@ func (qs ShoppingCartQuerySet) OrderDescByDeletedAt() ShoppingCartQuerySet { return qs.w(qs.db.Order("deleted_at DESC")) } -// OrderDescByDeliveryType is an autogenerated method -// nolint: dupl -func (qs ShoppingCartQuerySet) OrderDescByDeliveryType() ShoppingCartQuerySet { - return qs.w(qs.db.Order("delivery_type DESC")) -} - // OrderDescByGameCardId is an autogenerated method // nolint: dupl func (qs ShoppingCartQuerySet) OrderDescByGameCardId() ShoppingCartQuerySet { @@ -622,13 +554,6 @@ func (u ShoppingCartUpdater) SetDeletedAt(deletedAt *time.Time) ShoppingCartUpda return u } -// SetDeliveryType is an autogenerated method -// nolint: dupl -func (u ShoppingCartUpdater) SetDeliveryType(deliveryType uint8) ShoppingCartUpdater { - u.fields[string(ShoppingCartDBSchema.DeliveryType)] = deliveryType - return u -} - // SetGameCardId is an autogenerated method // nolint: dupl func (u ShoppingCartUpdater) SetGameCardId(gameCardId uint64) ShoppingCartUpdater { @@ -685,38 +610,35 @@ func (f ShoppingCartDBSchemaField) String() string { // ShoppingCartDBSchema stores db field names of ShoppingCart var ShoppingCartDBSchema = struct { - ID ShoppingCartDBSchemaField - CreatedAt ShoppingCartDBSchemaField - UpdatedAt ShoppingCartDBSchemaField - DeletedAt ShoppingCartDBSchemaField - Uid ShoppingCartDBSchemaField - GameCardId ShoppingCartDBSchemaField - DeliveryType ShoppingCartDBSchemaField - Count ShoppingCartDBSchemaField + ID ShoppingCartDBSchemaField + CreatedAt ShoppingCartDBSchemaField + UpdatedAt ShoppingCartDBSchemaField + DeletedAt ShoppingCartDBSchemaField + Uid ShoppingCartDBSchemaField + GameCardId ShoppingCartDBSchemaField + Count ShoppingCartDBSchemaField }{ - ID: ShoppingCartDBSchemaField("id"), - CreatedAt: ShoppingCartDBSchemaField("created_at"), - UpdatedAt: ShoppingCartDBSchemaField("updated_at"), - DeletedAt: ShoppingCartDBSchemaField("deleted_at"), - Uid: ShoppingCartDBSchemaField("uid"), - GameCardId: ShoppingCartDBSchemaField("game_card_id"), - DeliveryType: ShoppingCartDBSchemaField("delivery_type"), - Count: ShoppingCartDBSchemaField("count"), + ID: ShoppingCartDBSchemaField("id"), + CreatedAt: ShoppingCartDBSchemaField("created_at"), + UpdatedAt: ShoppingCartDBSchemaField("updated_at"), + DeletedAt: ShoppingCartDBSchemaField("deleted_at"), + Uid: ShoppingCartDBSchemaField("uid"), + GameCardId: ShoppingCartDBSchemaField("game_card_id"), + Count: ShoppingCartDBSchemaField("count"), } // Update updates ShoppingCart fields by primary key // nolint: dupl func (o *ShoppingCart) Update(db *gorm.DB, fields ...ShoppingCartDBSchemaField) error { dbNameToFieldName := map[string]interface{}{ - "id": o.ID, - "created_at": o.CreatedAt, - "updated_at": o.UpdatedAt, - "deleted_at": o.DeletedAt, - "uid": o.Uid, - "game_card_id": o.GameCardId, - "delivery_type": o.DeliveryType, - "count": o.Count, + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "uid": o.Uid, + "game_card_id": o.GameCardId, + "count": o.Count, } u := map[string]interface{}{} for _, f := range fields { diff --git a/model/model_test.go b/model/model_test.go index 815c718..fb3592b 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -548,3 +548,8 @@ func MergingGameCards() { } } + +func UpdateUserName() { + InitDBProd() + +} \ No newline at end of file diff --git a/model/redeem_code.go b/model/redeem_code.go index 87a8f4c..56a8ba3 100644 --- a/model/redeem_code.go +++ b/model/redeem_code.go @@ -167,7 +167,7 @@ func UserRedeemCodeConvert(uid uint32, serialCode string) error { return nil } -func CodeSendToUser(uid uint32, codeType string) error { +func CodeSendToUser(uid uint32, codeType string,activityType uint32) error { count, err := NewUserRedeemCodeQuerySet(DB).UidEq(uid).Count() if err != nil { logger.Error("err:", err) @@ -198,7 +198,8 @@ func CodeSendToUser(uid uint32, codeType string) error { Status: UserRedeemCodeStatusHold, SerialCode: redeemCode.SerialCode, CodeType: redeemCode.CodeType, - ActivityType: RedeemCodeActivityTypeUserInvite, + ActivityType: activityType , + //ActivityType: RedeemCodeActivityTypeUserInvite, } err = begin.Create(userRedeemCode).Error if err != nil { diff --git a/model/shopping_cart.go b/model/shopping_cart.go index 0dd6f41..65a32f5 100644 --- a/model/shopping_cart.go +++ b/model/shopping_cart.go @@ -1,16 +1,88 @@ package model +import "github.com/codinl/go-logger" + //go:generate goqueryset -in shopping_cart.go // gen:qs type ShoppingCart struct { Model - Uid uint64 `json:"uid" gorm:"index"` - GameCardId uint64 `json:"game_card_id"` // 游戏卡id - DeliveryType uint8 `json:"delivery_type"` // 发货类型 - Count uint32 `json:"count"` // 数量 + Uid uint64 `json:"uid" gorm:"index"` + GameCardId uint64 `json:"game_card_id"` // 游戏卡id + Count uint32 `json:"count"` // 数量 + + GameCard GameCard `json:"game_card" gorm:"-"` } func (*ShoppingCart) TableName() string { return "shopping_cart" } + +type ShoppingCartListReq struct { + Uid uint32 `json:"uid"` + PageNum int `json:"page_num"` + PageSize int `json:"page_size"` +} +type ShoppingCartListResp struct { + List []ShoppingCart `json:"list"` + Total int `json:"total"` + PageNum int `json:"page_num"` + //PageSize int `json:"page_size"` +} + +func (m *ShoppingCartListReq) List() (*ShoppingCartListResp, error) { + resp := &ShoppingCartListResp{ + PageNum: m.PageNum, + } + page := m.PageNum - 1 + if page < 0 { + page = 0 + } + if m.PageSize == 0 { + m.PageSize = 10 + } + qs := NewShoppingCartQuerySet(DB).UidEq(uint64(m.Uid)) + count, err := qs.Count() + if err != nil { + logger.Error("err:", err) + return resp, err + } + resp.Total = count/m.PageSize + 1 + var shoppingCart []ShoppingCart + err = qs.OrderDescByID().Offset(page * m.PageSize).Limit(m.PageSize).All(&shoppingCart) + if err != nil && err != RecordNotFound { + logger.Error("err:", err) + return resp, err + } + resp.List = ShoppingCartListSetGameCard(shoppingCart) + return resp, nil +} + +func ShoppingCartListSetGameCard(list []ShoppingCart) []ShoppingCart { + if len(list) == 0 { + return list + } + ids := make([]uint32, 0) + for i, _ := range list { + ids = append(ids, uint32(list[i].GameCardId)) + } + var gameCards []GameCard + err := NewGameCardQuerySet(DB).IDIn(ids...).All(&gameCards) + if err != nil { + logger.Error("err:", err) + return list + } + gameCardMap := make(map[uint32]GameCard, 0) + for i, _ := range gameCards { + gameCardMap[gameCards[i].ID] = gameCards[i] + } + + for i, _ := range list { + v, ok := gameCardMap[uint32(list[i].GameCardId)] + if ok { + list[i].GameCard = v + } + } + + return list +} diff --git a/model/user.go b/model/user.go index f680c76..01de6da 100644 --- a/model/user.go +++ b/model/user.go @@ -4,6 +4,7 @@ import ( "errors" "github.com/codinl/go-logger" "mh-server/lib/utils" + "sync" "time" ) @@ -362,3 +363,30 @@ func GetDepositRefundRecordList(uid uint32) ([]DepositRefundRecord, error) { } return deposits, nil } + + +var userMutexMap map[string]*sync.Mutex + +func GetUserMutexMap() map[string]*sync.Mutex { + if userMutexMap == nil { + userMutexMap = make(map[string]*sync.Mutex, 0) + } + return userMutexMap +} + +func GetUserMutex(mutexKey string) *sync.Mutex { + mutexMap := GetUserMutexMap() + if v, ok := mutexMap[mutexKey]; ok { + return v + } else { + mutexMap[mutexKey] = new(sync.Mutex) + return mutexMap[mutexKey] + } +} + +//func AuthLoginMutex(uid uint32) *sync.Mutex { +// return GetUserMutex(fmt.Sprintf("AuthLogin:%d", uid)) +//} + + +var AuthLoginMutex = sync.Mutex{} \ No newline at end of file diff --git a/router/router_app.go b/router/router_app.go index 9dd225b..9865a50 100644 --- a/router/router_app.go +++ b/router/router_app.go @@ -123,7 +123,7 @@ func ConfigAppRouter(r gin.IRouter) { order.POST("express", controller.OrderExpress) // 订单物流 order.POST("express_company/list", controller.ExpressCompanyList) // 物流公司列表 order.POST("order/wx_pay/success", controller.WXPaySuccess) // 微信支付成功 - order.POST("cancel", controller.OrderCancel) // 订单取消 + order.POST("cancel", controller.OrderCancel) // 订单取消 order.Use(auth.UserAccessAuth) // TODO order.POST("create", controller.OrderCreate) // 创建订单 @@ -158,5 +158,14 @@ func ConfigAppRouter(r gin.IRouter) { activity.POST("redeem_code/user/convert", controller.UserConvertRedeemCode) // 会员兑换码 } + shoppingCart := api.Group("shopping_cart") + { + + shoppingCart.Use(auth.UserAccessAuth) + shoppingCart.POST("list", controller.ShoppingCartList) // 详情 + shoppingCart.POST("add", controller.ShoppingCartAdd) // + shoppingCart.POST("del", controller.ShoppingCartDel) // + + } } From b7f3bcac3d6a95942f63eae02772ffe402aac219 Mon Sep 17 00:00:00 2001 From: li Date: Sat, 15 Jan 2022 21:21:05 +0800 Subject: [PATCH 02/11] fix: --- lib/wxpay/wx_pay.go | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/lib/wxpay/wx_pay.go b/lib/wxpay/wx_pay.go index 4f6617f..2bde73b 100644 --- a/lib/wxpay/wx_pay.go +++ b/lib/wxpay/wx_pay.go @@ -231,24 +231,29 @@ type ( CashFee uint `xml:"cash_fee,CDATA" json:"cash_fee"` CashFeeType string `xml:"cash_fee_type,CDATA" json:"cash_fee_type"` - CouponFee uint `xml:"coupon_fee,CDATA" json:"coupon_fee"` - CouponCount uint `xml:"coupon_count,CDATA" json:"coupon_count"` - CouponType0 uint `xml:"coupon_type_0,CDATA" json:"coupon_type"` - CouponId0 string `xml:"coupon_id_0,CDATA" json:"coupon_id"` - CouponFee0 uint `xml:"coupon_fee_0,CDATA" json:"coupon_fee0"` + CouponFee uint `xml:"coupon_fee,CDATA" json:"coupon_fee"` + CouponCount uint `xml:"coupon_count,CDATA" json:"coupon_count"` + CouponType0 uint `xml:"coupon_type_0,CDATA" json:"coupon_type"` + CouponId0 string `xml:"coupon_id_0,CDATA" json:"coupon_id"` + CouponFee0 uint `xml:"coupon_fee_0,CDATA" json:"coupon_fee0"` //CouponCount string `json:"coupon_count"` //CouponFee string `json:"coupon_fee"` //CouponFee0 string `json:"coupon_fee_0"` //CouponId0 string `json:"coupon_id_0"` - CouponFee1 uint `xml:"coupon_fee_1,CDATA" json:"coupon_fee_1"` - CouponId1 string `xml:"coupon_id_1,CDATA" json:"coupon_id_1"` + CouponFee1 uint `xml:"coupon_fee_1,CDATA" json:"coupon_fee_1"` + CouponId1 string `xml:"coupon_id_1,CDATA" json:"coupon_id_1"` + CouponFee2 uint `xml:"coupon_fee_2,CDATA" json:"coupon_fee_2"` + CouponId2 string `xml:"coupon_id_2,CDATA" json:"coupon_id_2"` + CouponFee3 uint `xml:"coupon_fee_3,CDATA" json:"coupon_fee_3"` + CouponId3 string `xml:"coupon_id_3,CDATA" json:"coupon_id_3"` + CouponFee4 uint `xml:"coupon_fee_4,CDATA" json:"coupon_fee_4"` + CouponId4 string `xml:"coupon_id_4,CDATA" json:"coupon_id_4"` - - TransactionId string `xml:"transaction_id,CDATA" json:"transaction_id"` - OutTradeNo string `xml:"out_trade_no,CDATA" json:"out_trade_no"` - Attach string `xml:"attach,CDATA" json:"attach"` - TimeEnd string `xml:"time_end,CDATA" json:"time_end"` + TransactionId string `xml:"transaction_id,CDATA" json:"transaction_id"` + OutTradeNo string `xml:"out_trade_no,CDATA" json:"out_trade_no"` + Attach string `xml:"attach,CDATA" json:"attach"` + TimeEnd string `xml:"time_end,CDATA" json:"time_end"` } WechatNotify struct { @@ -272,6 +277,17 @@ type ( } ) +type T struct { + CouponFee0 string `json:"coupon_fee_0"` + CouponFee1 string `json:"coupon_fee_1"` + CouponFee2 string `json:"coupon_fee_2"` + CouponFee3 string `json:"coupon_fee_3"` + CouponId0 string `json:"coupon_id_0"` + CouponId1 string `json:"coupon_id_1"` + CouponId2 string `json:"coupon_id_2"` + CouponId3 string `json:"coupon_id_3"` +} + //type T struct { // Xml struct { // Appid string `json:"appid"` From a0a31709e537e8ab6c00f7ba8f560c6f5b8cfa52 Mon Sep 17 00:00:00 2001 From: li Date: Sun, 16 Jan 2022 16:56:20 +0800 Subject: [PATCH 03/11] fix: --- controller/game_card.go | 20 +- controller/order.go | 170 +++++---- controller/store.go | 7 +- controller/user.go | 64 +++- lib/status/status.go | 14 +- model/autogenerated_user.go | 204 ++++++++-- model/config.go | 49 ++- model/config_test.go | 38 ++ model/game_card.go | 20 + model/order.go | 12 +- model/user.go | 29 +- pack/log_server/server.2022-01-16.log | 531 ++++++++++++++++++++++++++ router/router_app.go | 2 + 13 files changed, 1015 insertions(+), 145 deletions(-) create mode 100644 model/config_test.go create mode 100644 pack/log_server/server.2022-01-16.log diff --git a/controller/game_card.go b/controller/game_card.go index 7e22b7e..4f856fd 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -288,13 +288,18 @@ func PushWXPayNotice(c *gin.Context) { expireTime = user.MemberExpire.AddDate(1, 0, 0) } - configInfo, err := model.PayConfigInfo() + //configInfo, err := model.PayConfigInfo() + //if err != nil { + // logger.Error("err:", err) + // return + //} + memberConfig, err := model.GetMemberConfig(record.MemberLevel) if err != nil { - logger.Error("err:", err) + logger.Error("GetMemberConfig err:", err) return } - err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: 2, MemberExpire: expireTime, Deposit: configInfo.DepositFee}) + err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit}) if err != nil { logger.Error("err:", err) } @@ -313,6 +318,7 @@ func PushWXPayNotice(c *gin.Context) { MemberType: 2, ToUid: record.Uid, MemberStatus: 2, + MemberLevel: record.MemberLevel, } err := userInvite.Create(model.DB) if err != nil { @@ -321,7 +327,7 @@ func PushWXPayNotice(c *gin.Context) { } else { qs := model.NewUserInviteQuerySet(model.DB).ToUidEq(record.Uid).GetUpdater() if user.MemberLevel != 2 { - qs = qs.SetMemberOpenTime(time.Now()) + qs = qs.SetMemberOpenTime(time.Now()).SetMemberLevel(record.MemberLevel) } num, err := qs.SetMemberType(2).SetMemberStatus(2).UpdateNum() if err != nil { @@ -333,8 +339,8 @@ func PushWXPayNotice(c *gin.Context) { if invite.FromUid != 0 { inviteUser := model.GetUserByUid(invite.FromUid) - if inviteUser.UserType != 2 && user.MemberLevel != 2 { - err := model.CodeSendToUser(invite.FromUid, model.CodeTypeMemberCard30,model.RedeemCodeActivityTypeUserInvite) + if inviteUser.UserType != 2 && user.MemberLevel != 2 { // 邀请 新用户推送一次 + err := model.CodeSendToUser(invite.FromUid, model.CodeTypeMemberCard30, model.RedeemCodeActivityTypeUserInvite) if err != nil { logger.Error("err:", err) } @@ -344,7 +350,7 @@ func PushWXPayNotice(c *gin.Context) { } if user.MemberLevel != 2 { - err = model.CodeSendToUser(user.Uid, model.CodeTypeMemberCard30,model.RedeemCodeActivityTypeStore) + err = model.CodeSendToUser(user.Uid, model.CodeTypeMemberCard30, model.RedeemCodeActivityTypeStore) if err != nil { logger.Error("err:", err) } diff --git a/controller/order.go b/controller/order.go index 11efa14..850f43d 100644 --- a/controller/order.go +++ b/controller/order.go @@ -161,12 +161,12 @@ func OrderCreate(c *gin.Context) { //} req := struct { - GameCardId uint64 `json:"game_card_id"` - StoreId uint64 `json:"store_id"` - UserAddressId uint64 `json:"user_address_id"` - Price uint32 `json:"price"` - DeliveryType uint8 `json:"delivery_type"` // 取货方式 - ExpressFee uint32 `json:"express_fee"` + GameCardList []model.CardInfo `json:"game_card_list"` + StoreId uint64 `json:"store_id"` + UserAddressId uint64 `json:"user_address_id"` + Price uint32 `json:"price"` + DeliveryType uint8 `json:"delivery_type"` // 取货方式 + ExpressFee uint32 `json:"express_fee"` }{} bodyString, err := ioutil.ReadAll(c.Request.Body) @@ -222,7 +222,21 @@ func OrderCreate(c *gin.Context) { RespJson(c, status.OrderUnpaidDeposit, nil) return } - + memberConfig, err := model.GetMemberConfig(user.MemberLevel) + if err != nil { + logger.Error("GetMemberConfig err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + cardCount := uint32(0) + for _, v := range req.GameCardList { + cardCount += v.Count + } + if memberConfig.MemberLever < cardCount { + logger.Error("GetMemberConfig err:", err) + RespJson(c, status.OrderMemberLevelLow, nil) + return + } model.UnPayOrderSetCancel(user.Uid) orderCreateLocker.Lock() @@ -240,7 +254,7 @@ func OrderCreate(c *gin.Context) { return } - online, err := model.IsGameCardOnline(uint32(req.GameCardId)) + online, err := model.IsGameCardListOnline(req.GameCardList) if err != nil { logger.Error("err:", err) RespJson(c, status.InternalServerError, nil) @@ -262,7 +276,7 @@ func OrderCreate(c *gin.Context) { order := model.Order{ Uid: uint64(uc.Uid), - GameCardId: req.GameCardId, + GameCardId: 0, StoreId: req.StoreId, UserAddressId: req.UserAddressId, DeliveryType: req.DeliveryType, @@ -278,80 +292,80 @@ func OrderCreate(c *gin.Context) { //tx := model.TransactionBegin() ////TODO 以支付成功作为订单下单成功的依据,不是订单创建 已修改 - var gameCardGoodsStock model.GameCardGoodsStock - err = model.NewGameCardGoodsStockQuerySet(model.DB).StoreIdEq(req.StoreId).GameCardIdEq(req.GameCardId).One(&gameCardGoodsStock) - if err != nil { - logger.Error("err:", err) - RespJson(c, status.InternalServerError, nil) - return - } - if gameCardGoodsStock.RentStock <= 0 { - logger.Error("order stock out ") - RespJson(c, status.OrderStockOut, nil) - return - } - - fmt.Println("PayPrice:", order.PayPrice) - if req.Price == 0 { - order.PayStatus = model.PayStatusPaid - fmt.Println("orderId:", order.PayStatus) - err = order.OrderCreate() - if err != nil { - logger.Error("err:", err) - RespJson(c, status.InternalServerError, nil) - return - } - - // 减库存 - sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId) - fmt.Println("sql:", sql) - err = model.DB.Exec(sql).Error - if err != nil { - logger.Errorf("err:", err) - RespJson(c, status.InternalServerError, nil) - return - } - - ret := map[string]interface{}{ - "web_pay": "", - "order_id": order.ID, - } - RespOK(c, ret) - return - } - - begin := model.DB.Begin() - //err = order.OrderCreate() + //var gameCardGoodsStock model.GameCardGoodsStock + //err = model.NewGameCardGoodsStockQuerySet(model.DB).StoreIdEq(req.StoreId).GameCardIdEq(req.GameCardId).One(&gameCardGoodsStock) //if err != nil { // logger.Error("err:", err) // RespJson(c, status.InternalServerError, nil) // return //} - err = order.Create(begin) - if err != nil { - begin.Rollback() - logger.Error("err:", err) - RespJson(c, status.InternalServerError, nil) - return - } - - // 减库存 - sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId) - fmt.Println("sql:", sql) - err = begin.Exec(sql).Error - if err != nil { - begin.Rollback() - logger.Errorf("err:", err) - RespJson(c, status.InternalServerError, nil) - return - } - err = begin.Commit().Error - if err != nil { - begin.Rollback() - logger.Errorf("err:", err) - RespJson(c, status.InternalServerError, nil) - return - } + //if gameCardGoodsStock.RentStock <= 0 { + // logger.Error("order stock out ") + // RespJson(c, status.OrderStockOut, nil) + // return + //} + // + //fmt.Println("PayPrice:", order.PayPrice) + //if req.Price == 0 { + // order.PayStatus = model.PayStatusPaid + // fmt.Println("orderId:", order.PayStatus) + // err = order.OrderCreate() + // if err != nil { + // logger.Error("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + // } + // + // // 减库存 + // sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId) + // fmt.Println("sql:", sql) + // err = model.DB.Exec(sql).Error + // if err != nil { + // logger.Errorf("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + // } + // + // ret := map[string]interface{}{ + // "web_pay": "", + // "order_id": order.ID, + // } + // RespOK(c, ret) + // return + //} + // + //begin := model.DB.Begin() + ////err = order.OrderCreate() + ////if err != nil { + //// logger.Error("err:", err) + //// RespJson(c, status.InternalServerError, nil) + //// return + ////} + //err = order.Create(begin) + //if err != nil { + // begin.Rollback() + // logger.Error("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + //} + // + //// 减库存 + //sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId) + //fmt.Println("sql:", sql) + //err = begin.Exec(sql).Error + //if err != nil { + // begin.Rollback() + // logger.Errorf("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + //} + //err = begin.Commit().Error + //if err != nil { + // begin.Rollback() + // logger.Errorf("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + //} orderId := fmt.Sprintf("%d", order.ID) //orderId = "100000" diff --git a/controller/store.go b/controller/store.go index 48eb361..04ebeef 100644 --- a/controller/store.go +++ b/controller/store.go @@ -57,6 +57,9 @@ func ShoppingCartAdd(c *gin.Context) { RespJson(c, status.BadRequest, nil) return } + //fmt.Println("GameCardId:",req.GameCardId) + //fmt.Println("AddType:",req.AddType) + if req.GameCardId == 0 { logger.Error("GameCardId is 0") RespJson(c, status.BadRequest, nil) @@ -96,7 +99,9 @@ func ShoppingCartAdd(c *gin.Context) { } else if req.AddType == 2 { shoppingCart.Count -= 1 } - + if shoppingCart.Count < 0 { + shoppingCart.Count = 0 + } _, err = model.NewShoppingCartQuerySet(model.DB).IDEq(shoppingCart.ID).GetUpdater().SetCount(shoppingCart.Count).UpdateNum() if err != nil { logger.Error("err:", err) diff --git a/controller/user.go b/controller/user.go index c57c59a..fdf541c 100644 --- a/controller/user.go +++ b/controller/user.go @@ -205,6 +205,14 @@ func UserInfoUpdate(c *gin.Context) { } func OpenMember(c *gin.Context) { + req := struct { + MemberLevel uint32 `json:"member_level"` // 昵称 + }{} + if c.ShouldBindJSON(&req) != nil { + logger.Error("parameter err") + RespJson(c, status.BadRequest, nil) + return + } uc := auth.GetCurrentUser(c) if uc == nil { RespJson(c, status.Unauthorized, nil) @@ -213,12 +221,19 @@ func OpenMember(c *gin.Context) { user := model.GetUserByUid(uc.Uid) - configInfo, err := model.PayConfigInfo() + //configInfo, err := model.PayConfigInfo() + //if err != nil { + // logger.Error("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + //} + memberConfig, err := model.GetMemberConfig(req.MemberLevel) if err != nil { logger.Error("err:", err) RespJson(c, status.InternalServerError, nil) return } + //totalFee := uint32(MemberFee + DepositFee) ////totalFee = uint32(3) // TODO 测试 //if user.Deposit == 300 { @@ -226,10 +241,11 @@ func OpenMember(c *gin.Context) { // // //totalFee = uint32(1) // TODO 测试 //} - fmt.Println("configInfo.MemberFee : configInfo.DepositFee", configInfo.MemberFee, configInfo.DepositFee) - totalFee := configInfo.MemberFee + configInfo.DepositFee - if user.Deposit == configInfo.DepositFee { - totalFee = configInfo.MemberFee + fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit) + + totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit + if user.Deposit == memberConfig.MemberDeposit { + totalFee = memberConfig.MemberFee } if totalFee == 0 { logger.Error(errors.New("totalFee is 0")) @@ -244,7 +260,7 @@ func OpenMember(c *gin.Context) { //} //orderSn := utils.GetSerialNo32HEXString() orderSn := model.GetOrderSn() - err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn}.Insert() + err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn,MemberLevel: req.MemberLevel}.Insert() if err != nil { logger.Error(errors.New("WebPay err")) RespJson(c, status.InternalServerError, nil) @@ -276,14 +292,23 @@ func PayDeposit(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } - - configInfo, err := model.PayConfigInfo() + level := user.MemberLevel + if level == model.MemberLevelPeriod { + level = model.MemberLevelGold + } + //configInfo, err := model.PayConfigInfo() + //if err != nil { + // logger.Error("err:", err) + // return + //} + memberConfig, err := model.GetMemberConfig(level) if err != nil { - logger.Error("err:", err) + logger.Error("GetMemberConfig err:",err) + RespJson(c, status.InternalServerError, nil) return } - totalFee := configInfo.DepositFee + totalFee := memberConfig.MemberDeposit if totalFee == 0 || user.Deposit == totalFee { logger.Error(errors.New("totalFee is 0")) RespJson(c, status.InternalServerError, nil) @@ -379,6 +404,23 @@ func UserDepositRefundRecordList(c *gin.Context) { RespOK(c, resp) } +func MemberConfigList(c *gin.Context) { + //uc := auth.GetCurrentUser(c) + //if uc == nil { + // RespJson(c, status.Unauthorized, nil) + // return + //} + + resp, err := model.MemberConfigInfo() + if err != nil { + logger.Errorf("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + RespOK(c, resp) +} + // 升级 1-黄金会员 2-白金会员 3-黑金会员 // 开通会员 // 升级会员 @@ -386,3 +428,5 @@ func UserDepositRefundRecordList(c *gin.Context) { // 购物车 // 押金 +// 会员列表 开通会员 下订单 借卡 还卡 +// 会员升级 diff --git a/lib/status/status.go b/lib/status/status.go index 3266ea3..f0becb7 100644 --- a/lib/status/status.go +++ b/lib/status/status.go @@ -82,14 +82,14 @@ const ( AwardOffShelves = 500407 //奖品下架 AwardExchangeOut = 500408 //奖品已兑完 - NotMember = 500501 //非会员 - HadReceiveReward = 500502 // 已经领取过奖励 - OrderDelivered = 500503 // 订单已发货 - OrderCompleted = 500504 // 订单已完成 - OrderStockOut = 500505 // 没有库存 - OrderUnpaidDeposit = 500506 // 没有库存 - + NotMember = 500501 //非会员 + HadReceiveReward = 500502 // 已经领取过奖励 + OrderDelivered = 500503 // 订单已发货 + OrderCompleted = 500504 // 订单已完成 + OrderStockOut = 500505 // 没有库存 + OrderUnpaidDeposit = 500506 // 未交押金 RefundDepositSubmitted = 500507 // 已提交押金退款 + OrderMemberLevelLow = 500508 // 会员等级低 ToastErr = 600 // 报错 ) diff --git a/model/autogenerated_user.go b/model/autogenerated_user.go index ad27024..84267e3 100644 --- a/model/autogenerated_user.go +++ b/model/autogenerated_user.go @@ -1679,6 +1679,62 @@ func (qs UserInviteQuerySet) Limit(limit int) UserInviteQuerySet { return qs.w(qs.db.Limit(limit)) } +// MemberLevelEq is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) MemberLevelEq(memberLevel uint32) UserInviteQuerySet { + return qs.w(qs.db.Where("member_level = ?", memberLevel)) +} + +// MemberLevelGt is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) MemberLevelGt(memberLevel uint32) UserInviteQuerySet { + return qs.w(qs.db.Where("member_level > ?", memberLevel)) +} + +// MemberLevelGte is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) MemberLevelGte(memberLevel uint32) UserInviteQuerySet { + return qs.w(qs.db.Where("member_level >= ?", memberLevel)) +} + +// MemberLevelIn is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) MemberLevelIn(memberLevel ...uint32) UserInviteQuerySet { + if len(memberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one memberLevel in MemberLevelIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("member_level IN (?)", memberLevel)) +} + +// MemberLevelLt is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) MemberLevelLt(memberLevel uint32) UserInviteQuerySet { + return qs.w(qs.db.Where("member_level < ?", memberLevel)) +} + +// MemberLevelLte is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) MemberLevelLte(memberLevel uint32) UserInviteQuerySet { + return qs.w(qs.db.Where("member_level <= ?", memberLevel)) +} + +// MemberLevelNe is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) MemberLevelNe(memberLevel uint32) UserInviteQuerySet { + return qs.w(qs.db.Where("member_level != ?", memberLevel)) +} + +// MemberLevelNotIn is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) MemberLevelNotIn(memberLevel ...uint32) UserInviteQuerySet { + if len(memberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one memberLevel in MemberLevelNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("member_level NOT IN (?)", memberLevel)) +} + // MemberOpenTimeEq is an autogenerated method // nolint: dupl func (qs UserInviteQuerySet) MemberOpenTimeEq(memberOpenTime time.Time) UserInviteQuerySet { @@ -1863,6 +1919,12 @@ func (qs UserInviteQuerySet) OrderAscByID() UserInviteQuerySet { return qs.w(qs.db.Order("id ASC")) } +// OrderAscByMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) OrderAscByMemberLevel() UserInviteQuerySet { + return qs.w(qs.db.Order("member_level ASC")) +} + // OrderAscByMemberOpenTime is an autogenerated method // nolint: dupl func (qs UserInviteQuerySet) OrderAscByMemberOpenTime() UserInviteQuerySet { @@ -1935,6 +1997,12 @@ func (qs UserInviteQuerySet) OrderDescByID() UserInviteQuerySet { return qs.w(qs.db.Order("id DESC")) } +// OrderDescByMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserInviteQuerySet) OrderDescByMemberLevel() UserInviteQuerySet { + return qs.w(qs.db.Order("member_level DESC")) +} + // OrderDescByMemberOpenTime is an autogenerated method // nolint: dupl func (qs UserInviteQuerySet) OrderDescByMemberOpenTime() UserInviteQuerySet { @@ -2271,6 +2339,13 @@ func (u UserInviteUpdater) SetID(ID uint32) UserInviteUpdater { return u } +// SetMemberLevel is an autogenerated method +// nolint: dupl +func (u UserInviteUpdater) SetMemberLevel(memberLevel uint32) UserInviteUpdater { + u.fields[string(UserInviteDBSchema.MemberLevel)] = memberLevel + return u +} + // SetMemberOpenTime is an autogenerated method // nolint: dupl func (u UserInviteUpdater) SetMemberOpenTime(memberOpenTime time.Time) UserInviteUpdater { @@ -2367,6 +2442,7 @@ var UserInviteDBSchema = struct { MemberStatus UserInviteDBSchemaField ToUid UserInviteDBSchemaField StoreType UserInviteDBSchemaField + MemberLevel UserInviteDBSchemaField }{ ID: UserInviteDBSchemaField("id"), @@ -2381,6 +2457,7 @@ var UserInviteDBSchema = struct { MemberStatus: UserInviteDBSchemaField("member_status"), ToUid: UserInviteDBSchemaField("to_uid"), StoreType: UserInviteDBSchemaField("store_type"), + MemberLevel: UserInviteDBSchemaField("member_level"), } // Update updates UserInvite fields by primary key @@ -2399,6 +2476,7 @@ func (o *UserInvite) Update(db *gorm.DB, fields ...UserInviteDBSchemaField) erro "member_status": o.MemberStatus, "to_uid": o.ToUid, "store_type": o.StoreType, + "member_level": o.MemberLevel, } u := map[string]interface{}{} for _, f := range fields { @@ -2656,6 +2734,62 @@ func (qs UserOpenMemberRecordQuerySet) Limit(limit int) UserOpenMemberRecordQuer return qs.w(qs.db.Limit(limit)) } +// MemberLevelEq is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberLevelEq(memberLevel uint32) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_level = ?", memberLevel)) +} + +// MemberLevelGt is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberLevelGt(memberLevel uint32) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_level > ?", memberLevel)) +} + +// MemberLevelGte is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberLevelGte(memberLevel uint32) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_level >= ?", memberLevel)) +} + +// MemberLevelIn is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberLevelIn(memberLevel ...uint32) UserOpenMemberRecordQuerySet { + if len(memberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one memberLevel in MemberLevelIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("member_level IN (?)", memberLevel)) +} + +// MemberLevelLt is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberLevelLt(memberLevel uint32) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_level < ?", memberLevel)) +} + +// MemberLevelLte is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberLevelLte(memberLevel uint32) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_level <= ?", memberLevel)) +} + +// MemberLevelNe is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberLevelNe(memberLevel uint32) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_level != ?", memberLevel)) +} + +// MemberLevelNotIn is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberLevelNotIn(memberLevel ...uint32) UserOpenMemberRecordQuerySet { + if len(memberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one memberLevel in MemberLevelNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("member_level NOT IN (?)", memberLevel)) +} + // Offset is an autogenerated method // nolint: dupl func (qs UserOpenMemberRecordQuerySet) Offset(offset int) UserOpenMemberRecordQuerySet { @@ -2718,6 +2852,12 @@ func (qs UserOpenMemberRecordQuerySet) OrderAscByID() UserOpenMemberRecordQueryS return qs.w(qs.db.Order("id ASC")) } +// OrderAscByMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) OrderAscByMemberLevel() UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Order("member_level ASC")) +} + // OrderAscByOrderId is an autogenerated method // nolint: dupl func (qs UserOpenMemberRecordQuerySet) OrderAscByOrderId() UserOpenMemberRecordQuerySet { @@ -2760,6 +2900,12 @@ func (qs UserOpenMemberRecordQuerySet) OrderDescByID() UserOpenMemberRecordQuery return qs.w(qs.db.Order("id DESC")) } +// OrderDescByMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) OrderDescByMemberLevel() UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Order("member_level DESC")) +} + // OrderDescByOrderId is an autogenerated method // nolint: dupl func (qs UserOpenMemberRecordQuerySet) OrderDescByOrderId() UserOpenMemberRecordQuerySet { @@ -3009,6 +3155,13 @@ func (u UserOpenMemberRecordUpdater) SetID(ID uint32) UserOpenMemberRecordUpdate return u } +// SetMemberLevel is an autogenerated method +// nolint: dupl +func (u UserOpenMemberRecordUpdater) SetMemberLevel(memberLevel uint32) UserOpenMemberRecordUpdater { + u.fields[string(UserOpenMemberRecordDBSchema.MemberLevel)] = memberLevel + return u +} + // SetOpenNo is an autogenerated method // nolint: dupl func (u UserOpenMemberRecordUpdater) SetOpenNo(openNo string) UserOpenMemberRecordUpdater { @@ -3072,38 +3225,41 @@ func (f UserOpenMemberRecordDBSchemaField) String() string { // UserOpenMemberRecordDBSchema stores db field names of UserOpenMemberRecord var UserOpenMemberRecordDBSchema = struct { - ID UserOpenMemberRecordDBSchemaField - CreatedAt UserOpenMemberRecordDBSchemaField - UpdatedAt UserOpenMemberRecordDBSchemaField - DeletedAt UserOpenMemberRecordDBSchemaField - Uid UserOpenMemberRecordDBSchemaField - OpenNo UserOpenMemberRecordDBSchemaField - OrderId UserOpenMemberRecordDBSchemaField - OrderType UserOpenMemberRecordDBSchemaField + ID UserOpenMemberRecordDBSchemaField + CreatedAt UserOpenMemberRecordDBSchemaField + UpdatedAt UserOpenMemberRecordDBSchemaField + DeletedAt UserOpenMemberRecordDBSchemaField + Uid UserOpenMemberRecordDBSchemaField + OpenNo UserOpenMemberRecordDBSchemaField + OrderId UserOpenMemberRecordDBSchemaField + OrderType UserOpenMemberRecordDBSchemaField + MemberLevel UserOpenMemberRecordDBSchemaField }{ - ID: UserOpenMemberRecordDBSchemaField("id"), - CreatedAt: UserOpenMemberRecordDBSchemaField("created_at"), - UpdatedAt: UserOpenMemberRecordDBSchemaField("updated_at"), - DeletedAt: UserOpenMemberRecordDBSchemaField("deleted_at"), - Uid: UserOpenMemberRecordDBSchemaField("uid"), - OpenNo: UserOpenMemberRecordDBSchemaField("open_no"), - OrderId: UserOpenMemberRecordDBSchemaField("order_id"), - OrderType: UserOpenMemberRecordDBSchemaField("order_type"), + ID: UserOpenMemberRecordDBSchemaField("id"), + CreatedAt: UserOpenMemberRecordDBSchemaField("created_at"), + UpdatedAt: UserOpenMemberRecordDBSchemaField("updated_at"), + DeletedAt: UserOpenMemberRecordDBSchemaField("deleted_at"), + Uid: UserOpenMemberRecordDBSchemaField("uid"), + OpenNo: UserOpenMemberRecordDBSchemaField("open_no"), + OrderId: UserOpenMemberRecordDBSchemaField("order_id"), + OrderType: UserOpenMemberRecordDBSchemaField("order_type"), + MemberLevel: UserOpenMemberRecordDBSchemaField("member_level"), } // Update updates UserOpenMemberRecord fields by primary key // nolint: dupl func (o *UserOpenMemberRecord) Update(db *gorm.DB, fields ...UserOpenMemberRecordDBSchemaField) error { dbNameToFieldName := map[string]interface{}{ - "id": o.ID, - "created_at": o.CreatedAt, - "updated_at": o.UpdatedAt, - "deleted_at": o.DeletedAt, - "uid": o.Uid, - "open_no": o.OpenNo, - "order_id": o.OrderId, - "order_type": o.OrderType, + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "uid": o.Uid, + "open_no": o.OpenNo, + "order_id": o.OrderId, + "order_type": o.OrderType, + "member_level": o.MemberLevel, } u := map[string]interface{}{} for _, f := range fields { diff --git a/model/config.go b/model/config.go index 71a6aa3..bf7e34a 100644 --- a/model/config.go +++ b/model/config.go @@ -2,6 +2,7 @@ package model import ( "encoding/json" + "errors" "github.com/codinl/go-logger" ) @@ -25,7 +26,8 @@ type PayConfig struct { } const ( - ConfigNamePay = "pay_config" // 支付配置 + ConfigNamePay = "pay_config" // 支付配置 + ConfigNameMember = "member_config" // 会员配置 ) func PayConfigInfo() (*PayConfig, error) { @@ -46,15 +48,54 @@ func PayConfigInfo() (*PayConfig, error) { return payConfig, nil } -// +type MemberConfig struct { + MemberLever uint32 `json:"member_lever"` // 会员等级 + MemberFee uint32 `json:"member_fee"` // 会员费 + MemberDeposit uint32 `json:"member_deposit"` // 押金 + CardMax uint32 `json:"card_max"` +} + +func MemberConfigInfo() ([]MemberConfig, error) { + var memberConfigs []MemberConfig + var configAllocation Config + err := NewConfigQuerySet(DB).NameEq(ConfigNameMember).One(&configAllocation) + if err != nil { + logger.Error("err:", err) + return memberConfigs, err + } + + err = json.Unmarshal([]byte(configAllocation.Value), &memberConfigs) + if err != nil { + logger.Error("err:", err) + return memberConfigs, err + } + + return memberConfigs, nil +} + +func GetMemberConfig(level uint32) (*MemberConfig, error) { + if level == 3 { + level = 2 + } + info, err := MemberConfigInfo() + if err != nil { + return nil, err + } + for _, config := range info { + if config.MemberLever == level { + return &config, nil + } + } + + return nil, errors.New("level err") +} + //type ConfigInterface interface { // Encode() string //} -// //type CheckConfig struct { // Check uint8 `json:"check"` //} -// //func (c *CheckConfig) Encode() string { // configBytes, err := json.Marshal(c) // if err != nil { diff --git a/model/config_test.go b/model/config_test.go new file mode 100644 index 0000000..2dc19ab --- /dev/null +++ b/model/config_test.go @@ -0,0 +1,38 @@ +package model + +import ( + "encoding/json" + "fmt" + "testing" +) + +func TestMemberConfigInfo(t *testing.T) { + lever := []uint32{2, 4, 5} + list := make([]MemberConfig, 0) + cardCount := 0 + + for i, _ := range lever { + if lever[i] == 2 { + cardCount = 1 + } else if lever[i] == 4 { + cardCount = 2 + } else if lever[i] == 4 { + cardCount = 5 + } + + var config = MemberConfig{ + MemberLever: lever[i], + MemberFee: lever[i], + MemberDeposit: lever[i], + CardMax: uint32(cardCount), + } + list = append(list, config) + } + + bytes, err := json.Marshal(&list) + if err != nil { + fmt.Println("err:", err.Error()) + } + + fmt.Println("list:", string(bytes)) +} diff --git a/model/game_card.go b/model/game_card.go index 9104793..1d5127a 100644 --- a/model/game_card.go +++ b/model/game_card.go @@ -50,6 +50,11 @@ func (*HomeCarousel) TableName() string { return "home_carousel" } +type CardInfo struct { + GameCardId uint32 `json:"game_card_id"` + Count uint32 `json:"count"` +} + func GetGameCardList(sortType, page, pageSize int, gameTypeIds []uint64, storeId uint32) ([]GameCard, uint32, error) { var ( cards []GameCard = make([]GameCard, 0) @@ -166,6 +171,21 @@ func IsGameCardOnline(gameCardId uint32) (bool, error) { return count == 1, nil } +func IsGameCardListOnline(gameCards []CardInfo) (bool, error) { + for _, v := range gameCards { + count, err := NewGameCardQuerySet(DB).IDEq(v.GameCardId).StatusEq(1).Count() + if err != nil { + logger.Error("err:", err) + return false, err + } + if count < 1 { + return false, nil + } + } + + return true, nil +} + func IsGameCardHaveStoke(storeId, gameCardId uint32) (bool, error) { var stock GameCardGoodsStock err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(gameCardId)).One(&stock) diff --git a/model/order.go b/model/order.go index 1688cf6..086593b 100644 --- a/model/order.go +++ b/model/order.go @@ -62,6 +62,16 @@ type Order struct { Mchid string `json:"mchid"` // 商户 } +type OrderCard struct { + Model + 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 + Status uint8 `json:"status" gorm:"index"` +} + func (*Order) TableName() string { return "order" } @@ -295,7 +305,6 @@ func IsHaveUnreturnedOrders(uid uint32) (bool, error) { return unreturned.Count != 0, nil } - func IsUserHaveUnreturnedOrder(uid uint32) (bool, error) { fmt.Println("uid", uid) @@ -378,7 +387,6 @@ func (m *Order) Cancel() error { return errors.New("card status expire") } - begin := DB.Begin() err = NewOrderQuerySet(begin).IDEq(m.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update() if err != nil { diff --git a/model/user.go b/model/user.go index 01de6da..1d7ba2a 100644 --- a/model/user.go +++ b/model/user.go @@ -43,8 +43,16 @@ func (o *User) TableName() string { } const ( - MemberTypeConsumer = 1 - MemberTypeMember = 2 + MemberTypeConsumer = 1 // 普通用户 + MemberTypeMember = 2 // 黄金会员 +) + +const ( + MemberLevelConsumer = 1 // 普通用户 + MemberLevelGold = 2 // 黄金会员 + MemberLevelPeriod = 3 + MemberLevelPlatinum = 4 // 白金会员 + MemberLevelBlackGold = 5 // 黑金会员 ) const DateTimeFormat = "2006-01-02" @@ -61,6 +69,7 @@ type UserInvite struct { MemberStatus uint8 `json:"member_status"` // 被邀请用户 1-未开通 2-已开通 3-已取消会员 ToUid uint32 `json:"to_uid"` // 被邀请用户 StoreType uint32 `json:"store_type"` // 门店类型 + MemberLevel uint32 `json:"member_level"` // 会员等级 } const ( @@ -128,11 +137,11 @@ func UserUpdate(user *User) error { type UserOpenMemberRecord struct { Model - Uid uint32 `json:"uid"` - OpenNo string `json:"open_no" gorm:"index"` - OrderId uint32 `json:"order_id"` - OrderType uint32 `json:"order_type"` // 1-物流支付 - + Uid uint32 `json:"uid"` + OpenNo string `json:"open_no" gorm:"index"` + OrderId uint32 `json:"order_id"` + OrderType uint32 `json:"order_type"` // 1-物流支付 + MemberLevel uint32 `json:"member_level"` } func (o *UserOpenMemberRecord) TableName() string { @@ -166,7 +175,6 @@ type CommonProblem struct { Sort uint32 `json:"sort" gorm:"index"` } - type GroupSendMessageTemplate struct { Model @@ -178,7 +186,6 @@ type GroupSendMessageTemplate struct { Status uint32 `json:"status"` // 1-待发送 2-已发送 } - func (*CommonProblem) TableName() string { return "common_problem" } @@ -364,7 +371,6 @@ func GetDepositRefundRecordList(uid uint32) ([]DepositRefundRecord, error) { return deposits, nil } - var userMutexMap map[string]*sync.Mutex func GetUserMutexMap() map[string]*sync.Mutex { @@ -388,5 +394,4 @@ func GetUserMutex(mutexKey string) *sync.Mutex { // return GetUserMutex(fmt.Sprintf("AuthLogin:%d", uid)) //} - -var AuthLoginMutex = sync.Mutex{} \ No newline at end of file +var AuthLoginMutex = sync.Mutex{} diff --git a/pack/log_server/server.2022-01-16.log b/pack/log_server/server.2022-01-16.log new file mode 100644 index 0000000..b6b390b --- /dev/null +++ b/pack/log_server/server.2022-01-16.log @@ -0,0 +1,531 @@ +2022/01/16 14:38:12 [INFO ]base_init_db.go:38: DB init success +2022/01/16 15:29:56 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 15:29:57 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 15:29:57 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 15:29:57 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 15:29:57 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 15:29:57 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 15:30:00 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 15:30:00 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 15:30:00 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 15:30:01 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 15:30:01 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 15:30:01 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 15:30:02 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 15:30:02 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 15:30:02 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 15:30:02 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 15:30:02 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 15:30:02 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 15:30:03 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 15:30:03 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 15:30:03 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 15:30:58 [INFO ]init.go:30: /api/v1/auth/login +2022/01/16 15:30:58 [INFO ]account.go:48: OpenID=ohuHh4tpfro8u_fUPMbHEWYx5svQ +2022/01/16 15:30:58 [INFO ]account.go:49: resp.UnionID= +2022/01/16 15:30:58 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:31:04 [INFO ]init.go:30: /api/v1/auth/login +2022/01/16 15:31:04 [INFO ]account.go:48: OpenID=ohuHh4tpfro8u_fUPMbHEWYx5svQ +2022/01/16 15:31:04 [INFO ]account.go:49: resp.UnionID= +2022/01/16 15:31:04 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:31:24 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:31:25 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:31:25 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:31:26 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:31:26 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:31:37 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:31:38 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:31:38 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:34:59 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:35:04 [INFO ]init.go:30: /api/v1/auth/login +2022/01/16 15:35:04 [INFO ]account.go:48: OpenID=ohuHh4tpfro8u_fUPMbHEWYx5svQ +2022/01/16 15:35:04 [INFO ]account.go:49: resp.UnionID= +2022/01/16 15:35:04 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:35:04 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:35:05 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:35:05 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:35:08 [INFO ]init.go:30: /api/v1/user/user_info/upload +2022/01/16 15:35:08 [ERROR]account.go:279: Key: 'Code' Error:Field validation for 'Code' failed on the 'required' tag +2022/01/16 15:35:10 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:35:10 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:35:16 [INFO ]init.go:30: /api/v1/user/user_info/upload +2022/01/16 15:35:16 [INFO ]account.go:302: userInfo={OpenID: Nickname:枫 Gender:0 Province: Language:zh_CN Country: City: Avatar:https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoBbibF1ykzNbej9KZreT23p4O2MLFgNIt73BeIP6GnYOH3baeJvS30wKk866ibKuSL3prOpLJMC6Jg/132 UnionID: Watermark:{AppID:wx806c079463b5b56c Timestamp:1642318516}} +2022/01/16 15:35:16 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:35:18 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:35:19 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:35:19 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:35:20 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:35:20 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:35:29 [INFO ]init.go:30: /api/v1/auth/login +2022/01/16 15:35:29 [INFO ]account.go:48: OpenID=ohuHh4tpfro8u_fUPMbHEWYx5svQ +2022/01/16 15:35:29 [INFO ]account.go:49: resp.UnionID= +2022/01/16 15:35:29 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:35:29 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:36:36 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:38:42 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:40:22 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:40:26 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:41:56 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:42:15 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:42:23 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:44:12 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:44:16 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:44:35 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:44:37 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:44:44 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:46:59 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:47:16 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:47:19 [INFO ]init.go:30: /api/v1/user/open_member +2022/01/16 15:47:19 [INFO ]wx_pay.go:63: MchId: 1609877389 +2022/01/16 15:47:19 [INFO ]wx_pay.go:64: AppId: wx806c079463b5b56c +2022/01/16 15:47:19 [INFO ]wx_pay.go:65: MchSecret: DeovoMingHuiRengTianTang45675456 +2022/01/16 15:47:19 [INFO ]wx_pay.go:440: 签字符串1 : appid=wx806c079463b5b56c&attach=member_pay&body=创建订单&device_info=WEB&fee_type=CNY&mch_id=1609877389&nonce_str=vjVgoqgzYqJ6pyrK47L363Qf0wYDWV8x¬ify_url=https://dev.switch.deovo.com:8004/api/v1/wxpay/notice&openid=ohuHh4tpfro8u_fUPMbHEWYx5svQ&out_trade_no=diddvhp40000&profit_sharing=N&sign_type=MD5&spbill_create_ip=39.108.188.218&time_start=20220116154719&total_fee=41&trade_type=JSAPI&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 15:47:19 [ERROR]wx_pay.go:464: xml: wx806c079463b5b56c1609877389WEBvjVgoqgzYqJ6pyrK47L363Qf0wYDWV8xECDE78A54BA7B9A8BC19C51B3F5CE5D8MD5创建订单member_paydiddvhp40000CNY4139.108.188.21820220116154719https://dev.switch.deovo.com:8004/api/v1/wxpay/noticeJSAPIohuHh4tpfro8u_fUPMbHEWYx5svQN +2022/01/16 15:47:19 [INFO ]wx_pay.go:440: 签字符串1 : appId=wx806c079463b5b56c&nonceStr=Mc9GYbaUaXD3BToo&package=prepay_id=wx1615471951571141d8de42ce2655ae0000&signType=MD5&timeStamp=1642319239&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 15:47:47 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:49:03 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:49:09 [INFO ]init.go:30: /api/v1/user/open_member +2022/01/16 15:49:09 [INFO ]wx_pay.go:63: MchId: 1609877389 +2022/01/16 15:49:09 [INFO ]wx_pay.go:64: AppId: wx806c079463b5b56c +2022/01/16 15:49:09 [INFO ]wx_pay.go:65: MchSecret: DeovoMingHuiRengTianTang45675456 +2022/01/16 15:49:09 [INFO ]wx_pay.go:440: 签字符串1 : appid=wx806c079463b5b56c&attach=member_pay&body=创建订单&device_info=WEB&fee_type=CNY&mch_id=1609877389&nonce_str=cCHl1d7GEi7g9is9A2my0vbx3cFnvQuJ¬ify_url=https://dev.switch.deovo.com:8004/api/v1/wxpay/notice&openid=ohuHh4tpfro8u_fUPMbHEWYx5svQ&out_trade_no=dided18o0000&profit_sharing=N&sign_type=MD5&spbill_create_ip=39.108.188.218&time_start=20220116154909&total_fee=41&trade_type=JSAPI&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 15:49:09 [ERROR]wx_pay.go:464: xml: wx806c079463b5b56c1609877389WEBcCHl1d7GEi7g9is9A2my0vbx3cFnvQuJ0C404E64B119780687532816783F03EFMD5创建订单member_paydided18o0000CNY4139.108.188.21820220116154909https://dev.switch.deovo.com:8004/api/v1/wxpay/noticeJSAPIohuHh4tpfro8u_fUPMbHEWYx5svQN +2022/01/16 15:49:10 [INFO ]wx_pay.go:440: 签字符串1 : appId=wx806c079463b5b56c&nonceStr=lOVZRmfoioPBfULu&package=prepay_id=wx161549100009358b0b65c85b76b1520000&signType=MD5&timeStamp=1642319350&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 15:49:10 [INFO ]init.go:30: /api/v1/user/open_member +2022/01/16 15:49:10 [INFO ]wx_pay.go:63: MchId: 1609877389 +2022/01/16 15:49:10 [INFO ]wx_pay.go:64: AppId: wx806c079463b5b56c +2022/01/16 15:49:10 [INFO ]wx_pay.go:65: MchSecret: DeovoMingHuiRengTianTang45675456 +2022/01/16 15:49:10 [INFO ]wx_pay.go:440: 签字符串1 : appid=wx806c079463b5b56c&attach=member_pay&body=创建订单&device_info=WEB&fee_type=CNY&mch_id=1609877389&nonce_str=63cN2N1GnO3rjy8DOACK03V6Dp515q6E¬ify_url=https://dev.switch.deovo.com:8004/api/v1/wxpay/notice&openid=ohuHh4tpfro8u_fUPMbHEWYx5svQ&out_trade_no=dided4ng0000&profit_sharing=N&sign_type=MD5&spbill_create_ip=39.108.188.218&time_start=20220116154910&total_fee=41&trade_type=JSAPI&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 15:49:10 [ERROR]wx_pay.go:464: xml: wx806c079463b5b56c1609877389WEB63cN2N1GnO3rjy8DOACK03V6Dp515q6E03A10200FDED898D6C7DA73316D53CF4MD5创建订单member_paydided4ng0000CNY4139.108.188.21820220116154910https://dev.switch.deovo.com:8004/api/v1/wxpay/noticeJSAPIohuHh4tpfro8u_fUPMbHEWYx5svQN +2022/01/16 15:49:10 [INFO ]wx_pay.go:440: 签字符串1 : appId=wx806c079463b5b56c&nonceStr=YtFKFOjTvYF1TAza&package=prepay_id=wx16154910775284d1d11a140b92f2bd0000&signType=MD5&timeStamp=1642319350&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 15:49:16 [INFO ]init.go:30: /api/v1/user/open_member +2022/01/16 15:49:17 [INFO ]wx_pay.go:63: MchId: 1609877389 +2022/01/16 15:49:17 [INFO ]wx_pay.go:64: AppId: wx806c079463b5b56c +2022/01/16 15:49:17 [INFO ]wx_pay.go:65: MchSecret: DeovoMingHuiRengTianTang45675456 +2022/01/16 15:49:17 [INFO ]wx_pay.go:440: 签字符串1 : appid=wx806c079463b5b56c&attach=member_pay&body=创建订单&device_info=WEB&fee_type=CNY&mch_id=1609877389&nonce_str=CHz2Jj33ULa0VKk7I2q1ki7n77XfK535¬ify_url=https://dev.switch.deovo.com:8004/api/v1/wxpay/notice&openid=ohuHh4tpfro8u_fUPMbHEWYx5svQ&out_trade_no=didedtp40000&profit_sharing=N&sign_type=MD5&spbill_create_ip=39.108.188.218&time_start=20220116154916&total_fee=41&trade_type=JSAPI&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 15:49:17 [ERROR]wx_pay.go:464: xml: wx806c079463b5b56c1609877389WEBCHz2Jj33ULa0VKk7I2q1ki7n77XfK53511C1E2D541DC0F8284B2CCE24CEA1068MD5创建订单member_paydidedtp40000CNY4139.108.188.21820220116154916https://dev.switch.deovo.com:8004/api/v1/wxpay/noticeJSAPIohuHh4tpfro8u_fUPMbHEWYx5svQN +2022/01/16 15:49:17 [INFO ]wx_pay.go:440: 签字符串1 : appId=wx806c079463b5b56c&nonceStr=e5zoJnepNXQX6mBl&package=prepay_id=wx16154917204493a8a49858360b56130000&signType=MD5&timeStamp=1642319357&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 15:49:43 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:49:47 [INFO ]init.go:30: /api/v1/auth/login +2022/01/16 15:49:47 [INFO ]account.go:48: OpenID=ohuHh4tpfro8u_fUPMbHEWYx5svQ +2022/01/16 15:49:47 [INFO ]account.go:49: resp.UnionID= +2022/01/16 15:49:47 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:49:48 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:49:52 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:49:52 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:50:06 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:50:06 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:50:06 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:50:07 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:50:07 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:50:09 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:50:09 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:51:27 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:51:33 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:59:38 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:59:41 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:59:43 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:59:44 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:59:44 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:59:45 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:59:45 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 15:59:47 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 15:59:47 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:01:44 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:01:46 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:01:46 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:01:48 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:01:48 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:01:48 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:01:49 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:02:34 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:04:03 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:04:04 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:04:05 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:04:07 [INFO ]init.go:30: /api/v1/user/invite_list +2022/01/16 16:04:53 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:04:54 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:04:55 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:04:55 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:04:56 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:04:57 [INFO ]init.go:30: /api/v1/article/title_panel/list +2022/01/16 16:04:57 [INFO ]init.go:30: /api/v1/article/list +2022/01/16 16:04:57 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:04:57 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:04:57 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:04:59 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:04:59 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:05:00 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:05:02 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:05:03 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:05:07 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:05:11 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:05:12 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:05:14 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:05:20 [INFO ]init.go:30: /api/v1/user/user_info/tel +2022/01/16 16:05:20 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:05:20 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:05:30 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:05:31 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:06:01 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:06:01 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:06:46 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:06:47 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:06:47 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:06:48 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:06:51 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:06:53 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:06:54 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:06:54 [INFO ]init.go:30: /api/v1/user/address/list +2022/01/16 16:07:19 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:07:20 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:07:22 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:07:23 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:07:31 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:07:32 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:07:33 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:07:34 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:09:09 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:09:09 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:09:11 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:09:12 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:10:33 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:10:34 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:10:35 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:12:54 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:12:55 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:13:11 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:13:11 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:13:40 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:13:42 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:13:53 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:13:54 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:13:55 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:13:55 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:15:10 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:15:11 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:15:11 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:15:11 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:15:21 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:15:21 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:15:22 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:15:22 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:15:23 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:15:23 [INFO ]init.go:30: /api/v1/user/address/list +2022/01/16 16:15:24 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:15:36 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:15:58 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:15:58 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:17:44 [INFO ]base_init_db.go:38: DB init success +2022/01/16 16:17:45 [INFO ]init.go:30: /api/v1/auth/login +2022/01/16 16:17:45 [INFO ]account.go:48: OpenID=ohuHh4tpfro8u_fUPMbHEWYx5svQ +2022/01/16 16:17:45 [INFO ]account.go:49: resp.UnionID= +2022/01/16 16:17:45 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:17:45 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:17:49 [INFO ]init.go:30: /api/v1/user/user_info/upload +2022/01/16 16:17:50 [INFO ]account.go:302: userInfo={OpenID: Nickname:枫 Gender:0 Province: Language:zh_CN Country: City: Avatar:https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoBbibF1ykzNbej9KZreT23p4O2MLFgNIt73BeIP6GnYOH3baeJvS30wKk866ibKuSL3prOpLJMC6Jg/132 UnionID: Watermark:{AppID:wx806c079463b5b56c Timestamp:1642321068}} +2022/01/16 16:17:50 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:17:52 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:17:52 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:17:54 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:17:54 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:17:55 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:17:55 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:18:02 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:18:02 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:18:04 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:18:05 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:18:06 [INFO ]init.go:30: /api/v1/user/address/list +2022/01/16 16:18:21 [INFO ]init.go:30: /api/v1/user/address/add +2022/01/16 16:18:21 [INFO ]init.go:30: /api/v1/order/amount +2022/01/16 16:18:44 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:18:45 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:18:45 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:18:46 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:18:46 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:18:47 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:18:48 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:18:50 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:18:50 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:18:50 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:18:51 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:18:52 [INFO ]init.go:30: /api/v1/article/title_panel/list +2022/01/16 16:18:53 [INFO ]init.go:30: /api/v1/article/list +2022/01/16 16:18:54 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:18:54 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:18:54 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:18:55 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:18:55 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:18:55 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:19:04 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:19:04 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:19:05 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:19:07 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:19:09 [INFO ]init.go:30: /api/v1/user/invite_list +2022/01/16 16:19:13 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:19:14 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:19:14 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:19:19 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:19:19 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:19:20 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:19:20 [INFO ]init.go:30: /api/v1/user/address/list +2022/01/16 16:19:20 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:19:24 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:19:26 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:19:26 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:19:32 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:19:32 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:19:32 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:20:01 [INFO ]init.go:30: /api/v1/auth/login +2022/01/16 16:20:01 [INFO ]account.go:48: OpenID=ohuHh4tpfro8u_fUPMbHEWYx5svQ +2022/01/16 16:20:01 [INFO ]account.go:49: resp.UnionID= +2022/01/16 16:20:02 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:20:02 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:20:05 [INFO ]init.go:30: /api/v1/user/user_info/upload +2022/01/16 16:20:05 [INFO ]account.go:302: userInfo={OpenID: Nickname:枫 Gender:0 Province: Language:zh_CN Country: City: Avatar:https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoBbibF1ykzNbej9KZreT23p4O2MLFgNIt73BeIP6GnYOH3baeJvS30wKk866ibKuSL3prOpLJMC6Jg/132 UnionID: Watermark:{AppID:wx806c079463b5b56c Timestamp:1642321204}} +2022/01/16 16:20:05 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:20:54 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:21:06 [INFO ]init.go:30: /api/v1/user/open_member +2022/01/16 16:21:06 [INFO ]wx_pay.go:63: MchId: 1609877389 +2022/01/16 16:21:06 [INFO ]wx_pay.go:64: AppId: wx806c079463b5b56c +2022/01/16 16:21:06 [INFO ]wx_pay.go:65: MchSecret: DeovoMingHuiRengTianTang45675456 +2022/01/16 16:21:06 [INFO ]wx_pay.go:440: 签字符串1 : appid=wx806c079463b5b56c&attach=member_pay&body=创建订单&device_info=WEB&fee_type=CNY&mch_id=1609877389&nonce_str=4t4p3Bqd0P2oY4zIsP4IGIsRC70zgR9I¬ify_url=https://dev.switch.deovo.com:8004/api/v1/wxpay/notice&openid=ohuHh4tpfro8u_fUPMbHEWYx5svQ&out_trade_no=didln10s0000&profit_sharing=N&sign_type=MD5&spbill_create_ip=39.108.188.218&time_start=20220116162106&total_fee=4&trade_type=JSAPI&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 16:21:06 [ERROR]wx_pay.go:464: xml: wx806c079463b5b56c1609877389WEB4t4p3Bqd0P2oY4zIsP4IGIsRC70zgR9IA6A4F7BAAA85ADC1FBCA6EC3A3D18BEBMD5创建订单member_paydidln10s0000CNY439.108.188.21820220116162106https://dev.switch.deovo.com:8004/api/v1/wxpay/noticeJSAPIohuHh4tpfro8u_fUPMbHEWYx5svQN +2022/01/16 16:21:06 [INFO ]wx_pay.go:440: 签字符串1 : appId=wx806c079463b5b56c&nonceStr=4j2i5D5vEzDZsJxu&package=prepay_id=wx16162106859233ff5ca5291acb1b5a0000&signType=MD5&timeStamp=1642321266&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 16:22:55 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:23:07 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:23:15 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:23:23 [INFO ]init.go:30: /api/v1/user/open_member +2022/01/16 16:23:23 [INFO ]wx_pay.go:63: MchId: 1609877389 +2022/01/16 16:23:23 [INFO ]wx_pay.go:64: AppId: wx806c079463b5b56c +2022/01/16 16:23:23 [INFO ]wx_pay.go:65: MchSecret: DeovoMingHuiRengTianTang45675456 +2022/01/16 16:23:23 [INFO ]wx_pay.go:440: 签字符串1 : appid=wx806c079463b5b56c&attach=member_pay&body=创建订单&device_info=WEB&fee_type=CNY&mch_id=1609877389&nonce_str=3Qftg657g46XN59t62kaaqs5Mz52poHL¬ify_url=https://dev.switch.deovo.com:8004/api/v1/wxpay/notice&openid=ohuHh4tpfro8u_fUPMbHEWYx5svQ&out_trade_no=didm7n1c0000&profit_sharing=N&sign_type=MD5&spbill_create_ip=39.108.188.218&time_start=20220116162323&total_fee=8&trade_type=JSAPI&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 16:23:23 [ERROR]wx_pay.go:464: xml: wx806c079463b5b56c1609877389WEB3Qftg657g46XN59t62kaaqs5Mz52poHLE5F4A1C61F53C0965E6F9E1DB685587FMD5创建订单member_paydidm7n1c0000CNY839.108.188.21820220116162323https://dev.switch.deovo.com:8004/api/v1/wxpay/noticeJSAPIohuHh4tpfro8u_fUPMbHEWYx5svQN +2022/01/16 16:23:23 [INFO ]wx_pay.go:440: 签字符串1 : appId=wx806c079463b5b56c&nonceStr=l2GpwuLNzq6HeQSz&package=prepay_id=wx16162323563678392ca9ba60590a5b0000&signType=MD5&timeStamp=1642321403&key=DeovoMingHuiRengTianTang45675456 +2022/01/16 16:23:42 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:24:16 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:24:17 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:24:17 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:24:34 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:24:35 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:24:35 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:25:09 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:25:10 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:25:10 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:25:11 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:25:11 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:25:42 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:25:49 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:26:44 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:27:05 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:27:05 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:27:05 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:27:06 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:27:06 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:29:03 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:29:03 [INFO ]init.go:30: //api/v1/user/member_config +2022/01/16 16:29:10 [INFO ]init.go:30: /api/v1/user/member_config +2022/01/16 16:29:10 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:35:41 [INFO ]init.go:30: /api/v1/user/member_config +2022/01/16 16:35:41 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:35:50 [INFO ]init.go:30: /api/v1/user/member_config +2022/01/16 16:35:50 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:36:04 [INFO ]init.go:30: /api/v1/user/member_config +2022/01/16 16:36:04 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:37:15 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:37:26 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:37:26 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:37:26 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:37:28 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:37:28 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:37:28 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:37:28 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:37:30 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:37:30 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:37:31 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:37:31 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:37:31 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:37:31 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:37:33 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:37:33 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:37:33 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:37:46 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:37:47 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:37:47 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:37:50 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:37:52 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:37:53 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:37:54 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:38:10 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:40:09 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:40:16 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:40:17 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:40:19 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:40:19 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:40:44 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:41:36 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:41:37 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:41:37 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:41:37 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:41:40 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:41:40 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:41:47 [INFO ]base_init_db.go:38: DB init success +2022/01/16 16:41:47 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:41:47 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:41:48 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:41:48 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:41:48 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:41:49 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:41:50 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:41:51 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:41:52 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:41:57 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:41:58 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:42:16 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:42:16 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:42:16 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:42:19 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:42:21 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:42:23 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:43:10 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:43:11 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:43:12 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:43:12 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:43:13 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:43:14 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:43:15 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:43:20 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:43:20 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:43:20 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:43:20 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:43:23 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:43:23 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:43:25 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:43:32 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:43:35 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:43:40 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:43:42 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:44:18 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:44:23 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:44:27 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:44:42 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:44:43 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:44:43 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:44:44 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:44:46 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:44:46 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:44:52 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:45:00 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:46:13 [INFO ]base_init_db.go:38: DB init success +2022/01/16 16:47:04 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:22 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:47:23 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:47:23 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:47:24 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:47:26 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:47:26 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:27 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:28 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:47:28 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:47:28 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:47:29 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:47:29 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:47:29 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:47:30 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:47:30 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:47:31 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:47:34 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:47:36 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:36 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:37 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:47:38 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:39 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:39 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:47:40 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:41 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:44 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:45 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:47:45 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:49 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:51 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:47:54 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:47:59 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:48:02 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:48:08 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:48:08 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:48:08 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:48:15 [INFO ]init.go:30: /api/v1/game_card/type/list +2022/01/16 16:48:15 [INFO ]init.go:30: /api/v1/game_card/banner +2022/01/16 16:48:15 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:49:02 [INFO ]init.go:30: /api/v1/game_card/info +2022/01/16 16:49:02 [INFO ]init.go:30: /api/v1/game_card/game_type +2022/01/16 16:49:03 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:49:05 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:49:06 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:49:12 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:49:56 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:50:02 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:50:04 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:50:04 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:50:06 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:50:41 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:51:35 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:51:37 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:51:38 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:51:38 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:39 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:50 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:51:50 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:51 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:52 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:53 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:53 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:56 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:51:56 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:57 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:58 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:51:58 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:51:59 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:00 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:52:00 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:01 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:02 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:03 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:52:03 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:04 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:05 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:52:05 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:06 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:07 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:52:07 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:08 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:09 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:52:09 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:52:10 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:53:34 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:53:36 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:53:37 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:53:37 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:53:38 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:53:39 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:53:40 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:53:41 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:53:41 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:53:42 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:53:43 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:53:43 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:53:44 [INFO ]init.go:30: /api/v1/shopping_cart/add +2022/01/16 16:53:45 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:54:45 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:54:45 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:55:02 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:55:03 [INFO ]init.go:30: /api/v1/game_card/list +2022/01/16 16:55:13 [INFO ]init.go:30: /api/v1/store/list +2022/01/16 16:55:13 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:55:14 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:55:15 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:55:15 [INFO ]init.go:30: /api/v1/shopping_cart/list +2022/01/16 16:55:26 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:55:28 [INFO ]init.go:30: /api/v1/user/data +2022/01/16 16:55:28 [INFO ]init.go:30: /api/v1/activity/redeem_code/user_redeem_code/list +2022/01/16 16:55:28 [INFO ]init.go:30: /api/v1/game_card/list diff --git a/router/router_app.go b/router/router_app.go index 9865a50..a618ead 100644 --- a/router/router_app.go +++ b/router/router_app.go @@ -79,6 +79,8 @@ func ConfigAppRouter(r gin.IRouter) { user.POST("refund_deposit", controller.RefundDeposit) // 押金 user.POST("refund_deposit_record", controller.UserDepositRefundRecordList) // 押金记录 + user.POST("member_config", controller.MemberConfigList) // 开通会员配置 + user.POST("common_problem/list", controller.CommonProblemList) // 常见问题列表 //user.POST("service/wechat_id", controller.GetCustomerServiceWechatId) // 获取客服微信号 user.POST("invite_applet_code", controller.UserInviteAppletQRCode) // 小程序分享二维码 From 688a10f782a6376a6fb0d91a4f17481b56c96819 Mon Sep 17 00:00:00 2001 From: li Date: Sun, 16 Jan 2022 18:47:48 +0800 Subject: [PATCH 04/11] fix: --- controller/order.go | 16 ++++++++-------- model/order.go | 29 ++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/controller/order.go b/controller/order.go index 850f43d..08dc661 100644 --- a/controller/order.go +++ b/controller/order.go @@ -242,7 +242,7 @@ func OrderCreate(c *gin.Context) { orderCreateLocker.Lock() defer orderCreateLocker.Unlock() - unreturnedOrders, err := model.IsHaveUnreturnedOrders(uc.Uid) + unreturnedOrders, err := model.IsHaveUnreturnedOrders(uc.Uid) // TODO if err != nil { logger.Error("err:", err) RespJson(c, status.InternalServerError, nil) @@ -366,13 +366,13 @@ func OrderCreate(c *gin.Context) { // RespJson(c, status.InternalServerError, nil) // return //} - - orderId := fmt.Sprintf("%d", order.ID) - //orderId = "100000" - fmt.Println("orderId", orderId) - fmt.Println("Price", req.Price) - fmt.Println("WxOpenID", user.WxOpenID) - fmt.Println("WxPayRentCard", wxpay.WxPayRentCard) + // + //orderId := fmt.Sprintf("%d", order.ID) + ////orderId = "100000" + //fmt.Println("orderId", orderId) + //fmt.Println("Price", req.Price) + //fmt.Println("WxOpenID", user.WxOpenID) + //fmt.Println("WxPayRentCard", wxpay.WxPayRentCard) webPay, err := wxpay.WebPay(order.OrderSn, req.Price, user.WxOpenID, "N", wxpay.WxPayRentCard) if err != nil { logger.Error(errors.New("WebPay err")) diff --git a/model/order.go b/model/order.go index 086593b..73bfa39 100644 --- a/model/order.go +++ b/model/order.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "github.com/codinl/go-logger" + "github.com/jinzhu/gorm" "math/rand" "qiniupkg.com/x/log.v7" "time" @@ -69,7 +70,7 @@ type OrderCard struct { 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 - Status uint8 `json:"status" gorm:"index"` + Status uint8 `json:"status" gorm:"index"` // 1-待领取 2-游玩中 3-已归还 4-未领取 } func (*Order) TableName() string { @@ -448,3 +449,29 @@ func UnPayOrderSetCancel(uid uint32) { } } + +func (m *Order) CreateByCardInfoList(cardInfos []CardInfo, gdb *gorm.DB) error { + err := gdb.Create(m).Error + if err != nil { + log.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 +} From 0a4c7f2c4b8aff0314e9e7b0f7c97fdfd132f923 Mon Sep 17 00:00:00 2001 From: li Date: Wed, 26 Jan 2022 16:02:21 +0800 Subject: [PATCH 05/11] fix: --- controller/game_card.go | 66 +- controller/order.go | 292 +++++-- controller/user.go | 84 +- lib/status/status.go | 29 +- model/autogenerated_order.go | 1551 ++++++++++++++++++++++++++++++++ model/autogenerated_user.go | 1602 ++++++++++++++++++++++++++++++++++ model/base_init_db.go | 2 +- model/model_test.go | 3 + model/order.go | 624 +++++++++---- model/user.go | 88 ++ router/router_app.go | 13 +- 11 files changed, 4056 insertions(+), 298 deletions(-) diff --git a/controller/game_card.go b/controller/game_card.go index 4f856fd..87aaf18 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -251,13 +251,49 @@ func PushWXPayNotice(c *gin.Context) { if notify.Attach == wxpay.WxPayRentCard { logger.Info("租借游戏卡 支付成功:") - - err = model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).GetUpdater(). - SetPayStatus(model.PayStatusPaid).SetPayTime(time.Now()).Update() + var order model.Order + err := model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).One(&order) if err != nil { logger.Error("err:", err) + return } + begin := model.DB.Begin() + err = model.NewOrderQuerySet(begin).IDEq(order.ID).GetUpdater(). + SetPayStatus(model.PayStatusPaid).SetPayTime(time.Now()).Update() + if err != nil { + begin.Rollback() + logger.Error("err:", err) + return + } + //model.OrderCard{} + _, err = model.NewOrderCardQuerySet(begin).OrderIdEq(order.ID).GetUpdater(). + SetPayStatus(model.PayStatusPaid).UpdateNum() + if err != nil { + begin.Rollback() + logger.Error("err:", err) + return + } + err = order.InventoryReduction(begin) + if err != nil { + begin.Rollback() + logger.Error("err:", err) + return + } + err = begin.Commit().Error + if err != nil { + begin.Rollback() + logger.Error("err:", err) + return + } + + count, err := model.NewOrderQuerySet(begin).IDEq(order.ID).Count() + if err != nil { + logger.Error("err:", err) + return + } + + go model.OrderCardUserRentCard(uint32(order.Uid), uint32(count), nil) } else if notify.Attach == wxpay.WxPayMember { logger.Info("开通会员 支付成功:") @@ -364,17 +400,29 @@ func PushWXPayNotice(c *gin.Context) { } else if notify.Attach == wxpay.WxPayDeposit { record := &model.UserOpenMemberRecord{OpenNo: notify.OutTradeNo} err := record.GetByOpenNo() - if err != nil { - logger.Error("err:", err) - } - - configInfo, err := model.PayConfigInfo() if err != nil { logger.Error("err:", err) return } - num, err := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetDeposit(configInfo.DepositFee).UpdateNum() + //configInfo, err := model.PayConfigInfo() + //if err != nil { + // logger.Error("err:", err) + // return + //} + user := model.GetUserByUid(record.Uid) + if user == nil { + logger.Error("user nil") + return + } + + memberConfig, err := model.GetMemberConfig(user.MemberLevel) + if err != nil { + logger.Error("err:",err) + return + } + + num, err := model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetDeposit(memberConfig.MemberDeposit).UpdateNum() if err != nil { logger.Error("update deposit err:", err) } diff --git a/controller/order.go b/controller/order.go index 08dc661..f31d982 100644 --- a/controller/order.go +++ b/controller/order.go @@ -55,14 +55,9 @@ import ( // } //} -func OrderList(c *gin.Context) { - req := struct { - Page int `json:"page"` - PageSize int `json:"page_size"` - }{ - Page: 1, - PageSize: 10, - } +func RentCardOrderList(c *gin.Context) { + fmt.Println("RentCardOrderList") + req := model.OrderListReq{} if c.ShouldBindJSON(&req) != nil { logger.Error("ShouldBindJSON err") RespJson(c, status.BadRequest, nil) @@ -74,7 +69,10 @@ func OrderList(c *gin.Context) { RespJson(c, status.Unauthorized, nil) return } - orderList, totalPage, err := model.GetOrderList(uint64(uc.Uid), req.Page, req.PageSize) // TODO + req.Uid = uc.Uid + + + orderCardList, totalPage, err := req.GetOrderCardList() // TODO if err != nil { logger.Error("err:", err) RespJson(c, status.InternalServerError, nil) @@ -82,9 +80,9 @@ func OrderList(c *gin.Context) { } ret := map[string]interface{}{ - "order_list": orderList, - "cur_page": req.Page, - "total_page": totalPage, + "order_card_list": orderCardList, + "cur_page": req.Page, + "total_page": totalPage, } RespOK(c, ret) return @@ -92,7 +90,9 @@ func OrderList(c *gin.Context) { func OrderInfo(c *gin.Context) { req := struct { - OrderId uint32 `json:"order_id"` + OrderId uint32 `json:"order_id"` + GameCardId uint64 `json:"game_card_id"` // 游戏id + GameCardGoodsId uint64 `json:"game_card_goods_id" ` // 游戏卡id }{} if c.ShouldBindJSON(&req) != nil { logger.Error("ShouldBindJSON err") @@ -101,14 +101,18 @@ func OrderInfo(c *gin.Context) { } order := model.Order{} order.ID = req.OrderId + order.GameCardId = req.GameCardId info, err := order.Info() if err != nil { logger.Error("err:", err) RespJson(c, status.InternalServerError, nil) return } - - RespOK(c, info) + var orderCard model.OrderCard + if len(info) > 0 { + orderCard = info[0] + } + RespOK(c, orderCard) return } @@ -155,15 +159,15 @@ func WXPaySuccess(c *gin.Context) { var orderCreateLocker sync.Mutex // 创建订单 -func OrderCreate(c *gin.Context) { +func RentCardOrderCreate(c *gin.Context) { //type Goods struct { // Price uint32 `json:"price"` //} req := struct { GameCardList []model.CardInfo `json:"game_card_list"` - StoreId uint64 `json:"store_id"` - UserAddressId uint64 `json:"user_address_id"` + StoreId uint32 `json:"store_id"` + UserAddressId uint32 `json:"user_address_id"` Price uint32 `json:"price"` DeliveryType uint8 `json:"delivery_type"` // 取货方式 ExpressFee uint32 `json:"express_fee"` @@ -217,38 +221,52 @@ func OrderCreate(c *gin.Context) { RespJson(c, status.NotMember, nil) return } - if user.Deposit == 0 { - logger.Error(errors.New("user deposit 0")) - RespJson(c, status.OrderUnpaidDeposit, nil) - return - } + memberConfig, err := model.GetMemberConfig(user.MemberLevel) if err != nil { logger.Error("GetMemberConfig err:", err) RespJson(c, status.InternalServerError, nil) return } + if user.Deposit != memberConfig.MemberDeposit { + logger.Error(errors.New("user deposit 0")) + RespJson(c, status.OrderUnpaidDeposit, nil) + return + } + cardCount := uint32(0) for _, v := range req.GameCardList { cardCount += v.Count } - if memberConfig.MemberLever < cardCount { + fmt.Println("cardCount:", cardCount) + rentCard := model.GetUserRentCard(uc.Uid) + if rentCard == nil { + //logger.Error(errors.New("GetUserByUid err")) + //RespJson(c, status.InternalServerError, nil) + //return + fmt.Println("CardMax", memberConfig.CardMax) + rentCard = &model.UserRentCard{LevelRentCount: memberConfig.CardMax, CanRentCount: memberConfig.CardMax} + } + fmt.Println("rentCard", rentCard.CanRentCount) + if cardCount > rentCard.CanRentCount { logger.Error("GetMemberConfig err:", err) - RespJson(c, status.OrderMemberLevelLow, nil) + RespJson(c, status.OrderOutRentCount, nil) return } - model.UnPayOrderSetCancel(user.Uid) + // 订单成功后 扣减库存 + //model.UnPayOrderSetCancel(user.Uid) orderCreateLocker.Lock() defer orderCreateLocker.Unlock() - unreturnedOrders, err := model.IsHaveUnreturnedOrders(uc.Uid) // TODO + isRentCount, err := rentCard.IsHaveUnreturnedOrders(cardCount) + //unreturnedOrders, err := model.IsHaveUnreturnedOrders(uc.Uid) // TODO if err != nil { logger.Error("err:", err) RespJson(c, status.InternalServerError, nil) return } - if unreturnedOrders { + if isRentCount { logger.Error("unreturnedOrders") RespJson(c, status.HaveUnreturnedOrders, nil) return @@ -265,9 +283,9 @@ func OrderCreate(c *gin.Context) { RespJson(c, status.GoodsSoldOut, nil) return } - if req.DeliveryType == 1 { - } + //if req.DeliveryType == 1 { + //} reqJson, _ := json.Marshal(&req) fmt.Println("reqJson:", string(reqJson)) @@ -277,8 +295,8 @@ func OrderCreate(c *gin.Context) { order := model.Order{ Uid: uint64(uc.Uid), GameCardId: 0, - StoreId: req.StoreId, - UserAddressId: req.UserAddressId, + StoreId: uint64(req.StoreId), + UserAddressId: uint64(req.UserAddressId), DeliveryType: req.DeliveryType, Count: 1, PickupCode: model.GetPickupCode(), // TODO 取货码 @@ -290,8 +308,7 @@ func OrderCreate(c *gin.Context) { Postage: req.ExpressFee, } - //tx := model.TransactionBegin() - ////TODO 以支付成功作为订单下单成功的依据,不是订单创建 已修改 + //TODO 以支付成功作为订单下单成功的依据,不是订单创建 已修改 //var gameCardGoodsStock model.GameCardGoodsStock //err = model.NewGameCardGoodsStockQuerySet(model.DB).StoreIdEq(req.StoreId).GameCardIdEq(req.GameCardId).One(&gameCardGoodsStock) //if err != nil { @@ -304,52 +321,86 @@ func OrderCreate(c *gin.Context) { // RespJson(c, status.OrderStockOut, nil) // return //} - // - //fmt.Println("PayPrice:", order.PayPrice) - //if req.Price == 0 { - // order.PayStatus = model.PayStatusPaid - // fmt.Println("orderId:", order.PayStatus) - // err = order.OrderCreate() - // if err != nil { - // logger.Error("err:", err) - // RespJson(c, status.InternalServerError, nil) - // return - // } - // - // // 减库存 - // sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId) - // fmt.Println("sql:", sql) - // err = model.DB.Exec(sql).Error - // if err != nil { - // logger.Errorf("err:", err) - // RespJson(c, status.InternalServerError, nil) - // return - // } - // - // ret := map[string]interface{}{ - // "web_pay": "", - // "order_id": order.ID, - // } - // RespOK(c, ret) - // return - //} - // - //begin := model.DB.Begin() - ////err = order.OrderCreate() - ////if err != nil { - //// logger.Error("err:", err) - //// RespJson(c, status.InternalServerError, nil) - //// return - ////} - //err = order.Create(begin) + stockEnough, err := model.IsCardGoodsStockEnough(req.GameCardList, req.StoreId) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + if stockEnough { + logger.Error("order stock out ") + RespJson(c, status.OrderStockOut, nil) + return + } + + fmt.Println("PayPrice:", order.PayPrice) + if req.Price == 0 { + tx := model.TransactionBegin() + order.PayStatus = model.PayStatusPaid + fmt.Println("orderId:", order.PayStatus) + err = order.OrderCreate(tx) + if err != nil { + tx.Rollback() + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + // 减库存 + //sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId) + //fmt.Println("sql:", sql) + //err = model.DB.Exec(sql).Error + //if err != nil { + // logger.Errorf("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + //} + err := model.GameCardGoodsInventoryReduction(req.GameCardList, req.StoreId, tx) + if err != nil { + tx.Rollback() + logger.Error("inventory reduction err:%s", err.Error()) + RespJson(c, status.InternalServerError, nil) + return + } + err = order.CreatOrderCard(req.GameCardList, req.StoreId, tx) + if err != nil { + tx.Rollback() + logger.Error("inventory reduction err:%s", err.Error()) + RespJson(c, status.InternalServerError, nil) + return + } + err = tx.Commit().Error + if err != nil { + tx.Rollback() + logger.Error("commit err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + go model.OrderCardUserRentCard(uc.Uid, cardCount, memberConfig) + ret := map[string]interface{}{ + "web_pay": "", + "order_id": order.ID, + } + RespOK(c, ret) + return + } + + //err = order.OrderCreate() //if err != nil { - // begin.Rollback() // logger.Error("err:", err) // RespJson(c, status.InternalServerError, nil) // return //} - // - //// 减库存 + begin := model.DB.Begin() + err = order.Create(begin) + if err != nil { + begin.Rollback() + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + // 减库存 //sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock-1 WHERE store_id=%d AND game_card_id=%d;", req.StoreId, req.GameCardId) //fmt.Println("sql:", sql) //err = begin.Exec(sql).Error @@ -359,14 +410,29 @@ func OrderCreate(c *gin.Context) { // RespJson(c, status.InternalServerError, nil) // return //} - //err = begin.Commit().Error + // TODO 订单回调成功减库存 + //err = model.GameCardGoodsInventoryReduction(req.GameCardList, req.StoreId, begin) //if err != nil { // begin.Rollback() - // logger.Errorf("err:", err) + // logger.Error("inventory reduction err:%s", err.Error()) // RespJson(c, status.InternalServerError, nil) // return //} - // + err = order.CreatOrderCard(req.GameCardList, req.StoreId, begin) + if err != nil { + begin.Rollback() + logger.Error("inventory reduction err:%s", err.Error()) + RespJson(c, status.InternalServerError, nil) + return + } + err = begin.Commit().Error + if err != nil { + begin.Rollback() + logger.Errorf("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + //orderId := fmt.Sprintf("%d", order.ID) ////orderId = "100000" //fmt.Println("orderId", orderId) @@ -712,14 +778,14 @@ func OrderRevert(c *gin.Context) { } //order := model.Order{} //order.ID = req.OrderId - info, err := order.Revert() + err := order.Revert() if err != nil { logger.Error("err:", err) RespJson(c, status.OrderCompleted, nil) return } - RespOK(c, info) + RespOK(c, nil) return } @@ -732,22 +798,55 @@ func OrderRevertCancel(c *gin.Context) { } //order := model.Order{} //order.ID = req.OrderId - info, err := order.RevertCancel() + _, err := order.RevertCancel() if err != nil { logger.Error("err:", err) - RespJson(c, status.OrderCompleted, nil) + RespJson(c, status.OrderStatusNotReturning, nil) return } - - RespOK(c, info) + //if isRecede { + // outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID) + // if err != nil { + // logger.Error("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + // } + // + // orderSn := model.GetOrderSn() + // err = model.UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert() + // if err != nil { + // logger.Error(errors.New("WebPay err")) + // RespJson(c, status.InternalServerError, nil) + // return + // } + // + // orderRefund := wxpay.OrderRefund{ + // OutTradeNo: outTradeNo, + // OutRefundNo: orderSn, + // NotifyUrl: "", + // Amount: wxpay.OrderRefundAmount{ + // Refund: order.PayPrice, + // Total: order.PayPrice, + // Currency: "CNY", + // }, + // } + // //bytes, _ := json.Marshal(orderRefund) + // //fmt.Println("订单取消:", string(bytes)) + // //err = wxpay.WxPayOrderRefund(orderRefund) + // err = wxpay.TransactionOrderRefund(orderRefund) + // if err != nil { + // logger.Error("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + // } + //} + RespOK(c, nil) return } func OrderCancel(c *gin.Context) { - req := struct { - OrderId uint32 `json:"order_id"` - }{} - if c.ShouldBindJSON(&req) != nil { + order := model.Order{} + if c.ShouldBindJSON(&order) != nil { logger.Error("ShouldBindJSON err") RespJson(c, status.BadRequest, nil) return @@ -758,10 +857,10 @@ func OrderCancel(c *gin.Context) { // RespJson(c, status.Unauthorized, nil) // return //} - fmt.Println("OrderId:", req.OrderId) - order := &model.Order{} - order.ID = req.OrderId - err := order.Cancel() + fmt.Println("OrderId:", order.ID) + //order := &model.Order{} + //order.ID = req.OrderId + isRecede, err := order.Cancel() if err != nil { logger.Error("err:", err) RespJson(c, status.OrderDelivered, nil) @@ -769,7 +868,14 @@ func OrderCancel(c *gin.Context) { } fmt.Println("order:", order) - if order.DeliveryType == 2 { + if isRecede { + err = model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update() + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID) if err != nil { logger.Error("err:", err) diff --git a/controller/user.go b/controller/user.go index fdf541c..babcbc8 100644 --- a/controller/user.go +++ b/controller/user.go @@ -260,7 +260,84 @@ func OpenMember(c *gin.Context) { //} //orderSn := utils.GetSerialNo32HEXString() orderSn := model.GetOrderSn() - err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn,MemberLevel: req.MemberLevel}.Insert() + err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: req.MemberLevel}.Insert() + if err != nil { + logger.Error(errors.New("WebPay err")) + RespJson(c, status.InternalServerError, nil) + return + } + + webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayMember) + if err != nil { + logger.Error(errors.New("WebPay err")) + RespJson(c, status.InternalServerError, nil) + return + } + + RespOK(c, webPay) +} + +func UpgradeMember(c *gin.Context) { + req := struct { + MemberLevel uint32 `json:"member_level"` // 昵称 + }{} + if c.ShouldBindJSON(&req) != nil { + logger.Error("parameter err") + RespJson(c, status.BadRequest, nil) + return + } + uc := auth.GetCurrentUser(c) + if uc == nil { + RespJson(c, status.Unauthorized, nil) + return + } + + user := model.GetUserByUid(uc.Uid) + if user.MemberLevel != 2 && user.MemberLevel != 4 { + logger.Error("MemberLevel err:") + RespJson(c, status.InternalServerError, nil) + return + } + //configInfo, err := model.PayConfigInfo() + //if err != nil { + // logger.Error("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + //} + memberConfig, err := model.GetMemberConfig(req.MemberLevel) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + //totalFee := uint32(MemberFee + DepositFee) + ////totalFee = uint32(3) // TODO 测试 + //if user.Deposit == 300 { + // totalFee = MemberFee + // // //totalFee = uint32(1) // TODO 测试 + //} + + fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit) + + totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit + if user.Deposit == memberConfig.MemberDeposit { + totalFee = memberConfig.MemberFee + } + if totalFee == 0 { + logger.Error(errors.New("totalFee is 0")) + RespJson(c, status.InternalServerError, nil) + return + } + //webPay, err := wxpay.WebPay(uid, totalFee, user.WxOpenID, "N", wxpay.WxPayMember) + //if err != nil { + // logger.Error(errors.New("WebPay err")) + // RespJson(c, status.InternalServerError, nil) + // return + //} + //orderSn := utils.GetSerialNo32HEXString() + orderSn := model.GetOrderSn() + err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: req.MemberLevel}.Insert() if err != nil { logger.Error(errors.New("WebPay err")) RespJson(c, status.InternalServerError, nil) @@ -303,7 +380,7 @@ func PayDeposit(c *gin.Context) { //} memberConfig, err := model.GetMemberConfig(level) if err != nil { - logger.Error("GetMemberConfig err:",err) + logger.Error("GetMemberConfig err:", err) RespJson(c, status.InternalServerError, nil) return } @@ -430,3 +507,6 @@ func MemberConfigList(c *gin.Context) { // 会员列表 开通会员 下订单 借卡 还卡 // 会员升级 +// 299会员 升级 +// 订单 会员导数据 +// 退押金记录 diff --git a/lib/status/status.go b/lib/status/status.go index f0becb7..e905a76 100644 --- a/lib/status/status.go +++ b/lib/status/status.go @@ -82,14 +82,16 @@ const ( AwardOffShelves = 500407 //奖品下架 AwardExchangeOut = 500408 //奖品已兑完 - NotMember = 500501 //非会员 - HadReceiveReward = 500502 // 已经领取过奖励 - OrderDelivered = 500503 // 订单已发货 - OrderCompleted = 500504 // 订单已完成 - OrderStockOut = 500505 // 没有库存 - OrderUnpaidDeposit = 500506 // 未交押金 - RefundDepositSubmitted = 500507 // 已提交押金退款 - OrderMemberLevelLow = 500508 // 会员等级低 + NotMember = 500501 //非会员 + HadReceiveReward = 500502 // 已经领取过奖励 + OrderDelivered = 500503 // 订单已发货 + OrderCompleted = 500504 // 订单已完成 + OrderStockOut = 500505 // 没有库存 + OrderUnpaidDeposit = 500506 // 未交押金 + RefundDepositSubmitted = 500507 // 已提交押金退款 + OrderMemberLevelLow = 500508 // 会员等级低 + OrderOutRentCount = 500509 // 会员超过可借卡数 + OrderStatusNotReturning = 500510 // 订单已完成 ToastErr = 600 // 报错 ) @@ -129,8 +131,9 @@ var statusDesc = map[int]string{ ExchangeStepLimit: "今日兑换步数超出上限", - NotExists: "请求的资源不存在", - IsExists: "资源已经存在", + NotExists: "请求的资源不存在", + IsExists: "资源已经存在", + OrderStatusNotReturning: "该卡状态不能取消", InternalServerError: "服务器开小差了,请稍后再试", SmsFail: "短信发送失败", @@ -192,9 +195,9 @@ var statusMsg = map[int]string{ CheckInAlready: "今日已签到", OpenChestTimeNot: "宝箱时间未到", - NotExists: "请求的资源不存在", - IsExists: "资源已经存在", - + NotExists: "请求的资源不存在", + IsExists: "资源已经存在", + OrderOutRentCount: "借卡数量超了", InternalServerError: "服务器开小差了,请稍后再试", SmsFail: "短信发送失败", diff --git a/model/autogenerated_order.go b/model/autogenerated_order.go index 2e96fb1..87b57a5 100644 --- a/model/autogenerated_order.go +++ b/model/autogenerated_order.go @@ -524,6 +524,1557 @@ func NewExpressCompanyUpdater(db *gorm.DB) ExpressCompanyUpdater { // ===== END of ExpressCompany modifiers +// ===== BEGIN of query set OrderCardQuerySet + +// OrderCardQuerySet is an queryset type for OrderCard +type OrderCardQuerySet struct { + db *gorm.DB +} + +// NewOrderCardQuerySet constructs new OrderCardQuerySet +func NewOrderCardQuerySet(db *gorm.DB) OrderCardQuerySet { + return OrderCardQuerySet{ + db: db.Model(&OrderCard{}), + } +} + +func (qs OrderCardQuerySet) w(db *gorm.DB) OrderCardQuerySet { + return NewOrderCardQuerySet(db) +} + +// Create is an autogenerated method +// nolint: dupl +func (o *OrderCard) Create(db *gorm.DB) error { + return db.Create(o).Error +} + +// Delete is an autogenerated method +// nolint: dupl +func (o *OrderCard) Delete(db *gorm.DB) error { + return db.Delete(o).Error +} + +// All is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) All(ret *[]OrderCard) error { + return qs.db.Find(ret).Error +} + +// CardStatusEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CardStatusEq(cardStatus uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("card_status = ?", cardStatus)) +} + +// CardStatusGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CardStatusGt(cardStatus uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("card_status > ?", cardStatus)) +} + +// CardStatusGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CardStatusGte(cardStatus uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("card_status >= ?", cardStatus)) +} + +// CardStatusIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CardStatusIn(cardStatus ...uint32) OrderCardQuerySet { + if len(cardStatus) == 0 { + qs.db.AddError(errors.New("must at least pass one cardStatus in CardStatusIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("card_status IN (?)", cardStatus)) +} + +// CardStatusLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CardStatusLt(cardStatus uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("card_status < ?", cardStatus)) +} + +// CardStatusLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CardStatusLte(cardStatus uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("card_status <= ?", cardStatus)) +} + +// CardStatusNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CardStatusNe(cardStatus uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("card_status != ?", cardStatus)) +} + +// CardStatusNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CardStatusNotIn(cardStatus ...uint32) OrderCardQuerySet { + if len(cardStatus) == 0 { + qs.db.AddError(errors.New("must at least pass one cardStatus in CardStatusNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("card_status NOT IN (?)", cardStatus)) +} + +// Count is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) Count() (int, error) { + var count int + err := qs.db.Count(&count).Error + return count, err +} + +// CreatedAtEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CreatedAtEq(createdAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("created_at = ?", createdAt)) +} + +// CreatedAtGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CreatedAtGt(createdAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("created_at > ?", createdAt)) +} + +// CreatedAtGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CreatedAtGte(createdAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("created_at >= ?", createdAt)) +} + +// CreatedAtLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CreatedAtLt(createdAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("created_at < ?", createdAt)) +} + +// CreatedAtLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CreatedAtLte(createdAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("created_at <= ?", createdAt)) +} + +// CreatedAtNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) CreatedAtNe(createdAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("created_at != ?", createdAt)) +} + +// Delete is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) Delete() error { + return qs.db.Delete(OrderCard{}).Error +} + +// DeleteNum is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeleteNum() (int64, error) { + db := qs.db.Delete(OrderCard{}) + return db.RowsAffected, db.Error +} + +// DeleteNumUnscoped is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeleteNumUnscoped() (int64, error) { + db := qs.db.Unscoped().Delete(OrderCard{}) + return db.RowsAffected, db.Error +} + +// DeletedAtEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeletedAtEq(deletedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("deleted_at = ?", deletedAt)) +} + +// DeletedAtGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeletedAtGt(deletedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("deleted_at > ?", deletedAt)) +} + +// DeletedAtGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeletedAtGte(deletedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("deleted_at >= ?", deletedAt)) +} + +// DeletedAtIsNotNull is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeletedAtIsNotNull() OrderCardQuerySet { + return qs.w(qs.db.Where("deleted_at IS NOT NULL")) +} + +// DeletedAtIsNull is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeletedAtIsNull() OrderCardQuerySet { + return qs.w(qs.db.Where("deleted_at IS NULL")) +} + +// DeletedAtLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeletedAtLt(deletedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("deleted_at < ?", deletedAt)) +} + +// DeletedAtLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeletedAtLte(deletedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("deleted_at <= ?", deletedAt)) +} + +// DeletedAtNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeletedAtNe(deletedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("deleted_at != ?", deletedAt)) +} + +// DeliveryTimeEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTimeEq(deliveryTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_time = ?", deliveryTime)) +} + +// DeliveryTimeGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTimeGt(deliveryTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_time > ?", deliveryTime)) +} + +// DeliveryTimeGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTimeGte(deliveryTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_time >= ?", deliveryTime)) +} + +// DeliveryTimeLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTimeLt(deliveryTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_time < ?", deliveryTime)) +} + +// DeliveryTimeLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTimeLte(deliveryTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_time <= ?", deliveryTime)) +} + +// DeliveryTimeNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTimeNe(deliveryTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_time != ?", deliveryTime)) +} + +// DeliveryTypeEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTypeEq(deliveryType uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_type = ?", deliveryType)) +} + +// DeliveryTypeGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTypeGt(deliveryType uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_type > ?", deliveryType)) +} + +// DeliveryTypeGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTypeGte(deliveryType uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_type >= ?", deliveryType)) +} + +// DeliveryTypeIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTypeIn(deliveryType ...uint8) OrderCardQuerySet { + if len(deliveryType) == 0 { + qs.db.AddError(errors.New("must at least pass one deliveryType in DeliveryTypeIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("delivery_type IN (?)", deliveryType)) +} + +// DeliveryTypeLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTypeLt(deliveryType uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_type < ?", deliveryType)) +} + +// DeliveryTypeLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTypeLte(deliveryType uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_type <= ?", deliveryType)) +} + +// DeliveryTypeNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTypeNe(deliveryType uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("delivery_type != ?", deliveryType)) +} + +// DeliveryTypeNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) DeliveryTypeNotIn(deliveryType ...uint8) OrderCardQuerySet { + if len(deliveryType) == 0 { + qs.db.AddError(errors.New("must at least pass one deliveryType in DeliveryTypeNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("delivery_type NOT IN (?)", deliveryType)) +} + +// GameCardGoodsIdEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardGoodsIdEq(gameCardGoodsId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_goods_id = ?", gameCardGoodsId)) +} + +// GameCardGoodsIdGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardGoodsIdGt(gameCardGoodsId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_goods_id > ?", gameCardGoodsId)) +} + +// GameCardGoodsIdGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardGoodsIdGte(gameCardGoodsId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_goods_id >= ?", gameCardGoodsId)) +} + +// GameCardGoodsIdIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardGoodsIdIn(gameCardGoodsId ...uint32) OrderCardQuerySet { + if len(gameCardGoodsId) == 0 { + qs.db.AddError(errors.New("must at least pass one gameCardGoodsId in GameCardGoodsIdIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("game_card_goods_id IN (?)", gameCardGoodsId)) +} + +// GameCardGoodsIdLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardGoodsIdLt(gameCardGoodsId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_goods_id < ?", gameCardGoodsId)) +} + +// GameCardGoodsIdLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardGoodsIdLte(gameCardGoodsId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_goods_id <= ?", gameCardGoodsId)) +} + +// GameCardGoodsIdNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardGoodsIdNe(gameCardGoodsId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_goods_id != ?", gameCardGoodsId)) +} + +// GameCardGoodsIdNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardGoodsIdNotIn(gameCardGoodsId ...uint32) OrderCardQuerySet { + if len(gameCardGoodsId) == 0 { + qs.db.AddError(errors.New("must at least pass one gameCardGoodsId in GameCardGoodsIdNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("game_card_goods_id NOT IN (?)", gameCardGoodsId)) +} + +// GameCardIdEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardIdEq(gameCardId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_id = ?", gameCardId)) +} + +// GameCardIdGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardIdGt(gameCardId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_id > ?", gameCardId)) +} + +// GameCardIdGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardIdGte(gameCardId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_id >= ?", gameCardId)) +} + +// GameCardIdIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardIdIn(gameCardId ...uint32) OrderCardQuerySet { + if len(gameCardId) == 0 { + qs.db.AddError(errors.New("must at least pass one gameCardId in GameCardIdIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("game_card_id IN (?)", gameCardId)) +} + +// GameCardIdLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardIdLt(gameCardId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_id < ?", gameCardId)) +} + +// GameCardIdLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardIdLte(gameCardId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_id <= ?", gameCardId)) +} + +// GameCardIdNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardIdNe(gameCardId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("game_card_id != ?", gameCardId)) +} + +// GameCardIdNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GameCardIdNotIn(gameCardId ...uint32) OrderCardQuerySet { + if len(gameCardId) == 0 { + qs.db.AddError(errors.New("must at least pass one gameCardId in GameCardIdNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("game_card_id NOT IN (?)", gameCardId)) +} + +// GetDB is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GetDB() *gorm.DB { + return qs.db +} + +// GetUpdater is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) GetUpdater() OrderCardUpdater { + return NewOrderCardUpdater(qs.db) +} + +// IDEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IDEq(ID uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("id = ?", ID)) +} + +// IDGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IDGt(ID uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("id > ?", ID)) +} + +// IDGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IDGte(ID uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("id >= ?", ID)) +} + +// IDIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IDIn(ID ...uint32) OrderCardQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id IN (?)", ID)) +} + +// IDLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IDLt(ID uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("id < ?", ID)) +} + +// IDLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IDLte(ID uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("id <= ?", ID)) +} + +// IDNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IDNe(ID uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("id != ?", ID)) +} + +// IDNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) IDNotIn(ID ...uint32) OrderCardQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id NOT IN (?)", ID)) +} + +// Limit is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) Limit(limit int) OrderCardQuerySet { + return qs.w(qs.db.Limit(limit)) +} + +// Offset is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) Offset(offset int) OrderCardQuerySet { + return qs.w(qs.db.Offset(offset)) +} + +// One is used to retrieve one result. It returns gorm.ErrRecordNotFound +// if nothing was fetched +func (qs OrderCardQuerySet) One(ret *OrderCard) error { + return qs.db.First(ret).Error +} + +// OrderAscByCardStatus is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByCardStatus() OrderCardQuerySet { + return qs.w(qs.db.Order("card_status ASC")) +} + +// OrderAscByCreatedAt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByCreatedAt() OrderCardQuerySet { + return qs.w(qs.db.Order("created_at ASC")) +} + +// OrderAscByDeletedAt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByDeletedAt() OrderCardQuerySet { + return qs.w(qs.db.Order("deleted_at ASC")) +} + +// OrderAscByDeliveryTime is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByDeliveryTime() OrderCardQuerySet { + return qs.w(qs.db.Order("delivery_time ASC")) +} + +// OrderAscByDeliveryType is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByDeliveryType() OrderCardQuerySet { + return qs.w(qs.db.Order("delivery_type ASC")) +} + +// OrderAscByGameCardGoodsId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByGameCardGoodsId() OrderCardQuerySet { + return qs.w(qs.db.Order("game_card_goods_id ASC")) +} + +// OrderAscByGameCardId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByGameCardId() OrderCardQuerySet { + return qs.w(qs.db.Order("game_card_id ASC")) +} + +// OrderAscByID is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByID() OrderCardQuerySet { + return qs.w(qs.db.Order("id ASC")) +} + +// OrderAscByOrderId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByOrderId() OrderCardQuerySet { + return qs.w(qs.db.Order("order_id ASC")) +} + +// OrderAscByPayStatus is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByPayStatus() OrderCardQuerySet { + return qs.w(qs.db.Order("pay_status ASC")) +} + +// OrderAscByReceiptTime is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByReceiptTime() OrderCardQuerySet { + return qs.w(qs.db.Order("receipt_time ASC")) +} + +// OrderAscByRevertExpressDuration is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByRevertExpressDuration() OrderCardQuerySet { + return qs.w(qs.db.Order("revert_express_duration ASC")) +} + +// OrderAscByRevertStoreId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByRevertStoreId() OrderCardQuerySet { + return qs.w(qs.db.Order("revert_store_id ASC")) +} + +// OrderAscByRevertTime is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByRevertTime() OrderCardQuerySet { + return qs.w(qs.db.Order("revert_time ASC")) +} + +// OrderAscByStoreId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByStoreId() OrderCardQuerySet { + return qs.w(qs.db.Order("store_id ASC")) +} + +// OrderAscByUid is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByUid() OrderCardQuerySet { + return qs.w(qs.db.Order("uid ASC")) +} + +// OrderAscByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderAscByUpdatedAt() OrderCardQuerySet { + return qs.w(qs.db.Order("updated_at ASC")) +} + +// OrderDescByCardStatus is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByCardStatus() OrderCardQuerySet { + return qs.w(qs.db.Order("card_status DESC")) +} + +// OrderDescByCreatedAt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByCreatedAt() OrderCardQuerySet { + return qs.w(qs.db.Order("created_at DESC")) +} + +// OrderDescByDeletedAt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByDeletedAt() OrderCardQuerySet { + return qs.w(qs.db.Order("deleted_at DESC")) +} + +// OrderDescByDeliveryTime is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByDeliveryTime() OrderCardQuerySet { + return qs.w(qs.db.Order("delivery_time DESC")) +} + +// OrderDescByDeliveryType is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByDeliveryType() OrderCardQuerySet { + return qs.w(qs.db.Order("delivery_type DESC")) +} + +// OrderDescByGameCardGoodsId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByGameCardGoodsId() OrderCardQuerySet { + return qs.w(qs.db.Order("game_card_goods_id DESC")) +} + +// OrderDescByGameCardId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByGameCardId() OrderCardQuerySet { + return qs.w(qs.db.Order("game_card_id DESC")) +} + +// OrderDescByID is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByID() OrderCardQuerySet { + return qs.w(qs.db.Order("id DESC")) +} + +// OrderDescByOrderId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByOrderId() OrderCardQuerySet { + return qs.w(qs.db.Order("order_id DESC")) +} + +// OrderDescByPayStatus is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByPayStatus() OrderCardQuerySet { + return qs.w(qs.db.Order("pay_status DESC")) +} + +// OrderDescByReceiptTime is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByReceiptTime() OrderCardQuerySet { + return qs.w(qs.db.Order("receipt_time DESC")) +} + +// OrderDescByRevertExpressDuration is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByRevertExpressDuration() OrderCardQuerySet { + return qs.w(qs.db.Order("revert_express_duration DESC")) +} + +// OrderDescByRevertStoreId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByRevertStoreId() OrderCardQuerySet { + return qs.w(qs.db.Order("revert_store_id DESC")) +} + +// OrderDescByRevertTime is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByRevertTime() OrderCardQuerySet { + return qs.w(qs.db.Order("revert_time DESC")) +} + +// OrderDescByStoreId is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByStoreId() OrderCardQuerySet { + return qs.w(qs.db.Order("store_id DESC")) +} + +// OrderDescByUid is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByUid() OrderCardQuerySet { + return qs.w(qs.db.Order("uid DESC")) +} + +// OrderDescByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderDescByUpdatedAt() OrderCardQuerySet { + return qs.w(qs.db.Order("updated_at DESC")) +} + +// OrderIdEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderIdEq(orderId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("order_id = ?", orderId)) +} + +// OrderIdGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderIdGt(orderId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("order_id > ?", orderId)) +} + +// OrderIdGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderIdGte(orderId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("order_id >= ?", orderId)) +} + +// OrderIdIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderIdIn(orderId ...uint32) OrderCardQuerySet { + if len(orderId) == 0 { + qs.db.AddError(errors.New("must at least pass one orderId in OrderIdIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("order_id IN (?)", orderId)) +} + +// OrderIdLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderIdLt(orderId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("order_id < ?", orderId)) +} + +// OrderIdLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderIdLte(orderId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("order_id <= ?", orderId)) +} + +// OrderIdNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderIdNe(orderId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("order_id != ?", orderId)) +} + +// OrderIdNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) OrderIdNotIn(orderId ...uint32) OrderCardQuerySet { + if len(orderId) == 0 { + qs.db.AddError(errors.New("must at least pass one orderId in OrderIdNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("order_id NOT IN (?)", orderId)) +} + +// PayStatusEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) PayStatusEq(payStatus uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("pay_status = ?", payStatus)) +} + +// PayStatusGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) PayStatusGt(payStatus uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("pay_status > ?", payStatus)) +} + +// PayStatusGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) PayStatusGte(payStatus uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("pay_status >= ?", payStatus)) +} + +// PayStatusIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) PayStatusIn(payStatus ...uint8) OrderCardQuerySet { + if len(payStatus) == 0 { + qs.db.AddError(errors.New("must at least pass one payStatus in PayStatusIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("pay_status IN (?)", payStatus)) +} + +// PayStatusLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) PayStatusLt(payStatus uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("pay_status < ?", payStatus)) +} + +// PayStatusLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) PayStatusLte(payStatus uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("pay_status <= ?", payStatus)) +} + +// PayStatusNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) PayStatusNe(payStatus uint8) OrderCardQuerySet { + return qs.w(qs.db.Where("pay_status != ?", payStatus)) +} + +// PayStatusNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) PayStatusNotIn(payStatus ...uint8) OrderCardQuerySet { + if len(payStatus) == 0 { + qs.db.AddError(errors.New("must at least pass one payStatus in PayStatusNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("pay_status NOT IN (?)", payStatus)) +} + +// ReceiptTimeEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) ReceiptTimeEq(receiptTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("receipt_time = ?", receiptTime)) +} + +// ReceiptTimeGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) ReceiptTimeGt(receiptTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("receipt_time > ?", receiptTime)) +} + +// ReceiptTimeGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) ReceiptTimeGte(receiptTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("receipt_time >= ?", receiptTime)) +} + +// ReceiptTimeLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) ReceiptTimeLt(receiptTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("receipt_time < ?", receiptTime)) +} + +// ReceiptTimeLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) ReceiptTimeLte(receiptTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("receipt_time <= ?", receiptTime)) +} + +// ReceiptTimeNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) ReceiptTimeNe(receiptTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("receipt_time != ?", receiptTime)) +} + +// RevertExpressCompanyEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressCompanyEq(revertExpressCompany string) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_company = ?", revertExpressCompany)) +} + +// RevertExpressCompanyIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressCompanyIn(revertExpressCompany ...string) OrderCardQuerySet { + if len(revertExpressCompany) == 0 { + qs.db.AddError(errors.New("must at least pass one revertExpressCompany in RevertExpressCompanyIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_express_company IN (?)", revertExpressCompany)) +} + +// RevertExpressCompanyNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressCompanyNe(revertExpressCompany string) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_company != ?", revertExpressCompany)) +} + +// RevertExpressCompanyNoEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressCompanyNoEq(revertExpressCompanyNo string) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_company_no = ?", revertExpressCompanyNo)) +} + +// RevertExpressCompanyNoIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressCompanyNoIn(revertExpressCompanyNo ...string) OrderCardQuerySet { + if len(revertExpressCompanyNo) == 0 { + qs.db.AddError(errors.New("must at least pass one revertExpressCompanyNo in RevertExpressCompanyNoIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_express_company_no IN (?)", revertExpressCompanyNo)) +} + +// RevertExpressCompanyNoNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressCompanyNoNe(revertExpressCompanyNo string) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_company_no != ?", revertExpressCompanyNo)) +} + +// RevertExpressCompanyNoNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressCompanyNoNotIn(revertExpressCompanyNo ...string) OrderCardQuerySet { + if len(revertExpressCompanyNo) == 0 { + qs.db.AddError(errors.New("must at least pass one revertExpressCompanyNo in RevertExpressCompanyNoNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_express_company_no NOT IN (?)", revertExpressCompanyNo)) +} + +// RevertExpressCompanyNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressCompanyNotIn(revertExpressCompany ...string) OrderCardQuerySet { + if len(revertExpressCompany) == 0 { + qs.db.AddError(errors.New("must at least pass one revertExpressCompany in RevertExpressCompanyNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_express_company NOT IN (?)", revertExpressCompany)) +} + +// RevertExpressDurationEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressDurationEq(revertExpressDuration uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_duration = ?", revertExpressDuration)) +} + +// RevertExpressDurationGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressDurationGt(revertExpressDuration uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_duration > ?", revertExpressDuration)) +} + +// RevertExpressDurationGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressDurationGte(revertExpressDuration uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_duration >= ?", revertExpressDuration)) +} + +// RevertExpressDurationIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressDurationIn(revertExpressDuration ...uint64) OrderCardQuerySet { + if len(revertExpressDuration) == 0 { + qs.db.AddError(errors.New("must at least pass one revertExpressDuration in RevertExpressDurationIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_express_duration IN (?)", revertExpressDuration)) +} + +// RevertExpressDurationLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressDurationLt(revertExpressDuration uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_duration < ?", revertExpressDuration)) +} + +// RevertExpressDurationLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressDurationLte(revertExpressDuration uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_duration <= ?", revertExpressDuration)) +} + +// RevertExpressDurationNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressDurationNe(revertExpressDuration uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_duration != ?", revertExpressDuration)) +} + +// RevertExpressDurationNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressDurationNotIn(revertExpressDuration ...uint64) OrderCardQuerySet { + if len(revertExpressDuration) == 0 { + qs.db.AddError(errors.New("must at least pass one revertExpressDuration in RevertExpressDurationNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_express_duration NOT IN (?)", revertExpressDuration)) +} + +// RevertExpressNoEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressNoEq(revertExpressNo string) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_no = ?", revertExpressNo)) +} + +// RevertExpressNoIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressNoIn(revertExpressNo ...string) OrderCardQuerySet { + if len(revertExpressNo) == 0 { + qs.db.AddError(errors.New("must at least pass one revertExpressNo in RevertExpressNoIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_express_no IN (?)", revertExpressNo)) +} + +// RevertExpressNoNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressNoNe(revertExpressNo string) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_express_no != ?", revertExpressNo)) +} + +// RevertExpressNoNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertExpressNoNotIn(revertExpressNo ...string) OrderCardQuerySet { + if len(revertExpressNo) == 0 { + qs.db.AddError(errors.New("must at least pass one revertExpressNo in RevertExpressNoNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_express_no NOT IN (?)", revertExpressNo)) +} + +// RevertStoreIdEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertStoreIdEq(revertStoreId uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_store_id = ?", revertStoreId)) +} + +// RevertStoreIdGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertStoreIdGt(revertStoreId uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_store_id > ?", revertStoreId)) +} + +// RevertStoreIdGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertStoreIdGte(revertStoreId uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_store_id >= ?", revertStoreId)) +} + +// RevertStoreIdIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertStoreIdIn(revertStoreId ...uint64) OrderCardQuerySet { + if len(revertStoreId) == 0 { + qs.db.AddError(errors.New("must at least pass one revertStoreId in RevertStoreIdIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_store_id IN (?)", revertStoreId)) +} + +// RevertStoreIdLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertStoreIdLt(revertStoreId uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_store_id < ?", revertStoreId)) +} + +// RevertStoreIdLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertStoreIdLte(revertStoreId uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_store_id <= ?", revertStoreId)) +} + +// RevertStoreIdNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertStoreIdNe(revertStoreId uint64) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_store_id != ?", revertStoreId)) +} + +// RevertStoreIdNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertStoreIdNotIn(revertStoreId ...uint64) OrderCardQuerySet { + if len(revertStoreId) == 0 { + qs.db.AddError(errors.New("must at least pass one revertStoreId in RevertStoreIdNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("revert_store_id NOT IN (?)", revertStoreId)) +} + +// RevertTimeEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertTimeEq(revertTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_time = ?", revertTime)) +} + +// RevertTimeGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertTimeGt(revertTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_time > ?", revertTime)) +} + +// RevertTimeGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertTimeGte(revertTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_time >= ?", revertTime)) +} + +// RevertTimeLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertTimeLt(revertTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_time < ?", revertTime)) +} + +// RevertTimeLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertTimeLte(revertTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_time <= ?", revertTime)) +} + +// RevertTimeNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) RevertTimeNe(revertTime time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("revert_time != ?", revertTime)) +} + +// SerialNumberEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) SerialNumberEq(serialNumber string) OrderCardQuerySet { + return qs.w(qs.db.Where("serial_number = ?", serialNumber)) +} + +// SerialNumberIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) SerialNumberIn(serialNumber ...string) OrderCardQuerySet { + if len(serialNumber) == 0 { + qs.db.AddError(errors.New("must at least pass one serialNumber in SerialNumberIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("serial_number IN (?)", serialNumber)) +} + +// SerialNumberNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) SerialNumberNe(serialNumber string) OrderCardQuerySet { + return qs.w(qs.db.Where("serial_number != ?", serialNumber)) +} + +// SerialNumberNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) SerialNumberNotIn(serialNumber ...string) OrderCardQuerySet { + if len(serialNumber) == 0 { + qs.db.AddError(errors.New("must at least pass one serialNumber in SerialNumberNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("serial_number NOT IN (?)", serialNumber)) +} + +// StoreIdEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) StoreIdEq(storeId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("store_id = ?", storeId)) +} + +// StoreIdGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) StoreIdGt(storeId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("store_id > ?", storeId)) +} + +// StoreIdGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) StoreIdGte(storeId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("store_id >= ?", storeId)) +} + +// StoreIdIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) StoreIdIn(storeId ...uint32) OrderCardQuerySet { + if len(storeId) == 0 { + qs.db.AddError(errors.New("must at least pass one storeId in StoreIdIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("store_id IN (?)", storeId)) +} + +// StoreIdLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) StoreIdLt(storeId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("store_id < ?", storeId)) +} + +// StoreIdLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) StoreIdLte(storeId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("store_id <= ?", storeId)) +} + +// StoreIdNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) StoreIdNe(storeId uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("store_id != ?", storeId)) +} + +// StoreIdNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) StoreIdNotIn(storeId ...uint32) OrderCardQuerySet { + if len(storeId) == 0 { + qs.db.AddError(errors.New("must at least pass one storeId in StoreIdNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("store_id NOT IN (?)", storeId)) +} + +// UidEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UidEq(uid uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("uid = ?", uid)) +} + +// UidGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UidGt(uid uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("uid > ?", uid)) +} + +// UidGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UidGte(uid uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("uid >= ?", uid)) +} + +// UidIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UidIn(uid ...uint32) OrderCardQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid IN (?)", uid)) +} + +// UidLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UidLt(uid uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("uid < ?", uid)) +} + +// UidLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UidLte(uid uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("uid <= ?", uid)) +} + +// UidNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UidNe(uid uint32) OrderCardQuerySet { + return qs.w(qs.db.Where("uid != ?", uid)) +} + +// UidNotIn is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UidNotIn(uid ...uint32) OrderCardQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid NOT IN (?)", uid)) +} + +// UpdatedAtEq is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UpdatedAtEq(updatedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("updated_at = ?", updatedAt)) +} + +// UpdatedAtGt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UpdatedAtGt(updatedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("updated_at > ?", updatedAt)) +} + +// UpdatedAtGte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UpdatedAtGte(updatedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("updated_at >= ?", updatedAt)) +} + +// UpdatedAtLt is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UpdatedAtLt(updatedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("updated_at < ?", updatedAt)) +} + +// UpdatedAtLte is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UpdatedAtLte(updatedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("updated_at <= ?", updatedAt)) +} + +// UpdatedAtNe is an autogenerated method +// nolint: dupl +func (qs OrderCardQuerySet) UpdatedAtNe(updatedAt time.Time) OrderCardQuerySet { + return qs.w(qs.db.Where("updated_at != ?", updatedAt)) +} + +// SetCardStatus is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetCardStatus(cardStatus uint32) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.CardStatus)] = cardStatus + return u +} + +// SetCreatedAt is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetCreatedAt(createdAt time.Time) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.CreatedAt)] = createdAt + return u +} + +// SetDeletedAt is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetDeletedAt(deletedAt *time.Time) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.DeletedAt)] = deletedAt + return u +} + +// SetDeliveryTime is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetDeliveryTime(deliveryTime time.Time) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.DeliveryTime)] = deliveryTime + return u +} + +// SetDeliveryType is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetDeliveryType(deliveryType uint8) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.DeliveryType)] = deliveryType + return u +} + +// SetGameCardGoodsId is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetGameCardGoodsId(gameCardGoodsId uint32) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.GameCardGoodsId)] = gameCardGoodsId + return u +} + +// SetGameCardId is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetGameCardId(gameCardId uint32) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.GameCardId)] = gameCardId + return u +} + +// SetID is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetID(ID uint32) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.ID)] = ID + return u +} + +// SetOrderId is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetOrderId(orderId uint32) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.OrderId)] = orderId + return u +} + +// SetPayStatus is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetPayStatus(payStatus uint8) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.PayStatus)] = payStatus + return u +} + +// SetReceiptTime is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetReceiptTime(receiptTime time.Time) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.ReceiptTime)] = receiptTime + return u +} + +// SetRevertExpressCompany is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetRevertExpressCompany(revertExpressCompany string) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.RevertExpressCompany)] = revertExpressCompany + return u +} + +// SetRevertExpressCompanyNo is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetRevertExpressCompanyNo(revertExpressCompanyNo string) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.RevertExpressCompanyNo)] = revertExpressCompanyNo + return u +} + +// SetRevertExpressDuration is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetRevertExpressDuration(revertExpressDuration uint64) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.RevertExpressDuration)] = revertExpressDuration + return u +} + +// SetRevertExpressNo is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetRevertExpressNo(revertExpressNo string) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.RevertExpressNo)] = revertExpressNo + return u +} + +// SetRevertStoreId is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetRevertStoreId(revertStoreId uint64) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.RevertStoreId)] = revertStoreId + return u +} + +// SetRevertTime is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetRevertTime(revertTime time.Time) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.RevertTime)] = revertTime + return u +} + +// SetSerialNumber is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetSerialNumber(serialNumber string) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.SerialNumber)] = serialNumber + return u +} + +// SetStoreId is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetStoreId(storeId uint32) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.StoreId)] = storeId + return u +} + +// SetUid is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetUid(uid uint32) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.Uid)] = uid + return u +} + +// SetUpdatedAt is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) SetUpdatedAt(updatedAt time.Time) OrderCardUpdater { + u.fields[string(OrderCardDBSchema.UpdatedAt)] = updatedAt + return u +} + +// Update is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) Update() error { + return u.db.Updates(u.fields).Error +} + +// UpdateNum is an autogenerated method +// nolint: dupl +func (u OrderCardUpdater) UpdateNum() (int64, error) { + db := u.db.Updates(u.fields) + return db.RowsAffected, db.Error +} + +// ===== END of query set OrderCardQuerySet + +// ===== BEGIN of OrderCard modifiers + +// OrderCardDBSchemaField describes database schema field. It requires for method 'Update' +type OrderCardDBSchemaField string + +// String method returns string representation of field. +// nolint: dupl +func (f OrderCardDBSchemaField) String() string { + return string(f) +} + +// OrderCardDBSchema stores db field names of OrderCard +var OrderCardDBSchema = struct { + ID OrderCardDBSchemaField + CreatedAt OrderCardDBSchemaField + UpdatedAt OrderCardDBSchemaField + DeletedAt OrderCardDBSchemaField + OrderId OrderCardDBSchemaField + Uid OrderCardDBSchemaField + GameCardId OrderCardDBSchemaField + GameCardGoodsId OrderCardDBSchemaField + StoreId OrderCardDBSchemaField + CardStatus OrderCardDBSchemaField + DeliveryTime OrderCardDBSchemaField + ReceiptTime OrderCardDBSchemaField + DeliveryType OrderCardDBSchemaField + SerialNumber OrderCardDBSchemaField + PayStatus OrderCardDBSchemaField + RevertStoreId OrderCardDBSchemaField + RevertTime OrderCardDBSchemaField + RevertExpressCompany OrderCardDBSchemaField + RevertExpressCompanyNo OrderCardDBSchemaField + RevertExpressNo OrderCardDBSchemaField + RevertExpressDuration OrderCardDBSchemaField +}{ + + ID: OrderCardDBSchemaField("id"), + CreatedAt: OrderCardDBSchemaField("created_at"), + UpdatedAt: OrderCardDBSchemaField("updated_at"), + DeletedAt: OrderCardDBSchemaField("deleted_at"), + OrderId: OrderCardDBSchemaField("order_id"), + Uid: OrderCardDBSchemaField("uid"), + GameCardId: OrderCardDBSchemaField("game_card_id"), + GameCardGoodsId: OrderCardDBSchemaField("game_card_goods_id"), + StoreId: OrderCardDBSchemaField("store_id"), + CardStatus: OrderCardDBSchemaField("card_status"), + DeliveryTime: OrderCardDBSchemaField("delivery_time"), + ReceiptTime: OrderCardDBSchemaField("receipt_time"), + DeliveryType: OrderCardDBSchemaField("delivery_type"), + SerialNumber: OrderCardDBSchemaField("serial_number"), + PayStatus: OrderCardDBSchemaField("pay_status"), + RevertStoreId: OrderCardDBSchemaField("revert_store_id"), + RevertTime: OrderCardDBSchemaField("revert_time"), + RevertExpressCompany: OrderCardDBSchemaField("revert_express_company"), + RevertExpressCompanyNo: OrderCardDBSchemaField("revert_express_company_no"), + RevertExpressNo: OrderCardDBSchemaField("revert_express_no"), + RevertExpressDuration: OrderCardDBSchemaField("revert_express_duration"), +} + +// Update updates OrderCard fields by primary key +// nolint: dupl +func (o *OrderCard) Update(db *gorm.DB, fields ...OrderCardDBSchemaField) error { + dbNameToFieldName := map[string]interface{}{ + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "order_id": o.OrderId, + "uid": o.Uid, + "game_card_id": o.GameCardId, + "game_card_goods_id": o.GameCardGoodsId, + "store_id": o.StoreId, + "card_status": o.CardStatus, + "delivery_time": o.DeliveryTime, + "receipt_time": o.ReceiptTime, + "delivery_type": o.DeliveryType, + "serial_number": o.SerialNumber, + "pay_status": o.PayStatus, + "revert_store_id": o.RevertStoreId, + "revert_time": o.RevertTime, + "revert_express_company": o.RevertExpressCompany, + "revert_express_company_no": o.RevertExpressCompanyNo, + "revert_express_no": o.RevertExpressNo, + "revert_express_duration": o.RevertExpressDuration, + } + u := map[string]interface{}{} + for _, f := range fields { + fs := f.String() + u[fs] = dbNameToFieldName[fs] + } + if err := db.Model(o).Updates(u).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return err + } + + return fmt.Errorf("can't update OrderCard %v fields %v: %s", + o, fields, err) + } + + return nil +} + +// OrderCardUpdater is an OrderCard updates manager +type OrderCardUpdater struct { + fields map[string]interface{} + db *gorm.DB +} + +// NewOrderCardUpdater creates new OrderCard updater +// nolint: dupl +func NewOrderCardUpdater(db *gorm.DB) OrderCardUpdater { + return OrderCardUpdater{ + fields: map[string]interface{}{}, + db: db.Model(&OrderCard{}), + } +} + +// ===== END of OrderCard modifiers + // ===== BEGIN of query set OrderQuerySet // OrderQuerySet is an queryset type for Order diff --git a/model/autogenerated_user.go b/model/autogenerated_user.go index 84267e3..98a37b8 100644 --- a/model/autogenerated_user.go +++ b/model/autogenerated_user.go @@ -1401,6 +1401,711 @@ func NewDepositRefundRecordUpdater(db *gorm.DB) DepositRefundRecordUpdater { // ===== END of DepositRefundRecord modifiers +// ===== BEGIN of query set UserConsumeRecordQuerySet + +// UserConsumeRecordQuerySet is an queryset type for UserConsumeRecord +type UserConsumeRecordQuerySet struct { + db *gorm.DB +} + +// NewUserConsumeRecordQuerySet constructs new UserConsumeRecordQuerySet +func NewUserConsumeRecordQuerySet(db *gorm.DB) UserConsumeRecordQuerySet { + return UserConsumeRecordQuerySet{ + db: db.Model(&UserConsumeRecord{}), + } +} + +func (qs UserConsumeRecordQuerySet) w(db *gorm.DB) UserConsumeRecordQuerySet { + return NewUserConsumeRecordQuerySet(db) +} + +// Create is an autogenerated method +// nolint: dupl +func (o *UserConsumeRecord) Create(db *gorm.DB) error { + return db.Create(o).Error +} + +// Delete is an autogenerated method +// nolint: dupl +func (o *UserConsumeRecord) Delete(db *gorm.DB) error { + return db.Delete(o).Error +} + +// All is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) All(ret *[]UserConsumeRecord) error { + return qs.db.Find(ret).Error +} + +// AmountEq is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) AmountEq(amount uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("amount = ?", amount)) +} + +// AmountGt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) AmountGt(amount uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("amount > ?", amount)) +} + +// AmountGte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) AmountGte(amount uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("amount >= ?", amount)) +} + +// AmountIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) AmountIn(amount ...uint32) UserConsumeRecordQuerySet { + if len(amount) == 0 { + qs.db.AddError(errors.New("must at least pass one amount in AmountIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("amount IN (?)", amount)) +} + +// AmountLt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) AmountLt(amount uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("amount < ?", amount)) +} + +// AmountLte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) AmountLte(amount uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("amount <= ?", amount)) +} + +// AmountNe is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) AmountNe(amount uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("amount != ?", amount)) +} + +// AmountNotIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) AmountNotIn(amount ...uint32) UserConsumeRecordQuerySet { + if len(amount) == 0 { + qs.db.AddError(errors.New("must at least pass one amount in AmountNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("amount NOT IN (?)", amount)) +} + +// ConsumeTypeEq is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) ConsumeTypeEq(consumeType string) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("consume_type = ?", consumeType)) +} + +// ConsumeTypeIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) ConsumeTypeIn(consumeType ...string) UserConsumeRecordQuerySet { + if len(consumeType) == 0 { + qs.db.AddError(errors.New("must at least pass one consumeType in ConsumeTypeIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("consume_type IN (?)", consumeType)) +} + +// ConsumeTypeNe is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) ConsumeTypeNe(consumeType string) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("consume_type != ?", consumeType)) +} + +// ConsumeTypeNotIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) ConsumeTypeNotIn(consumeType ...string) UserConsumeRecordQuerySet { + if len(consumeType) == 0 { + qs.db.AddError(errors.New("must at least pass one consumeType in ConsumeTypeNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("consume_type NOT IN (?)", consumeType)) +} + +// Count is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) Count() (int, error) { + var count int + err := qs.db.Count(&count).Error + return count, err +} + +// CreatedAtEq is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) CreatedAtEq(createdAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("created_at = ?", createdAt)) +} + +// CreatedAtGt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) CreatedAtGt(createdAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("created_at > ?", createdAt)) +} + +// CreatedAtGte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) CreatedAtGte(createdAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("created_at >= ?", createdAt)) +} + +// CreatedAtLt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) CreatedAtLt(createdAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("created_at < ?", createdAt)) +} + +// CreatedAtLte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) CreatedAtLte(createdAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("created_at <= ?", createdAt)) +} + +// CreatedAtNe is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) CreatedAtNe(createdAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("created_at != ?", createdAt)) +} + +// Delete is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) Delete() error { + return qs.db.Delete(UserConsumeRecord{}).Error +} + +// DeleteNum is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeleteNum() (int64, error) { + db := qs.db.Delete(UserConsumeRecord{}) + return db.RowsAffected, db.Error +} + +// DeleteNumUnscoped is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeleteNumUnscoped() (int64, error) { + db := qs.db.Unscoped().Delete(UserConsumeRecord{}) + return db.RowsAffected, db.Error +} + +// DeletedAtEq is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeletedAtEq(deletedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("deleted_at = ?", deletedAt)) +} + +// DeletedAtGt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeletedAtGt(deletedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("deleted_at > ?", deletedAt)) +} + +// DeletedAtGte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeletedAtGte(deletedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("deleted_at >= ?", deletedAt)) +} + +// DeletedAtIsNotNull is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeletedAtIsNotNull() UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("deleted_at IS NOT NULL")) +} + +// DeletedAtIsNull is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeletedAtIsNull() UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("deleted_at IS NULL")) +} + +// DeletedAtLt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeletedAtLt(deletedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("deleted_at < ?", deletedAt)) +} + +// DeletedAtLte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeletedAtLte(deletedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("deleted_at <= ?", deletedAt)) +} + +// DeletedAtNe is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) DeletedAtNe(deletedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("deleted_at != ?", deletedAt)) +} + +// GetDB is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) GetDB() *gorm.DB { + return qs.db +} + +// GetUpdater is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) GetUpdater() UserConsumeRecordUpdater { + return NewUserConsumeRecordUpdater(qs.db) +} + +// IDEq is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) IDEq(ID uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("id = ?", ID)) +} + +// IDGt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) IDGt(ID uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("id > ?", ID)) +} + +// IDGte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) IDGte(ID uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("id >= ?", ID)) +} + +// IDIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) IDIn(ID ...uint32) UserConsumeRecordQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id IN (?)", ID)) +} + +// IDLt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) IDLt(ID uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("id < ?", ID)) +} + +// IDLte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) IDLte(ID uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("id <= ?", ID)) +} + +// IDNe is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) IDNe(ID uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("id != ?", ID)) +} + +// IDNotIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) IDNotIn(ID ...uint32) UserConsumeRecordQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id NOT IN (?)", ID)) +} + +// Limit is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) Limit(limit int) UserConsumeRecordQuerySet { + return qs.w(qs.db.Limit(limit)) +} + +// Offset is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) Offset(offset int) UserConsumeRecordQuerySet { + return qs.w(qs.db.Offset(offset)) +} + +// One is used to retrieve one result. It returns gorm.ErrRecordNotFound +// if nothing was fetched +func (qs UserConsumeRecordQuerySet) One(ret *UserConsumeRecord) error { + return qs.db.First(ret).Error +} + +// OrderAscByAmount is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderAscByAmount() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("amount ASC")) +} + +// OrderAscByCreatedAt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderAscByCreatedAt() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("created_at ASC")) +} + +// OrderAscByDeletedAt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderAscByDeletedAt() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("deleted_at ASC")) +} + +// OrderAscByID is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderAscByID() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("id ASC")) +} + +// OrderAscByStatus is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderAscByStatus() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("status ASC")) +} + +// OrderAscByUid is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderAscByUid() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("uid ASC")) +} + +// OrderAscByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderAscByUpdatedAt() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("updated_at ASC")) +} + +// OrderDescByAmount is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderDescByAmount() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("amount DESC")) +} + +// OrderDescByCreatedAt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderDescByCreatedAt() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("created_at DESC")) +} + +// OrderDescByDeletedAt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderDescByDeletedAt() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("deleted_at DESC")) +} + +// OrderDescByID is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderDescByID() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("id DESC")) +} + +// OrderDescByStatus is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderDescByStatus() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("status DESC")) +} + +// OrderDescByUid is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderDescByUid() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("uid DESC")) +} + +// OrderDescByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) OrderDescByUpdatedAt() UserConsumeRecordQuerySet { + return qs.w(qs.db.Order("updated_at DESC")) +} + +// StatusEq is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) StatusEq(status uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("status = ?", status)) +} + +// StatusGt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) StatusGt(status uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("status > ?", status)) +} + +// StatusGte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) StatusGte(status uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("status >= ?", status)) +} + +// StatusIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) StatusIn(status ...uint32) UserConsumeRecordQuerySet { + if len(status) == 0 { + qs.db.AddError(errors.New("must at least pass one status in StatusIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("status IN (?)", status)) +} + +// StatusLt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) StatusLt(status uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("status < ?", status)) +} + +// StatusLte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) StatusLte(status uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("status <= ?", status)) +} + +// StatusNe is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) StatusNe(status uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("status != ?", status)) +} + +// StatusNotIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) StatusNotIn(status ...uint32) UserConsumeRecordQuerySet { + if len(status) == 0 { + qs.db.AddError(errors.New("must at least pass one status in StatusNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("status NOT IN (?)", status)) +} + +// UidEq is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UidEq(uid uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("uid = ?", uid)) +} + +// UidGt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UidGt(uid uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("uid > ?", uid)) +} + +// UidGte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UidGte(uid uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("uid >= ?", uid)) +} + +// UidIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UidIn(uid ...uint32) UserConsumeRecordQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid IN (?)", uid)) +} + +// UidLt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UidLt(uid uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("uid < ?", uid)) +} + +// UidLte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UidLte(uid uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("uid <= ?", uid)) +} + +// UidNe is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UidNe(uid uint32) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("uid != ?", uid)) +} + +// UidNotIn is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UidNotIn(uid ...uint32) UserConsumeRecordQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid NOT IN (?)", uid)) +} + +// UpdatedAtEq is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UpdatedAtEq(updatedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("updated_at = ?", updatedAt)) +} + +// UpdatedAtGt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UpdatedAtGt(updatedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("updated_at > ?", updatedAt)) +} + +// UpdatedAtGte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UpdatedAtGte(updatedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("updated_at >= ?", updatedAt)) +} + +// UpdatedAtLt is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UpdatedAtLt(updatedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("updated_at < ?", updatedAt)) +} + +// UpdatedAtLte is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UpdatedAtLte(updatedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("updated_at <= ?", updatedAt)) +} + +// UpdatedAtNe is an autogenerated method +// nolint: dupl +func (qs UserConsumeRecordQuerySet) UpdatedAtNe(updatedAt time.Time) UserConsumeRecordQuerySet { + return qs.w(qs.db.Where("updated_at != ?", updatedAt)) +} + +// SetAmount is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) SetAmount(amount uint32) UserConsumeRecordUpdater { + u.fields[string(UserConsumeRecordDBSchema.Amount)] = amount + return u +} + +// SetConsumeType is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) SetConsumeType(consumeType string) UserConsumeRecordUpdater { + u.fields[string(UserConsumeRecordDBSchema.ConsumeType)] = consumeType + return u +} + +// SetCreatedAt is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) SetCreatedAt(createdAt time.Time) UserConsumeRecordUpdater { + u.fields[string(UserConsumeRecordDBSchema.CreatedAt)] = createdAt + return u +} + +// SetDeletedAt is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) SetDeletedAt(deletedAt *time.Time) UserConsumeRecordUpdater { + u.fields[string(UserConsumeRecordDBSchema.DeletedAt)] = deletedAt + return u +} + +// SetID is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) SetID(ID uint32) UserConsumeRecordUpdater { + u.fields[string(UserConsumeRecordDBSchema.ID)] = ID + return u +} + +// SetStatus is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) SetStatus(status uint32) UserConsumeRecordUpdater { + u.fields[string(UserConsumeRecordDBSchema.Status)] = status + return u +} + +// SetUid is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) SetUid(uid uint32) UserConsumeRecordUpdater { + u.fields[string(UserConsumeRecordDBSchema.Uid)] = uid + return u +} + +// SetUpdatedAt is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) SetUpdatedAt(updatedAt time.Time) UserConsumeRecordUpdater { + u.fields[string(UserConsumeRecordDBSchema.UpdatedAt)] = updatedAt + return u +} + +// Update is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) Update() error { + return u.db.Updates(u.fields).Error +} + +// UpdateNum is an autogenerated method +// nolint: dupl +func (u UserConsumeRecordUpdater) UpdateNum() (int64, error) { + db := u.db.Updates(u.fields) + return db.RowsAffected, db.Error +} + +// ===== END of query set UserConsumeRecordQuerySet + +// ===== BEGIN of UserConsumeRecord modifiers + +// UserConsumeRecordDBSchemaField describes database schema field. It requires for method 'Update' +type UserConsumeRecordDBSchemaField string + +// String method returns string representation of field. +// nolint: dupl +func (f UserConsumeRecordDBSchemaField) String() string { + return string(f) +} + +// UserConsumeRecordDBSchema stores db field names of UserConsumeRecord +var UserConsumeRecordDBSchema = struct { + ID UserConsumeRecordDBSchemaField + CreatedAt UserConsumeRecordDBSchemaField + UpdatedAt UserConsumeRecordDBSchemaField + DeletedAt UserConsumeRecordDBSchemaField + Uid UserConsumeRecordDBSchemaField + ConsumeType UserConsumeRecordDBSchemaField + Amount UserConsumeRecordDBSchemaField + Status UserConsumeRecordDBSchemaField +}{ + + ID: UserConsumeRecordDBSchemaField("id"), + CreatedAt: UserConsumeRecordDBSchemaField("created_at"), + UpdatedAt: UserConsumeRecordDBSchemaField("updated_at"), + DeletedAt: UserConsumeRecordDBSchemaField("deleted_at"), + Uid: UserConsumeRecordDBSchemaField("uid"), + ConsumeType: UserConsumeRecordDBSchemaField("consume_type"), + Amount: UserConsumeRecordDBSchemaField("amount"), + Status: UserConsumeRecordDBSchemaField("status"), +} + +// Update updates UserConsumeRecord fields by primary key +// nolint: dupl +func (o *UserConsumeRecord) Update(db *gorm.DB, fields ...UserConsumeRecordDBSchemaField) error { + dbNameToFieldName := map[string]interface{}{ + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "uid": o.Uid, + "consume_type": o.ConsumeType, + "amount": o.Amount, + "status": o.Status, + } + u := map[string]interface{}{} + for _, f := range fields { + fs := f.String() + u[fs] = dbNameToFieldName[fs] + } + if err := db.Model(o).Updates(u).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return err + } + + return fmt.Errorf("can't update UserConsumeRecord %v fields %v: %s", + o, fields, err) + } + + return nil +} + +// UserConsumeRecordUpdater is an UserConsumeRecord updates manager +type UserConsumeRecordUpdater struct { + fields map[string]interface{} + db *gorm.DB +} + +// NewUserConsumeRecordUpdater creates new UserConsumeRecord updater +// nolint: dupl +func NewUserConsumeRecordUpdater(db *gorm.DB) UserConsumeRecordUpdater { + return UserConsumeRecordUpdater{ + fields: map[string]interface{}{}, + db: db.Model(&UserConsumeRecord{}), + } +} + +// ===== END of UserConsumeRecord modifiers + // ===== BEGIN of query set UserInviteQuerySet // UserInviteQuerySet is an queryset type for UserInvite @@ -5046,4 +5751,901 @@ func NewUserUpdater(db *gorm.DB) UserUpdater { // ===== END of User modifiers +// ===== BEGIN of query set UserRentCardQuerySet + +// UserRentCardQuerySet is an queryset type for UserRentCard +type UserRentCardQuerySet struct { + db *gorm.DB +} + +// NewUserRentCardQuerySet constructs new UserRentCardQuerySet +func NewUserRentCardQuerySet(db *gorm.DB) UserRentCardQuerySet { + return UserRentCardQuerySet{ + db: db.Model(&UserRentCard{}), + } +} + +func (qs UserRentCardQuerySet) w(db *gorm.DB) UserRentCardQuerySet { + return NewUserRentCardQuerySet(db) +} + +// Create is an autogenerated method +// nolint: dupl +func (o *UserRentCard) Create(db *gorm.DB) error { + return db.Create(o).Error +} + +// Delete is an autogenerated method +// nolint: dupl +func (o *UserRentCard) Delete(db *gorm.DB) error { + return db.Delete(o).Error +} + +// All is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) All(ret *[]UserRentCard) error { + return qs.db.Find(ret).Error +} + +// CanRentCountEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CanRentCountEq(canRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("can_rent_count = ?", canRentCount)) +} + +// CanRentCountGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CanRentCountGt(canRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("can_rent_count > ?", canRentCount)) +} + +// CanRentCountGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CanRentCountGte(canRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("can_rent_count >= ?", canRentCount)) +} + +// CanRentCountIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CanRentCountIn(canRentCount ...uint32) UserRentCardQuerySet { + if len(canRentCount) == 0 { + qs.db.AddError(errors.New("must at least pass one canRentCount in CanRentCountIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("can_rent_count IN (?)", canRentCount)) +} + +// CanRentCountLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CanRentCountLt(canRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("can_rent_count < ?", canRentCount)) +} + +// CanRentCountLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CanRentCountLte(canRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("can_rent_count <= ?", canRentCount)) +} + +// CanRentCountNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CanRentCountNe(canRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("can_rent_count != ?", canRentCount)) +} + +// CanRentCountNotIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CanRentCountNotIn(canRentCount ...uint32) UserRentCardQuerySet { + if len(canRentCount) == 0 { + qs.db.AddError(errors.New("must at least pass one canRentCount in CanRentCountNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("can_rent_count NOT IN (?)", canRentCount)) +} + +// Count is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) Count() (int, error) { + var count int + err := qs.db.Count(&count).Error + return count, err +} + +// CreatedAtEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CreatedAtEq(createdAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("created_at = ?", createdAt)) +} + +// CreatedAtGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CreatedAtGt(createdAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("created_at > ?", createdAt)) +} + +// CreatedAtGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CreatedAtGte(createdAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("created_at >= ?", createdAt)) +} + +// CreatedAtLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CreatedAtLt(createdAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("created_at < ?", createdAt)) +} + +// CreatedAtLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CreatedAtLte(createdAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("created_at <= ?", createdAt)) +} + +// CreatedAtNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) CreatedAtNe(createdAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("created_at != ?", createdAt)) +} + +// Delete is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) Delete() error { + return qs.db.Delete(UserRentCard{}).Error +} + +// DeleteNum is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeleteNum() (int64, error) { + db := qs.db.Delete(UserRentCard{}) + return db.RowsAffected, db.Error +} + +// DeleteNumUnscoped is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeleteNumUnscoped() (int64, error) { + db := qs.db.Unscoped().Delete(UserRentCard{}) + return db.RowsAffected, db.Error +} + +// DeletedAtEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeletedAtEq(deletedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("deleted_at = ?", deletedAt)) +} + +// DeletedAtGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeletedAtGt(deletedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("deleted_at > ?", deletedAt)) +} + +// DeletedAtGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeletedAtGte(deletedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("deleted_at >= ?", deletedAt)) +} + +// DeletedAtIsNotNull is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeletedAtIsNotNull() UserRentCardQuerySet { + return qs.w(qs.db.Where("deleted_at IS NOT NULL")) +} + +// DeletedAtIsNull is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeletedAtIsNull() UserRentCardQuerySet { + return qs.w(qs.db.Where("deleted_at IS NULL")) +} + +// DeletedAtLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeletedAtLt(deletedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("deleted_at < ?", deletedAt)) +} + +// DeletedAtLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeletedAtLte(deletedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("deleted_at <= ?", deletedAt)) +} + +// DeletedAtNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) DeletedAtNe(deletedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("deleted_at != ?", deletedAt)) +} + +// GetDB is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) GetDB() *gorm.DB { + return qs.db +} + +// GetUpdater is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) GetUpdater() UserRentCardUpdater { + return NewUserRentCardUpdater(qs.db) +} + +// HaveRentCountEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) HaveRentCountEq(haveRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("have_rent_count = ?", haveRentCount)) +} + +// HaveRentCountGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) HaveRentCountGt(haveRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("have_rent_count > ?", haveRentCount)) +} + +// HaveRentCountGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) HaveRentCountGte(haveRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("have_rent_count >= ?", haveRentCount)) +} + +// HaveRentCountIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) HaveRentCountIn(haveRentCount ...uint32) UserRentCardQuerySet { + if len(haveRentCount) == 0 { + qs.db.AddError(errors.New("must at least pass one haveRentCount in HaveRentCountIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("have_rent_count IN (?)", haveRentCount)) +} + +// HaveRentCountLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) HaveRentCountLt(haveRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("have_rent_count < ?", haveRentCount)) +} + +// HaveRentCountLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) HaveRentCountLte(haveRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("have_rent_count <= ?", haveRentCount)) +} + +// HaveRentCountNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) HaveRentCountNe(haveRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("have_rent_count != ?", haveRentCount)) +} + +// HaveRentCountNotIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) HaveRentCountNotIn(haveRentCount ...uint32) UserRentCardQuerySet { + if len(haveRentCount) == 0 { + qs.db.AddError(errors.New("must at least pass one haveRentCount in HaveRentCountNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("have_rent_count NOT IN (?)", haveRentCount)) +} + +// IDEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) IDEq(ID uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("id = ?", ID)) +} + +// IDGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) IDGt(ID uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("id > ?", ID)) +} + +// IDGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) IDGte(ID uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("id >= ?", ID)) +} + +// IDIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) IDIn(ID ...uint32) UserRentCardQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id IN (?)", ID)) +} + +// IDLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) IDLt(ID uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("id < ?", ID)) +} + +// IDLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) IDLte(ID uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("id <= ?", ID)) +} + +// IDNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) IDNe(ID uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("id != ?", ID)) +} + +// IDNotIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) IDNotIn(ID ...uint32) UserRentCardQuerySet { + if len(ID) == 0 { + qs.db.AddError(errors.New("must at least pass one ID in IDNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("id NOT IN (?)", ID)) +} + +// LevelRentCountEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) LevelRentCountEq(levelRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("level_rent_count = ?", levelRentCount)) +} + +// LevelRentCountGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) LevelRentCountGt(levelRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("level_rent_count > ?", levelRentCount)) +} + +// LevelRentCountGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) LevelRentCountGte(levelRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("level_rent_count >= ?", levelRentCount)) +} + +// LevelRentCountIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) LevelRentCountIn(levelRentCount ...uint32) UserRentCardQuerySet { + if len(levelRentCount) == 0 { + qs.db.AddError(errors.New("must at least pass one levelRentCount in LevelRentCountIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("level_rent_count IN (?)", levelRentCount)) +} + +// LevelRentCountLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) LevelRentCountLt(levelRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("level_rent_count < ?", levelRentCount)) +} + +// LevelRentCountLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) LevelRentCountLte(levelRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("level_rent_count <= ?", levelRentCount)) +} + +// LevelRentCountNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) LevelRentCountNe(levelRentCount uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("level_rent_count != ?", levelRentCount)) +} + +// LevelRentCountNotIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) LevelRentCountNotIn(levelRentCount ...uint32) UserRentCardQuerySet { + if len(levelRentCount) == 0 { + qs.db.AddError(errors.New("must at least pass one levelRentCount in LevelRentCountNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("level_rent_count NOT IN (?)", levelRentCount)) +} + +// Limit is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) Limit(limit int) UserRentCardQuerySet { + return qs.w(qs.db.Limit(limit)) +} + +// MemberLevelEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) MemberLevelEq(memberLevel uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("member_level = ?", memberLevel)) +} + +// MemberLevelGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) MemberLevelGt(memberLevel uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("member_level > ?", memberLevel)) +} + +// MemberLevelGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) MemberLevelGte(memberLevel uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("member_level >= ?", memberLevel)) +} + +// MemberLevelIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) MemberLevelIn(memberLevel ...uint32) UserRentCardQuerySet { + if len(memberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one memberLevel in MemberLevelIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("member_level IN (?)", memberLevel)) +} + +// MemberLevelLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) MemberLevelLt(memberLevel uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("member_level < ?", memberLevel)) +} + +// MemberLevelLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) MemberLevelLte(memberLevel uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("member_level <= ?", memberLevel)) +} + +// MemberLevelNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) MemberLevelNe(memberLevel uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("member_level != ?", memberLevel)) +} + +// MemberLevelNotIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) MemberLevelNotIn(memberLevel ...uint32) UserRentCardQuerySet { + if len(memberLevel) == 0 { + qs.db.AddError(errors.New("must at least pass one memberLevel in MemberLevelNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("member_level NOT IN (?)", memberLevel)) +} + +// Offset is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) Offset(offset int) UserRentCardQuerySet { + return qs.w(qs.db.Offset(offset)) +} + +// One is used to retrieve one result. It returns gorm.ErrRecordNotFound +// if nothing was fetched +func (qs UserRentCardQuerySet) One(ret *UserRentCard) error { + return qs.db.First(ret).Error +} + +// OrderAscByCanRentCount is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByCanRentCount() UserRentCardQuerySet { + return qs.w(qs.db.Order("can_rent_count ASC")) +} + +// OrderAscByCreatedAt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByCreatedAt() UserRentCardQuerySet { + return qs.w(qs.db.Order("created_at ASC")) +} + +// OrderAscByDeletedAt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByDeletedAt() UserRentCardQuerySet { + return qs.w(qs.db.Order("deleted_at ASC")) +} + +// OrderAscByHaveRentCount is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByHaveRentCount() UserRentCardQuerySet { + return qs.w(qs.db.Order("have_rent_count ASC")) +} + +// OrderAscByID is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByID() UserRentCardQuerySet { + return qs.w(qs.db.Order("id ASC")) +} + +// OrderAscByLevelRentCount is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByLevelRentCount() UserRentCardQuerySet { + return qs.w(qs.db.Order("level_rent_count ASC")) +} + +// OrderAscByMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByMemberLevel() UserRentCardQuerySet { + return qs.w(qs.db.Order("member_level ASC")) +} + +// OrderAscByStatus is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByStatus() UserRentCardQuerySet { + return qs.w(qs.db.Order("status ASC")) +} + +// OrderAscByUid is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByUid() UserRentCardQuerySet { + return qs.w(qs.db.Order("uid ASC")) +} + +// OrderAscByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderAscByUpdatedAt() UserRentCardQuerySet { + return qs.w(qs.db.Order("updated_at ASC")) +} + +// OrderDescByCanRentCount is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByCanRentCount() UserRentCardQuerySet { + return qs.w(qs.db.Order("can_rent_count DESC")) +} + +// OrderDescByCreatedAt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByCreatedAt() UserRentCardQuerySet { + return qs.w(qs.db.Order("created_at DESC")) +} + +// OrderDescByDeletedAt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByDeletedAt() UserRentCardQuerySet { + return qs.w(qs.db.Order("deleted_at DESC")) +} + +// OrderDescByHaveRentCount is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByHaveRentCount() UserRentCardQuerySet { + return qs.w(qs.db.Order("have_rent_count DESC")) +} + +// OrderDescByID is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByID() UserRentCardQuerySet { + return qs.w(qs.db.Order("id DESC")) +} + +// OrderDescByLevelRentCount is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByLevelRentCount() UserRentCardQuerySet { + return qs.w(qs.db.Order("level_rent_count DESC")) +} + +// OrderDescByMemberLevel is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByMemberLevel() UserRentCardQuerySet { + return qs.w(qs.db.Order("member_level DESC")) +} + +// OrderDescByStatus is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByStatus() UserRentCardQuerySet { + return qs.w(qs.db.Order("status DESC")) +} + +// OrderDescByUid is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByUid() UserRentCardQuerySet { + return qs.w(qs.db.Order("uid DESC")) +} + +// OrderDescByUpdatedAt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) OrderDescByUpdatedAt() UserRentCardQuerySet { + return qs.w(qs.db.Order("updated_at DESC")) +} + +// StatusEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) StatusEq(status uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("status = ?", status)) +} + +// StatusGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) StatusGt(status uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("status > ?", status)) +} + +// StatusGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) StatusGte(status uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("status >= ?", status)) +} + +// StatusIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) StatusIn(status ...uint32) UserRentCardQuerySet { + if len(status) == 0 { + qs.db.AddError(errors.New("must at least pass one status in StatusIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("status IN (?)", status)) +} + +// StatusLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) StatusLt(status uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("status < ?", status)) +} + +// StatusLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) StatusLte(status uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("status <= ?", status)) +} + +// StatusNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) StatusNe(status uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("status != ?", status)) +} + +// StatusNotIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) StatusNotIn(status ...uint32) UserRentCardQuerySet { + if len(status) == 0 { + qs.db.AddError(errors.New("must at least pass one status in StatusNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("status NOT IN (?)", status)) +} + +// UidEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UidEq(uid uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("uid = ?", uid)) +} + +// UidGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UidGt(uid uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("uid > ?", uid)) +} + +// UidGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UidGte(uid uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("uid >= ?", uid)) +} + +// UidIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UidIn(uid ...uint32) UserRentCardQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid IN (?)", uid)) +} + +// UidLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UidLt(uid uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("uid < ?", uid)) +} + +// UidLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UidLte(uid uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("uid <= ?", uid)) +} + +// UidNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UidNe(uid uint32) UserRentCardQuerySet { + return qs.w(qs.db.Where("uid != ?", uid)) +} + +// UidNotIn is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UidNotIn(uid ...uint32) UserRentCardQuerySet { + if len(uid) == 0 { + qs.db.AddError(errors.New("must at least pass one uid in UidNotIn")) + return qs.w(qs.db) + } + return qs.w(qs.db.Where("uid NOT IN (?)", uid)) +} + +// UpdatedAtEq is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UpdatedAtEq(updatedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("updated_at = ?", updatedAt)) +} + +// UpdatedAtGt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UpdatedAtGt(updatedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("updated_at > ?", updatedAt)) +} + +// UpdatedAtGte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UpdatedAtGte(updatedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("updated_at >= ?", updatedAt)) +} + +// UpdatedAtLt is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UpdatedAtLt(updatedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("updated_at < ?", updatedAt)) +} + +// UpdatedAtLte is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UpdatedAtLte(updatedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("updated_at <= ?", updatedAt)) +} + +// UpdatedAtNe is an autogenerated method +// nolint: dupl +func (qs UserRentCardQuerySet) UpdatedAtNe(updatedAt time.Time) UserRentCardQuerySet { + return qs.w(qs.db.Where("updated_at != ?", updatedAt)) +} + +// SetCanRentCount is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetCanRentCount(canRentCount uint32) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.CanRentCount)] = canRentCount + return u +} + +// SetCreatedAt is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetCreatedAt(createdAt time.Time) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.CreatedAt)] = createdAt + return u +} + +// SetDeletedAt is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetDeletedAt(deletedAt *time.Time) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.DeletedAt)] = deletedAt + return u +} + +// SetHaveRentCount is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetHaveRentCount(haveRentCount uint32) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.HaveRentCount)] = haveRentCount + return u +} + +// SetID is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetID(ID uint32) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.ID)] = ID + return u +} + +// SetLevelRentCount is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetLevelRentCount(levelRentCount uint32) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.LevelRentCount)] = levelRentCount + return u +} + +// SetMemberLevel is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetMemberLevel(memberLevel uint32) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.MemberLevel)] = memberLevel + return u +} + +// SetStatus is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetStatus(status uint32) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.Status)] = status + return u +} + +// SetUid is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetUid(uid uint32) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.Uid)] = uid + return u +} + +// SetUpdatedAt is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) SetUpdatedAt(updatedAt time.Time) UserRentCardUpdater { + u.fields[string(UserRentCardDBSchema.UpdatedAt)] = updatedAt + return u +} + +// Update is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) Update() error { + return u.db.Updates(u.fields).Error +} + +// UpdateNum is an autogenerated method +// nolint: dupl +func (u UserRentCardUpdater) UpdateNum() (int64, error) { + db := u.db.Updates(u.fields) + return db.RowsAffected, db.Error +} + +// ===== END of query set UserRentCardQuerySet + +// ===== BEGIN of UserRentCard modifiers + +// UserRentCardDBSchemaField describes database schema field. It requires for method 'Update' +type UserRentCardDBSchemaField string + +// String method returns string representation of field. +// nolint: dupl +func (f UserRentCardDBSchemaField) String() string { + return string(f) +} + +// UserRentCardDBSchema stores db field names of UserRentCard +var UserRentCardDBSchema = struct { + ID UserRentCardDBSchemaField + CreatedAt UserRentCardDBSchemaField + UpdatedAt UserRentCardDBSchemaField + DeletedAt UserRentCardDBSchemaField + Uid UserRentCardDBSchemaField + MemberLevel UserRentCardDBSchemaField + LevelRentCount UserRentCardDBSchemaField + HaveRentCount UserRentCardDBSchemaField + CanRentCount UserRentCardDBSchemaField + Status UserRentCardDBSchemaField +}{ + + ID: UserRentCardDBSchemaField("id"), + CreatedAt: UserRentCardDBSchemaField("created_at"), + UpdatedAt: UserRentCardDBSchemaField("updated_at"), + DeletedAt: UserRentCardDBSchemaField("deleted_at"), + Uid: UserRentCardDBSchemaField("uid"), + MemberLevel: UserRentCardDBSchemaField("member_level"), + LevelRentCount: UserRentCardDBSchemaField("level_rent_count"), + HaveRentCount: UserRentCardDBSchemaField("have_rent_count"), + CanRentCount: UserRentCardDBSchemaField("can_rent_count"), + Status: UserRentCardDBSchemaField("status"), +} + +// Update updates UserRentCard fields by primary key +// nolint: dupl +func (o *UserRentCard) Update(db *gorm.DB, fields ...UserRentCardDBSchemaField) error { + dbNameToFieldName := map[string]interface{}{ + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "uid": o.Uid, + "member_level": o.MemberLevel, + "level_rent_count": o.LevelRentCount, + "have_rent_count": o.HaveRentCount, + "can_rent_count": o.CanRentCount, + "status": o.Status, + } + u := map[string]interface{}{} + for _, f := range fields { + fs := f.String() + u[fs] = dbNameToFieldName[fs] + } + if err := db.Model(o).Updates(u).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return err + } + + return fmt.Errorf("can't update UserRentCard %v fields %v: %s", + o, fields, err) + } + + return nil +} + +// UserRentCardUpdater is an UserRentCard updates manager +type UserRentCardUpdater struct { + fields map[string]interface{} + db *gorm.DB +} + +// NewUserRentCardUpdater creates new UserRentCard updater +// nolint: dupl +func NewUserRentCardUpdater(db *gorm.DB) UserRentCardUpdater { + return UserRentCardUpdater{ + fields: map[string]interface{}{}, + db: db.Model(&UserRentCard{}), + } +} + +// ===== END of UserRentCard modifiers + // ===== END of all query sets diff --git a/model/base_init_db.go b/model/base_init_db.go index ddfa075..a9c7786 100644 --- a/model/base_init_db.go +++ b/model/base_init_db.go @@ -27,7 +27,7 @@ func InitDB() { DB.DB().SetMaxIdleConns(500) DB.DB().SetConnMaxLifetime(time.Second * 10) DB.LogMode(true) - DB.SetLogger(DBLoggerWriter{}) + //DB.SetLogger(DBLoggerWriter{}) DB.SingularTable(true) if err := DB.DB().Ping(); err != nil { fmt.Println("Ping Database Fail, error = ", err) diff --git a/model/model_test.go b/model/model_test.go index fb3592b..eed6185 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -95,6 +95,9 @@ func InitTestDB() { &UserRedeemCode{}, &DepositRefundRecord{}, &GroupSendMessageTemplate{}, + &OrderCard{}, + &UserRentCard{}, + &UserConsumeRecord{}, ) diff --git a/model/order.go b/model/order.go index 73bfa39..c9b5a26 100644 --- a/model/order.go +++ b/model/order.go @@ -1,12 +1,12 @@ package model import ( + "encoding/json" "errors" "fmt" "github.com/codinl/go-logger" "github.com/jinzhu/gorm" "math/rand" - "qiniupkg.com/x/log.v7" "time" ) @@ -63,14 +63,39 @@ type Order struct { Mchid string `json:"mchid"` // 商户 } +// gen:qs type OrderCard struct { Model - 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 - Status uint8 `json:"status" gorm:"index"` // 1-待领取 2-游玩中 3-已归还 4-未领取 + 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 + CardStatus uint32 `json:"card_status"` // 1-待取货中 2-游玩中 3-归还中 4-已完成 5-已取消 + 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"` // 取货码 } func (*Order) TableName() string { @@ -79,182 +104,311 @@ func (*Order) TableName() string { func (m *Order) ToInfo(card *GameCard) OrderInfo { return OrderInfo{ - Order: *m, - GameName: card.Name, - GamePrice: card.Price, - GameCoverImg: card.CoverImg, + Order: *m, } } type OrderInfo struct { Order - GameName string `json:"name" gorm:"index"` // 名称 - GamePrice uint32 `json:"price" gorm:"index"` // 价格 - GameCoverImg string `json:"cover_img"` // 封面 + Cards []OrderCard } -func GetOrderList(uid uint64, page, pageSize int) ([]OrderInfo, uint32, error) { - var ( - orders []Order - totalPage uint32 - orderInfos = make([]OrderInfo, 0, pageSize) - ) - page -= 1 - if page < 0 { - page = 0 +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 } - //oq := NewOrderQuerySet(DB).UidEq(uid).OrderDescByCreatedAt().PayStatusEq(PayStatusPaid) - oq := NewOrderQuerySet(DB).UidEq(uid).OrderDescByCreatedAt() + orderMap, err := OrderMap(orderIds) + if err != nil { + logger.Error("err:", err) + return list + } + + 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 { + 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 + } + } + listbytes, _ := json.Marshal(&list) + fmt.Println("listbytes:", string(listbytes)) + return list +} + +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 + } + if len(cards) == 0 { + return cardMap, nil + } + for i, _ := range cards { + cardMap[cards[i].ID] = cards[i] + } + return cardMap, nil +} + +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 + } + if len(cards) == 0 { + return cardMap, nil + } + for i, _ := range cards { + cardMap[cards[i].ID] = cards[i] + } + return cardMap, nil +} + +type OrderListReq struct { + Page int `json:"page"` + PageSize int `json:"page_size"` + OrderType uint32 `json:"order_type"` // 1-全部 2-进行中 3-已完成 + Uid uint32 `json:"uid"` +} + +func (m *OrderListReq) GetOrderCardList() ([]OrderCard, uint32, error) { + var ( + orderCards []OrderCard + totalPage uint32 + //orderInfos = make([]OrderInfo, 0, pageSize) + ) + 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() if err != nil { - log.Error("NewGameCardQuerySet err:", err) - return orderInfos, 0, err + logger.Error("NewGameCardQuerySet err:", err) + return orderCards, 0, err } - err = oq.Offset(page * pageSize).Limit(pageSize).All(&orders) + err = oq.OrderDescByCreatedAt().Offset(m.Page * m.PageSize).Limit(m.PageSize).All(&orderCards) if err != nil && err != RecordNotFound { - log.Error("err:", err) - return orderInfos, 0, err + logger.Error("err:", err) + return orderCards, 0, err } - totalPage = uint32(count/pageSize + 1) + totalPage = uint32(count/m.PageSize + 1) - var games []GameCard - gameIds := make([]uint32, 0, len(orders)) - for i, _ := range orders { - gameIds = append(gameIds, uint32(orders[i].GameCardId)) - } - if len(gameIds) == 0 { - log.Error("gameIds is null") - return orderInfos, 0, err - } - err = NewGameCardQuerySet(DB).IDIn(gameIds...).All(&games) - if err != nil && err != RecordNotFound { - log.Error("err:", err) - return orderInfos, 0, err - } - gamesMap := make(map[uint32]*GameCard) - for i, _ := range games { - gamesMap[games[i].ID] = &games[i] - } - for i, _ := range orders { - card, ok := gamesMap[uint32(orders[i].GameCardId)] - if !ok { - continue - } - orderInfos = append(orderInfos, orders[i].ToInfo(card)) - } + orderCards = OrderCardListSetGameInfo(orderCards) - return orderInfos, totalPage, nil + return orderCards, totalPage, nil } -func (m *Order) Info() (*OrderInfo, error) { - var ( - order Order - card GameCard - ) - err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order) +func (m *Order) Info() ([]OrderCard, error) { + + //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 + //} + + qs := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)) + if m.GameCardGoodsId != 0 { + qs = qs.GameCardGoodsIdEq(uint32(m.GameCardGoodsId)) + } + var orderCards []OrderCard + err := qs.All(&orderCards) if err != nil { - log.Error("err:", err) + logger.Error("err:", err) return nil, err } + orderCards = OrderCardListSetGameInfo(orderCards) - err = NewGameCardQuerySet(DB).IDEq(uint32(order.GameCardId)).One(&card) - if err != nil && err != RecordNotFound { - log.Error("err:", err) - return nil, err - } - - info := order.ToInfo(&card) - return &info, nil + //info := order.ToInfo(&card) + return orderCards, nil } -func (m *Order) Revert() (*OrderInfo, error) { +func (m *Order) Revert() error { var ( - order Order - card GameCard + orderCard OrderCard + //card GameCard ) - qs := NewOrderQuerySet(DB).IDEq(m.ID) - err := qs.One(&order) + //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") + //} + fmt.Println("GameCardGoodsId------:",m.GameCardGoodsId) + fmt.Println("ID------:",m.ID) + err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) if err != nil { logger.Errorf("err:%#v", err) - return nil, err + return err } - if order.CardStatus == OrderCardStatusCompleted { + if orderCard.CardStatus == OrderCardStatusCompleted { logger.Error("order card status completed") - return nil, errors.New("order card status completed") + return errors.New("order card status completed") } - err = qs.GetUpdater(). + //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 + + _, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater(). SetCardStatus(OrderCardStatusReturning). SetRevertTime(time.Now()). SetRevertStoreId(m.RevertStoreId). SetRevertExpressCompany(m.RevertExpressCompany). SetRevertExpressCompanyNo(m.RevertExpressCompanyNo). - SetRevertExpressNo(m.RevertExpressNo).Update() + SetRevertExpressNo(m.RevertExpressNo).UpdateNum() if err != nil { - log.Error("err:", err) - return nil, err + logger.Error("err:", err) + return err } - order.CardStatus = OrderCardStatusReturning - order.RevertTime = time.Now() - order.RevertStoreId = m.RevertStoreId - order.RevertExpressCompany = m.RevertExpressCompany - order.RevertExpressCompanyNo = m.RevertExpressCompanyNo - order.RevertExpressNo = m.RevertExpressNo - //err = NewGameCardQuerySet(DB).IDEq(uint32(order.GameCardId)).One(&card) //if err != nil && err != RecordNotFound { - // log.Error("err:", err) + // logger.Error("err:", err) // return nil, err //} - info := order.ToInfo(&card) - return &info, nil + + //info := order.ToInfo(&card) + return nil } -func (m *Order) RevertCancel() (*OrderInfo, error) { +func (m *Order) RevertCancel() (bool, error) { var ( - order Order - card GameCard + orderCard OrderCard + //order Order + //card GameCard ) - qs := NewOrderQuerySet(DB).IDEq(m.ID) - err := qs.One(&order) + //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") + //} + err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) if err != nil { logger.Errorf("err:%#v", err) - return nil, err + return false, err } - if order.CardStatus != OrderCardStatusReturning { - logger.Error("order card status completed") - return nil, errors.New("order card status completed") + if orderCard.CardStatus != OrderCardStatusReturning { + logger.Error("order card status returning") + return false, errors.New("order card status returning") } - err = qs.GetUpdater(). + //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 + _, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater(). SetCardStatus(OrderCardStatusPlaying). + //SetRevertTime(time.Time{}). SetRevertStoreId(0). SetRevertExpressCompany(""). SetRevertExpressCompanyNo(""). - SetRevertExpressNo("").Update() + SetRevertExpressNo("").UpdateNum() if err != nil { - log.Error("err:", err) - return nil, err + logger.Error("err:", err) + return false, err } - order.CardStatus = OrderCardStatusPlaying - //order.RevertTime = time.Now() - order.RevertStoreId = m.RevertStoreId - order.RevertExpressCompany = m.RevertExpressCompany - order.RevertExpressCompanyNo = m.RevertExpressCompanyNo - order.RevertExpressNo = m.RevertExpressNo - - info := order.ToInfo(&card) - return &info, nil + 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 } -func (m *Order) OrderCreate() error { - err := m.Create(DB) +func (m *Order) OrderCreate(gdb *gorm.DB) error { + err := m.Create(gdb) if err != nil { - log.Error("err:", err) + logger.Error("err:", err) return err } return nil @@ -280,7 +434,7 @@ func (m *Order) Modify() (*OrderInfo, error) { var card GameCard err := NewGameCardQuerySet(DB).IDEq(uint32(m.GameCardId)).One(&card) if err != nil && err != RecordNotFound { - log.Error("err:", err) + logger.Error("err:", err) return nil, err } @@ -289,10 +443,12 @@ func (m *Order) Modify() (*OrderInfo, error) { return &info, nil } -func IsHaveUnreturnedOrders(uid uint32) (bool, error) { - fmt.Println("uid", uid) +func (m *UserRentCard) IsHaveUnreturnedOrders(RentCount uint32) (bool, error) { + fmt.Println("uid", 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) + 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) //count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Count() //if err != nil { // logger.Error("err:", err) @@ -301,9 +457,22 @@ func IsHaveUnreturnedOrders(uid uint32) (bool, error) { unreturned := &struct { Count int `json:"count"` }{} - DB.Raw(sql).Scan(unreturned) + err := DB.Raw(sql).Scan(unreturned).Error + if err != nil { + logger.Error("err:", err) + return false, err + } fmt.Println("订单数量count:", unreturned.Count) - return unreturned.Count != 0, nil + return uint32(unreturned.Count)+RentCount > m.LevelRentCount, nil +} + +func IsHaveOnDeliverOrderCards(orderId uint32) (bool, error) { + count, err := NewOrderCardQuerySet(DB).OrderIdEq(orderId).CardStatusEq(1).Count() + if err != nil { + logger.Error("err:", err) + return false, err + } + return count > 0, nil } func IsUserHaveUnreturnedOrder(uid uint32) (bool, error) { @@ -361,57 +530,88 @@ func GetPickupCode() string { } -func (m *Order) Cancel() error { - var userOrder Order - err := NewOrderQuerySet(DB).IDEq(m.ID).One(&userOrder) +func (m *Order) Cancel() (bool, error) { + var ( + order Order + orderCard OrderCard + ) + err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order) if err != nil { - log.Error("err:", err) - return err + logger.Error("err:", err) + return false, err } - if userOrder.CardStatus != OrderCardStatusUnPick { - log.Error("card status not unpick err: ") - return errors.New("card status not unpick") + + //err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) + err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).One(&orderCard) + if err != nil && err != RecordNotFound { + logger.Errorf("err:%#v", err) + return false, err } - 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()) { - log.Error("card status expire err: ") - return errors.New("card status expire") + if err == RecordNotFound { + logger.Error("order card status not unpick") + return false, errors.New("order card status not unpick") } + //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") + //} //fmt.Println("PayStatus",userOrder.PayStatus) //fmt.Println("DeliveryType",userOrder.DeliveryType) //fmt.Println("CreatedAt",userOrder.CreatedAt.Add(4*time.Minute)) //fmt.Println("Now",time.Now()) - 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()) { - log.Error("card status expire err: ") - return errors.New("card status expire") - } + //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") + //} begin := DB.Begin() - err = NewOrderQuerySet(begin).IDEq(m.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update() + //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() if err != nil { begin.Rollback() - log.Error("err:", err) - return err + logger.Error("err:", err) + return false, err } - sql := fmt.Sprintf("UPDATE game_card_goods_stock SET rent_stock= rent_stock+1 WHERE store_id=%d AND game_card_id=%d;", userOrder.StoreId, userOrder.GameCardId) + 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) fmt.Println("sql:", sql) err = begin.Exec(sql).Error if err != nil { begin.Rollback() logger.Errorf("err:%#v", err) - return err + return false, err } err = begin.Commit().Error if err != nil { begin.Rollback() logger.Errorf("err:%#v", err) - return 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 + } } - *m = userOrder - return nil + m = &order + return isRecede, nil } func UnPayOrderSetCancel(uid uint32) { @@ -419,7 +619,7 @@ func UnPayOrderSetCancel(uid uint32) { var order Order err := NewOrderQuerySet(DB.Debug()).UidEq(uint64(uid)).PayStatusEq(PayStatusUnPay).CardStatusEq(OrderCardStatusUnPick).One(&order) if err != nil { - log.Error("err:", err) + logger.Error("err:", err) return } @@ -430,7 +630,7 @@ func UnPayOrderSetCancel(uid uint32) { SetCardStatus(OrderCardStatusCancel).UpdateNum() if err != nil { begin.Rollback() - log.Error("err:", err) + logger.Error("err:", err) return } @@ -439,39 +639,115 @@ func UnPayOrderSetCancel(uid uint32) { err = begin.Exec(sql).Error if err != nil { begin.Rollback() - log.Error("err:", err) + logger.Error("err:", err) return } err = begin.Commit().Error if err != nil { begin.Rollback() - log.Error("err:", err) + logger.Error("err:", err) } } -func (m *Order) CreateByCardInfoList(cardInfos []CardInfo, gdb *gorm.DB) error { - err := gdb.Create(m).Error - if err != nil { - log.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, - //} +//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) + if err != nil { + logger.Error("err:", err) + return false, err + } + if gameCardGoodsStock.RentStock < cards[i].Count { + logger.Error("order stock out ") + return false, errors.New("order stock out") } - } + return false, nil +} +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 +} + +func (m *Order) InventoryReduction(gdb *gorm.DB) error { + var cards []OrderCard + err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).All(&cards) + if err != nil { + logger.Error("err:", err) + return err + } + + for i, _ := range cards { + 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) + err := gdb.Exec(sql).Error + if err != nil { + logger.Error("err:", err) + return err + } + } + return nil +} + +func (m *Order) CreatOrderCard(cards []CardInfo, storeId uint32, gdb *gorm.DB) error { + for _, v := range cards { + for i := 0; i < int(v.Count); i++ { + 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 + } + } + } return nil } diff --git a/model/user.go b/model/user.go index 1d7ba2a..2841ec4 100644 --- a/model/user.go +++ b/model/user.go @@ -2,6 +2,7 @@ package model import ( "errors" + "fmt" "github.com/codinl/go-logger" "mh-server/lib/utils" "sync" @@ -91,6 +92,39 @@ type DepositRefundRecord struct { User User `json:"user" gorm:"-"` } +// 黄金会员 member_gold 白金会员 member_platinum 黑金会员 member_black_gold +// member_gold_deposit member_platinum_deposit member_black_gold_platinum +// express_fee +const ( + UserConsumeTypeMemberGold = "member_gold" + UserConsumeTypeMemberPlatinum = "member_platinum" + UserConsumeTypeMemberBlackGold = "member_black_gold" + UserConsumeTypeMemberGoldDeposit = "member_gold_deposit" + UserConsumeTypeMemberPlatinumDeposit = "member_platinum_deposit" + UserConsumeTypeMemberBlackGoldDeposit = "member_black_gold_platinum" + UserConsumeTypeExpressFee = "express_fee" +) + +// gen:qs +type UserConsumeRecord struct { + Model + Uid uint32 `json:"uid"` + ConsumeType string `json:"consume_type"` // 黄金会员 member_gold 白金会员 member_platinum 黑金会员 member_black_gold + Amount uint32 `json:"amount"` + Status uint32 `json:"status"` // 1-待支付 2-已支付 3-已退款 +} + +// gen:qs +type UserRentCard struct { + Model + Uid uint32 `json:"uid"` + MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员 + LevelRentCount uint32 `json:"level_rent_count"` // 等级借卡数量 + HaveRentCount uint32 `json:"have_rent_count"` // 已借卡数量 + CanRentCount uint32 `json:"can_rent_count"` // 可借卡数量 + Status uint32 `json:"status"` // 状态 +} + func GetUserByUid(uid uint32) *User { user := new(User) if err := NewUserQuerySet(DB).UidEq(uid).One(user); err != nil { @@ -100,6 +134,15 @@ func GetUserByUid(uid uint32) *User { return user } +func GetUserRentCard(uid uint32) *UserRentCard { + userRent := new(UserRentCard) + if err := NewUserRentCardQuerySet(DB).UidEq(uid).One(userRent); err != nil { + logger.Error(err, uid) + return nil + } + return userRent +} + func UserUpdate(user *User) error { if user.Uid == 0 { return errors.New("uid is null") @@ -395,3 +438,48 @@ func GetUserMutex(mutexKey string) *sync.Mutex { //} var AuthLoginMutex = sync.Mutex{} + +func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig) error { + //UserRentCard{} + var userRentCard UserRentCard + err := NewUserRentCardQuerySet(DB).UidEq(uid).One(&userRentCard) + if err != nil && err != RecordNotFound { + logger.Error("err:", err) + return err + } + if err == RecordNotFound { + user := GetUserByUid(uid) + if user == nil { + logger.Error("user nil") + return errors.New("user nil") + } + if memberConfig == nil { + memberConfig, err = GetMemberConfig(user.MemberLevel) + if err != nil { + logger.Error("GetMemberConfig err:", err) + return err + } + } + rentCard := &UserRentCard{ + Uid: uid, + MemberLevel: user.MemberLevel, + LevelRentCount: memberConfig.CardMax, + HaveRentCount: uint32(count), + CanRentCount: uint32(memberConfig.CardMax - count), + Status: 0, + } + err := DB.Create(rentCard).Error + if err != nil { + logger.Error("err", err) + return err + } + return nil + } + sql := fmt.Sprintf("UPDATE user_rent_card SET have_rent_count=have_rent_count+%d ,can_rent_count=can_rent_count-%d WHERE uid = %d", count, count, uid) + err = DB.Exec(sql).Error + if err != nil { + logger.Error("err", err) + return err + } + return nil +} diff --git a/router/router_app.go b/router/router_app.go index a618ead..e7c12fb 100644 --- a/router/router_app.go +++ b/router/router_app.go @@ -75,8 +75,9 @@ func ConfigAppRouter(r gin.IRouter) { user.POST("user_info/tel", controller.UserTel) // 获取用户手机号 user.POST("user_info/update", controller.UserInfoUpdate) // 修改用户信息 user.POST("open_member", controller.OpenMember) // 开通会员 + user.POST("upgrade_member", controller.UpgradeMember) // 开通会员 user.POST("pay_deposit", controller.PayDeposit) // 支付押金 - user.POST("refund_deposit", controller.RefundDeposit) // 押金 + user.POST("refund_deposit", controller.RefundDeposit) // 退押金 user.POST("refund_deposit_record", controller.UserDepositRefundRecordList) // 押金记录 user.POST("member_config", controller.MemberConfigList) // 开通会员配置 @@ -128,11 +129,11 @@ func ConfigAppRouter(r gin.IRouter) { order.POST("cancel", controller.OrderCancel) // 订单取消 order.Use(auth.UserAccessAuth) // TODO - order.POST("create", controller.OrderCreate) // 创建订单 - order.POST("pay", controller.OrderPay) // 订单支付 - order.POST("list", controller.OrderList) // 订单列表 - order.POST("revert", controller.OrderRevert) // 订单归还 - order.POST("revert/cancel", controller.OrderRevertCancel) // 订单归还 + order.POST("create", controller.RentCardOrderCreate) // 创建租卡 + order.POST("pay", controller.OrderPay) // 租卡订单支付 + order.POST("list", controller.RentCardOrderList) // 租卡订单列表 + order.POST("revert", controller.OrderRevert) // 租卡订单归还 + order.POST("revert/cancel", controller.OrderRevertCancel) // 租卡订单取消归还 //order.POST("express_fee/refund", controller.ExpressFeeRefund) // 物流费退款 order.POST("confirm_receipt", controller.ConfirmReceipt) // 订单确认收货 From 75b20230c6b49ab91fa31c6dddc308c282f130ae Mon Sep 17 00:00:00 2001 From: li Date: Thu, 27 Jan 2022 22:24:29 +0800 Subject: [PATCH 06/11] fix: --- controller/game_card.go | 70 ++++++-- controller/order.go | 28 ++- controller/user.go | 184 +++++++++++++++++--- lib/wxpay/wx_pay.go | 1 + model/autogenerated_user.go | 332 ++++++++++++++++++++++++------------ model/order.go | 59 +++++-- model/redeem_code.go | 4 +- model/user.go | 68 ++++---- router/router_app.go | 7 +- 9 files changed, 546 insertions(+), 207 deletions(-) diff --git a/controller/game_card.go b/controller/game_card.go index 87aaf18..b7432f3 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -252,11 +252,13 @@ func PushWXPayNotice(c *gin.Context) { if notify.Attach == wxpay.WxPayRentCard { logger.Info("租借游戏卡 支付成功:") var order model.Order - err := model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).One(&order) + err := model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).PayStatusEq(PayStatusUnPay).One(&order) if err != nil { logger.Error("err:", err) return } + //orderJson, _ := json.Marshal(&order) + //fmt.Println("orderJson:", string(orderJson)) begin := model.DB.Begin() err = model.NewOrderQuerySet(begin).IDEq(order.ID).GetUpdater(). @@ -287,13 +289,13 @@ func PushWXPayNotice(c *gin.Context) { return } - count, err := model.NewOrderQuerySet(begin).IDEq(order.ID).Count() - if err != nil { - logger.Error("err:", err) - return - } + //count, err := model.NewOrderQuerySet(model.DB).UidEq(order.Uid).IDEq(order.ID).Count() + //if err != nil { + // logger.Error("err:", err) + // return + //} - go model.OrderCardUserRentCard(uint32(order.Uid), uint32(count), nil) + //go model.OrderCardUserRentCard(uint32(order.Uid), uint32(count), nil) } else if notify.Attach == wxpay.WxPayMember { logger.Info("开通会员 支付成功:") @@ -334,10 +336,16 @@ func PushWXPayNotice(c *gin.Context) { logger.Error("GetMemberConfig err:", err) return } - - err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit}) + openMemberTime := time.Now() + if !user.OpenMemberTime.IsZero() { + openMemberTime = user.OpenMemberTime + } + _, err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).SetMemberExpire(expireTime). + SetDeposit(memberConfig.MemberDeposit).SetOpenMemberTime(openMemberTime).UpdateNum() + //err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit}) if err != nil { logger.Error("err:", err) + return } var invite model.UserInvite @@ -418,7 +426,7 @@ func PushWXPayNotice(c *gin.Context) { memberConfig, err := model.GetMemberConfig(user.MemberLevel) if err != nil { - logger.Error("err:",err) + logger.Error("err:", err) return } @@ -429,6 +437,48 @@ func PushWXPayNotice(c *gin.Context) { if num == 0 { logger.Error("update deposit num is 0") } + } else if notify.Attach == wxpay.WxPayUpgradeMember { + + record := &model.UserOpenMemberRecord{OpenNo: notify.OutTradeNo} + err := record.GetByOpenNo() + if err != nil { + logger.Error("err:", err) + } + fmt.Println("UpgradeMember:", record.Uid) + var user model.User + err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).One(&user) + if err != nil { + logger.Error("err:", err) + return + } + memberConfig, err := model.GetMemberConfig(record.MemberLevel) + if err != nil { + logger.Error("GetMemberConfig err:", err) + return + } + + _, err = model.NewUserQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel).SetMemberExpire(record.MemberExpire). + SetDeposit(memberConfig.MemberDeposit).UpdateNum() + //err = model.UserUpdate(&model.User{Uid: uint32(record.Uid), MemberLevel: record.MemberLevel, MemberExpire: expireTime, Deposit: memberConfig.MemberDeposit}) + if err != nil { + logger.Error("err:", err) + return + } + // 添加会员时长 等级 借卡数量 + var userRentCard model.UserRentCard + err = model.NewUserRentCardQuerySet(model.DB).UidEq(record.Uid).One(&userRentCard) + if err != nil { + logger.Error("err:", err) + return + } + + _, err = model.NewUserRentCardQuerySet(model.DB).UidEq(record.Uid).GetUpdater().SetMemberLevel(record.MemberLevel). + SetLevelRentCount(memberConfig.CardMax).SetCanRentCount(memberConfig.CardMax - userRentCard.HaveRentCount).UpdateNum() + if err != nil { + logger.Error("err:", err) + return + } + } logger.Debug("微信推动支付通知") diff --git a/controller/order.go b/controller/order.go index f31d982..d9ae286 100644 --- a/controller/order.go +++ b/controller/order.go @@ -71,7 +71,6 @@ func RentCardOrderList(c *gin.Context) { } req.Uid = uc.Uid - orderCardList, totalPage, err := req.GetOrderCardList() // TODO if err != nil { logger.Error("err:", err) @@ -90,9 +89,10 @@ func RentCardOrderList(c *gin.Context) { func OrderInfo(c *gin.Context) { req := struct { - OrderId uint32 `json:"order_id"` - GameCardId uint64 `json:"game_card_id"` // 游戏id - GameCardGoodsId uint64 `json:"game_card_goods_id" ` // 游戏卡id + //OrderId uint32 `json:"order_id"` + //GameCardId uint64 `json:"game_card_id"` // 游戏id + //GameCardGoodsId uint64 `json:"game_card_goods_id" ` // 游戏卡id + OrderCardId uint32 `json:"order_card_id"` }{} if c.ShouldBindJSON(&req) != nil { logger.Error("ShouldBindJSON err") @@ -100,9 +100,9 @@ func OrderInfo(c *gin.Context) { return } order := model.Order{} - order.ID = req.OrderId - order.GameCardId = req.GameCardId - info, err := order.Info() + //order.ID = req.OrderId + //order.GameCardId = req.GameCardId + info, err := order.Info(req.OrderCardId) if err != nil { logger.Error("err:", err) RespJson(c, status.InternalServerError, nil) @@ -324,7 +324,7 @@ func RentCardOrderCreate(c *gin.Context) { stockEnough, err := model.IsCardGoodsStockEnough(req.GameCardList, req.StoreId) if err != nil { logger.Error("err:", err) - RespJson(c, status.InternalServerError, nil) + RespJson(c, status.OrderStockOut, nil) return } if stockEnough { @@ -376,7 +376,7 @@ func RentCardOrderCreate(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } - go model.OrderCardUserRentCard(uc.Uid, cardCount, memberConfig) + go model.OrderCardUserRentCard(uc.Uid, cardCount, memberConfig, nil) ret := map[string]interface{}{ "web_pay": "", "order_id": order.ID, @@ -869,12 +869,6 @@ func OrderCancel(c *gin.Context) { fmt.Println("order:", order) if isRecede { - err = model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update() - if err != nil { - logger.Error("err:", err) - RespJson(c, status.InternalServerError, nil) - return - } outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID) if err != nil { @@ -901,8 +895,8 @@ func OrderCancel(c *gin.Context) { Currency: "CNY", }, } - //bytes, _ := json.Marshal(orderRefund) - //fmt.Println("订单取消:", string(bytes)) + bytes, _ := json.Marshal(order) + fmt.Println("订单取消:", string(bytes)) //err = wxpay.WxPayOrderRefund(orderRefund) err = wxpay.TransactionOrderRefund(orderRefund) if err != nil { diff --git a/controller/user.go b/controller/user.go index babcbc8..b4ea2c8 100644 --- a/controller/user.go +++ b/controller/user.go @@ -298,32 +298,73 @@ func UpgradeMember(c *gin.Context) { RespJson(c, status.InternalServerError, nil) return } - //configInfo, err := model.PayConfigInfo() - //if err != nil { - // logger.Error("err:", err) - // RespJson(c, status.InternalServerError, nil) - // return - //} - memberConfig, err := model.GetMemberConfig(req.MemberLevel) + + originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel) if err != nil { logger.Error("err:", err) RespJson(c, status.InternalServerError, nil) return } - //totalFee := uint32(MemberFee + DepositFee) - ////totalFee = uint32(3) // TODO 测试 - //if user.Deposit == 300 { - // totalFee = MemberFee - // // //totalFee = uint32(1) // TODO 测试 - //} - - fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit) - - totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit - if user.Deposit == memberConfig.MemberDeposit { - totalFee = memberConfig.MemberFee + memberConfig, err := model.GetMemberConfig(req.MemberLevel) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return } + raiseTime, err := time.Parse("2006-01-02 15:04:05", "2022-01-01 00:00:00") + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + memberFee := originalMemberConfig.MemberFee + if user.OpenMemberTime.Before(raiseTime) { + memberFee = 29900 + } + + // 补押金 + depositMendFee := int64(memberConfig.MemberDeposit) - int64(user.Deposit) + + count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).StatusEq(model.RedeemCodeStatusUsed).Count() + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + fmt.Println("count:", count) + // 抵扣天数 + deductionDays := int64(0) + deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 12*3600 + if deductionTime < 0 { + deductionTime = 0 + } + if deductionTime > 0 { + deductionDays = deductionTime / int64(24*3600) + } + + // 抵扣金 + deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100 + + // 补会员费 + memberMendFee := int64(memberConfig.MemberFee) - deductionFee + + totalFee := int64(depositMendFee) + memberMendFee + //if memberMendFee < 0 { + // depositMendFee = depositMendFee + memberMendFee + //} + fmt.Println("depositMendFee : memberMendFee", depositMendFee, memberMendFee) + + if totalFee == 0 { + logger.Error(errors.New("totalFee is 0")) + RespJson(c, status.InternalServerError, nil) + return + } + + //totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit + //if user.Deposit == memberConfig.MemberDeposit { + // totalFee = memberConfig.MemberFee + //} if totalFee == 0 { logger.Error(errors.New("totalFee is 0")) RespJson(c, status.InternalServerError, nil) @@ -336,15 +377,17 @@ func UpgradeMember(c *gin.Context) { // return //} //orderSn := utils.GetSerialNo32HEXString() + memberExpire := time.Now().AddDate(1, 0, count*30) orderSn := model.GetOrderSn() - err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, MemberLevel: req.MemberLevel}.Insert() + err = model.UserOpenMemberRecord{Uid: uc.Uid, OpenNo: orderSn, + MemberLevel: req.MemberLevel, OrderType: 3, MemberExpire: memberExpire}.Insert() if err != nil { logger.Error(errors.New("WebPay err")) RespJson(c, status.InternalServerError, nil) return } - webPay, err := wxpay.WebPay(orderSn, totalFee, user.WxOpenID, "N", wxpay.WxPayMember) + webPay, err := wxpay.WebPay(orderSn, uint32(totalFee), user.WxOpenID, "N", wxpay.WxPayUpgradeMember) if err != nil { logger.Error(errors.New("WebPay err")) RespJson(c, status.InternalServerError, nil) @@ -354,6 +397,105 @@ func UpgradeMember(c *gin.Context) { RespOK(c, webPay) } +func UpgradeMemberInfo(c *gin.Context) { + req := struct { + MemberLevel uint32 `json:"member_level"` // 昵称 + }{} + if c.ShouldBindJSON(&req) != nil { + logger.Error("parameter err") + RespJson(c, status.BadRequest, nil) + return + } + uc := auth.GetCurrentUser(c) + if uc == nil { + RespJson(c, status.Unauthorized, nil) + return + } + + user := model.GetUserByUid(uc.Uid) + if user.MemberLevel != 2 && user.MemberLevel != 4 { + logger.Error("MemberLevel err:") + RespJson(c, status.InternalServerError, nil) + return + } + + //configInfo, err := model.PayConfigInfo() + //if err != nil { + // logger.Error("err:", err) + // RespJson(c, status.InternalServerError, nil) + // return + //} + originalMemberConfig, err := model.GetMemberConfig(user.MemberLevel) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + + memberConfig, err := model.GetMemberConfig(req.MemberLevel) + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + raiseTime, err := time.Parse("2006-01-02 15:04:05", "2022-01-01 00:00:00") + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + memberFee := originalMemberConfig.MemberFee + if user.OpenMemberTime.Before(raiseTime) { + memberFee = 29900 + } + + // 补押金 + depositMendFee := int64(memberConfig.MemberDeposit) - int64(user.Deposit) + + count, err := model.NewUserRedeemCodeQuerySet(model.DB).UidEq(uc.Uid).StatusEq(model.RedeemCodeStatusUsed).Count() + if err != nil { + logger.Error("err:", err) + RespJson(c, status.InternalServerError, nil) + return + } + fmt.Println("count:", count) + // 抵扣天数 + deductionDays := int64(0) + deductionTime := user.MemberExpire.Unix() - int64(count*30*24*3600) - time.Now().Unix() + 12*3600 + if deductionTime < 0 { + deductionTime = 0 + } + if deductionTime > 0 { + deductionDays = deductionTime / int64(24*3600) + } + + // 抵扣金 + deductionFee := (((int64(memberFee) * deductionDays) / 365) / 100) * 100 + + // 补会员费 + memberMendFee := int64(memberConfig.MemberFee) - deductionFee + + totalFee := int64(depositMendFee) + memberMendFee + //if memberMendFee < 0 { + // depositMendFee = depositMendFee + memberMendFee + //} + fmt.Println("depositMendFee : memberMendFee", depositMendFee, memberMendFee) + + if totalFee == 0 { + logger.Error(errors.New("totalFee is 0")) + RespJson(c, status.InternalServerError, nil) + return + } + + RespOK(c, map[string]interface{}{ + "deduction_fee": deductionFee, // 会员抵扣费 + "deduction_days": deductionDays, // 会员抵扣天数 + "member_mend_fee": memberMendFee, // 会员补费 + "deposit_mend_fee": depositMendFee, // 补押金 + "total_fee": totalFee, // 总费用 + }) +} + func PayDeposit(c *gin.Context) { uc := auth.GetCurrentUser(c) if uc == nil { diff --git a/lib/wxpay/wx_pay.go b/lib/wxpay/wx_pay.go index 2bde73b..fdc00cf 100644 --- a/lib/wxpay/wx_pay.go +++ b/lib/wxpay/wx_pay.go @@ -37,6 +37,7 @@ const ( WxPayMember = "member_pay" // 会员 WxPayRentCard = "rent_card_pay" // 租卡 WxPayDeposit = "deposit_pay" // 押金 + WxPayUpgradeMember = "upgrade_member" // 押金 //NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产 //NotifyUrl = "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice" // TODO 测试 diff --git a/model/autogenerated_user.go b/model/autogenerated_user.go index 98a37b8..510ffe9 100644 --- a/model/autogenerated_user.go +++ b/model/autogenerated_user.go @@ -3439,6 +3439,42 @@ func (qs UserOpenMemberRecordQuerySet) Limit(limit int) UserOpenMemberRecordQuer return qs.w(qs.db.Limit(limit)) } +// MemberExpireEq is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberExpireEq(memberExpire time.Time) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_expire = ?", memberExpire)) +} + +// MemberExpireGt is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberExpireGt(memberExpire time.Time) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_expire > ?", memberExpire)) +} + +// MemberExpireGte is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberExpireGte(memberExpire time.Time) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_expire >= ?", memberExpire)) +} + +// MemberExpireLt is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberExpireLt(memberExpire time.Time) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_expire < ?", memberExpire)) +} + +// MemberExpireLte is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberExpireLte(memberExpire time.Time) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_expire <= ?", memberExpire)) +} + +// MemberExpireNe is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) MemberExpireNe(memberExpire time.Time) UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Where("member_expire != ?", memberExpire)) +} + // MemberLevelEq is an autogenerated method // nolint: dupl func (qs UserOpenMemberRecordQuerySet) MemberLevelEq(memberLevel uint32) UserOpenMemberRecordQuerySet { @@ -3557,6 +3593,12 @@ func (qs UserOpenMemberRecordQuerySet) OrderAscByID() UserOpenMemberRecordQueryS return qs.w(qs.db.Order("id ASC")) } +// OrderAscByMemberExpire is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) OrderAscByMemberExpire() UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Order("member_expire ASC")) +} + // OrderAscByMemberLevel is an autogenerated method // nolint: dupl func (qs UserOpenMemberRecordQuerySet) OrderAscByMemberLevel() UserOpenMemberRecordQuerySet { @@ -3605,6 +3647,12 @@ func (qs UserOpenMemberRecordQuerySet) OrderDescByID() UserOpenMemberRecordQuery return qs.w(qs.db.Order("id DESC")) } +// OrderDescByMemberExpire is an autogenerated method +// nolint: dupl +func (qs UserOpenMemberRecordQuerySet) OrderDescByMemberExpire() UserOpenMemberRecordQuerySet { + return qs.w(qs.db.Order("member_expire DESC")) +} + // OrderDescByMemberLevel is an autogenerated method // nolint: dupl func (qs UserOpenMemberRecordQuerySet) OrderDescByMemberLevel() UserOpenMemberRecordQuerySet { @@ -3860,6 +3908,13 @@ func (u UserOpenMemberRecordUpdater) SetID(ID uint32) UserOpenMemberRecordUpdate return u } +// SetMemberExpire is an autogenerated method +// nolint: dupl +func (u UserOpenMemberRecordUpdater) SetMemberExpire(memberExpire time.Time) UserOpenMemberRecordUpdater { + u.fields[string(UserOpenMemberRecordDBSchema.MemberExpire)] = memberExpire + return u +} + // SetMemberLevel is an autogenerated method // nolint: dupl func (u UserOpenMemberRecordUpdater) SetMemberLevel(memberLevel uint32) UserOpenMemberRecordUpdater { @@ -3930,41 +3985,44 @@ func (f UserOpenMemberRecordDBSchemaField) String() string { // UserOpenMemberRecordDBSchema stores db field names of UserOpenMemberRecord var UserOpenMemberRecordDBSchema = struct { - ID UserOpenMemberRecordDBSchemaField - CreatedAt UserOpenMemberRecordDBSchemaField - UpdatedAt UserOpenMemberRecordDBSchemaField - DeletedAt UserOpenMemberRecordDBSchemaField - Uid UserOpenMemberRecordDBSchemaField - OpenNo UserOpenMemberRecordDBSchemaField - OrderId UserOpenMemberRecordDBSchemaField - OrderType UserOpenMemberRecordDBSchemaField - MemberLevel UserOpenMemberRecordDBSchemaField + ID UserOpenMemberRecordDBSchemaField + CreatedAt UserOpenMemberRecordDBSchemaField + UpdatedAt UserOpenMemberRecordDBSchemaField + DeletedAt UserOpenMemberRecordDBSchemaField + Uid UserOpenMemberRecordDBSchemaField + OpenNo UserOpenMemberRecordDBSchemaField + OrderId UserOpenMemberRecordDBSchemaField + OrderType UserOpenMemberRecordDBSchemaField + MemberLevel UserOpenMemberRecordDBSchemaField + MemberExpire UserOpenMemberRecordDBSchemaField }{ - ID: UserOpenMemberRecordDBSchemaField("id"), - CreatedAt: UserOpenMemberRecordDBSchemaField("created_at"), - UpdatedAt: UserOpenMemberRecordDBSchemaField("updated_at"), - DeletedAt: UserOpenMemberRecordDBSchemaField("deleted_at"), - Uid: UserOpenMemberRecordDBSchemaField("uid"), - OpenNo: UserOpenMemberRecordDBSchemaField("open_no"), - OrderId: UserOpenMemberRecordDBSchemaField("order_id"), - OrderType: UserOpenMemberRecordDBSchemaField("order_type"), - MemberLevel: UserOpenMemberRecordDBSchemaField("member_level"), + ID: UserOpenMemberRecordDBSchemaField("id"), + CreatedAt: UserOpenMemberRecordDBSchemaField("created_at"), + UpdatedAt: UserOpenMemberRecordDBSchemaField("updated_at"), + DeletedAt: UserOpenMemberRecordDBSchemaField("deleted_at"), + Uid: UserOpenMemberRecordDBSchemaField("uid"), + OpenNo: UserOpenMemberRecordDBSchemaField("open_no"), + OrderId: UserOpenMemberRecordDBSchemaField("order_id"), + OrderType: UserOpenMemberRecordDBSchemaField("order_type"), + MemberLevel: UserOpenMemberRecordDBSchemaField("member_level"), + MemberExpire: UserOpenMemberRecordDBSchemaField("member_expire"), } // Update updates UserOpenMemberRecord fields by primary key // nolint: dupl func (o *UserOpenMemberRecord) Update(db *gorm.DB, fields ...UserOpenMemberRecordDBSchemaField) error { dbNameToFieldName := map[string]interface{}{ - "id": o.ID, - "created_at": o.CreatedAt, - "updated_at": o.UpdatedAt, - "deleted_at": o.DeletedAt, - "uid": o.Uid, - "open_no": o.OpenNo, - "order_id": o.OrderId, - "order_type": o.OrderType, - "member_level": o.MemberLevel, + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "uid": o.Uid, + "open_no": o.OpenNo, + "order_id": o.OrderId, + "order_type": o.OrderType, + "member_level": o.MemberLevel, + "member_expire": o.MemberExpire, } u := map[string]interface{}{} for _, f := range fields { @@ -4722,6 +4780,42 @@ func (qs UserQuerySet) One(ret *User) error { return qs.db.First(ret).Error } +// OpenMemberTimeEq is an autogenerated method +// nolint: dupl +func (qs UserQuerySet) OpenMemberTimeEq(openMemberTime time.Time) UserQuerySet { + return qs.w(qs.db.Where("open_member_time = ?", openMemberTime)) +} + +// OpenMemberTimeGt is an autogenerated method +// nolint: dupl +func (qs UserQuerySet) OpenMemberTimeGt(openMemberTime time.Time) UserQuerySet { + return qs.w(qs.db.Where("open_member_time > ?", openMemberTime)) +} + +// OpenMemberTimeGte is an autogenerated method +// nolint: dupl +func (qs UserQuerySet) OpenMemberTimeGte(openMemberTime time.Time) UserQuerySet { + return qs.w(qs.db.Where("open_member_time >= ?", openMemberTime)) +} + +// OpenMemberTimeLt is an autogenerated method +// nolint: dupl +func (qs UserQuerySet) OpenMemberTimeLt(openMemberTime time.Time) UserQuerySet { + return qs.w(qs.db.Where("open_member_time < ?", openMemberTime)) +} + +// OpenMemberTimeLte is an autogenerated method +// nolint: dupl +func (qs UserQuerySet) OpenMemberTimeLte(openMemberTime time.Time) UserQuerySet { + return qs.w(qs.db.Where("open_member_time <= ?", openMemberTime)) +} + +// OpenMemberTimeNe is an autogenerated method +// nolint: dupl +func (qs UserQuerySet) OpenMemberTimeNe(openMemberTime time.Time) UserQuerySet { + return qs.w(qs.db.Where("open_member_time != ?", openMemberTime)) +} + // OrderAscByBond is an autogenerated method // nolint: dupl func (qs UserQuerySet) OrderAscByBond() UserQuerySet { @@ -4776,6 +4870,12 @@ func (qs UserQuerySet) OrderAscByMemberLevel() UserQuerySet { return qs.w(qs.db.Order("member_level ASC")) } +// OrderAscByOpenMemberTime is an autogenerated method +// nolint: dupl +func (qs UserQuerySet) OrderAscByOpenMemberTime() UserQuerySet { + return qs.w(qs.db.Order("open_member_time ASC")) +} + // OrderAscByStoreId is an autogenerated method // nolint: dupl func (qs UserQuerySet) OrderAscByStoreId() UserQuerySet { @@ -4866,6 +4966,12 @@ func (qs UserQuerySet) OrderDescByMemberLevel() UserQuerySet { return qs.w(qs.db.Order("member_level DESC")) } +// OrderDescByOpenMemberTime is an autogenerated method +// nolint: dupl +func (qs UserQuerySet) OrderDescByOpenMemberTime() UserQuerySet { + return qs.w(qs.db.Order("open_member_time DESC")) +} + // OrderDescByStoreId is an autogenerated method // nolint: dupl func (qs UserQuerySet) OrderDescByStoreId() UserQuerySet { @@ -5515,6 +5621,13 @@ func (u UserUpdater) SetMemberLevel(memberLevel uint32) UserUpdater { return u } +// SetOpenMemberTime is an autogenerated method +// nolint: dupl +func (u UserUpdater) SetOpenMemberTime(openMemberTime time.Time) UserUpdater { + u.fields[string(UserDBSchema.OpenMemberTime)] = openMemberTime + return u +} + // SetProvince is an autogenerated method // nolint: dupl func (u UserUpdater) SetProvince(province string) UserUpdater { @@ -5627,95 +5740,98 @@ func (f UserDBSchemaField) String() string { // UserDBSchema stores db field names of User var UserDBSchema = struct { - ID UserDBSchemaField - CreatedAt UserDBSchemaField - UpdatedAt UserDBSchemaField - DeletedAt UserDBSchemaField - Uid UserDBSchemaField - MemberLevel UserDBSchemaField - MemberExpire UserDBSchemaField - Bond UserDBSchemaField - WxName UserDBSchemaField - WxAvatar UserDBSchemaField - WxOpenID UserDBSchemaField - AppOpenID UserDBSchemaField - WxUnionID UserDBSchemaField - Tel UserDBSchemaField - Gender UserDBSchemaField - City UserDBSchemaField - Province UserDBSchemaField - Country UserDBSchemaField - Deposit UserDBSchemaField - UserType UserDBSchemaField - StoreId UserDBSchemaField - InviteCodeUrl UserDBSchemaField - LastLoginAt UserDBSchemaField - IP UserDBSchemaField - InBlack UserDBSchemaField - StoreType UserDBSchemaField - Version UserDBSchemaField + ID UserDBSchemaField + CreatedAt UserDBSchemaField + UpdatedAt UserDBSchemaField + DeletedAt UserDBSchemaField + Uid UserDBSchemaField + MemberLevel UserDBSchemaField + MemberExpire UserDBSchemaField + OpenMemberTime UserDBSchemaField + Bond UserDBSchemaField + WxName UserDBSchemaField + WxAvatar UserDBSchemaField + WxOpenID UserDBSchemaField + AppOpenID UserDBSchemaField + WxUnionID UserDBSchemaField + Tel UserDBSchemaField + Gender UserDBSchemaField + City UserDBSchemaField + Province UserDBSchemaField + Country UserDBSchemaField + Deposit UserDBSchemaField + UserType UserDBSchemaField + StoreId UserDBSchemaField + InviteCodeUrl UserDBSchemaField + LastLoginAt UserDBSchemaField + IP UserDBSchemaField + InBlack UserDBSchemaField + StoreType UserDBSchemaField + Version UserDBSchemaField }{ - ID: UserDBSchemaField("id"), - CreatedAt: UserDBSchemaField("created_at"), - UpdatedAt: UserDBSchemaField("updated_at"), - DeletedAt: UserDBSchemaField("deleted_at"), - Uid: UserDBSchemaField("uid"), - MemberLevel: UserDBSchemaField("member_level"), - MemberExpire: UserDBSchemaField("member_expire"), - Bond: UserDBSchemaField("bond"), - WxName: UserDBSchemaField("wx_name"), - WxAvatar: UserDBSchemaField("wx_avatar"), - WxOpenID: UserDBSchemaField("wx_open_id"), - AppOpenID: UserDBSchemaField("app_open_id"), - WxUnionID: UserDBSchemaField("wx_union_id"), - Tel: UserDBSchemaField("tel"), - Gender: UserDBSchemaField("gender"), - City: UserDBSchemaField("city"), - Province: UserDBSchemaField("province"), - Country: UserDBSchemaField("country"), - Deposit: UserDBSchemaField("deposit"), - UserType: UserDBSchemaField("user_type"), - StoreId: UserDBSchemaField("store_id"), - InviteCodeUrl: UserDBSchemaField("invite_code_url"), - LastLoginAt: UserDBSchemaField("last_login_at"), - IP: UserDBSchemaField("ip"), - InBlack: UserDBSchemaField("in_black"), - StoreType: UserDBSchemaField("store_type"), - Version: UserDBSchemaField("version"), + ID: UserDBSchemaField("id"), + CreatedAt: UserDBSchemaField("created_at"), + UpdatedAt: UserDBSchemaField("updated_at"), + DeletedAt: UserDBSchemaField("deleted_at"), + Uid: UserDBSchemaField("uid"), + MemberLevel: UserDBSchemaField("member_level"), + MemberExpire: UserDBSchemaField("member_expire"), + OpenMemberTime: UserDBSchemaField("open_member_time"), + Bond: UserDBSchemaField("bond"), + WxName: UserDBSchemaField("wx_name"), + WxAvatar: UserDBSchemaField("wx_avatar"), + WxOpenID: UserDBSchemaField("wx_open_id"), + AppOpenID: UserDBSchemaField("app_open_id"), + WxUnionID: UserDBSchemaField("wx_union_id"), + Tel: UserDBSchemaField("tel"), + Gender: UserDBSchemaField("gender"), + City: UserDBSchemaField("city"), + Province: UserDBSchemaField("province"), + Country: UserDBSchemaField("country"), + Deposit: UserDBSchemaField("deposit"), + UserType: UserDBSchemaField("user_type"), + StoreId: UserDBSchemaField("store_id"), + InviteCodeUrl: UserDBSchemaField("invite_code_url"), + LastLoginAt: UserDBSchemaField("last_login_at"), + IP: UserDBSchemaField("ip"), + InBlack: UserDBSchemaField("in_black"), + StoreType: UserDBSchemaField("store_type"), + Version: UserDBSchemaField("version"), } // Update updates User fields by primary key // nolint: dupl func (o *User) Update(db *gorm.DB, fields ...UserDBSchemaField) error { dbNameToFieldName := map[string]interface{}{ - "id": o.ID, - "created_at": o.CreatedAt, - "updated_at": o.UpdatedAt, - "deleted_at": o.DeletedAt, - "uid": o.Uid, - "member_level": o.MemberLevel, - "member_expire": o.MemberExpire, - "bond": o.Bond, - "wx_name": o.WxName, - "wx_avatar": o.WxAvatar, - "wx_open_id": o.WxOpenID, - "app_open_id": o.AppOpenID, - "wx_union_id": o.WxUnionID, - "tel": o.Tel, - "gender": o.Gender, - "city": o.City, - "province": o.Province, - "country": o.Country, - "deposit": o.Deposit, - "user_type": o.UserType, - "store_id": o.StoreId, - "invite_code_url": o.InviteCodeUrl, - "last_login_at": o.LastLoginAt, - "ip": o.IP, - "in_black": o.InBlack, - "store_type": o.StoreType, - "version": o.Version, + "id": o.ID, + "created_at": o.CreatedAt, + "updated_at": o.UpdatedAt, + "deleted_at": o.DeletedAt, + "uid": o.Uid, + "member_level": o.MemberLevel, + "member_expire": o.MemberExpire, + "open_member_time": o.OpenMemberTime, + "bond": o.Bond, + "wx_name": o.WxName, + "wx_avatar": o.WxAvatar, + "wx_open_id": o.WxOpenID, + "app_open_id": o.AppOpenID, + "wx_union_id": o.WxUnionID, + "tel": o.Tel, + "gender": o.Gender, + "city": o.City, + "province": o.Province, + "country": o.Country, + "deposit": o.Deposit, + "user_type": o.UserType, + "store_id": o.StoreId, + "invite_code_url": o.InviteCodeUrl, + "last_login_at": o.LastLoginAt, + "ip": o.IP, + "in_black": o.InBlack, + "store_type": o.StoreType, + "version": o.Version, } u := map[string]interface{}{} for _, f := range fields { diff --git a/model/order.go b/model/order.go index c9b5a26..db560fa 100644 --- a/model/order.go +++ b/model/order.go @@ -71,7 +71,7 @@ type OrderCard struct { 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 - CardStatus uint32 `json:"card_status"` // 1-待取货中 2-游玩中 3-归还中 4-已完成 5-已取消 + CardStatus uint32 `json:"card_status"` // 1-待取货中 2-游玩中 3-归还中 4-已完成 5-已取消 DeliveryTime time.Time `json:"delivery_time"` // 发货时间 ReceiptTime time.Time `json:"receipt_time"` // 收货时间 DeliveryType uint8 `json:"delivery_type"` // 取货类型 1-门店自取 2-快递 @@ -233,13 +233,12 @@ func (m *OrderListReq) GetOrderCardList() ([]OrderCard, uint32, error) { } totalPage = uint32(count/m.PageSize + 1) - orderCards = OrderCardListSetGameInfo(orderCards) return orderCards, totalPage, nil } -func (m *Order) Info() ([]OrderCard, error) { +func (m *Order) Info(orderCardId uint32) ([]OrderCard, error) { //err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order) //if err != nil { @@ -253,10 +252,11 @@ func (m *Order) Info() ([]OrderCard, error) { // return nil, err //} - qs := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)) - if m.GameCardGoodsId != 0 { - qs = qs.GameCardGoodsIdEq(uint32(m.GameCardGoodsId)) - } + 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)) + //} var orderCards []OrderCard err := qs.All(&orderCards) if err != nil { @@ -285,8 +285,8 @@ func (m *Order) Revert() error { // logger.Error("order card status completed") // return errors.New("order card status completed") //} - fmt.Println("GameCardGoodsId------:",m.GameCardGoodsId) - fmt.Println("ID------:",m.ID) + fmt.Println("GameCardGoodsId------:", m.GameCardGoodsId) + fmt.Println("ID------:", m.ID) err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) if err != nil { logger.Errorf("err:%#v", err) @@ -467,7 +467,7 @@ func (m *UserRentCard) IsHaveUnreturnedOrders(RentCount uint32) (bool, error) { } func IsHaveOnDeliverOrderCards(orderId uint32) (bool, error) { - count, err := NewOrderCardQuerySet(DB).OrderIdEq(orderId).CardStatusEq(1).Count() + count, err := NewOrderCardQuerySet(DB).OrderIdEq(orderId).CardStatusEq(OrderCardStatusUnPick).Count() if err != nil { logger.Error("err:", err) return false, err @@ -540,6 +540,8 @@ func (m *Order) Cancel() (bool, error) { logger.Error("err:", err) return false, err } + orderJson, _ := json.Marshal(m) + fmt.Println("orderJson:", string(orderJson)) //err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).One(&orderCard) @@ -592,19 +594,36 @@ func (m *Order) Cancel() (bool, error) { logger.Errorf("err:%#v", err) return false, err } + //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) + return false, err + } err = begin.Commit().Error if err != nil { begin.Rollback() logger.Errorf("err:%#v", err) return false, err } - isRecede := false - if order.DeliveryType == 2 && order.Postage > 0 { - isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID) + isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID) + if err != nil { + logger.Error("err:", err) + return false, err + } + if !isHaveOnDeliver { + err = NewOrderQuerySet(DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update() if err != nil { logger.Error("err:", err) return false, err } + } + + isRecede := false + if order.DeliveryType == 2 && order.Postage > 0 { if !isHaveOnDeliver { isRecede = true } @@ -681,10 +700,14 @@ func IsCardGoodsStockEnough(cards []CardInfo, storeId uint32) (bool, error) { var gameCardGoodsStock GameCardGoodsStock err := NewGameCardGoodsStockQuerySet(DB).StoreIdEq(uint64(storeId)).GameCardIdEq(uint64(cards[i].GameCardId)). One(&gameCardGoodsStock) - if err != nil { + if err != nil && err != RecordNotFound { logger.Error("err:", err) return false, err } + if err == RecordNotFound { + logger.Error("order stock out:") + return false, err + } if gameCardGoodsStock.RentStock < cards[i].Count { logger.Error("order stock out ") return false, errors.New("order stock out") @@ -708,13 +731,15 @@ func GameCardGoodsInventoryReduction(cards []CardInfo, storeId uint32, gdb *gorm func (m *Order) InventoryReduction(gdb *gorm.DB) error { var cards []OrderCard - err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).All(&cards) + err := NewOrderCardQuerySet(DB).UidEq(uint32(m.Uid)).OrderIdEq(m.ID).All(&cards) if err != nil { logger.Error("err:", err) return err } + //fmt.Println("cards:", cards) for i, _ := range cards { + //fmt.Println("cards:", cards[i].GameCardId, cards[i].StoreId, cards[i].Uid) 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) err := gdb.Exec(sql).Error @@ -723,6 +748,10 @@ func (m *Order) InventoryReduction(gdb *gorm.DB) error { return err } } + err = OrderCardUserRentCard(uint32(m.Uid), uint32(len(cards)), nil, gdb) + if err != nil { + logger.Error("err:", err) + } return nil } diff --git a/model/redeem_code.go b/model/redeem_code.go index 56a8ba3..ccb5ac6 100644 --- a/model/redeem_code.go +++ b/model/redeem_code.go @@ -167,7 +167,7 @@ func UserRedeemCodeConvert(uid uint32, serialCode string) error { return nil } -func CodeSendToUser(uid uint32, codeType string,activityType uint32) error { +func CodeSendToUser(uid uint32, codeType string, activityType uint32) error { count, err := NewUserRedeemCodeQuerySet(DB).UidEq(uid).Count() if err != nil { logger.Error("err:", err) @@ -198,7 +198,7 @@ func CodeSendToUser(uid uint32, codeType string,activityType uint32) error { Status: UserRedeemCodeStatusHold, SerialCode: redeemCode.SerialCode, CodeType: redeemCode.CodeType, - ActivityType: activityType , + ActivityType: activityType, //ActivityType: RedeemCodeActivityTypeUserInvite, } err = begin.Create(userRedeemCode).Error diff --git a/model/user.go b/model/user.go index 2841ec4..d8882b3 100644 --- a/model/user.go +++ b/model/user.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "github.com/codinl/go-logger" + "github.com/jinzhu/gorm" "mh-server/lib/utils" "sync" "time" @@ -14,29 +15,30 @@ import ( type User struct { Model - Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` - MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员 - MemberExpire time.Time `json:"member_expire"` // 会员到期时间 - Bond uint32 `json:"bond"` // 保证金 - WxName string `json:"wx_name"` // 昵称 - WxAvatar string `json:"wx_avatar"` // 头像 - WxOpenID string `json:"wx_open_id"` - AppOpenID string `json:"app_open_id"` - WxUnionID string `json:"wx_union_id"` - Tel string `json:"tel"` // 电话 - Gender uint8 `json:"gender"` // 性别 - City string `json:"city"` // 城市 - Province string `json:"province"` // 省 - Country string `json:"country"` // 市 - Deposit uint32 `json:"deposit"` // - UserType uint8 `json:"user_type"` // 用户类型 1-普通用户 2-店员 - StoreId uint64 `json:"store_id"` // 门店id - InviteCodeUrl string `json:"invite_code_url"` // 分享二维码 - LastLoginAt time.Time `json:"last_login_at"` // 最近登录时间 - IP string `json:"-" gorm:"type:varchar(60)"` // ip - InBlack bool `json:"in_black"` // 是否在黑名单 - StoreType uint8 `json:"store_type"` // 1-订单门店 - Version uint32 `json:"-"` + Uid uint32 `json:"uid" gorm:"column:uid;unique_index"` + MemberLevel uint32 `json:"member_level"` // 会员等级 1-用户 2-会员 + MemberExpire time.Time `json:"member_expire"` // 会员到期时间 + OpenMemberTime time.Time `json:"open_member_time"` // 开通会员 + Bond uint32 `json:"bond"` // 保证金 + WxName string `json:"wx_name"` // 昵称 + WxAvatar string `json:"wx_avatar"` // 头像 + WxOpenID string `json:"wx_open_id"` + AppOpenID string `json:"app_open_id"` + WxUnionID string `json:"wx_union_id"` + Tel string `json:"tel"` // 电话 + Gender uint8 `json:"gender"` // 性别 + City string `json:"city"` // 城市 + Province string `json:"province"` // 省 + Country string `json:"country"` // 市 + Deposit uint32 `json:"deposit"` // + UserType uint8 `json:"user_type"` // 用户类型 1-普通用户 2-店员 + StoreId uint64 `json:"store_id"` // 门店id + InviteCodeUrl string `json:"invite_code_url"` // 分享二维码 + LastLoginAt time.Time `json:"last_login_at"` // 最近登录时间 + IP string `json:"-" gorm:"type:varchar(60)"` // ip + InBlack bool `json:"in_black"` // 是否在黑名单 + StoreType uint8 `json:"store_type"` // 1-订单门店 + Version uint32 `json:"-"` } func (o *User) TableName() string { @@ -180,11 +182,12 @@ func UserUpdate(user *User) error { type UserOpenMemberRecord struct { Model - Uid uint32 `json:"uid"` - OpenNo string `json:"open_no" gorm:"index"` - OrderId uint32 `json:"order_id"` - OrderType uint32 `json:"order_type"` // 1-物流支付 - MemberLevel uint32 `json:"member_level"` + Uid uint32 `json:"uid"` + OpenNo string `json:"open_no" gorm:"index"` + OrderId uint32 `json:"order_id"` + OrderType uint32 `json:"order_type"` // 1-物流支付 2-取消物流租卡 + MemberLevel uint32 `json:"member_level"` + MemberExpire time.Time `json:"member_expire"` // 会员到期时间 } func (o *UserOpenMemberRecord) TableName() string { @@ -439,8 +442,11 @@ func GetUserMutex(mutexKey string) *sync.Mutex { var AuthLoginMutex = sync.Mutex{} -func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig) error { +func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig,gdb *gorm.DB) error { //UserRentCard{} + if gdb == nil { + gdb = DB + } var userRentCard UserRentCard err := NewUserRentCardQuerySet(DB).UidEq(uid).One(&userRentCard) if err != nil && err != RecordNotFound { @@ -468,7 +474,7 @@ func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig) CanRentCount: uint32(memberConfig.CardMax - count), Status: 0, } - err := DB.Create(rentCard).Error + err := gdb.Create(rentCard).Error if err != nil { logger.Error("err", err) return err @@ -476,7 +482,7 @@ func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig) return nil } sql := fmt.Sprintf("UPDATE user_rent_card SET have_rent_count=have_rent_count+%d ,can_rent_count=can_rent_count-%d WHERE uid = %d", count, count, uid) - err = DB.Exec(sql).Error + err = gdb.Exec(sql).Error if err != nil { logger.Error("err", err) return err diff --git a/router/router_app.go b/router/router_app.go index e7c12fb..46a8c80 100644 --- a/router/router_app.go +++ b/router/router_app.go @@ -75,7 +75,8 @@ func ConfigAppRouter(r gin.IRouter) { user.POST("user_info/tel", controller.UserTel) // 获取用户手机号 user.POST("user_info/update", controller.UserInfoUpdate) // 修改用户信息 user.POST("open_member", controller.OpenMember) // 开通会员 - user.POST("upgrade_member", controller.UpgradeMember) // 开通会员 + user.POST("upgrade_member", controller.UpgradeMember) // 升级会员 + user.POST("upgrade_member_info", controller.UpgradeMemberInfo) // 升级详情 user.POST("pay_deposit", controller.PayDeposit) // 支付押金 user.POST("refund_deposit", controller.RefundDeposit) // 退押金 user.POST("refund_deposit_record", controller.UserDepositRefundRecordList) // 押金记录 @@ -126,14 +127,14 @@ func ConfigAppRouter(r gin.IRouter) { order.POST("express", controller.OrderExpress) // 订单物流 order.POST("express_company/list", controller.ExpressCompanyList) // 物流公司列表 order.POST("order/wx_pay/success", controller.WXPaySuccess) // 微信支付成功 - order.POST("cancel", controller.OrderCancel) // 订单取消 + order.POST("cancel", controller.OrderCancel) // 取消租卡 order.Use(auth.UserAccessAuth) // TODO order.POST("create", controller.RentCardOrderCreate) // 创建租卡 order.POST("pay", controller.OrderPay) // 租卡订单支付 order.POST("list", controller.RentCardOrderList) // 租卡订单列表 order.POST("revert", controller.OrderRevert) // 租卡订单归还 - order.POST("revert/cancel", controller.OrderRevertCancel) // 租卡订单取消归还 + order.POST("revert/cancel", controller.OrderRevertCancel) // 取消归还 //order.POST("express_fee/refund", controller.ExpressFeeRefund) // 物流费退款 order.POST("confirm_receipt", controller.ConfirmReceipt) // 订单确认收货 From 2c672c795f56d48b4e2b3e608f72cc0b6525a204 Mon Sep 17 00:00:00 2001 From: li Date: Sat, 29 Jan 2022 10:21:38 +0800 Subject: [PATCH 07/11] fix: --- controller/game_card.go | 45 ++++++++++++++++++++++++++++- controller/order.go | 8 ++++-- controller/user.go | 2 +- go.mod | 2 +- kuaidi/kuaidi100_test.go | 3 +- lib/wxpay/wx_pay.go | 14 ++++----- model/order.go | 62 +++++++++++++++++++++++++++------------- model/user.go | 3 +- 8 files changed, 104 insertions(+), 35 deletions(-) diff --git a/controller/game_card.go b/controller/game_card.go index b7432f3..cc5e2cf 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -4,6 +4,7 @@ import ( "crypto/md5" "encoding/json" "encoding/xml" + "errors" "fmt" "github.com/codinl/go-logger" "github.com/gin-gonic/gin" @@ -237,7 +238,6 @@ func PushWXPayNotice(c *gin.Context) { ReturnCode: "FAIL", } correctSign, err := PayCallBackHandle(notify, config.AppConfig.WxMchSecret) - if err != nil { logger.Error("PushWXPayNotice sign create fail") RespBodyXML(c, ret) @@ -280,6 +280,49 @@ func PushWXPayNotice(c *gin.Context) { if err != nil { begin.Rollback() logger.Error("err:", err) + // 库存不足取消订单 + orderSn := model.GetOrderSn() + err = model.UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert() + if err != nil { + logger.Error(errors.New("WebPay err")) + //RespJson(c, status.InternalServerError, nil) + return + } + + orderRefund := wxpay.OrderRefund{ + //OutTradeNo: outTradeNo, + OutTradeNo: notify.OutTradeNo, + OutRefundNo: orderSn, + NotifyUrl: "", + Amount: wxpay.OrderRefundAmount{ + Refund: order.PayPrice, + Total: order.PayPrice, + Currency: "CNY", + }, + } + bytes, _ := json.Marshal(order) + fmt.Println("订单取消:", string(bytes)) + orderRefundJson, _ := json.Marshal(&orderRefund) + fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson)) + //err = wxpay.WxPayOrderRefund(orderRefund) + err = wxpay.TransactionOrderRefund(orderRefund) + if err != nil { + logger.Error("err:", err) + //RespJson(c, status.InternalServerError, nil) + return + } + + _, err := model.NewOrderQuerySet(model.DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).UpdateNum() + if err != nil { + logger.Error("err:", err) + return + } + _, err = model.NewOrderCardQuerySet(model.DB).OrderIdEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).UpdateNum() + if err != nil { + logger.Error("err:", err) + return + } + return } err = begin.Commit().Error diff --git a/controller/order.go b/controller/order.go index d9ae286..579ca35 100644 --- a/controller/order.go +++ b/controller/order.go @@ -92,7 +92,7 @@ func OrderInfo(c *gin.Context) { //OrderId uint32 `json:"order_id"` //GameCardId uint64 `json:"game_card_id"` // 游戏id //GameCardGoodsId uint64 `json:"game_card_goods_id" ` // 游戏卡id - OrderCardId uint32 `json:"order_card_id"` + OrderCardId uint32 `json:"order_card_id"` }{} if c.ShouldBindJSON(&req) != nil { logger.Error("ShouldBindJSON err") @@ -860,13 +860,13 @@ func OrderCancel(c *gin.Context) { fmt.Println("OrderId:", order.ID) //order := &model.Order{} //order.ID = req.OrderId - isRecede, err := order.Cancel() + isRecede, orderInfo, err := order.Cancel() if err != nil { logger.Error("err:", err) RespJson(c, status.OrderDelivered, nil) return } - + order = orderInfo fmt.Println("order:", order) if isRecede { @@ -897,6 +897,8 @@ func OrderCancel(c *gin.Context) { } bytes, _ := json.Marshal(order) fmt.Println("订单取消:", string(bytes)) + orderRefundJson, _ := json.Marshal(&orderRefund) + fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson)) //err = wxpay.WxPayOrderRefund(orderRefund) err = wxpay.TransactionOrderRefund(orderRefund) if err != nil { diff --git a/controller/user.go b/controller/user.go index b4ea2c8..46b2510 100644 --- a/controller/user.go +++ b/controller/user.go @@ -243,7 +243,7 @@ func OpenMember(c *gin.Context) { fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit) - totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit + totalFee := memberConfig.MemberFee + memberConfig.MemberDeposit - user.Deposit if user.Deposit == memberConfig.MemberDeposit { totalFee = memberConfig.MemberFee } diff --git a/go.mod b/go.mod index 8b97ad3..727e965 100644 --- a/go.mod +++ b/go.mod @@ -20,5 +20,5 @@ require ( github.com/spf13/viper v1.7.1 github.com/wechatpay-apiv3/wechatpay-go v0.2.6 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 - qiniupkg.com/x v7.0.8+incompatible + qiniupkg.com/x v7.0.8+incompatible // indirect ) diff --git a/kuaidi/kuaidi100_test.go b/kuaidi/kuaidi100_test.go index a61ce1a..926c57c 100644 --- a/kuaidi/kuaidi100_test.go +++ b/kuaidi/kuaidi100_test.go @@ -19,5 +19,6 @@ func TestExpressInfo(t *testing.T) { //paramJson, _ := json.Marshal(paramMap) //fmt.Println("paramJson:", string(paramJson)) - ExpressInfo("zhongtong","73155364431352") + //ExpressInfo("zhongtong","73155364431352") + ExpressInfo("emsbg","9868015085913") } diff --git a/lib/wxpay/wx_pay.go b/lib/wxpay/wx_pay.go index fdc00cf..a44c668 100644 --- a/lib/wxpay/wx_pay.go +++ b/lib/wxpay/wx_pay.go @@ -34,10 +34,10 @@ const ( //wxPayNotifyUrl = "api/v1/wxpay/notice" wxPayNotifyUrl = "/api/v1/wxpay/notice" - WxPayMember = "member_pay" // 会员 - WxPayRentCard = "rent_card_pay" // 租卡 - WxPayDeposit = "deposit_pay" // 押金 - WxPayUpgradeMember = "upgrade_member" // 押金 + WxPayMember = "member_pay" // 会员 + WxPayRentCard = "rent_card_pay" // 租卡 + WxPayDeposit = "deposit_pay" // 押金 + WxPayUpgradeMember = "upgrade_member" // 押金 //NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产 //NotifyUrl = "https://dev.switch.deovo.com:8004/api/v1/wxpay/notice" // TODO 测试 @@ -244,11 +244,11 @@ type ( CouponFee1 uint `xml:"coupon_fee_1,CDATA" json:"coupon_fee_1"` CouponId1 string `xml:"coupon_id_1,CDATA" json:"coupon_id_1"` - CouponFee2 uint `xml:"coupon_fee_2,CDATA" json:"coupon_fee_2"` + CouponFee2 uint `xml:"coupon_fee_2,CDATA" json:"coupon_fee_2"` CouponId2 string `xml:"coupon_id_2,CDATA" json:"coupon_id_2"` - CouponFee3 uint `xml:"coupon_fee_3,CDATA" json:"coupon_fee_3"` + CouponFee3 uint `xml:"coupon_fee_3,CDATA" json:"coupon_fee_3"` CouponId3 string `xml:"coupon_id_3,CDATA" json:"coupon_id_3"` - CouponFee4 uint `xml:"coupon_fee_4,CDATA" json:"coupon_fee_4"` + CouponFee4 uint `xml:"coupon_fee_4,CDATA" json:"coupon_fee_4"` CouponId4 string `xml:"coupon_id_4,CDATA" json:"coupon_id_4"` TransactionId string `xml:"transaction_id,CDATA" json:"transaction_id"` diff --git a/model/order.go b/model/order.go index db560fa..66fce40 100644 --- a/model/order.go +++ b/model/order.go @@ -61,6 +61,8 @@ type Order struct { RevertExpressDuration uint64 `json:"revert_express_duration"` // 归还物流时长 OutTradeNo string `json:"out_trade_no"` // 支付订单 Mchid string `json:"mchid"` // 商户 + + OrderCardId uint32 `json:"order_card_id" gorm:"-"` // } // gen:qs @@ -287,7 +289,9 @@ func (m *Order) Revert() error { //} fmt.Println("GameCardGoodsId------:", m.GameCardGoodsId) fmt.Println("ID------:", m.ID) - err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) + 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) if err != nil { logger.Errorf("err:%#v", err) return err @@ -315,7 +319,8 @@ func (m *Order) Revert() error { //order.RevertExpressCompanyNo = m.RevertExpressCompanyNo //order.RevertExpressNo = m.RevertExpressNo - _, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater(). + _, err = NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).GetUpdater(). + //_, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater(). SetCardStatus(OrderCardStatusReturning). SetRevertTime(time.Now()). SetRevertStoreId(m.RevertStoreId). @@ -353,7 +358,8 @@ func (m *Order) RevertCancel() (bool, error) { // logger.Error("order card status completed") // return false, errors.New("order card status completed") //} - err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) + err := NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).One(&orderCard) + //err := NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) if err != nil { logger.Errorf("err:%#v", err) return false, err @@ -379,7 +385,8 @@ func (m *Order) RevertCancel() (bool, error) { //order.RevertExpressCompany = m.RevertExpressCompany //order.RevertExpressCompanyNo = m.RevertExpressCompanyNo //order.RevertExpressNo = m.RevertExpressNo - _, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater(). + _, err = NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).GetUpdater(). + //_, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater(). SetCardStatus(OrderCardStatusPlaying). //SetRevertTime(time.Time{}). SetRevertStoreId(0). @@ -530,7 +537,7 @@ func GetPickupCode() string { } -func (m *Order) Cancel() (bool, error) { +func (m *Order) Cancel() (bool, Order, error) { var ( order Order orderCard OrderCard @@ -538,20 +545,24 @@ func (m *Order) Cancel() (bool, error) { err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order) if err != nil { logger.Error("err:", err) - return false, err + return false, order, err } orderJson, _ := json.Marshal(m) fmt.Println("orderJson:", string(orderJson)) - //err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).One(&orderCard) - err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).One(&orderCard) + err = NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).One(&orderCard) + //err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).One(&orderCard) if err != nil && err != RecordNotFound { logger.Errorf("err:%#v", err) - return false, err + return false, order, err } if err == RecordNotFound { logger.Error("order card status not unpick") - return false, errors.New("order card status not unpick") + 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") } //if userOrder.CardStatus != OrderCardStatusUnPick { // logger.Error("card status not unpick err: ") @@ -584,7 +595,7 @@ func (m *Order) Cancel() (bool, error) { if err != nil { begin.Rollback() logger.Error("err:", err) - return false, err + return false, order, err } 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) fmt.Println("sql:", sql) @@ -592,7 +603,7 @@ func (m *Order) Cancel() (bool, error) { if err != nil { begin.Rollback() logger.Errorf("err:%#v", err) - return false, err + return false, order, err } //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) @@ -601,24 +612,24 @@ func (m *Order) Cancel() (bool, error) { if err != nil { begin.Rollback() logger.Errorf("err:%#v", err) - return false, err + return false, order, err } err = begin.Commit().Error if err != nil { begin.Rollback() logger.Errorf("err:%#v", err) - return false, err + return false, order, err } isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID) if err != nil { logger.Error("err:", err) - return false, err + return false, order, err } if !isHaveOnDeliver { err = NewOrderQuerySet(DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update() if err != nil { logger.Error("err:", err) - return false, err + return false, order, err } } @@ -628,9 +639,10 @@ func (m *Order) Cancel() (bool, error) { isRecede = true } } - - m = &order - return isRecede, nil + //m.ID = order.ID + //m.Uid = order.Uid + //m.PayPrice = order.PayPrice + return isRecede, order, nil } func UnPayOrderSetCancel(uid uint32) { @@ -739,10 +751,20 @@ func (m *Order) InventoryReduction(gdb *gorm.DB) error { //fmt.Println("cards:", cards) for i, _ := range cards { + 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 + } //fmt.Println("cards:", cards[i].GameCardId, cards[i].StoreId, cards[i].Uid) + if gameCardGoodsStock.RentStock < 1 { + logger.Error("rent stock not enough:") + return errors.New("rent stock not enough") + } 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) - err := gdb.Exec(sql).Error + err = gdb.Exec(sql).Error if err != nil { logger.Error("err:", err) return err diff --git a/model/user.go b/model/user.go index d8882b3..6e190d1 100644 --- a/model/user.go +++ b/model/user.go @@ -399,7 +399,8 @@ func (m *User) Edit() { func GetWxPayExpressFeeRefundRecord(orderId uint32) (string, error) { var openMemberRecord UserOpenMemberRecord - err := NewUserOpenMemberRecordQuerySet(DB).OrderIdEq(orderId).OrderTypeEq(1).OrderDescByID().Limit(1).One(&openMemberRecord) + //err := NewUserOpenMemberRecordQuerySet(DB).OrderIdEq(orderId).OrderTypeEq(1).OrderDescByID().Limit(1).One(&openMemberRecord) + err := NewUserOpenMemberRecordQuerySet(DB).OrderIdEq(orderId).OrderDescByID().Limit(1).One(&openMemberRecord) if err != nil { logger.Error("err:", err) return "", err From 2b93e9046e9f062c1a659ae65fb97985c5b112b9 Mon Sep 17 00:00:00 2001 From: li Date: Sat, 26 Feb 2022 14:29:39 +0800 Subject: [PATCH 08/11] =?UTF-8?q?fix:=E5=A4=9A=E7=BA=A7=E4=BC=9A=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/game_card.go | 7 +- controller/order.go | 2 + controller/store.go | 5 +- model/model_test.go | 191 +++++++++++++++++++++++++++++++++++++++- model/order.go | 9 +- model/store.go | 61 +++++++++++-- model/user.go | 64 +++++++++++++- 7 files changed, 321 insertions(+), 18 deletions(-) diff --git a/controller/game_card.go b/controller/game_card.go index cc5e2cf..bbe8026 100644 --- a/controller/game_card.go +++ b/controller/game_card.go @@ -252,7 +252,7 @@ func PushWXPayNotice(c *gin.Context) { if notify.Attach == wxpay.WxPayRentCard { logger.Info("租借游戏卡 支付成功:") var order model.Order - err := model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).PayStatusEq(PayStatusUnPay).One(&order) + err := model.NewOrderQuerySet(model.DB).OrderSnEq(notify.OutTradeNo).PayStatusEq(PayStatusUnPay).CardStatusNe(OrderCardStatusCancel).One(&order) if err != nil { logger.Error("err:", err) return @@ -331,7 +331,7 @@ func PushWXPayNotice(c *gin.Context) { logger.Error("err:", err) return } - + go model.ShoppingCartCreateOrderByOrder(order) //count, err := model.NewOrderQuerySet(model.DB).UidEq(order.Uid).IDEq(order.ID).Count() //if err != nil { // logger.Error("err:", err) @@ -443,6 +443,8 @@ func PushWXPayNotice(c *gin.Context) { } } + model.CreateUserRentCardByMemberLevel(record.Uid,record.MemberLevel,memberConfig.CardMax) + } fmt.Println("notify.TotalFee:", notify.TotalFee) @@ -522,6 +524,7 @@ func PushWXPayNotice(c *gin.Context) { return } + model.CreateUserRentCardByMemberLevel(record.Uid,record.MemberLevel,memberConfig.CardMax) } logger.Debug("微信推动支付通知") diff --git a/controller/order.go b/controller/order.go index 579ca35..ee847c3 100644 --- a/controller/order.go +++ b/controller/order.go @@ -381,6 +381,8 @@ func RentCardOrderCreate(c *gin.Context) { "web_pay": "", "order_id": order.ID, } + + go model.ShoppingCartCreateOrder(uc.Uid, req.GameCardList) RespOK(c, ret) return } diff --git a/controller/store.go b/controller/store.go index 04ebeef..b47086e 100644 --- a/controller/store.go +++ b/controller/store.go @@ -10,7 +10,8 @@ import ( func StoreList(c *gin.Context) { req := struct { - GameCardId uint64 `json:"game_card_id"` + //GameCardId uint64 `json:"game_card_id"` + GameCardList []model.CardInfo `json:"game_card_list"` }{} if err := c.ShouldBindJSON(&req); err != nil { logger.Error(err) @@ -18,7 +19,7 @@ func StoreList(c *gin.Context) { return } - stores, err := model.GetStoreList(req.GameCardId) + stores, err := model.GetStoreList(req.GameCardList) if err != nil { logger.Error("err:", err) RespJson(c, status.InternalServerError, nil) diff --git a/model/model_test.go b/model/model_test.go index eed6185..8816567 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -131,7 +131,8 @@ func InitDBProd() { DBProd.DB().SetMaxOpenConns(1000) DBProd.DB().SetMaxIdleConns(500) DBProd.DB().SetConnMaxLifetime(time.Second * 10) - DBProd.LogMode(true) + //DBProd.LogMode(true) + DBProd.LogMode(false) DBProd.SingularTable(true) DBProd.AutoMigrate( &RedeemCode{}, @@ -310,6 +311,7 @@ func TestGenShareCode(t *testing.T) { } +// 用户绑定门店 func TestUserBundleFirstOrderStore(t *testing.T) { UserBundleFirstOrderStore() } @@ -552,7 +554,190 @@ func MergingGameCards() { } -func UpdateUserName() { +func UpdateUserName() { InitDBProd() -} \ No newline at end of file +} + +func TestMemberUserList(t *testing.T) { + MemberUserList() +} + +func MemberUserList() { + InitDBProd() + var users []User + err := NewUserQuerySet(DBProd).MemberLevelEq(2).OrderAscByID().All(&users) + //err := NewUserQuerySet(DBProd).MemberLevelNe(2).OrderAscByID().All(&users) + //err := NewUserQuerySet(DBProd).StoreTypeEq(1).OrderAscByID().All(&users) + if err != nil { + fmt.Println("users err:", err) + return + } + endTime, _ := time.Parse("2006-01-02", "2022-02-13") + startTime, _ := time.Parse("2006-01-02", "2021-07-30") + + for _, user := range users { + count, err := NewUserInviteQuerySet(DBProd).ToUidEq(user.Uid).MemberTypeEq(2).MemberOpenTimeGt(startTime).MemberOpenTimeLt(endTime).Count() + //count, err := NewUserInviteQuerySet(DBProd).ToUidEq(user.Uid).MemberTypeEq(2).MemberOpenTimeGt(startTime).MemberOpenTimeLt(endTime).Count() + if err != nil { + fmt.Println("err:", err) + } + if count == 0 { + fmt.Println("user :", user.Uid) + } + } + +} + +func TestOpenMemberTimeUserList(t *testing.T) { + OpenMemberTimeUserList() +} + +func OpenMemberTimeUserList() { + InitDBProd() + var users []User + err := NewUserQuerySet(DBProd).MemberLevelEq(2).All(&users) + if err != nil { + fmt.Println("err:", err) + } + userMap := make(map[uint32]User, 0) + for i, _ := range users { + userMap[users[i].Uid] = users[i] + } + + var userInvites []UserInvite + err = NewUserInviteQuerySet(DBProd).MemberTypeEq(2).All(&userInvites) + if err != nil { + fmt.Println("err:", err) + } + + for i, _ := range userInvites { + user, ok := userMap[userInvites[i].ToUid] + if ok { + if user.OpenMemberTime.IsZero() { + fmt.Println("", user.OpenMemberTime, user.Uid, user.MemberLevel) + fmt.Println("", userInvites[i].MemberOpenTime, userInvites[i].MemberType, userInvites[i].ToUid) + + } + } + + } + +} + +func TestSyncUserRentCard(t *testing.T) { + SyncUserRentCard() +} + +func SyncUserRentCard() { + InitDBProd() + var users []User + err := NewUserQuerySet(DBProd).MemberLevelIn(2, 3).All(&users) + if err != nil { + logger.Error("err:", err) + } + + for _, user := range users { + fmt.Println("user:", user.MemberLevel, user.MemberExpire, user.OpenMemberTime) + userRentCard := &UserRentCard{ + Uid: user.Uid, + MemberLevel: user.MemberLevel, + LevelRentCount: 1, + HaveRentCount: 0, + CanRentCount: 1, + Status: 0, + } + err = DBProd.Create(userRentCard).Error + if err != nil { + logger.Error("err:", err) + } + } +} + +func TestSyncUserOpenMemberTime(t *testing.T) { + SyncUserOpenMemberTime() +} + +func SyncUserOpenMemberTime() { + InitDBProd() + var userInvites []UserInvite + err := NewUserInviteQuerySet(DBProd).MemberTypeEq(2).All(&userInvites) + if err != nil { + logger.Error("err:", err) + } + count := 0 + for _, userInvite := range userInvites { + fmt.Println("user:", userInvite.MemberLevel, userInvite.MemberOpenTime) + //err = NewUserInviteQuerySet(DBProd).IDEq(userInvite.ID).GetUpdater().SetMemberLevel(2).Update() + //if err != nil { + // logger.Error("err:", err) + //} + + err = NewUserQuerySet(DBProd).UidEq(userInvite.ToUid).GetUpdater(). + SetOpenMemberTime(userInvite.MemberOpenTime).Update() + if err != nil { + logger.Error("err:", err) + } + count++ + } + + fmt.Println("count:", count) +} + +func TestSyncUserOrder(t *testing.T) { + SyncUserOrder() +} + +func SyncUserOrder() { + InitDBProd() + var orders []Order + sql := fmt.Sprintf("SELECT * FROM `order` WHERE pay_status = 2 AND card_status IN (1,2,3);") + err := DBProd.Raw(sql).Scan(&orders).Error + //err := NewOrderQuerySet(DBProd).PayStatusEq(2).CardStatusIn([]uint8{1, 2, 3}...).All(&orders) + if err != nil { + logger.Error("err:", err) + return + } + fmt.Println("orders:", len(orders)) + for _, order := range orders { + //fmt.Println("order:", order.PayStatus, order.GameCardGoodsId) + //var gameCardGoods GameCardGoods + //err = NewGameCardGoodsQuerySet(DBProd).IDEq(uint32(order.GameCardGoodsId)).One(&gameCardGoods) + //if err != nil { + // logger.Error("err:", err) + // //continue + //} + orderCard := OrderCard{ + OrderId: order.ID, + Uid: uint32(order.Uid), + GameCardId: uint32(order.GameCardId), + GameCardGoodsId: uint32(order.GameCardGoodsId), + StoreId: uint32(order.StoreId), + CardStatus: uint32(order.CardStatus), + DeliveryTime: order.DeliveryTime, + ReceiptTime: order.ReceiptTime, + DeliveryType: order.DeliveryType, + SerialNumber: order.GameCardSerialNumber, + PayStatus: order.PayStatus, + RevertStoreId: order.RevertStoreId, + RevertTime: order.RevertTime, + RevertExpressCompany: order.RevertExpressCompany, + RevertExpressCompanyNo: order.RevertExpressCompanyNo, + RevertExpressNo: order.RevertExpressNo, + RevertExpressDuration: order.RevertExpressDuration, + + //Postage: order.Postage, + //ExpressCompany: order.ExpressCompany, + //ExpressCompanyNo: order.ExpressCompanyNo, + //ExpressNo: order.ExpressNo, + //GamePrice: 0, + //GameCoverImg: "", + //Order: nil, + } + fmt.Println("order:", order.ID, order.PayStatus, order.CardStatus, order.Uid, order.GameCardId) + err = DBProd.Create(&orderCard).Error + if err != nil { + logger.Error("err:", err) + } + } +} diff --git a/model/order.go b/model/order.go index 66fce40..6d38d5b 100644 --- a/model/order.go +++ b/model/order.go @@ -36,7 +36,8 @@ type Order struct { 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 - StoreId uint64 `json:"store_id"` // 门店id + GameCardSerialNumber string `json:"game_card_serial_number" gorm:"index"` // 游戏卡编号 + StoreId uint64 `json:"store_id" gorm:"index"` // 门店id UserAddressId uint64 `json:"user_address_id"` // 地址id DeliveryType uint8 `json:"delivery_type"` // 取货类型 1-门店自取 2-快递 Count uint32 `json:"count"` // 数量 @@ -150,6 +151,9 @@ func OrderCardListSetGameInfo(list []OrderCard) []OrderCard { order, ok2 := orderMap[list[i].OrderId] fmt.Printf("gameCard1:%#v \n", gameCard) if ok1 && ok2 { + if order.CardStatus == 2|| order.CardStatus == 3 { + order.CardStatus = 4 + } fmt.Printf("gameCard2:%#v \n", gameCard) list[i].GameName = gameCard.Name list[i].GameCoverImg = gameCard.CoverImg @@ -234,6 +238,7 @@ func (m *OrderListReq) GetOrderCardList() ([]OrderCard, uint32, error) { return orderCards, 0, err } totalPage = uint32(count/m.PageSize + 1) + fmt.Println("orderCards:", orderCards) orderCards = OrderCardListSetGameInfo(orderCards) @@ -386,7 +391,7 @@ func (m *Order) RevertCancel() (bool, error) { //order.RevertExpressCompanyNo = m.RevertExpressCompanyNo //order.RevertExpressNo = m.RevertExpressNo _, err = NewOrderCardQuerySet(DB).IDEq(m.OrderCardId).GetUpdater(). - //_, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater(). + //_, err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardGoodsIdEq(uint32(m.GameCardGoodsId)).GetUpdater(). SetCardStatus(OrderCardStatusPlaying). //SetRevertTime(time.Time{}). SetRevertStoreId(0). diff --git a/model/store.go b/model/store.go index d256e0d..6763426 100644 --- a/model/store.go +++ b/model/store.go @@ -31,7 +31,7 @@ type GameCardStock struct { Stock uint32 `json:"stock"` } -func GetStoreList(gameId uint64) ([]GameCardStock, error) { +func GetStoreList(cardInfos []CardInfo) ([]GameCardStock, error) { var eg errgroup.Group stores := make([]Store, 0) stocks := make([]GameCardGoodsStock, 0) @@ -48,7 +48,7 @@ func GetStoreList(gameId uint64) ([]GameCardStock, error) { return nil }) - if gameId == 0 { + if len(cardInfos) == 0 { stores = * <-storesCh fmt.Println("stores:", stores) for i, _ := range stores { @@ -61,8 +61,15 @@ func GetStoreList(gameId uint64) ([]GameCardStock, error) { return list, nil } + gameIds := make([]uint64, 0) + cardInfoMap := make(map[uint64]uint32, 0) + for i, _ := range cardInfos { + gameIds = append(gameIds, uint64(cardInfos[i].GameCardId)) + cardInfoMap[uint64(cardInfos[i].GameCardId)] = cardInfos[i].Count + } eg.Go(func() error { - err := NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(gameId).RentStockGt(0).All(&stocks) + //err := NewGameCardGoodsStockQuerySet(DB).GameCardIdEq(gameId).RentStockGt(0).All(&stocks) + err := NewGameCardGoodsStockQuerySet(DB).GameCardIdIn(gameIds...).RentStockGt(0).All(&stocks) if err != nil { logger.Errorf("err:%+v", err) return err @@ -75,20 +82,47 @@ func GetStoreList(gameId uint64) ([]GameCardStock, error) { logger.Errorf("err:%+v", err) return list, err } - stockMap := make(map[uint64]uint32) + //stockMap := make(map[uint64]uint32) + //for i, _ := range stocks { + // count, ok := cardInfoMap[uint64(stocks[i].GameCardId)] + // if ok && count <= stocks[i].RentStock { + // stockMap[stocks[i].StoreId] = stocks[i].RentStock + // } + //} + + storeStockMap := make(map[uint64]map[uint64]uint32, 0) for i, _ := range stocks { - stockMap[stocks[i].StoreId] = stocks[i].RentStock + //count, ok := cardInfoMap[uint64(stocks[i].GameCardId)] + //if ok && count <= stocks[i].RentStock { + // stockMap[stocks[i].StoreId] = stocks[i].RentStock + //} + stockMap, ok := storeStockMap[stocks[i].StoreId] + if !ok { + stockMap = make(map[uint64]uint32, 0) + } + stockMap[stocks[i].GameCardId] = stocks[i].RentStock + storeStockMap[stocks[i].StoreId] = stockMap } + for i, _ := range stores { - rentStock, ok := stockMap[uint64(stores[i].ID)] - if ok { + stockMap, ok := storeStockMap[uint64(stores[i].ID)] + if ok && IsStoreStockEnough(cardInfos, stockMap) { cardStock := GameCardStock{ Store: stores[i], - Stock: rentStock, + Stock: 0, } list = append(list, cardStock) } + + //if ok { + // cardStock := GameCardStock{ + // Store: stores[i], + // Stock: rentStock, + // } + // list = append(list, cardStock) + //} } + fmt.Println("list:", list) return list, nil } @@ -118,3 +152,14 @@ type CannibalizeGameCardGoods struct { GameCardId uint32 `json:"game_card_id"` // 游戏卡id SerialNumber string `json:"serial_number" gorm:"index"` // 编号 } + +func IsStoreStockEnough(cardInfos []CardInfo, gameStockMap map[uint64]uint32) bool { + //haveStock = + for i, _ := range cardInfos { + stock, ok := gameStockMap[uint64(cardInfos[i].GameCardId)] + if !ok || stock < cardInfos[i].Count { + return false + } + } + return true +} diff --git a/model/user.go b/model/user.go index 6e190d1..519823e 100644 --- a/model/user.go +++ b/model/user.go @@ -443,7 +443,7 @@ func GetUserMutex(mutexKey string) *sync.Mutex { var AuthLoginMutex = sync.Mutex{} -func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig,gdb *gorm.DB) error { +func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig, gdb *gorm.DB) error { //UserRentCard{} if gdb == nil { gdb = DB @@ -490,3 +490,65 @@ func OrderCardUserRentCard(uid uint32, count uint32, memberConfig *MemberConfig, } return nil } + +func ShoppingCartCreateOrder(uid uint32, cards []CardInfo) { + cardIds := make([]uint64, 0, len(cards)) + for i, _ := range cards { + cardIds = append(cardIds, uint64(cards[i].GameCardId)) + } + err := NewShoppingCartQuerySet(DB).UidEq(uint64(uid)).GameCardIdIn(cardIds...).Delete() + if err != nil { + logger.Error("err:", err) + } + return +} + +func ShoppingCartCreateOrderByOrder(order Order) { + var orderCards []OrderCard + err := NewOrderCardQuerySet(DB).OrderIdEq(order.ID).All(&orderCards) + if err != nil { + logger.Error("err:", err.Error()) + } + cardIds := make([]uint64, 0, len(orderCards)) + for i, _ := range orderCards { + cardIds = append(cardIds, uint64(orderCards[i].GameCardId)) + } + err = NewShoppingCartQuerySet(DB).UidEq(uint64(order.Uid)).GameCardIdIn(cardIds...).Delete() + if err != nil { + logger.Error("err:", err) + } + return +} + +func CreateUserRentCardByMemberLevel(uid, memberLevel, cardMax uint32) { + var userRentCard UserRentCard + err := NewUserRentCardQuerySet(DB).UidEq(uid).One(&userRentCard) + if err != nil && err != RecordNotFound { + logger.Error("UserRentCard err:", err) + return + } + + if err == RecordNotFound { + userRentCard = UserRentCard{ + Uid: uid, + MemberLevel: memberLevel, + LevelRentCount: cardMax, + HaveRentCount: 0, + CanRentCount: cardMax, + Status: 0, + } + err := DB.Create(&userRentCard).Error + if err != nil { + logger.Error("UserRentCard create err:", err) + } + return + } + _, err = NewUserRentCardQuerySet(DB).IDEq(userRentCard.ID).GetUpdater(). + SetMemberLevel(memberLevel). + SetCanRentCount(cardMax - userRentCard.HaveRentCount). + SetLevelRentCount(cardMax).UpdateNum() + if err != nil { + logger.Error("update err:", err) + } + +} From 6fa60b68e611b6bfc251a08bd42fbcf51ec3f444 Mon Sep 17 00:00:00 2001 From: li Date: Sun, 27 Feb 2022 19:34:36 +0800 Subject: [PATCH 09/11] fix: --- model/model_test.go | 205 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 158 insertions(+), 47 deletions(-) diff --git a/model/model_test.go b/model/model_test.go index 8816567..9d5de3f 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -638,20 +638,35 @@ func SyncUserRentCard() { } for _, user := range users { - fmt.Println("user:", user.MemberLevel, user.MemberExpire, user.OpenMemberTime) - userRentCard := &UserRentCard{ - Uid: user.Uid, - MemberLevel: user.MemberLevel, - LevelRentCount: 1, - HaveRentCount: 0, - CanRentCount: 1, - Status: 0, - } - err = DBProd.Create(userRentCard).Error + var orderCards []OrderCard + qs := NewOrderCardQuerySet(DBProd).UidEq(user.Uid).CardStatusIn(1, 2, 3).PayStatusEq(2) + qs.All(&orderCards) + count, err := qs.Count() if err != nil { - logger.Error("err:", err) + fmt.Println("err:", err) + } + if count > 1 { + //if orderCards[0].CardStatus > 1 &&orderCards[1].CardStatus >1{ + // continue + //} + fmt.Println("订单 count: uid:", count, user.Uid, orderCards[0].CardStatus, orderCards[1].CardStatus) } } + //for _, user := range users { + // fmt.Println("user:", user.MemberLevel, user.MemberExpire, user.OpenMemberTime) + // userRentCard := &UserRentCard{ + // Uid: user.Uid, + // MemberLevel: user.MemberLevel, + // LevelRentCount: 1, + // HaveRentCount: 0, + // CanRentCount: 1, + // Status: 0, + // } + // err = DBProd.Create(userRentCard).Error + // if err != nil { + // logger.Error("err:", err) + // } + //} } func TestSyncUserOpenMemberTime(t *testing.T) { @@ -699,45 +714,141 @@ func SyncUserOrder() { return } fmt.Println("orders:", len(orders)) - for _, order := range orders { - //fmt.Println("order:", order.PayStatus, order.GameCardGoodsId) - //var gameCardGoods GameCardGoods - //err = NewGameCardGoodsQuerySet(DBProd).IDEq(uint32(order.GameCardGoodsId)).One(&gameCardGoods) - //if err != nil { - // logger.Error("err:", err) - // //continue - //} - orderCard := OrderCard{ - OrderId: order.ID, - Uid: uint32(order.Uid), - GameCardId: uint32(order.GameCardId), - GameCardGoodsId: uint32(order.GameCardGoodsId), - StoreId: uint32(order.StoreId), - CardStatus: uint32(order.CardStatus), - DeliveryTime: order.DeliveryTime, - ReceiptTime: order.ReceiptTime, - DeliveryType: order.DeliveryType, - SerialNumber: order.GameCardSerialNumber, - PayStatus: order.PayStatus, - RevertStoreId: order.RevertStoreId, - RevertTime: order.RevertTime, - RevertExpressCompany: order.RevertExpressCompany, - RevertExpressCompanyNo: order.RevertExpressCompanyNo, - RevertExpressNo: order.RevertExpressNo, - RevertExpressDuration: order.RevertExpressDuration, + //for _, order := range orders { + // //fmt.Println("order:", order.PayStatus, order.GameCardGoodsId) + // //var gameCardGoods GameCardGoods + // //err = NewGameCardGoodsQuerySet(DBProd).IDEq(uint32(order.GameCardGoodsId)).One(&gameCardGoods) + // //if err != nil { + // // logger.Error("err:", err) + // // //continue + // //} + // //orderCard := OrderCard{ + // // OrderId: order.ID, + // // Uid: uint32(order.Uid), + // // GameCardId: uint32(order.GameCardId), + // // GameCardGoodsId: uint32(order.GameCardGoodsId), + // // StoreId: uint32(order.StoreId), + // // CardStatus: uint32(order.CardStatus), + // // DeliveryTime: order.DeliveryTime, + // // ReceiptTime: order.ReceiptTime, + // // DeliveryType: order.DeliveryType, + // // SerialNumber: order.GameCardSerialNumber, + // // PayStatus: order.PayStatus, + // // RevertStoreId: order.RevertStoreId, + // // RevertTime: order.RevertTime, + // // RevertExpressCompany: order.RevertExpressCompany, + // // RevertExpressCompanyNo: order.RevertExpressCompanyNo, + // // RevertExpressNo: order.RevertExpressNo, + // // RevertExpressDuration: order.RevertExpressDuration, + // // + // // //Postage: order.Postage, + // // //ExpressCompany: order.ExpressCompany, + // // //ExpressCompanyNo: order.ExpressCompanyNo, + // // //ExpressNo: order.ExpressNo, + // // //GamePrice: 0, + // // //GameCoverImg: "", + // // //Order: nil, + // //} + // //fmt.Println("order:", order.ID, order.PayStatus, order.CardStatus, order.Uid, order.GameCardId) + // //err = DBProd.Create(&orderCard).Error + // //if err != nil { + // // logger.Error("err:", err) + // //} + //} +} - //Postage: order.Postage, - //ExpressCompany: order.ExpressCompany, - //ExpressCompanyNo: order.ExpressCompanyNo, - //ExpressNo: order.ExpressNo, - //GamePrice: 0, - //GameCoverImg: "", - //Order: nil, +func TestSyncUserRent(t *testing.T) { + SyncUserRent() +} + +func SyncUserRent() { + InitDBProd() + var users []User + err := NewUserQuerySet(DBProd).MemberLevelIn(2, 3).All(&users) + if err != nil { + logger.Error("err:", err) + } + //Order{} + for _, user := range users { + if user.Uid == 34021861 || user.Uid == 81309358 { + continue } - fmt.Println("order:", order.ID, order.PayStatus, order.CardStatus, order.Uid, order.GameCardId) - err = DBProd.Create(&orderCard).Error + count, err := NewUserRentCardQuerySet(DBProd).UidEq(user.Uid).CanRentCountEq(1).HaveRentCountEq(0).Count() if err != nil { - logger.Error("err:", err) + fmt.Println("err:", err) + } + if count > 0 { + orderCount, err := NewOrderCardQuerySet(DBProd).UidEq(user.Uid).CardStatusIn(1, 2, 3).PayStatusEq(2).Count() + if err != nil { + fmt.Println("err:", err) + } + if orderCount == 0 { + continue + } + fmt.Println("订单 count: uid:", orderCount, user.Uid) + + _, err = NewUserRentCardQuerySet(DBProd).UidEq(user.Uid).GetUpdater().SetCanRentCount(0). + SetHaveRentCount(1).UpdateNum() + if err != nil { + fmt.Println("err:", err) + } } } } + +func TestOrderCancelId(t *testing.T) { + //OrderCancelId() +} + +//func OrderCancelId() { +// ids := []uint32{8288, 8265} +// for _, id := range ids { +// //OrderCancel(id) +// controller.OrderCancelBy(id) +// } +// +//} + +//func OrderCancel(id uint32) { +// //InitDBProd() +// //DB = DBProd +// var order Order +// err := NewOrderQuerySet(DB).IDEq(id).One(&order) +// if err != nil { +// fmt.Println("err:", err) +// } +// +// outTradeNo, err := GetWxPayExpressFeeRefundRecord(order.ID) +// if err != nil { +// logger.Error("err:", err) +// return +// } +// +// orderSn := GetOrderSn() +// err = UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert() +// if err != nil { +// logger.Error(errors.New("WebPay err")) +// return +// } +// +// orderRefund := wxpay.OrderRefund{ +// OutTradeNo: outTradeNo, +// OutRefundNo: orderSn, +// NotifyUrl: "", +// Amount: wxpay.OrderRefundAmount{ +// Refund: order.PayPrice, +// Total: order.PayPrice, +// Currency: "CNY", +// }, +// } +// bytes, _ := json.Marshal(order) +// fmt.Println("订单取消:", string(bytes)) +// orderRefundJson, _ := json.Marshal(&orderRefund) +// fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson)) +// //err = wxpay.WxPayOrderRefund(orderRefund) +// err = wxpay.TransactionOrderRefund(orderRefund) +// if err != nil { +// logger.Error("err:", err) +// return +// } +//} From 87ea25f0d5c2e696ce3e24d58c4e17816f855c3a Mon Sep 17 00:00:00 2001 From: li Date: Tue, 1 Mar 2022 21:48:01 +0800 Subject: [PATCH 10/11] fix: --- cmd/server.go | 85 ++++++++++++++++++++++++++++++++++++++++++++- controller/order.go | 1 + model/model_test.go | 10 +++--- 3 files changed, 90 insertions(+), 6 deletions(-) diff --git a/cmd/server.go b/cmd/server.go index 41f39c2..a9b5660 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -18,7 +18,7 @@ func runServer() { gin.SetMode(gin.DebugMode) router.ConfigAppRouter(server) - + //OrderCancelId() err := server.Run(fmt.Sprintf(":%d", config.AppConfig.ServerPort)) if err != nil { logger.Error(err) @@ -47,3 +47,86 @@ func init() { utils.InitSnowFlakeByGo() } + +//func OrderCancelId() { +// //ids := []uint32{8288, 8265} +// ids := []uint32{8335} +// for _, id := range ids { +// //OrderCancel(id) +// OrderCancel(id) +// } +// +//} +// +//func OrderCancel(id uint32) { +// InitDBProd() +// model.DB = DBProd +// var order model.Order +// err := model.NewOrderQuerySet(model.DB).IDEq(id).One(&order) +// if err != nil { +// fmt.Println("err:", err) +// } +// +// outTradeNo, err := model.GetWxPayExpressFeeRefundRecord(order.ID) +// if err != nil { +// logger.Error("err:", err) +// return +// } +// +// orderSn :=model.GetOrderSn() +// err = model.UserOpenMemberRecord{Uid: uint32(order.Uid), OpenNo: orderSn, OrderId: order.ID, OrderType: 2}.Insert() +// if err != nil { +// logger.Error(errors.New("WebPay err")) +// return +// } +// +// orderRefund := wxpay.OrderRefund{ +// OutTradeNo: outTradeNo, +// OutRefundNo: orderSn, +// NotifyUrl: "", +// Amount: wxpay.OrderRefundAmount{ +// Refund: order.PayPrice, +// Total: order.PayPrice, +// Currency: "CNY", +// }, +// } +// bytes, _ := json.Marshal(order) +// fmt.Println("订单取消:", string(bytes)) +// orderRefundJson, _ := json.Marshal(&orderRefund) +// fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson)) +// //err = wxpay.WxPayOrderRefund(orderRefund) +// err = wxpay.TransactionOrderRefund(orderRefund) +// if err != nil { +// logger.Error("err:", err) +// return +// } +//} +// +//var DBProd *gorm.DB +// +//func InitDBProd() { +// var err error +// dialect := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", +// "mh_pro", "fLeytnBFCRB553ab", "39.108.188.218", "3306", +// "mh_pro") +// +// DBProd, err = gorm.Open("mysql", dialect) +// if err != nil { +// fmt.Println("Connect Database Error, error = ", err) +// panic(err) +// } +// DBProd.DB().SetMaxOpenConns(1000) +// DBProd.DB().SetMaxIdleConns(500) +// DBProd.DB().SetConnMaxLifetime(time.Second * 10) +// //DBProd.LogMode(true) +// DBProd.LogMode(false) +// DBProd.SingularTable(true) +// DBProd.AutoMigrate( +// ) +// +// if err := DBProd.DB().Ping(); err != nil { +// fmt.Println("Ping Database Fail, error = ", err) +// panic(err) +// } +// fmt.Println("DB init success") +//} \ No newline at end of file diff --git a/controller/order.go b/controller/order.go index ee847c3..ece57c7 100644 --- a/controller/order.go +++ b/controller/order.go @@ -246,6 +246,7 @@ func RentCardOrderCreate(c *gin.Context) { //return fmt.Println("CardMax", memberConfig.CardMax) rentCard = &model.UserRentCard{LevelRentCount: memberConfig.CardMax, CanRentCount: memberConfig.CardMax} + } fmt.Println("rentCard", rentCard.CanRentCount) if cardCount > rentCard.CanRentCount { diff --git a/model/model_test.go b/model/model_test.go index 9d5de3f..05557ec 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -787,11 +787,11 @@ func SyncUserRent() { } fmt.Println("订单 count: uid:", orderCount, user.Uid) - _, err = NewUserRentCardQuerySet(DBProd).UidEq(user.Uid).GetUpdater().SetCanRentCount(0). - SetHaveRentCount(1).UpdateNum() - if err != nil { - fmt.Println("err:", err) - } + //_, err = NewUserRentCardQuerySet(DBProd).UidEq(user.Uid).GetUpdater().SetCanRentCount(0). + // SetHaveRentCount(1).UpdateNum() + //if err != nil { + // fmt.Println("err:", err) + //} } } } From 734f3984ce26738e59040fe72fe4bce06b1e5b4b Mon Sep 17 00:00:00 2001 From: li Date: Sat, 5 Mar 2022 11:32:38 +0800 Subject: [PATCH 11/11] =?UTF-8?q?fix:=E6=8A=BC=E9=87=91=E5=AE=A1=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/order.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/model/order.go b/model/order.go index 6d38d5b..22f2c10 100644 --- a/model/order.go +++ b/model/order.go @@ -490,7 +490,8 @@ func IsHaveOnDeliverOrderCards(orderId uint32) (bool, error) { func IsUserHaveUnreturnedOrder(uid uint32) (bool, error) { fmt.Println("uid", uid) - 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` 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) //count, err := NewOrderQuerySet(DB).UidEq(uint64(uid)).PayStatusEq(PayStatusPaid).CardStatusIn(1, 2, 3).Count() //if err != nil { // logger.Error("err:", err)