refactor(card_apple_order): 优化充值失败错误处理及日志信息

- 统一删除错误处理函数中冗余的 message 参数,只使用 code 传递错误信息
- 修改多个错误处理逻辑,完善错误日志和订单状态备注,包含卡密和账号信息
- 取消无用的 UpdateRemark 调用,减少重复日志写入
- 修改系统错误、苹果账户错误、充值限制及卡密错误处理函数,提高信息准确性和可读性
- 注释取消状态回调历史记录添加,简化状态.go 相关逻辑
- 调整订单状态更新时备注信息,增加失败原因具体描述,便于后续问题排查
- 减少分配计数调用顺序调整,符合业务流程优化
This commit is contained in:
danial
2025-11-28 19:43:47 +08:00
parent 5e767671b2
commit 5bd3d5268c
2 changed files with 33 additions and 38 deletions

View File

@@ -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{

View File

@@ -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
}