优化支付日志和配置删除提示

This commit is contained in:
yml
2026-06-18 22:16:09 +08:00
parent fa14e0e36d
commit 9b06673efb
15 changed files with 381 additions and 92 deletions
+68 -16
View File
@@ -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