浏览代码

退款消息推送

kobe6258 4 月之前
父节点
当前提交
54f8b9de99
共有 3 个文件被更改,包括 111 次插入43 次删除
  1. 31 22
      controllers/web_hook/htfutures_trade_controller.go
  2. 48 21
      domian/order/trade_order.go
  3. 32 0
      models/order/trade_order.go

+ 31 - 22
controllers/web_hook/htfutures_trade_controller.go

@@ -13,7 +13,7 @@ type HTFuturesTradeController struct {
 }
 
 type ss struct {
-	ID           string `json:"id"`
+	Success      bool   `json:"success"`
 	User         int    `json:"user"`
 	TradeOrderNo string `json:"tradeOrderNo"`
 }
@@ -26,14 +26,16 @@ type ss struct {
 func (h *HTFuturesTradeController) InformPaymentResult() {
 	controllers.WrapWebhook(&h.WebHookController, func() (result *controllers.WrapData, err error) {
 		result = h.InitWrapData("同步风险等级")
-		ss := new(ss)
-		h.GetPostParams(ss)
-
-		logger.Info("支付结果通知: %v", ss)
-
-		//privateKey, err := authUtils.ParsePrivateKey(htConfig.GetWebhookPrivateKey())
-		_ = product.OpenProduct(ss.User, ss.ID)
-
+		s := new(ss)
+		h.GetPostParams(s)
+		logger.Info("支付结果通知: %v", s)
+		if s.Success {
+			productOrderNo, _ := orderService.DealPayment(s.TradeOrderNo, orderService.PaySuccess)
+			//privateKey, err := authUtils.ParsePrivateKey(htConfig.GetWebhookPrivateKey())
+			_ = product.OpenProduct(s.User, productOrderNo)
+		} else {
+			_, _ = orderService.DealPayment(s.TradeOrderNo, orderService.PayFail)
+		}
 		//htConfig := config.GetConfig(contants.HT).(*config.HTBizConfig)
 		//webhookRequest := new(WebhookRequest)
 		//h.GetPostParams(webhookRequest)
@@ -73,20 +75,27 @@ func (h *HTFuturesTradeController) InformPaymentResult() {
 func (h *HTFuturesTradeController) InformRefundResult() {
 	controllers.WrapWebhook(&h.WebHookController, func() (result *controllers.WrapData, err error) {
 		result = h.InitWrapData("同步风险等级")
-		ss := new(ss)
-		h.GetPostParams(ss)
-		flow, err := orderService.DealRefund(ss.TradeOrderNo, orderService.RefundSuccess)
-		if err != nil {
-			logger.Error("退款订单处理失败: %v", err)
-			err = exception.NewWithException(exception.RefundDealFail, err.Error())
-			h.FailedResult("退款订单处理失败", result)
-			return
-		}
-		//处理退款订单
-		if true {
-			_ = product.CloseProduct(ss.User, flow.ProductOrderNo)
+		s := new(ss)
+		h.GetPostParams(s)
+		if s.Success {
+			flow, RefundErr := orderService.DealRefund(s.TradeOrderNo, orderService.RefundSuccess)
+			if RefundErr != nil {
+				logger.Error("退款订单处理失败: %v", err)
+				err = exception.NewWithException(exception.RefundDealFail, err.Error())
+				h.FailedResult("退款订单处理失败", result)
+				return
+			}
+			//处理退款订单
+			_ = product.CloseProduct(s.User, flow.ProductOrderNo)
+		} else {
+			_, RefundErr := orderService.DealRefund(s.TradeOrderNo, orderService.RefundFail)
+			if RefundErr != nil {
+				logger.Error("退款订单处理失败: %v", err)
+				err = exception.NewWithException(exception.RefundDealFail, err.Error())
+				h.FailedResult("退款订单处理失败", result)
+				return
+			}
 		}
-
 		//创建meta_info
 		//htConfig := config.GetConfig(contants.HT).(*config.HTBizConfig)
 		//webhookRequest := new(WebhookRequest)

+ 48 - 21
domian/order/trade_order.go

@@ -18,6 +18,8 @@ const (
 	WechatPay     PaymentWay = "wechat"
 	RefundSuccess            = "success"
 	RefundFail               = "fail"
+	PaySuccess               = "success"
+	PayFail                  = "fail"
 )
 
 type PaymentWay string
@@ -126,27 +128,6 @@ type RefundDealFlowDTO struct {
 	RefundOrderNo  string `gorm:"column:refund_order_no"`
 }
 
-func DealRefund(refundOrderNo string, flag string) (dto RefundDealFlowDTO, err error) {
-	flow, err := order.GetRefundFlow(refundOrderNo)
-	if err != nil {
-		logger.Error("获取退款流水失败%v,退款订单:%s", err, refundOrderNo)
-		return
-	}
-	dto = convertRefundDTO(flow)
-	//处理退款订单
-	TradeOrder, err := order.GetTradeOrderByNo(flow.RefundOrderNo, order.PaymentTypeRefund)
-	if err != nil {
-		logger.Error("获取退款订单失败%v,退款订单:%s", err, refundOrderNo)
-		return
-	}
-	err = order.DealRefundOrder(TradeOrder, true)
-	if err != nil {
-		logger.Error("处理退款结果失败%v,退款订单:%s", err, refundOrderNo)
-		return
-	}
-	_ = createRefundMetaInfo(flow.OperatorUserID, flow.ProductOrderNo, flag)
-	return
-}
 func convertRefundDTO(flow order.RefundDealFlow) RefundDealFlowDTO {
 	return RefundDealFlowDTO{
 		OperatorUserID: flow.OperatorUserID,
@@ -193,3 +174,49 @@ func createRefundMetaInfo(sysUserId int, productOrderNo string, flag string) (er
 	}
 	return message.CreateMetaInfo(metaInfo)
 }
+
+func DealRefund(refundOrderNo string, flag string) (dto RefundDealFlowDTO, err error) {
+	flow, err := order.GetRefundFlow(refundOrderNo)
+	if err != nil {
+		logger.Error("获取退款流水失败%v,退款订单:%s", err, refundOrderNo)
+		return
+	}
+	dto = convertRefundDTO(flow)
+	//处理退款订单
+	TradeOrder, err := order.GetTradeOrderByNo(flow.RefundOrderNo, order.PaymentTypeRefund)
+	if err != nil {
+		logger.Error("获取退款订单失败%v,退款订单:%s", err, refundOrderNo)
+		return
+	}
+	isSuccess := false
+	if flag == RefundSuccess {
+		isSuccess = true
+	}
+	err = order.DealRefundOrder(TradeOrder, isSuccess)
+	if err != nil {
+		logger.Error("处理退款结果失败%v,退款订单:%s", err, refundOrderNo)
+		return
+	}
+	_ = createRefundMetaInfo(flow.OperatorUserID, flow.ProductOrderNo, flag)
+	return
+}
+func DealPayment(tradeOrderNo string, flag string) (productOrderNo string, err error) {
+	//处理退款订单
+	tradeOrder, err := order.GetTradeOrderByNo(tradeOrderNo, order.PaymentTypePay)
+	if err != nil {
+		logger.Error("获取支付订单失败%v,支付订单:%s", err, tradeOrderNo)
+		return
+	}
+	isSuccess := false
+	if flag == PaySuccess {
+		isSuccess = true
+	}
+	err = order.DealPaymentOrder(tradeOrder, isSuccess)
+	if err != nil {
+		logger.Error("处理支付结果失败%v,支付订单:%s", err, tradeOrderNo)
+		return
+	}
+	productOrderNo = tradeOrder.ProductOrderID
+	return
+
+}

+ 32 - 0
models/order/trade_order.go

@@ -94,3 +94,35 @@ func DealRefundOrder(order TradeOrder, isSuccess bool) (err error) {
 	}).Error
 	return
 }
+
+func DealPaymentOrder(order TradeOrder, isSuccess bool) (err error) {
+	var paymentStatus PaymentStatus
+	if isSuccess {
+		paymentStatus = PaymentStatusDone
+	} else {
+		paymentStatus = PaymentStatusFailed
+	}
+	db := models.Main()
+	tx := db.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+			return
+		}
+		tx.Commit()
+	}()
+	err = tx.Model(&TradeOrder{}).Where("id=?", order.ID).Updates(map[string]interface{}{
+		"payment_status": paymentStatus,
+		"deal_time":      time.Now(),
+	}).Error
+	if err != nil {
+		return
+	}
+	if isSuccess {
+		err = tx.Model(&ProductOrder{}).Where("order_id=?", order.ProductOrderID).Updates(map[string]interface{}{
+			"status": OrderStatusPaid,
+		}).Error
+	}
+
+	return
+}