package model import ( "time" "gorm.io/gorm" ) // AgentHierarchy 代理层级关系模型 // 树形代理关系(每个代理只有一个上级) type AgentHierarchy struct { gorm.Model BaseModel `gorm:"embedded"` AgentID uint `gorm:"column:agent_id;uniqueIndex:idx_agent_hierarchy_agent,where:deleted_at IS NULL;not null;comment:代理用户ID" json:"agent_id"` ParentAgentID uint `gorm:"column:parent_agent_id;index;comment:上级代理用户ID(NULL表示顶级代理)" json:"parent_agent_id"` Level int `gorm:"column:level;type:int;not null;comment:代理层级(1, 2, 3...)" json:"level"` Path string `gorm:"column:path;type:varchar(500);comment:代理路径(如: 1/5/12)" json:"path"` } // TableName 指定表名 func (AgentHierarchy) TableName() string { return "tb_agent_hierarchy" } // CommissionRule 分佣规则模型 // 三种分佣类型:一次性/长期/组合 type CommissionRule struct { gorm.Model BaseModel `gorm:"embedded"` AgentID uint `gorm:"column:agent_id;index;not null;comment:代理用户ID" json:"agent_id"` BusinessType string `gorm:"column:business_type;type:varchar(50);not null;comment:业务类型" json:"business_type"` CardType string `gorm:"column:card_type;type:varchar(50);not null;comment:卡类型 number_card-号卡 iot_card-IoT卡" json:"card_type"` SeriesID uint `gorm:"column:series_id;index;comment:套餐系列ID(一次性分佣时用)" json:"series_id"` PackageID uint `gorm:"column:package_id;index;comment:套餐ID(长期分佣时用)" json:"package_id"` CommissionType string `gorm:"column:commission_type;type:varchar(50);not null;comment:分佣类型 one_time-一次性 long_term-长期 combined-组合" json:"commission_type"` CommissionMode string `gorm:"column:commission_mode;type:varchar(20);not null;comment:分佣模式 fixed-固定金额 percent-百分比" json:"commission_mode"` CommissionValue int64 `gorm:"column:commission_value;type:bigint;not null;comment:分佣值(分为单位,百分比时为千分比如2000表示20%)" json:"commission_value"` UnfreezeDays int `gorm:"column:unfreeze_days;type:int;default:0;comment:解冻天数" json:"unfreeze_days"` MinActivationForUnfreeze int `gorm:"column:min_activation_for_unfreeze;type:int;default:0;comment:解冻最小激活量" json:"min_activation_for_unfreeze"` ApprovalType string `gorm:"column:approval_type;type:varchar(20);default:'auto';comment:审批类型 auto-自动 manual-人工" json:"approval_type"` Status int `gorm:"column:status;type:int;default:1;not null;comment:状态 1-启用 2-禁用" json:"status"` } // TableName 指定表名 func (CommissionRule) TableName() string { return "tb_commission_rule" } // CommissionLadder 阶梯分佣配置模型 // 支持按激活量、提货量、充值量设置阶梯佣金 type CommissionLadder struct { gorm.Model BaseModel `gorm:"embedded"` RuleID uint `gorm:"column:rule_id;index;not null;comment:分佣规则ID" json:"rule_id"` LadderType string `gorm:"column:ladder_type;type:varchar(50);not null;comment:阶梯类型 activation-激活量 pickup-提货量 deposit-充值量" json:"ladder_type"` ThresholdValue int `gorm:"column:threshold_value;type:int;not null;comment:阈值" json:"threshold_value"` CommissionMode string `gorm:"column:commission_mode;type:varchar(20);not null;comment:分佣模式 fixed-固定金额 percent-百分比" json:"commission_mode"` CommissionValue int64 `gorm:"column:commission_value;type:bigint;not null;comment:分佣值(分为单位,百分比时为千分比如2000表示20%)" json:"commission_value"` } // TableName 指定表名 func (CommissionLadder) TableName() string { return "tb_commission_ladder" } // CommissionCombinedCondition 组合分佣条件模型 // 支持时间点 OR 套餐周期阈值的 OR 条件解冻 type CommissionCombinedCondition struct { gorm.Model BaseModel `gorm:"embedded"` RuleID uint `gorm:"column:rule_id;uniqueIndex:idx_commission_combined_rule,where:deleted_at IS NULL;not null;comment:分佣规则ID" json:"rule_id"` OneTimeCommissionMode string `gorm:"column:one_time_commission_mode;type:varchar(20);comment:一次性分佣模式 fixed-固定金额 percent-百分比" json:"one_time_commission_mode"` OneTimeCommissionValue int64 `gorm:"column:one_time_commission_value;type:bigint;comment:一次性分佣值(分为单位,百分比时为千分比如2000表示20%)" json:"one_time_commission_value"` LongTermCommissionMode string `gorm:"column:long_term_commission_mode;type:varchar(20);comment:长期分佣模式 fixed-固定金额 percent-百分比" json:"long_term_commission_mode"` LongTermCommissionValue int64 `gorm:"column:long_term_commission_value;type:bigint;comment:长期分佣值(分为单位,百分比时为千分比如2000表示20%)" json:"long_term_commission_value"` LongTermTriggerTimePoint *time.Time `gorm:"column:long_term_trigger_time_point;comment:长期分佣触发时间点(如实名后3个月)" json:"long_term_trigger_time_point"` LongTermTriggerPackageCycles int `gorm:"column:long_term_trigger_package_cycles;type:int;comment:长期分佣触发套餐周期数(如10个套餐周期)" json:"long_term_trigger_package_cycles"` LongTermTriggerNetworkMonths int `gorm:"column:long_term_trigger_network_months;type:int;comment:长期分佣触发在网月数(号卡专用)" json:"long_term_trigger_network_months"` LongTermUnfreezeDays int `gorm:"column:long_term_unfreeze_days;type:int;default:0;comment:长期分佣解冻天数" json:"long_term_unfreeze_days"` LongTermMinActivation int `gorm:"column:long_term_min_activation;type:int;default:0;comment:长期分佣解冻最小激活量" json:"long_term_min_activation"` } // TableName 指定表名 func (CommissionCombinedCondition) TableName() string { return "tb_commission_combined_condition" } // CommissionRecord 分佣记录模型 // 记录分佣的冻结、解冻、发放状态 type CommissionRecord struct { gorm.Model BaseModel `gorm:"embedded"` AgentID uint `gorm:"column:agent_id;index;not null;comment:代理用户ID" json:"agent_id"` OrderID uint `gorm:"column:order_id;index;not null;comment:订单ID" json:"order_id"` RuleID uint `gorm:"column:rule_id;index;not null;comment:分佣规则ID" json:"rule_id"` CommissionType string `gorm:"column:commission_type;type:varchar(50);not null;comment:分佣类型 one_time-一次性 long_term-长期" json:"commission_type"` Amount int64 `gorm:"column:amount;type:bigint;not null;comment:分佣金额(分为单位)" json:"amount"` Status int `gorm:"column:status;type:int;default:1;not null;comment:状态 1-已冻结 2-解冻中 3-已发放 4-已失效" json:"status"` UnfrozenAt *time.Time `gorm:"column:unfrozen_at;comment:解冻时间" json:"unfrozen_at"` ReleasedAt *time.Time `gorm:"column:released_at;comment:发放时间" json:"released_at"` } // TableName 指定表名 func (CommissionRecord) TableName() string { return "tb_commission_record" } // CommissionApproval 分佣审批模型 // 分佣解冻审批流程 type CommissionApproval struct { gorm.Model BaseModel `gorm:"embedded"` CommissionRecordID uint `gorm:"column:commission_record_id;index;not null;comment:分佣记录ID" json:"commission_record_id"` ApproverID uint `gorm:"column:approver_id;index;comment:审批人用户ID" json:"approver_id"` Status int `gorm:"column:status;type:int;default:1;not null;comment:状态 1-待审批 2-已通过 3-已拒绝" json:"status"` Reason string `gorm:"column:reason;type:text;comment:原因" json:"reason"` } // TableName 指定表名 func (CommissionApproval) TableName() string { return "tb_commission_approval" } // CommissionTemplate 分佣模板模型 // 创建和管理分佣模板,快速为代理分配产品时设置佣金规则 type CommissionTemplate struct { gorm.Model BaseModel `gorm:"embedded"` TemplateName string `gorm:"column:template_name;type:varchar(255);uniqueIndex:idx_commission_template_name,where:deleted_at IS NULL;not null;comment:模板名称" json:"template_name"` BusinessType string `gorm:"column:business_type;type:varchar(50);not null;comment:业务类型" json:"business_type"` CardType string `gorm:"column:card_type;type:varchar(50);not null;comment:卡类型 number_card-号卡 iot_card-IoT卡" json:"card_type"` CommissionType string `gorm:"column:commission_type;type:varchar(50);not null;comment:分佣类型 one_time-一次性 long_term-长期 combined-组合" json:"commission_type"` CommissionMode string `gorm:"column:commission_mode;type:varchar(20);not null;comment:分佣模式 fixed-固定金额 percent-百分比" json:"commission_mode"` CommissionValue int64 `gorm:"column:commission_value;type:bigint;not null;comment:分佣值(分为单位,百分比时为千分比如2000表示20%)" json:"commission_value"` UnfreezeDays int `gorm:"column:unfreeze_days;type:int;default:0;comment:解冻天数" json:"unfreeze_days"` MinActivationForUnfreeze int `gorm:"column:min_activation_for_unfreeze;type:int;default:0;comment:解冻最小激活量" json:"min_activation_for_unfreeze"` ApprovalType string `gorm:"column:approval_type;type:varchar(20);default:'auto';comment:审批类型 auto-自动 manual-人工" json:"approval_type"` } // TableName 指定表名 func (CommissionTemplate) TableName() string { return "tb_commission_template" } // CarrierSettlement 号卡运营商结算模型 // 运营商周期性结算的佣金总额,再分配给代理 type CarrierSettlement struct { gorm.Model BaseModel `gorm:"embedded"` CommissionRecordID uint `gorm:"column:commission_record_id;uniqueIndex:idx_carrier_settlement_record,where:deleted_at IS NULL;not null;comment:分佣记录ID" json:"commission_record_id"` AgentID uint `gorm:"column:agent_id;index;not null;comment:代理用户ID" json:"agent_id"` SettlementMonth string `gorm:"column:settlement_month;type:varchar(20);not null;comment:结算月份(如 2026-01)" json:"settlement_month"` SettlementAmount int64 `gorm:"column:settlement_amount;type:bigint;not null;comment:结算金额(分为单位)" json:"settlement_amount"` Status int `gorm:"column:status;type:int;default:1;not null;comment:状态 1-待结算 2-已结算" json:"status"` } // TableName 指定表名 func (CarrierSettlement) TableName() string { return "tb_carrier_settlement" }