优化支付日志和配置删除提示
This commit is contained in:
@@ -3,13 +3,14 @@ package payment
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"hfb_sys/backend/internal/model"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/datatypes"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"hfb_sys/backend/internal/model"
|
||||
)
|
||||
|
||||
func (r *Repository) StartRefund(ctx context.Context, orderID uint64, refundAmountCent int64, bizType string, remark string) (*RefundDTO, error) {
|
||||
@@ -29,7 +30,11 @@ func (r *Repository) StartRefund(ctx context.Context, orderID uint64, refundAmou
|
||||
if existing {
|
||||
latest, syncErr := r.syncRefundPayment(ctx, refundOrder, refundOrder.Status != "refunded")
|
||||
if syncErr != nil {
|
||||
log.Printf("[payment] sync existing refund failed order_id=%d payment_id=%d biz_type=%s err=%v", orderID, refundOrder.ID, bizType, syncErr)
|
||||
r.log().Warn("payment existing refund sync failed", paymentLogFields(ctx, appendFields(
|
||||
paymentOrderFields(refundOrder),
|
||||
[]zap.Field{zap.String("biz_type", bizType), zap.Error(syncErr)},
|
||||
)...,
|
||||
)...)
|
||||
dto := toRefundDTO(*refundOrder)
|
||||
return &dto, nil
|
||||
}
|
||||
@@ -59,16 +64,32 @@ func (r *Repository) StartRefund(ctx context.Context, orderID uint64, refundAmou
|
||||
return &dto, nil
|
||||
}
|
||||
|
||||
log.Printf("[payment] refund start order_id=%d order_no=%s payment_id=%d biz_type=%s provider=%s amount_cent=%d merchant_refund_id=%s origin_third_order_id=%s origin_provider_order_id=%s",
|
||||
orderID, originalPayment.OrderNo, refundOrder.ID, bizType, runtimeConfig.Provider, refundAmountCent, refundOrder.ThirdOrderID, originalPayment.ThirdOrderID, refundOriginProviderOrderID(originalPayment))
|
||||
r.log().Info("payment refund start", paymentLogFields(ctx, appendFields(
|
||||
paymentOrderFields(refundOrder),
|
||||
runtimeConfigFields(runtimeConfig),
|
||||
[]zap.Field{
|
||||
zap.String("merchant_refund_id", refundOrder.ThirdOrderID),
|
||||
zap.String("origin_third_order_id", originalPayment.ThirdOrderID),
|
||||
zap.String("origin_provider_order_id", refundOriginProviderOrderID(originalPayment)),
|
||||
},
|
||||
)...,
|
||||
)...)
|
||||
r.recordConfigUsage(ctx, runtimeConfig, refundOrder)
|
||||
if err := r.markOrderRefunding(ctx, orderID, refundAmountCent); err != nil {
|
||||
log.Printf("[payment] mark order refunding failed order_id=%d err=%v", orderID, err)
|
||||
r.log().Warn("payment mark order refunding failed", paymentLogFields(ctx,
|
||||
zap.Uint64("order_id", orderID),
|
||||
zap.Int64("refund_amount_cent", refundAmountCent),
|
||||
zap.Error(err),
|
||||
)...)
|
||||
}
|
||||
|
||||
if runtimeConfig.Channel == nil {
|
||||
if err := r.markRefundFailed(ctx, refundOrder.ID, orderID, refundAmountCent, map[string]string{"error": "payment channel unavailable"}, nil); err != nil {
|
||||
log.Printf("[payment] mark refund failed status failed order_id=%d payment_id=%d err=%v", orderID, refundOrder.ID, err)
|
||||
r.log().Warn("payment mark refund failed status failed", paymentLogFields(ctx, appendFields(
|
||||
paymentOrderFields(refundOrder),
|
||||
[]zap.Field{zap.Error(err)},
|
||||
)...,
|
||||
)...)
|
||||
}
|
||||
return nil, ErrPaymentUnavailable
|
||||
}
|
||||
@@ -87,18 +108,38 @@ func (r *Repository) StartRefund(ctx context.Context, orderID uint64, refundAmou
|
||||
rawRequest = resp.RawRequest
|
||||
}
|
||||
if markErr := r.markRefundFailed(ctx, refundOrder.ID, orderID, refundAmountCent, map[string]string{"error": err.Error()}, rawRequest); markErr != nil {
|
||||
log.Printf("[payment] mark refund failed status failed order_id=%d payment_id=%d err=%v", orderID, refundOrder.ID, markErr)
|
||||
r.log().Warn("payment mark refund failed status failed", paymentLogFields(ctx, appendFields(
|
||||
paymentOrderFields(refundOrder),
|
||||
[]zap.Field{zap.Error(markErr)},
|
||||
)...,
|
||||
)...)
|
||||
}
|
||||
log.Printf("[payment] refund request failed order_id=%d payment_id=%d biz_type=%s provider=%s amount_cent=%d err=%v",
|
||||
orderID, refundOrder.ID, bizType, runtimeConfig.Provider, refundAmountCent, err)
|
||||
r.log().Warn("payment refund request failed", paymentLogFields(ctx, appendFields(
|
||||
paymentOrderFields(refundOrder),
|
||||
runtimeConfigFields(runtimeConfig),
|
||||
[]zap.Field{zap.Error(err)},
|
||||
)...,
|
||||
)...)
|
||||
return nil, err
|
||||
}
|
||||
if !resp.OK {
|
||||
if markErr := r.markRefundFailed(ctx, refundOrder.ID, orderID, refundAmountCent, resp.Raw, resp.RawRequest); markErr != nil {
|
||||
log.Printf("[payment] mark refund rejected status failed order_id=%d payment_id=%d err=%v", orderID, refundOrder.ID, markErr)
|
||||
r.log().Warn("payment mark refund rejected status failed", paymentLogFields(ctx, appendFields(
|
||||
paymentOrderFields(refundOrder),
|
||||
[]zap.Field{zap.Error(markErr)},
|
||||
)...,
|
||||
)...)
|
||||
}
|
||||
log.Printf("[payment] refund rejected order_id=%d payment_id=%d biz_type=%s provider=%s amount_cent=%d code=%s message=%s",
|
||||
orderID, refundOrder.ID, bizType, runtimeConfig.Provider, refundAmountCent, firstNonEmpty(resp.Raw["code"], resp.Raw["resp_code"], resp.Raw["result_code"]), resp.ErrorMessage)
|
||||
r.log().Warn("payment refund rejected", paymentLogFields(ctx, appendFields(
|
||||
paymentOrderFields(refundOrder),
|
||||
runtimeConfigFields(runtimeConfig),
|
||||
[]zap.Field{
|
||||
zap.String("channel_code", firstNonEmpty(resp.Raw["code"], resp.Raw["resp_code"], resp.Raw["result_code"])),
|
||||
zap.String("channel_message", resp.ErrorMessage),
|
||||
zap.Strings("raw_response_keys", stringMapKeys(resp.Raw)),
|
||||
},
|
||||
)...,
|
||||
)...)
|
||||
return nil, ErrPaymentUnavailable
|
||||
}
|
||||
|
||||
@@ -111,8 +152,15 @@ func (r *Repository) StartRefund(ctx context.Context, orderID uint64, refundAmou
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
log.Printf("[payment] refund result order_id=%d payment_id=%d biz_type=%s provider=%s amount_cent=%d status=%s provider_refund_id=%s",
|
||||
orderID, refundOrder.ID, bizType, runtimeConfig.Provider, refundAmountCent, resp.Status, resp.ProviderRefundID)
|
||||
r.log().Info("payment refund result", paymentLogFields(ctx, appendFields(
|
||||
paymentOrderFields(refundOrder),
|
||||
runtimeConfigFields(runtimeConfig),
|
||||
[]zap.Field{
|
||||
zap.String("refund_status", resp.Status),
|
||||
zap.String("provider_refund_id", resp.ProviderRefundID),
|
||||
},
|
||||
)...,
|
||||
)...)
|
||||
|
||||
latest, err := r.findPaymentByID(ctx, refundOrder.ID)
|
||||
if err != nil {
|
||||
@@ -259,7 +307,11 @@ func (r *Repository) syncRefundPayment(ctx context.Context, payment *model.Payme
|
||||
if err != nil {
|
||||
if resp != nil && resp.RawRequest != nil {
|
||||
if updateErr := r.updateRefundRawRequest(ctx, payment.ID, resp.RawRequest); updateErr != nil {
|
||||
log.Printf("[payment] update refund query raw request failed payment_id=%d err=%v", payment.ID, updateErr)
|
||||
r.log().Warn("payment refund query raw request update failed", paymentLogFields(ctx, appendFields(
|
||||
paymentOrderFields(payment),
|
||||
[]zap.Field{zap.Error(updateErr)},
|
||||
)...,
|
||||
)...)
|
||||
}
|
||||
}
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user