2026-06-23 11:53:00 +08:00

79 lines
3.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package grpc
import (
"context"
walletv1 "hyapp.local/api/proto/wallet/v1"
"hyapp/pkg/appcode"
"hyapp/pkg/xerr"
"hyapp/services/wallet-service/internal/domain/ledger"
)
// GetActiveHostSalaryPolicy 读取当前生效的主播工资政策,供 gateway 按当前主播区域展示平台规则。
func (s *Server) GetActiveHostSalaryPolicy(ctx context.Context, req *walletv1.GetActiveHostSalaryPolicyRequest) (*walletv1.GetActiveHostSalaryPolicyResponse, error) {
ctx = appcode.WithContext(ctx, req.GetAppCode())
policy, found, err := s.svc.GetActiveHostSalaryPolicy(ctx, req.GetAppCode(), req.GetRegionId(), req.GetSettlementMode(), req.GetSettlementTriggerMode(), req.GetNowMs())
if err != nil {
return nil, xerr.ToGRPCError(err)
}
response := &walletv1.GetActiveHostSalaryPolicyResponse{Found: found}
if found {
response.Policy = hostSalaryPolicyToProto(policy)
}
return response, nil
}
// GetHostSalaryProgress 读取主播当前工资周期钻石累计gateway 用它计算工资政策等级进度。
func (s *Server) GetHostSalaryProgress(ctx context.Context, req *walletv1.GetHostSalaryProgressRequest) (*walletv1.GetHostSalaryProgressResponse, error) {
ctx = appcode.WithContext(ctx, req.GetAppCode())
progress, err := s.svc.GetHostSalaryProgress(ctx, req.GetAppCode(), req.GetHostUserId(), req.GetCycleKey(), req.GetNowMs())
if err != nil {
return nil, xerr.ToGRPCError(err)
}
return &walletv1.GetHostSalaryProgressResponse{Progress: hostSalaryProgressToProto(progress)}, nil
}
func hostSalaryProgressToProto(progress ledger.HostSalaryProgress) *walletv1.HostSalaryProgress {
return &walletv1.HostSalaryProgress{
HostUserId: progress.HostUserID,
CycleKey: progress.CycleKey,
RegionId: progress.RegionID,
AgencyOwnerUserId: progress.AgencyOwnerUserID,
TotalDiamonds: progress.TotalDiamonds,
GiftDiamondTotal: progress.GiftDiamondTotal,
UpdatedAtMs: progress.UpdatedAtMS,
}
}
func hostSalaryPolicyToProto(policy ledger.HostSalaryPolicy) *walletv1.HostSalaryPolicy {
levels := make([]*walletv1.HostSalaryPolicyLevel, 0, len(policy.Levels))
for _, level := range policy.Levels {
levels = append(levels, hostSalaryPolicyLevelToProto(level))
}
return &walletv1.HostSalaryPolicy{
PolicyId: policy.PolicyID,
Name: policy.Name,
RegionId: policy.RegionID,
Status: policy.Status,
SettlementMode: policy.SettlementMode,
SettlementTriggerMode: policy.SettlementTriggerMode,
GiftCoinToDiamondRatio: policy.GiftCoinToDiamondRatio,
ResidualDiamondToUsdRate: policy.ResidualDiamondToUSDRate,
EffectiveFromMs: policy.EffectiveFromMs,
EffectiveToMs: policy.EffectiveToMs,
Levels: levels,
}
}
func hostSalaryPolicyLevelToProto(level ledger.HostSalaryPolicyLevel) *walletv1.HostSalaryPolicyLevel {
return &walletv1.HostSalaryPolicyLevel{
LevelNo: int32(level.LevelNo),
RequiredDiamonds: level.RequiredDiamonds,
HostSalaryUsdMinor: level.HostSalaryUSDMinor,
HostCoinReward: level.HostCoinReward,
AgencySalaryUsdMinor: level.AgencySalaryUSDMinor,
Status: level.Status,
SortOrder: int32(level.SortOrder),
}
}