驳回
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 7m17s

This commit is contained in:
2026-06-26 12:12:15 +09:00
parent 8cf921f11c
commit f4b6a55b27
18 changed files with 119 additions and 431 deletions

View File

@@ -387,6 +387,35 @@ func (s *Service) HandlePaymentCallback(ctx context.Context, rechargeNo string,
return nil
}
// Reject 驳回代理充值订单
// 仅 status=1待支付的订单可驳回驳回后状态变为 6已驳回为终态
func (s *Service) Reject(ctx context.Context, id uint, rejectionReason string) error {
record, err := s.agentRechargeStore.GetByID(ctx, id)
if err != nil {
if err == gorm.ErrRecordNotFound {
return errors.New(errors.CodeNotFound, "充值记录不存在")
}
return errors.Wrap(errors.CodeDatabaseError, err, "查询充值记录失败")
}
if record.Status != constants.RechargeStatusPending {
return errors.New(errors.CodeInvalidStatus, "仅待支付订单可驳回")
}
if err := s.agentRechargeStore.UpdateStatusWithRejection(ctx, id, rejectionReason); err != nil {
if err == gorm.ErrRecordNotFound {
return errors.New(errors.CodeInvalidStatus, "仅待支付订单可驳回")
}
return errors.Wrap(errors.CodeDatabaseError, err, "驳回充值订单失败")
}
s.logger.Info("代理充值订单驳回成功",
zap.Uint("record_id", id),
zap.String("rejection_reason", rejectionReason),
)
return nil
}
// GetByID 根据ID查询充值订单详情
// GET /api/admin/agent-recharges/:id
func (s *Service) GetByID(ctx context.Context, id uint) (*dto.AgentRechargeResponse, error) {
@@ -490,6 +519,7 @@ func toResponse(record *model.AgentRechargeRecord, shopName string) *dto.AgentRe
Remark: record.Remark,
Status: record.Status,
StatusName: constants.GetRechargeStatusName(record.Status),
RejectionReason: record.RejectionReason,
CreatedAt: record.CreatedAt.Format("2006-01-02 15:04:05"),
UpdatedAt: record.UpdatedAt.Format("2006-01-02 15:04:05"),
}

View File

@@ -60,65 +60,6 @@ func New(
}
}
// AdminList 后台分页查询充值订单列表
func (s *Service) AdminList(ctx context.Context, params *postgres.ListRechargeOrderParams) ([]*model.RechargeOrder, int64, error) {
orders, total, err := s.rechargeOrderStore.List(ctx, params)
if err != nil {
return nil, 0, errors.Wrap(errors.CodeDatabaseError, err, "查询充值订单列表失败")
}
return orders, total, nil
}
// AdminGet 后台查询充值订单详情(含支付记录)
func (s *Service) AdminGet(ctx context.Context, id uint) (*model.RechargeOrder, []*model.Payment, error) {
order, err := s.rechargeOrderStore.GetByID(ctx, id)
if err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil, errors.New(errors.CodeNotFound, "充值订单不存在")
}
return nil, nil, errors.Wrap(errors.CodeDatabaseError, err, "查询充值订单失败")
}
payments, err := s.paymentStore.ListByOrderID(ctx, id, model.PaymentOrderTypeRecharge)
if err != nil {
return nil, nil, errors.Wrap(errors.CodeDatabaseError, err, "查询支付记录失败")
}
return order, payments, nil
}
// Reject 驳回充值订单
// 仅待支付订单可驳回,驳回后状态变为已驳回(终态)
func (s *Service) Reject(ctx context.Context, id uint, rejectionReason string) error {
order, err := s.rechargeOrderStore.GetByID(ctx, id)
if err != nil {
if err == gorm.ErrRecordNotFound {
return errors.New(errors.CodeNotFound, "充值订单不存在")
}
return errors.Wrap(errors.CodeDatabaseError, err, "查询充值订单失败")
}
if order.Status != model.RechargeOrderStatusPending {
return errors.New(errors.CodeInvalidStatus, "仅待支付订单可驳回")
}
if err := s.rechargeOrderStore.UpdateStatusWithRejection(ctx, id, rejectionReason); err != nil {
if err == gorm.ErrRecordNotFound {
// 并发驳回:重查状态给出明确错误
latest, queryErr := s.rechargeOrderStore.GetByID(ctx, id)
if queryErr == nil && latest.Status != model.RechargeOrderStatusPending {
return errors.New(errors.CodeInvalidStatus, "仅待支付订单可驳回")
}
return errors.New(errors.CodeInvalidStatus, "仅待支付订单可驳回")
}
return errors.Wrap(errors.CodeDatabaseError, err, "驳回充值订单失败")
}
s.logger.Info("充值订单驳回成功",
zap.Uint("order_id", id),
zap.String("rejection_reason", rejectionReason),
)
return nil
}
func (s *Service) HandlePaymentCallback(ctx context.Context, paymentNo string, paymentMethod string, transactionID string) error {
payment, err := s.paymentStore.GetByPaymentNo(ctx, paymentNo)
if err != nil {