2026-05-29 19:56:14 +08:00

75 lines
2.8 KiB
Go

package teamsalarypolicy
import "hyapp-admin-server/internal/model"
type policyDTO struct {
ID uint `json:"id"`
AppCode string `json:"app_code"`
PolicyType string `json:"policy_type"`
Name string `json:"name"`
RegionID int64 `json:"region_id"`
Status string `json:"status"`
SettlementTriggerMode string `json:"settlement_trigger_mode"`
EffectiveFromMS int64 `json:"effective_from_ms"`
EffectiveToMS int64 `json:"effective_to_ms"`
Description string `json:"description"`
CreatedByAdminID uint `json:"created_by_admin_id"`
UpdatedByAdminID uint `json:"updated_by_admin_id"`
CreatedAtMS int64 `json:"created_at_ms"`
UpdatedAtMS int64 `json:"updated_at_ms"`
Levels []levelDTO `json:"levels"`
}
type levelDTO struct {
ID uint `json:"id"`
PolicyID uint `json:"policy_id"`
Level int32 `json:"level"`
ThresholdUSD string `json:"threshold_usd"`
RatePercent string `json:"rate_percent"`
SalaryUSD string `json:"salary_usd"`
Status string `json:"status"`
SortOrder int32 `json:"sort_order"`
CreatedAtMS int64 `json:"created_at_ms"`
UpdatedAtMS int64 `json:"updated_at_ms"`
}
func policyFromModel(item model.TeamSalaryPolicy) policyDTO {
levels := make([]levelDTO, 0, len(item.Levels))
for _, level := range item.Levels {
levels = append(levels, levelFromModel(level))
}
// 响应层去掉 decimal 尾零,前端输入框仍以字符串处理金额和百分比,避免 JS 浮点误差。
return policyDTO{
ID: item.ID,
AppCode: item.AppCode,
PolicyType: item.PolicyType,
Name: item.Name,
RegionID: item.RegionID,
Status: item.Status,
SettlementTriggerMode: firstNonBlank(item.SettlementTriggerMode, settlementTriggerAutomatic),
EffectiveFromMS: item.EffectiveFromMS,
EffectiveToMS: item.EffectiveToMS,
Description: item.Description,
CreatedByAdminID: item.CreatedByAdminID,
UpdatedByAdminID: item.UpdatedByAdminID,
CreatedAtMS: item.CreatedAtMS,
UpdatedAtMS: item.UpdatedAtMS,
Levels: levels,
}
}
func levelFromModel(item model.TeamSalaryLevel) levelDTO {
return levelDTO{
ID: item.ID,
PolicyID: item.PolicyID,
Level: item.LevelNo,
ThresholdUSD: trimDecimalZeros(item.ThresholdUSD),
RatePercent: trimDecimalZeros(item.RatePercent),
SalaryUSD: trimDecimalZeros(item.SalaryUSD),
Status: item.Status,
SortOrder: item.SortOrder,
CreatedAtMS: item.CreatedAtMS,
UpdatedAtMS: item.UpdatedAtMS,
}
}