All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m41s
- 新增佣金计算服务,支持一次性佣金和返佣计算 - 新增 ShopSeriesOneTimeCommissionTier 模型和存储层 - 新增两个数据库迁移:一次性佣金表和订单佣金字段 - 更新 Commission 模型,新增佣金来源和关联字段 - 更新 CommissionRecord 存储层,支持一次性佣金查询 - 更新 MyCommission 服务,集成一次性佣金计算逻辑 - 更新 ShopCommission 服务,支持一次性佣金统计 - 新增佣金计算异步任务处理器 - 更新 API 路由,新增一次性佣金相关端点 - 归档 OpenSpec 变更文档,同步规范到主规范库
67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
package task
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/bytedance/sonic"
|
|
"github.com/hibiken/asynq"
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm"
|
|
|
|
"github.com/break/junhong_cmp_fiber/internal/service/commission_calculation"
|
|
pkggorm "github.com/break/junhong_cmp_fiber/pkg/gorm"
|
|
)
|
|
|
|
const (
|
|
TypeCommissionCalculation = "commission:calculate"
|
|
)
|
|
|
|
type CommissionCalculationPayload struct {
|
|
OrderID uint `json:"order_id"`
|
|
}
|
|
|
|
type CommissionCalculationHandler struct {
|
|
db *gorm.DB
|
|
service *commission_calculation.Service
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func NewCommissionCalculationHandler(
|
|
db *gorm.DB,
|
|
service *commission_calculation.Service,
|
|
logger *zap.Logger,
|
|
) *CommissionCalculationHandler {
|
|
return &CommissionCalculationHandler{
|
|
db: db,
|
|
service: service,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (h *CommissionCalculationHandler) HandleCommissionCalculation(ctx context.Context, task *asynq.Task) error {
|
|
ctx = pkggorm.SkipDataPermission(ctx)
|
|
|
|
var payload CommissionCalculationPayload
|
|
if err := sonic.Unmarshal(task.Payload(), &payload); err != nil {
|
|
h.logger.Error("解析佣金计算任务载荷失败",
|
|
zap.Error(err),
|
|
zap.String("task_id", task.ResultWriter().TaskID()),
|
|
)
|
|
return asynq.SkipRetry
|
|
}
|
|
|
|
if err := h.service.CalculateCommission(ctx, payload.OrderID); err != nil {
|
|
h.logger.Error("佣金计算失败",
|
|
zap.Uint("order_id", payload.OrderID),
|
|
zap.Error(err),
|
|
)
|
|
return err
|
|
}
|
|
|
|
h.logger.Info("佣金计算成功",
|
|
zap.Uint("order_id", payload.OrderID),
|
|
)
|
|
|
|
return nil
|
|
}
|