feat(distribution): 默认结算冷却天数改为系统配置驱动

新建站点的默认冷却期原先硬编码 7 天(OnboardSite 字面量、DB 列默认、两套前端表单),
改一处要同时动三处。现统一到系统配置键 distribution.default_settlement_hold_days:

- systemconfig 注册该键(默认 7,0=立即释放,0-365 校验),纳入 admin 可见配置
- distribution 建站两条路径(CreateSite 未传值、OnboardSite 缺省)读取该配置,缺失或非法回落 7
- 新增 GET /admin/distribution/site-defaults 暴露当前有效默认值
- Vue / React 站点表单改为运行时拉取,拉取失败保持 7
- DB 列默认值保留作为兜底,站点级 settlement_hold_days 仍可单独覆盖
This commit is contained in:
yml2213
2026-09-10 18:54:23 +08:00
parent dbe9aaabfe
commit e3a75fb2d7
13 changed files with 259 additions and 8 deletions
@@ -13,6 +13,7 @@ import (
"hfb_sys/backend/internal/auditlog"
"hfb_sys/backend/internal/model"
listingpkg "hfb_sys/backend/internal/modules/listing"
"hfb_sys/backend/internal/modules/systemconfig"
"hfb_sys/backend/internal/modules/wallet"
"github.com/redis/go-redis/v9"
@@ -220,6 +221,23 @@ func (r *Repository) FindSite(ctx context.Context, adminID, id uint64) (*SiteDTO
return &item, nil
}
// resolveDefaultSettlementHoldDays 读取系统配置里的新建站点默认结算冷却天数,缺失或异常时回落到内置默认值。
func (r *Repository) resolveDefaultSettlementHoldDays(ctx context.Context) int {
if r == nil || r.db == nil {
return systemconfig.DefaultDistributionSettlementHoldDays
}
var row model.SystemConfig
if err := r.db.WithContext(ctx).Where("`key` = ?", systemconfig.DistributionSettlementHoldDaysKey).First(&row).Error; err != nil {
return systemconfig.DefaultDistributionSettlementHoldDays
}
return systemconfig.ParseDistributionSettlementHoldDays(row.Value)
}
// DefaultSettlementHoldDays 暴露当前有效的默认结算冷却天数,供前端表单使用。
func (r *Repository) DefaultSettlementHoldDays(ctx context.Context) int {
return r.resolveDefaultSettlementHoldDays(ctx)
}
func (r *Repository) CreateSite(ctx context.Context, req CreateSiteRequest) (*SiteDTO, error) {
row := model.DistributionSite{
SiteCode: strings.TrimSpace(req.SiteCode), SiteName: strings.TrimSpace(req.SiteName), Domain: strings.TrimSpace(req.Domain),
@@ -243,6 +261,8 @@ func (r *Repository) CreateSite(ctx context.Context, req CreateSiteRequest) (*Si
return nil, err
}
row.SettlementHoldDays = holdDays
} else {
row.SettlementHoldDays = r.resolveDefaultSettlementHoldDays(ctx)
}
if err := r.db.WithContext(ctx).Create(&row).Error; err != nil {
return nil, err
@@ -1404,7 +1424,7 @@ func (r *Repository) OnboardSite(ctx context.Context, req OnboardSiteRequest) (*
if req.TaxRateBPS != nil {
taxRate = *req.TaxRateBPS
}
holdDays := 7
holdDays := r.resolveDefaultSettlementHoldDays(ctx)
if req.SettlementHoldDays != nil {
normalized, err := normalizeSettlementHoldDays(*req.SettlementHoldDays)
if err != nil {