refactor(card_apple_order): 优化充值失败错误处理及日志信息
- 统一删除错误处理函数中冗余的 message 参数,只使用 code 传递错误信息 - 修改多个错误处理逻辑,完善错误日志和订单状态备注,包含卡密和账号信息 - 取消无用的 UpdateRemark 调用,减少重复日志写入 - 修改系统错误、苹果账户错误、充值限制及卡密错误处理函数,提高信息准确性和可读性 - 注释取消状态回调历史记录添加,简化状态.go 相关逻辑 - 调整订单状态更新时备注信息,增加失败原因具体描述,便于后续问题排查 - 减少分配计数调用顺序调整,符合业务流程优化
This commit is contained in:
@@ -62,7 +62,10 @@ func (h *sAppleOrder) queryBalance(ctx context.Context, orderInfo *entity.V1Card
|
||||
}
|
||||
// 3. 苹果账户原因错误(8001-8005)
|
||||
if queryResp.Code >= 8001 && queryResp.Code <= 8005 {
|
||||
_ = h.handleAccountError(ctx, orderInfo, accountInfo, queryResp.Code, queryResp.Code.String())
|
||||
_ = h.handleAccountError(ctx, orderInfo, accountInfo, queryResp.Code)
|
||||
return 0, errors.New(queryResp.Code.String())
|
||||
}
|
||||
if queryResp.Code != apple.CodeSuccess {
|
||||
return 0, errors.New(queryResp.Code.String())
|
||||
}
|
||||
return queryResp.Data.Balance, nil
|
||||
@@ -121,19 +124,19 @@ func (h *sAppleOrder) handleRedeemResult(ctx context.Context, orderInfo *entity.
|
||||
|
||||
// 2. 网络请求或系统资源错误(5000-5999)
|
||||
case resp.Code >= 5000 && resp.Code < 6000:
|
||||
return h.handleSystemError(ctx, orderInfo, accountInfo, resp.Code, resp.Code.String())
|
||||
return h.handleSystemError(ctx, orderInfo, accountInfo, resp.Code)
|
||||
|
||||
// 3. 苹果账户原因错误(8001-8005)
|
||||
case resp.Code >= 8001 && resp.Code <= 8005:
|
||||
return h.handleAccountError(ctx, orderInfo, accountInfo, resp.Code, resp.Code.String())
|
||||
return h.handleAccountError(ctx, orderInfo, accountInfo, resp.Code)
|
||||
|
||||
// 4. 充值限制错误(8010-8012)
|
||||
case resp.Code >= 8010 && resp.Code <= 8012:
|
||||
return h.handleRedeemLimitError(ctx, orderInfo, accountInfo, resp.Code, resp.Code.String())
|
||||
return h.handleRedeemLimitError(ctx, orderInfo, accountInfo, resp.Code)
|
||||
|
||||
// 5. 卡密错误(8013-8014)
|
||||
case resp.Code >= 8013 && resp.Code <= 8014:
|
||||
return h.handleCardCodeError(ctx, orderInfo, accountInfo, resp.Code, resp.Code.String())
|
||||
return h.handleCardCodeError(ctx, orderInfo, accountInfo, resp.Code)
|
||||
|
||||
// 未知错误
|
||||
default:
|
||||
@@ -165,15 +168,14 @@ func (h *sAppleOrder) handleRedeemSuccess(ctx context.Context, orderEntity *enti
|
||||
OrderNo: orderEntity.OrderNo,
|
||||
Amount: amount,
|
||||
Status: orderStatus,
|
||||
Remark: fmt.Sprintf("充值失败:使用卡密【%s】为账号【%s】充值时,卡密金额【%.2f】与订单金额【%.2f】不一致,卡密已核销成功,因为金额不一致,所以订单不给回调.", orderEntity.CardPass, accountInfo.Account, orderEntity.CardAmount, amount)},
|
||||
Remark: remark,
|
||||
},
|
||||
AccountId: accountInfo.Id,
|
||||
HistoryRemark: remark,
|
||||
HistoryOperation: historyOperation,
|
||||
BalanceFromItunes: balanceAfter,
|
||||
})
|
||||
|
||||
_ = h.UpdateRemark(ctx, orderEntity.OrderNo, remark, nil)
|
||||
|
||||
if err != nil {
|
||||
glog.Error(ctx, fmt.Sprintf("更新订单成功记录失败 - 订单号: %s, 错误: %v", orderEntity.OrderNo, err))
|
||||
return err
|
||||
@@ -186,13 +188,12 @@ func (h *sAppleOrder) handleRedeemSuccess(ctx context.Context, orderEntity *enti
|
||||
// handleRedeemUnknown 处理核销失败的情况
|
||||
func (h *sAppleOrder) handleRedeemUnknown(ctx context.Context, orderEntity *entity.V1CardAppleRechargeInfo, accountInfo *entity.V1CardAppleAccountInfo, errMsg string) error {
|
||||
// 订单退回待处理状态
|
||||
err := h.ModifyOrderStatus(ctx, orderEntity.OrderNo, consts.AppleRechargeOrderWaiting, fmt.Sprintf("核销失败:%s", errMsg), nil)
|
||||
err := h.ModifyOrderStatus(ctx, orderEntity.OrderNo, consts.AppleRechargeOrderWaiting, fmt.Sprintf("使用卡密【%s】为账号【%s】充值失败,核销失败:%s", orderEntity.CardPass, accountInfo.Account, errMsg), nil)
|
||||
if err != nil {
|
||||
glog.Error(ctx, fmt.Sprintf("更新订单失败状态失败 - 订单号: %s, 错误: %v", orderEntity.OrderNo, err))
|
||||
return err
|
||||
}
|
||||
|
||||
_ = h.UpdateRemark(ctx, orderEntity.OrderNo, fmt.Sprintf("充值失败,原因:%s", errMsg), nil)
|
||||
// 添加历史记录
|
||||
_ = h.AddHistory(ctx, &model.AppleCardRechargeHistoryInput{
|
||||
AccountID: accountInfo.Id,
|
||||
@@ -209,9 +210,9 @@ func (h *sAppleOrder) handleRedeemUnknown(ctx context.Context, orderEntity *enti
|
||||
|
||||
// handleSystemError 处理系统资源错误(5000-5999)
|
||||
// 订单退回待处理,等待系统重新调度重试
|
||||
func (h *sAppleOrder) handleSystemError(ctx context.Context, orderEntity *entity.V1CardAppleRechargeInfo, accountInfo *entity.V1CardAppleAccountInfo, code apple.Code, message string) error {
|
||||
func (h *sAppleOrder) handleSystemError(ctx context.Context, orderEntity *entity.V1CardAppleRechargeInfo, accountInfo *entity.V1CardAppleAccountInfo, code apple.Code) error {
|
||||
// 订单退回待处理状态
|
||||
err := h.ModifyOrderStatus(ctx, orderEntity.OrderNo, consts.AppleRechargeOrderWaiting, fmt.Sprintf("系统错误:%s", message), nil)
|
||||
err := h.ModifyOrderStatus(ctx, orderEntity.OrderNo, consts.AppleRechargeOrderWaiting, fmt.Sprintf("使用卡密【%s】为账号【%s】充值失败,系统错误:%s", orderEntity.CardPass, accountInfo.Account, code.String()), nil)
|
||||
if err != nil {
|
||||
glog.Error(ctx, fmt.Sprintf("更新订单状态失败 - 订单号: %s, 错误: %v", orderEntity.OrderNo, err))
|
||||
return err
|
||||
@@ -219,7 +220,6 @@ func (h *sAppleOrder) handleSystemError(ctx context.Context, orderEntity *entity
|
||||
|
||||
// 减少分配计数
|
||||
_ = h.DecrementDistributionCount(ctx, orderEntity.OrderNo)
|
||||
_ = h.UpdateRemark(ctx, orderEntity.OrderNo, fmt.Sprintf("充值失败,网络原因错误:%s,订单退回重新处理", message), nil)
|
||||
|
||||
// 添加历史记录
|
||||
_ = h.AddHistory(ctx, &model.AppleCardRechargeHistoryInput{
|
||||
@@ -228,7 +228,7 @@ func (h *sAppleOrder) handleSystemError(ctx context.Context, orderEntity *entity
|
||||
RechargeId: int(orderEntity.Id),
|
||||
AccountName: accountInfo.Account,
|
||||
Operation: consts.AppleRechargeOperationItunesFail,
|
||||
Remark: fmt.Sprintf("充值失败,网络原因错误:%s,订单退回重新处理", message),
|
||||
Remark: fmt.Sprintf("使用卡密【%s】为账号【%s】充值失败,网络原因错误:%s,订单退回重新处理", orderEntity.CardPass, accountInfo.Account, code.String()),
|
||||
}, nil)
|
||||
|
||||
glog.Warning(ctx, fmt.Sprintf("系统错误,订单已退回待处理 - 订单号: %s, 状态码: %d", orderEntity.OrderNo, code))
|
||||
@@ -237,7 +237,7 @@ func (h *sAppleOrder) handleSystemError(ctx context.Context, orderEntity *entity
|
||||
|
||||
// handleAccountError 处理苹果账户原因错误(8001-8005)
|
||||
// 标记账户失效,订单退回待处理,等待重新分配其他有效账户
|
||||
func (h *sAppleOrder) handleAccountError(ctx context.Context, orderEntity *entity.V1CardAppleRechargeInfo, accountInfo *entity.V1CardAppleAccountInfo, code apple.Code, message string) error {
|
||||
func (h *sAppleOrder) handleAccountError(ctx context.Context, orderEntity *entity.V1CardAppleRechargeInfo, accountInfo *entity.V1CardAppleAccountInfo, code apple.Code) error {
|
||||
// 根据错误码标记不同的账户失效状态
|
||||
var accountStatus consts.AppleAccountStatus
|
||||
switch code {
|
||||
@@ -257,7 +257,7 @@ func (h *sAppleOrder) handleAccountError(ctx context.Context, orderEntity *entit
|
||||
_ = service.AppleAccount().ModifyStatus(ctx, accountInfo.Id, accountStatus, nil)
|
||||
|
||||
// 订单重新设为待调度状态
|
||||
err := h.ModifyOrderStatus(ctx, orderEntity.OrderNo, consts.AppleRechargeOrderWaiting, "苹果账户原因导致失效,待重新分配", nil)
|
||||
err := h.ModifyOrderStatus(ctx, orderEntity.OrderNo, consts.AppleRechargeOrderWaiting, fmt.Sprintf("使用卡密【%s】为账号【%s】充值失败,订单退回重新充值,因为苹果账户错误,原因:%s", orderEntity.CardPass, accountInfo.Account, code.String()), nil)
|
||||
if err != nil {
|
||||
glog.Error(ctx, fmt.Sprintf("更新订单状态失败 - 订单号: %s, 错误: %v", orderEntity.OrderNo, err))
|
||||
return err
|
||||
@@ -265,8 +265,6 @@ func (h *sAppleOrder) handleAccountError(ctx context.Context, orderEntity *entit
|
||||
|
||||
// 减少分配计数,允许重新分配
|
||||
_ = h.DecrementDistributionCount(ctx, orderEntity.OrderNo)
|
||||
|
||||
_ = h.UpdateRemark(ctx, orderEntity.OrderNo, fmt.Sprintf("订单退回重新充值,因为苹果账户错误,原因:%s", message), nil)
|
||||
// 添加历史记录
|
||||
_ = h.AddHistory(ctx, &model.AppleCardRechargeHistoryInput{
|
||||
AccountID: accountInfo.Id,
|
||||
@@ -274,7 +272,7 @@ func (h *sAppleOrder) handleAccountError(ctx context.Context, orderEntity *entit
|
||||
RechargeId: int(orderEntity.Id),
|
||||
AccountName: accountInfo.Account,
|
||||
Operation: consts.AppleRechargeOperationWrongPassword,
|
||||
Remark: fmt.Sprintf("订单退回重新充值,因为苹果账户错误,原因:%s", message),
|
||||
Remark: fmt.Sprintf("订单退回重新充值,因为苹果账户错误,原因:%s", code.String()),
|
||||
}, nil)
|
||||
|
||||
glog.Warning(ctx, fmt.Sprintf("苹果账户原因导致失效,订单已退回待重新分配 - 订单号: %s, 账号: %s", orderEntity.OrderNo, accountInfo.Account))
|
||||
@@ -283,7 +281,7 @@ func (h *sAppleOrder) handleAccountError(ctx context.Context, orderEntity *entit
|
||||
|
||||
// handleRedeemLimitError 处理充值限制错误(8010-8012)
|
||||
// 根据限制类型标记账户,订单根据业务规则决定重试或失败
|
||||
func (h *sAppleOrder) handleRedeemLimitError(ctx context.Context, orderEntity *entity.V1CardAppleRechargeInfo, accountInfo *entity.V1CardAppleAccountInfo, code apple.Code, message string) error {
|
||||
func (h *sAppleOrder) handleRedeemLimitError(ctx context.Context, orderEntity *entity.V1CardAppleRechargeInfo, accountInfo *entity.V1CardAppleAccountInfo, code apple.Code) error {
|
||||
// 根据限制类型标记账户状态
|
||||
var accountStatus consts.AppleAccountStatus
|
||||
var accountRemark string
|
||||
@@ -302,14 +300,14 @@ func (h *sAppleOrder) handleRedeemLimitError(ctx context.Context, orderEntity *e
|
||||
accountRemark = "苹果账户一分钟充值限制(1分钟后恢复)"
|
||||
default:
|
||||
accountStatus = consts.AppleAccountLimited
|
||||
accountRemark = fmt.Sprintf("苹果账户充值限制(状态码: %d)", code)
|
||||
accountRemark = fmt.Sprintf("苹果账户充值限制")
|
||||
}
|
||||
|
||||
// 标记账户限制状态
|
||||
_ = service.AppleAccount().ModifyStatus(ctx, accountInfo.Id, accountStatus, nil)
|
||||
|
||||
// 订单退回待处理,后续可根据限制类型进行重试或转移到其他账户
|
||||
err := h.ModifyOrderStatus(ctx, orderEntity.OrderNo, consts.AppleRechargeOrderWaiting, fmt.Sprintf("账户受限:%s", message), nil)
|
||||
err := h.ModifyOrderStatus(ctx, orderEntity.OrderNo, consts.AppleRechargeOrderWaiting, fmt.Sprintf("使用卡密【%s】为账号【%s】充值失败,订单退回重新充值,账户受限:%s", orderEntity.CardPass, accountInfo.Account, accountRemark), nil)
|
||||
if err != nil {
|
||||
glog.Error(ctx, fmt.Sprintf("更新订单状态失败 - 订单号: %s, 错误: %v", orderEntity.OrderNo, err))
|
||||
return err
|
||||
@@ -317,7 +315,6 @@ func (h *sAppleOrder) handleRedeemLimitError(ctx context.Context, orderEntity *e
|
||||
|
||||
// 减少分配计数
|
||||
_ = h.DecrementDistributionCount(ctx, orderEntity.OrderNo)
|
||||
_ = h.UpdateRemark(ctx, orderEntity.OrderNo, fmt.Sprintf("订单退回重新充值,因为苹果账户错误,原因:%s", accountRemark), nil)
|
||||
|
||||
// 添加历史记录
|
||||
_ = h.AddHistory(ctx, &model.AppleCardRechargeHistoryInput{
|
||||
@@ -326,7 +323,7 @@ func (h *sAppleOrder) handleRedeemLimitError(ctx context.Context, orderEntity *e
|
||||
RechargeId: int(orderEntity.Id),
|
||||
AccountName: accountInfo.Account,
|
||||
Operation: consts.AppleRechargeOperationItunesFail,
|
||||
Remark: fmt.Sprintf("订单退回重新充值,因为苹果账户错误,原因:%s", message),
|
||||
Remark: fmt.Sprintf("订单退回重新充值,因为苹果账户错误,原因:%s", code.String()),
|
||||
}, nil)
|
||||
|
||||
glog.Warning(ctx, fmt.Sprintf("账户充值限制,订单已退回待处理 - 订单号: %s, 账号: %s, 限制类型: %d", orderEntity.OrderNo, accountInfo.Account, code))
|
||||
@@ -335,7 +332,7 @@ func (h *sAppleOrder) handleRedeemLimitError(ctx context.Context, orderEntity *e
|
||||
|
||||
// handleCardCodeError 处理卡密错误(8013-8014)
|
||||
// 直接按订单失败处理,更新订单状态为失败
|
||||
func (h *sAppleOrder) handleCardCodeError(ctx context.Context, orderEntity *entity.V1CardAppleRechargeInfo, accountInfo *entity.V1CardAppleAccountInfo, code apple.Code, message string) error {
|
||||
func (h *sAppleOrder) handleCardCodeError(ctx context.Context, orderEntity *entity.V1CardAppleRechargeInfo, accountInfo *entity.V1CardAppleAccountInfo, code apple.Code) error {
|
||||
// 根据卡密错误类型确定订单失败状态
|
||||
var orderStatus = consts.AppleRechargeOrderFail
|
||||
var operationRemark string
|
||||
@@ -349,13 +346,13 @@ func (h *sAppleOrder) handleCardCodeError(ctx context.Context, orderEntity *enti
|
||||
operationRemark = "卡密错误"
|
||||
}
|
||||
|
||||
operationRemark += fmt.Sprintf("使用卡密【%s】为账号【%s】充值失败,%s", orderEntity.CardPass, accountInfo.Account, operationRemark)
|
||||
// 更新订单为失败状态
|
||||
err := h.ModifyOrderStatus(ctx, orderEntity.OrderNo, orderStatus, operationRemark, nil)
|
||||
if err != nil {
|
||||
glog.Error(ctx, fmt.Sprintf("更新订单失败状态失败 - 订单号: %s, 错误: %v", orderEntity.OrderNo, err))
|
||||
return err
|
||||
}
|
||||
_ = h.UpdateRemark(ctx, orderEntity.OrderNo, operationRemark, nil)
|
||||
|
||||
// 添加历史记录
|
||||
_ = h.AddHistory(ctx, &model.AppleCardRechargeHistoryInput{
|
||||
|
||||
@@ -2,8 +2,6 @@ package card_apple_order
|
||||
|
||||
import (
|
||||
"context"
|
||||
"kami/internal/model"
|
||||
|
||||
"kami/internal/consts"
|
||||
"kami/internal/dao"
|
||||
"kami/internal/model/do"
|
||||
@@ -50,20 +48,20 @@ func (h *sAppleOrder) ModifyCallBackStatus(ctx context.Context, orderNo string,
|
||||
m = m.TX(tx)
|
||||
}
|
||||
status := consts.CardAppleNotifyStatusFail
|
||||
operation := consts.AppleRechargeOperationCallBackOverLimit
|
||||
//operation := consts.AppleRechargeOperationCallBackOverLimit
|
||||
if callbackStatus {
|
||||
operation = consts.AppleRechargeOperationCallBackSuccess
|
||||
//operation = consts.AppleRechargeOperationCallBackSuccess
|
||||
status = consts.CardAppleNotifyStatusSuccess
|
||||
}
|
||||
_, err = m.Where(dao.V1CardAppleRechargeInfo.Columns().OrderNo, orderNo).Update(do.V1CardAppleRechargeInfo{NotifyStatus: status})
|
||||
_ = h.AddHistory(ctx, &model.AppleCardRechargeHistoryInput{
|
||||
RechargeId: 0,
|
||||
OrderNo: orderNo,
|
||||
AccountID: "",
|
||||
AccountName: "",
|
||||
Operation: operation,
|
||||
Remark: "",
|
||||
}, nil)
|
||||
//_ = h.AddHistory(ctx, &model.AppleCardRechargeHistoryInput{
|
||||
// RechargeId: 0,
|
||||
// OrderNo: orderNo,
|
||||
// AccountID: "",
|
||||
// AccountName: "",
|
||||
// Operation: operation,
|
||||
// Remark: "",
|
||||
//}, nil)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user