## 1. 套餐系列 DTO 修复(Operator 字段) - [x] 1.1 `internal/model/dto/package_series_dto.go`:`OneTimeCommissionTierDTO` 新增 `Operator string` 字段,tag 为 `json:"operator,omitempty" validate:"omitempty,oneof=> >= < <=" description:"阈值比较运算符(>、>=、<、<=),空值时计算引擎默认 >="` - [x] 1.2 `internal/service/package_series/service.go`:`dtoToModelConfig()` 中 `OneTimeCommissionTier` 赋值新增 `Operator: tier.Operator` - [x] 1.3 `internal/service/package_series/service.go`:`modelToDTO()` 中 `OneTimeCommissionTierDTO` 赋值新增 `Operator: tier.Operator` - [x] 1.4 运行 `go build ./...` 确认无编译错误 ## 2. 授权分配 DTO 修复(Dimension / StatScope 字段) - [x] 2.1 `internal/model/dto/shop_series_grant_dto.go`:`GrantCommissionTierItem` 新增两个字段: - `Dimension string`,tag 为 `json:"dimension,omitempty" description:"统计维度(sales_count:销售量, sales_amount:销售额),来自 PackageSeries 全局配置,响应中只读"` - `StatScope string`,tag 为 `json:"stat_scope,omitempty" description:"统计范围(self:仅自己, self_and_sub:自己+下级),来自 PackageSeries 全局配置,响应中只读"` - [x] 2.2 `internal/service/shop_series_grant/service.go`:`buildGrantResponse()` 梯度模式合并分支,在构造 `GrantCommissionTierItem` 时补充 `Dimension: globalTier.Dimension` 和 `StatScope: globalTier.StatScope` - [x] 2.3 运行 `go build ./...` 确认无编译错误 ## 3. 验证 - [x] 3.1 db-validation:创建含 `operator`/`dimension`/`stat_scope` 的梯度套餐系列,查询详情确认响应中 tiers 包含完整字段 - [x] 3.2 db-validation:创建梯度模式系列授权,调用 `GET /shop-series-grants/:id`,确认 `commission_tiers` 中每档位包含 `operator`、`dimension`、`stat_scope`、`threshold`、`amount` - [x] 3.3 db-validation:调用 `POST /shop-series-grants`(Create)和 `PUT /shop-series-grants/:id`(Update),确认响应中同样携带 `dimension`/`stat_scope` - [x] 3.4 db-validation:不传 `operator` 的梯度档位,确认响应中 `operator` 字段缺失(omitempty 生效),不影响佣金计算逻辑 ## 4. 强充状态有效展示修复 - [x] 4.1 `internal/model/dto/shop_series_grant_dto.go`:`ShopSeriesGrantListItem` 新增两个字段: - `ForceRechargeLocked bool`,tag 为 `json:"force_recharge_locked" description:"强充是否被套餐系列锁定(true 时代理不可修改)"` - `ForceRechargeAmount int64`,tag 为 `json:"force_recharge_amount" description:"强充金额(分)"` - [x] 4.2 `internal/service/shop_series_grant/service.go`:列表构建(for 循环内的 `if sr, ok := seriesMap[a.SeriesID]` 分支)修正强充状态字段: ```go forceRechargeLocked := config.TriggerType == model.OneTimeCommissionTriggerFirstRecharge || config.EnableForceRecharge item.ForceRechargeLocked = forceRechargeLocked if forceRechargeLocked { item.ForceRechargeEnabled = true item.ForceRechargeAmount = config.ForceAmount } else { item.ForceRechargeEnabled = a.EnableForceRecharge item.ForceRechargeAmount = a.ForceRechargeAmount } ``` - [x] 4.3 `internal/service/shop_series_grant/service.go`:`buildGrantResponse()` 内强充状态计算修正(当前约 L132-L135): ```go if forceRechargeLocked { resp.ForceRechargeEnabled = true resp.ForceRechargeAmount = config.ForceAmount } else { resp.ForceRechargeEnabled = allocation.EnableForceRecharge resp.ForceRechargeAmount = allocation.ForceRechargeAmount } ``` - [x] 4.4 运行 `go build ./...` 确认无编译错误 ## 5. 强充 Bug 验证 - [x] 5.1 db-validation:查询套餐系列中 `enable_force_recharge=true` 的系列(如 series_id=2117,2118)对应的授权分配列表,确认 `force_recharge_locked=true`、`force_recharge_enabled=true`、`force_recharge_amount=系列配置值` - [x] 5.2 db-validation:调用 `GET /api/admin/shop-series-grants/:id`(锁定系列的分配记录),确认详情响应中 `force_recharge_locked=true`、`force_recharge_enabled=true`