This commit is contained in:
li 2022-01-29 10:21:38 +08:00
parent 75b20230c6
commit 2c672c795f
8 changed files with 104 additions and 35 deletions

View File

@ -4,6 +4,7 @@ import (
"crypto/md5" "crypto/md5"
"encoding/json" "encoding/json"
"encoding/xml" "encoding/xml"
"errors"
"fmt" "fmt"
"github.com/codinl/go-logger" "github.com/codinl/go-logger"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -237,7 +238,6 @@ func PushWXPayNotice(c *gin.Context) {
ReturnCode: "FAIL", ReturnCode: "FAIL",
} }
correctSign, err := PayCallBackHandle(notify, config.AppConfig.WxMchSecret) correctSign, err := PayCallBackHandle(notify, config.AppConfig.WxMchSecret)
if err != nil { if err != nil {
logger.Error("PushWXPayNotice sign create fail") logger.Error("PushWXPayNotice sign create fail")
RespBodyXML(c, ret) RespBodyXML(c, ret)
@ -280,6 +280,49 @@ func PushWXPayNotice(c *gin.Context) {
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Error("err:", err) 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 return
} }
err = begin.Commit().Error err = begin.Commit().Error

View File

@ -92,7 +92,7 @@ func OrderInfo(c *gin.Context) {
//OrderId uint32 `json:"order_id"` //OrderId uint32 `json:"order_id"`
//GameCardId uint64 `json:"game_card_id"` // 游戏id //GameCardId uint64 `json:"game_card_id"` // 游戏id
//GameCardGoodsId uint64 `json:"game_card_goods_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 { if c.ShouldBindJSON(&req) != nil {
logger.Error("ShouldBindJSON err") logger.Error("ShouldBindJSON err")
@ -860,13 +860,13 @@ func OrderCancel(c *gin.Context) {
fmt.Println("OrderId:", order.ID) fmt.Println("OrderId:", order.ID)
//order := &model.Order{} //order := &model.Order{}
//order.ID = req.OrderId //order.ID = req.OrderId
isRecede, err := order.Cancel() isRecede, orderInfo, err := order.Cancel()
if err != nil { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
RespJson(c, status.OrderDelivered, nil) RespJson(c, status.OrderDelivered, nil)
return return
} }
order = orderInfo
fmt.Println("order:", order) fmt.Println("order:", order)
if isRecede { if isRecede {
@ -897,6 +897,8 @@ func OrderCancel(c *gin.Context) {
} }
bytes, _ := json.Marshal(order) bytes, _ := json.Marshal(order)
fmt.Println("订单取消:", string(bytes)) fmt.Println("订单取消:", string(bytes))
orderRefundJson, _ := json.Marshal(&orderRefund)
fmt.Println("订单取消 orderRefundJson:", string(orderRefundJson))
//err = wxpay.WxPayOrderRefund(orderRefund) //err = wxpay.WxPayOrderRefund(orderRefund)
err = wxpay.TransactionOrderRefund(orderRefund) err = wxpay.TransactionOrderRefund(orderRefund)
if err != nil { if err != nil {

View File

@ -243,7 +243,7 @@ func OpenMember(c *gin.Context) {
fmt.Println("configInfo.MemberFee : configInfo.DepositFee", memberConfig.MemberFee, memberConfig.MemberDeposit) 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 { if user.Deposit == memberConfig.MemberDeposit {
totalFee = memberConfig.MemberFee totalFee = memberConfig.MemberFee
} }

2
go.mod
View File

@ -20,5 +20,5 @@ require (
github.com/spf13/viper v1.7.1 github.com/spf13/viper v1.7.1
github.com/wechatpay-apiv3/wechatpay-go v0.2.6 github.com/wechatpay-apiv3/wechatpay-go v0.2.6
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9
qiniupkg.com/x v7.0.8+incompatible qiniupkg.com/x v7.0.8+incompatible // indirect
) )

View File

@ -19,5 +19,6 @@ func TestExpressInfo(t *testing.T) {
//paramJson, _ := json.Marshal(paramMap) //paramJson, _ := json.Marshal(paramMap)
//fmt.Println("paramJson:", string(paramJson)) //fmt.Println("paramJson:", string(paramJson))
ExpressInfo("zhongtong","73155364431352") //ExpressInfo("zhongtong","73155364431352")
ExpressInfo("emsbg","9868015085913")
} }

View File

@ -34,10 +34,10 @@ const (
//wxPayNotifyUrl = "api/v1/wxpay/notice" //wxPayNotifyUrl = "api/v1/wxpay/notice"
wxPayNotifyUrl = "/api/v1/wxpay/notice" wxPayNotifyUrl = "/api/v1/wxpay/notice"
WxPayMember = "member_pay" // 会员 WxPayMember = "member_pay" // 会员
WxPayRentCard = "rent_card_pay" // 租卡 WxPayRentCard = "rent_card_pay" // 租卡
WxPayDeposit = "deposit_pay" // 押金 WxPayDeposit = "deposit_pay" // 押金
WxPayUpgradeMember = "upgrade_member" // 押金 WxPayUpgradeMember = "upgrade_member" // 押金
//NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产 //NotifyUrl = "https://switch.deovo.com:8001/api/v1/wxpay/notice" // TODO 数据库配置 生产
//NotifyUrl = "https://dev.switch.deovo.com:8004/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"` CouponFee1 uint `xml:"coupon_fee_1,CDATA" json:"coupon_fee_1"`
CouponId1 string `xml:"coupon_id_1,CDATA" json:"coupon_id_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"` 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"` 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"` CouponId4 string `xml:"coupon_id_4,CDATA" json:"coupon_id_4"`
TransactionId string `xml:"transaction_id,CDATA" json:"transaction_id"` TransactionId string `xml:"transaction_id,CDATA" json:"transaction_id"`

View File

@ -61,6 +61,8 @@ type Order struct {
RevertExpressDuration uint64 `json:"revert_express_duration"` // 归还物流时长 RevertExpressDuration uint64 `json:"revert_express_duration"` // 归还物流时长
OutTradeNo string `json:"out_trade_no"` // 支付订单 OutTradeNo string `json:"out_trade_no"` // 支付订单
Mchid string `json:"mchid"` // 商户 Mchid string `json:"mchid"` // 商户
OrderCardId uint32 `json:"order_card_id" gorm:"-"` //
} }
// gen:qs // gen:qs
@ -287,7 +289,9 @@ func (m *Order) Revert() error {
//} //}
fmt.Println("GameCardGoodsId------:", m.GameCardGoodsId) fmt.Println("GameCardGoodsId------:", m.GameCardGoodsId)
fmt.Println("ID------:", m.ID) 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 { if err != nil {
logger.Errorf("err:%#v", err) logger.Errorf("err:%#v", err)
return err return err
@ -315,7 +319,8 @@ func (m *Order) Revert() error {
//order.RevertExpressCompanyNo = m.RevertExpressCompanyNo //order.RevertExpressCompanyNo = m.RevertExpressCompanyNo
//order.RevertExpressNo = m.RevertExpressNo //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). SetCardStatus(OrderCardStatusReturning).
SetRevertTime(time.Now()). SetRevertTime(time.Now()).
SetRevertStoreId(m.RevertStoreId). SetRevertStoreId(m.RevertStoreId).
@ -353,7 +358,8 @@ func (m *Order) RevertCancel() (bool, error) {
// logger.Error("order card status completed") // logger.Error("order card status completed")
// return false, errors.New("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 { if err != nil {
logger.Errorf("err:%#v", err) logger.Errorf("err:%#v", err)
return false, err return false, err
@ -379,7 +385,8 @@ func (m *Order) RevertCancel() (bool, error) {
//order.RevertExpressCompany = m.RevertExpressCompany //order.RevertExpressCompany = m.RevertExpressCompany
//order.RevertExpressCompanyNo = m.RevertExpressCompanyNo //order.RevertExpressCompanyNo = m.RevertExpressCompanyNo
//order.RevertExpressNo = m.RevertExpressNo //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). SetCardStatus(OrderCardStatusPlaying).
//SetRevertTime(time.Time{}). //SetRevertTime(time.Time{}).
SetRevertStoreId(0). SetRevertStoreId(0).
@ -530,7 +537,7 @@ func GetPickupCode() string {
} }
func (m *Order) Cancel() (bool, error) { func (m *Order) Cancel() (bool, Order, error) {
var ( var (
order Order order Order
orderCard OrderCard orderCard OrderCard
@ -538,20 +545,24 @@ func (m *Order) Cancel() (bool, error) {
err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order) err := NewOrderQuerySet(DB).IDEq(m.ID).One(&order)
if err != nil { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return false, err return false, order, err
} }
orderJson, _ := json.Marshal(m) orderJson, _ := json.Marshal(m)
fmt.Println("orderJson:", string(orderJson)) fmt.Println("orderJson:", string(orderJson))
//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).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).One(&orderCard) //err = NewOrderCardQuerySet(DB).OrderIdEq(m.ID).GameCardIdEq(uint32(m.GameCardId)).CardStatusEq(OrderCardStatusUnPick).Limit(1).One(&orderCard)
if err != nil && err != RecordNotFound { if err != nil && err != RecordNotFound {
logger.Errorf("err:%#v", err) logger.Errorf("err:%#v", err)
return false, err return false, order, err
} }
if err == RecordNotFound { if err == RecordNotFound {
logger.Error("order card status not unpick") 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 { //if userOrder.CardStatus != OrderCardStatusUnPick {
// logger.Error("card status not unpick err: ") // logger.Error("card status not unpick err: ")
@ -584,7 +595,7 @@ func (m *Order) Cancel() (bool, error) {
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Error("err:", err) 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) 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) fmt.Println("sql:", sql)
@ -592,7 +603,7 @@ func (m *Order) Cancel() (bool, error) {
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Errorf("err:%#v", err) logger.Errorf("err:%#v", err)
return false, err return false, order, err
} }
//UserRentCard{} //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) 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 { if err != nil {
begin.Rollback() begin.Rollback()
logger.Errorf("err:%#v", err) logger.Errorf("err:%#v", err)
return false, err return false, order, err
} }
err = begin.Commit().Error err = begin.Commit().Error
if err != nil { if err != nil {
begin.Rollback() begin.Rollback()
logger.Errorf("err:%#v", err) logger.Errorf("err:%#v", err)
return false, err return false, order, err
} }
isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID) isHaveOnDeliver, err := IsHaveOnDeliverOrderCards(m.ID)
if err != nil { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return false, err return false, order, err
} }
if !isHaveOnDeliver { if !isHaveOnDeliver {
err = NewOrderQuerySet(DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update() err = NewOrderQuerySet(DB).IDEq(order.ID).GetUpdater().SetCardStatus(OrderCardStatusCancel).Update()
if err != nil { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return false, err return false, order, err
} }
} }
@ -628,9 +639,10 @@ func (m *Order) Cancel() (bool, error) {
isRecede = true isRecede = true
} }
} }
//m.ID = order.ID
m = &order //m.Uid = order.Uid
return isRecede, nil //m.PayPrice = order.PayPrice
return isRecede, order, nil
} }
func UnPayOrderSetCancel(uid uint32) { func UnPayOrderSetCancel(uid uint32) {
@ -739,10 +751,20 @@ func (m *Order) InventoryReduction(gdb *gorm.DB) error {
//fmt.Println("cards:", cards) //fmt.Println("cards:", cards)
for i, _ := range 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) //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) 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) fmt.Println("sql:", sql)
err := gdb.Exec(sql).Error err = gdb.Exec(sql).Error
if err != nil { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return err return err

View File

@ -399,7 +399,8 @@ func (m *User) Edit() {
func GetWxPayExpressFeeRefundRecord(orderId uint32) (string, error) { func GetWxPayExpressFeeRefundRecord(orderId uint32) (string, error) {
var openMemberRecord UserOpenMemberRecord 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 { if err != nil {
logger.Error("err:", err) logger.Error("err:", err)
return "", err return "", err