'integer', 'dividend_date' => 'date', 'total_fee_amount' => 'decimal:10', 'dividend_amount' => 'decimal:10', 'partner_count' => 'integer', 'per_partner_amount' => 'decimal:10', 'transfer_app_id' => 'integer', 'status' => 'string', 'error_message' => 'string', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; /** * 隐藏字段 */ protected $hidden = []; // 状态常量 const STATUS_PENDING = 'pending'; const STATUS_PROCESSING = 'processing'; const STATUS_COMPLETED = 'completed'; const STATUS_FAILED = 'failed'; /** * 获取所有状态 */ public static function getStatuses(): array { return [ self::STATUS_PENDING => '待处理', self::STATUS_PROCESSING => '处理中', self::STATUS_COMPLETED => '已完成', self::STATUS_FAILED => '失败', ]; } /** * 获取状态名称 */ public function getStatusNameAttribute(): string { return self::getStatuses()[$this->status] ?? '未知'; } /** * 关联转账应用 */ public function transferApp() { return $this->belongsTo(\App\Module\Transfer\Models\TransferApp::class, 'transfer_app_id'); } /** * 关联分红详情 */ public function details() { return $this->hasMany(UrsPartnerDividendDetail::class, 'dividend_record_id'); } /** * 根据日期获取分红记录 */ public static function getByDate(string $date): ?self { return self::where('dividend_date', $date)->first(); } /** * 检查指定日期是否已经分红 */ public static function isDividendProcessed(string $date): bool { return self::where('dividend_date', $date) ->whereIn('status', [self::STATUS_COMPLETED, self::STATUS_PROCESSING]) ->exists(); } /** * 获取成功分红的记录数量 */ public static function getCompletedCount(): int { return self::where('status', self::STATUS_COMPLETED)->count(); } /** * 获取总分红金额 */ public static function getTotalDividendAmount(): string { return self::where('status', self::STATUS_COMPLETED) ->sum('dividend_amount'); } }