feat: 实现一次性佣金功能
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m41s
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 5m41s
- 新增佣金计算服务,支持一次性佣金和返佣计算 - 新增 ShopSeriesOneTimeCommissionTier 模型和存储层 - 新增两个数据库迁移:一次性佣金表和订单佣金字段 - 更新 Commission 模型,新增佣金来源和关联字段 - 更新 CommissionRecord 存储层,支持一次性佣金查询 - 更新 MyCommission 服务,集成一次性佣金计算逻辑 - 更新 ShopCommission 服务,支持一次性佣金统计 - 新增佣金计算异步任务处理器 - 更新 API 路由,新增一次性佣金相关端点 - 归档 OpenSpec 变更文档,同步规范到主规范库
This commit is contained in:
66
internal/task/commission_calculation.go
Normal file
66
internal/task/commission_calculation.go
Normal file
@@ -0,0 +1,66 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user