Show host policies for all trigger modes
This commit is contained in:
parent
c56186ab48
commit
6de77ee02d
@ -3485,7 +3485,7 @@ func TestHostCenterPlatformPolicyUsesCurrentHostRegion(t *testing.T) {
|
||||
RegionId: 30,
|
||||
Status: "active",
|
||||
SettlementMode: "half_month",
|
||||
SettlementTriggerMode: "automatic",
|
||||
SettlementTriggerMode: "manual",
|
||||
GiftCoinToDiamondRatio: "1.0000",
|
||||
ResidualDiamondToUsdRate: "0.0100",
|
||||
EffectiveFromMs: 1700000000000,
|
||||
@ -3521,7 +3521,7 @@ func TestHostCenterPlatformPolicyUsesCurrentHostRegion(t *testing.T) {
|
||||
if hostClient.lastHost == nil || hostClient.lastHost.GetUserId() != 42 {
|
||||
t.Fatalf("host profile request mismatch: %+v", hostClient.lastHost)
|
||||
}
|
||||
if walletClient.lastHostSalaryPolicy == nil || walletClient.lastHostSalaryPolicy.GetRegionId() != 30 || walletClient.lastHostSalaryPolicy.GetSettlementTriggerMode() != "automatic" || walletClient.lastHostSalaryPolicy.GetAppCode() == "" || walletClient.lastHostSalaryPolicy.GetRequestId() == "" {
|
||||
if walletClient.lastHostSalaryPolicy == nil || walletClient.lastHostSalaryPolicy.GetRegionId() != 30 || walletClient.lastHostSalaryPolicy.GetSettlementTriggerMode() != "" || walletClient.lastHostSalaryPolicy.GetAppCode() == "" || walletClient.lastHostSalaryPolicy.GetRequestId() == "" {
|
||||
t.Fatalf("host salary policy request mismatch: %+v", walletClient.lastHostSalaryPolicy)
|
||||
}
|
||||
if walletClient.lastHostSalaryProgress == nil || walletClient.lastHostSalaryProgress.GetHostUserId() != 42 || walletClient.lastHostSalaryProgress.GetAppCode() == "" || walletClient.lastHostSalaryProgress.GetRequestId() == "" {
|
||||
@ -3537,7 +3537,7 @@ func TestHostCenterPlatformPolicyUsesCurrentHostRegion(t *testing.T) {
|
||||
firstLevel := levels[0].(map[string]any)
|
||||
progress := data["progress"].(map[string]any)
|
||||
levelProgress := data["level_progress"].(map[string]any)
|
||||
if data["found"] != true || data["host_region_id"] != float64(30) || policy["policy_id"] != "9001" || policy["settlement_mode"] != "half_month" || firstLevel["host_salary_usd"] != 15.0 || firstLevel["agency_salary_usd"] != 3.0 {
|
||||
if data["found"] != true || data["host_region_id"] != float64(30) || policy["policy_id"] != "9001" || policy["settlement_mode"] != "half_month" || policy["settlement_trigger_mode"] != "manual" || firstLevel["host_salary_usd"] != 15.0 || firstLevel["agency_salary_usd"] != 3.0 {
|
||||
t.Fatalf("host policy response mismatch: %+v", data)
|
||||
}
|
||||
if progress["cycle_key"] != "2026-06" || progress["total_diamonds"] != float64(1200) {
|
||||
|
||||
@ -68,12 +68,11 @@ func (h *Handler) getHostCenterPlatformPolicy(writer http.ResponseWriter, reques
|
||||
return
|
||||
}
|
||||
|
||||
// H5 不传 region 或 policy id;gateway 固定使用当前主播身份里的区域快照读取实际生效政策。
|
||||
// H5 不传 region、policy id 或 trigger;gateway 用当前主播身份区域读取 active 政策,让 automatic/manual 都能展示。
|
||||
resp, err := h.walletClient.GetActiveHostSalaryPolicy(request.Context(), &walletv1.GetActiveHostSalaryPolicyRequest{
|
||||
RequestId: httpkit.RequestIDFromContext(request.Context()),
|
||||
AppCode: appcode.FromContext(request.Context()),
|
||||
RegionId: profile.GetRegionId(),
|
||||
SettlementTriggerMode: "automatic",
|
||||
RequestId: httpkit.RequestIDFromContext(request.Context()),
|
||||
AppCode: appcode.FromContext(request.Context()),
|
||||
RegionId: profile.GetRegionId(),
|
||||
})
|
||||
if err != nil {
|
||||
httpkit.WriteRPCError(writer, request, err)
|
||||
|
||||
@ -256,10 +256,7 @@ func (s *Service) GetActiveHostSalaryPolicy(ctx context.Context, appCode string,
|
||||
return ledger.HostSalaryPolicy{}, false, xerr.New(xerr.InvalidArgument, "settlement_mode is invalid")
|
||||
}
|
||||
triggerMode = strings.TrimSpace(triggerMode)
|
||||
if triggerMode == "" {
|
||||
triggerMode = ledger.HostSalarySettlementTriggerAutomatic
|
||||
}
|
||||
if triggerMode != ledger.HostSalarySettlementTriggerAutomatic && triggerMode != ledger.HostSalarySettlementTriggerManual {
|
||||
if triggerMode != "" && triggerMode != ledger.HostSalarySettlementTriggerAutomatic && triggerMode != ledger.HostSalarySettlementTriggerManual {
|
||||
return ledger.HostSalaryPolicy{}, false, xerr.New(xerr.InvalidArgument, "settlement_trigger_mode is invalid")
|
||||
}
|
||||
if nowMs <= 0 {
|
||||
@ -267,7 +264,7 @@ func (s *Service) GetActiveHostSalaryPolicy(ctx context.Context, appCode string,
|
||||
}
|
||||
appCode = appcode.Normalize(appCode)
|
||||
ctx = appcode.WithContext(ctx, appCode)
|
||||
// 不传 settlement_mode 时按同区域最新 active policy 返回,用于 H5 展示平台当前规则。
|
||||
// H5 展示可以不传 trigger mode,此时 automatic/manual 政策都可展示;结算任务仍会传具体 trigger 精确匹配。
|
||||
return s.repository.GetActiveHostSalaryPolicy(ctx, regionID, settlementMode, triggerMode, nowMs)
|
||||
}
|
||||
|
||||
|
||||
@ -378,7 +378,7 @@ func TestGetActiveHostSalaryPolicyReadsRuntimePolicy(t *testing.T) {
|
||||
RegionID: 8801,
|
||||
Status: "active",
|
||||
SettlementMode: ledger.HostSalarySettlementModeHalfMonth,
|
||||
SettlementTriggerMode: ledger.HostSalarySettlementTriggerAutomatic,
|
||||
SettlementTriggerMode: ledger.HostSalarySettlementTriggerManual,
|
||||
GiftCoinToDiamondRatio: "1.0000",
|
||||
ResidualDiamondToUSDRate: "0.0100",
|
||||
EffectiveFromMs: nowMs - 1000,
|
||||
@ -390,7 +390,7 @@ func TestGetActiveHostSalaryPolicyReadsRuntimePolicy(t *testing.T) {
|
||||
})
|
||||
svc := walletservice.New(repository)
|
||||
|
||||
policy, found, err := svc.GetActiveHostSalaryPolicy(context.Background(), "lalu", 8801, "", ledger.HostSalarySettlementTriggerAutomatic, nowMs)
|
||||
policy, found, err := svc.GetActiveHostSalaryPolicy(context.Background(), "lalu", 8801, "", "", nowMs)
|
||||
if err != nil {
|
||||
t.Fatalf("GetActiveHostSalaryPolicy failed: %v", err)
|
||||
}
|
||||
@ -400,9 +400,17 @@ func TestGetActiveHostSalaryPolicyReadsRuntimePolicy(t *testing.T) {
|
||||
if policy.PolicyID != 901 || policy.Name != "current host policy" || policy.SettlementMode != ledger.HostSalarySettlementModeHalfMonth || policy.RegionID != 8801 {
|
||||
t.Fatalf("policy mismatch: %+v", policy)
|
||||
}
|
||||
if policy.SettlementTriggerMode != ledger.HostSalarySettlementTriggerManual {
|
||||
t.Fatalf("policy trigger mode mismatch: %+v", policy)
|
||||
}
|
||||
if len(policy.Levels) != 2 || policy.Levels[1].LevelNo != 2 || policy.Levels[1].HostSalaryUSDMinor != 4500 || policy.Levels[1].AgencySalaryUSDMinor != 900 {
|
||||
t.Fatalf("policy levels mismatch: %+v", policy.Levels)
|
||||
}
|
||||
if _, found, err := svc.GetActiveHostSalaryPolicy(context.Background(), "lalu", 8801, "", ledger.HostSalarySettlementTriggerAutomatic, nowMs); err != nil {
|
||||
t.Fatalf("GetActiveHostSalaryPolicy with trigger failed: %v", err)
|
||||
} else if found {
|
||||
t.Fatal("automatic trigger query should not match manual policy")
|
||||
}
|
||||
}
|
||||
|
||||
// TestGetHostSalaryProgressReadsCurrentCycleDiamonds 验证 H5 等级进度读取工资周期钻石账户,查询不到时保持 0 累计。
|
||||
|
||||
@ -392,12 +392,18 @@ func (r *Repository) resolveHostSalaryPolicy(ctx context.Context, tx *sql.Tx, re
|
||||
|
||||
func (r *Repository) queryActiveHostSalaryPolicy(ctx context.Context, q hostSalaryPolicyQuerier, regionID int64, settlementMode string, triggerMode string, nowMs int64) (ledger.HostSalaryPolicy, bool, error) {
|
||||
modeClause := ""
|
||||
args := []any{appcode.FromContext(ctx), regionID, nowMs, nowMs, triggerMode}
|
||||
triggerClause := ""
|
||||
args := []any{appcode.FromContext(ctx), regionID, nowMs, nowMs}
|
||||
if strings.TrimSpace(settlementMode) != "" {
|
||||
// 结算任务必须精确匹配结算模式;H5 展示不传模式时只按区域和触发模式取最新生效政策。
|
||||
// 结算任务必须精确匹配结算模式;H5 展示不传模式时只按区域取最新生效政策。
|
||||
modeClause = "AND settlement_mode = ?"
|
||||
args = append(args, settlementMode)
|
||||
}
|
||||
if strings.TrimSpace(triggerMode) != "" {
|
||||
// H5 展示不传 trigger 时 automatic/manual 都可展示;结算任务传 trigger 时仍精确匹配。
|
||||
triggerClause = "AND settlement_trigger_mode = ?"
|
||||
args = append(args, triggerMode)
|
||||
}
|
||||
query := fmt.Sprintf(`
|
||||
SELECT policy_id, name, region_id, status, settlement_mode, settlement_trigger_mode,
|
||||
CAST(gift_coin_to_diamond_ratio AS CHAR),
|
||||
@ -409,10 +415,10 @@ func (r *Repository) queryActiveHostSalaryPolicy(ctx context.Context, q hostSala
|
||||
AND status = 'active'
|
||||
AND effective_from_ms <= ?
|
||||
AND (effective_to_ms = 0 OR effective_to_ms > ?)
|
||||
AND settlement_trigger_mode = ?
|
||||
%s
|
||||
%s
|
||||
ORDER BY effective_from_ms DESC, policy_id DESC
|
||||
LIMIT 1`, modeClause)
|
||||
LIMIT 1`, triggerClause, modeClause)
|
||||
var policy ledger.HostSalaryPolicy
|
||||
err := q.QueryRowContext(ctx, query, args...).Scan(&policy.PolicyID, &policy.Name, &policy.RegionID, &policy.Status, &policy.SettlementMode, &policy.SettlementTriggerMode, &policy.GiftCoinToDiamondRatio, &policy.ResidualDiamondToUSDRate, &policy.EffectiveFromMs, &policy.EffectiveToMs)
|
||||
if err != nil {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user