From 2c672c795f56d48b4e2b3e608f72cc0b6525a204 Mon Sep 17 00:00:00 2001 From: li Date: Sat, 29 Jan 2022 10:21:38 +0800 Subject: [PATCH] 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