URS合伙人分红功能开发
任务时间: 2025-06-25 13:28
任务类型: 功能开发
状态: ✅ 已完成
任务概述
为URS推广模块开发合伙人分红功能,顶级达人(等级5)享受手续费分红。每天11:30执行分红,将当日总手续费的20%平均分给所有合伙人。
需求分析
根据需求文档 app/Module/UrsPromotion/Docs/合伙人分红.md:
- 顶级达人就是合伙人,享受手续费分红
- 钻石每天兑出的手续费中的20%均分给全网的合伙人
- 11:30执行分红
- 使用Transfer模块的手续费统计功能读取今天的统计
- 使用Transfer模块的手续费转移功能进行分红
完成的功能
1. 数据库设计
合伙人分红记录表 (kku_urs_promotion_partner_dividend_records)
- 记录每日分红的基本信息
- 包含分红日期、总手续费、分红金额、合伙人数量等
- 支持状态管理:pending、processing、completed、failed
合伙人分红详情表 (kku_urs_promotion_partner_dividend_details)
- 记录每个合伙人的分红详情
- 包含用户ID、URS用户ID、分红金额、转账状态等
- 关联转账订单ID用于追踪
2. 模型层
UrsPartnerDividendRecord 模型
- 继承自 ModelCore
- 完整的字段定义和类型转换
- 关联 TransferApp 和分红详情
- 提供便捷的查询方法
UrsPartnerDividendDetail 模型
- 记录单个合伙人的分红详情
- 关联用户、分红记录、转账订单
- 提供状态管理和查询方法
3. 服务层架构
UrsPartnerDividendService (对外服务接口)
executeDailyDividend(): 执行每日分红
getPartnerList(): 获取合伙人列表
getDividendHistory(): 获取分红历史
getDividendDetails(): 获取分红详情
getUserDividendHistory(): 获取用户分红历史
getDividendStatistics(): 获取分红统计信息
UrsPartnerDividendLogic (内部业务逻辑)
- 处理分红的核心业务逻辑
- 获取手续费统计数据
- 计算分红金额(总手续费的20%)
- 获取所有合伙人(顶级达人,等级5)
- 执行手续费转移
- 记录分红结果
4. 命令行工具
UrsPartnerDividendCommand (urs-promotion:partner-dividend)
- 支持指定分红日期:
--date=2025-06-24
- 支持强制执行:
--force
- 显示合伙人信息和分红结果
- 完整的错误处理和日志记录
5. 定时任务
在 UrsPromotionServiceProvider 中注册定时任务:
- 每天11:30执行分红:
dailyAt('11:30')
- 防止重复执行:
withoutOverlapping()
- 后台运行:
runInBackground()
6. 后台管理界面
UrsPartnerDividendController
- 分红记录列表页面
- 分红详情查看
- 手动执行分红功能
- 分红统计页面
UrsPartnerDividendRepository
核心算法
分红计算逻辑
- 获取指定日期的手续费统计数据
- 计算总手续费金额
- 计算分红金额 = 总手续费 × 20%
- 获取所有合伙人(talent_level = 5)
- 计算每人分红 = 分红金额 ÷ 合伙人数量
- 使用Transfer模块的手续费转移功能进行转账
合伙人识别
- 从
urs_promotion_user_talents 表获取 talent_level = 5 的用户
- 通过
UrsUserMappingService 获取对应的URS用户ID
- 确保用户有效且已进入农场
测试验证
测试数据
- 创建测试合伙人:用户ID 39118,URS用户ID 10002
- 手续费统计:2025-06-24 总手续费 11.25 钻石
测试结果
php artisan urs-promotion:partner-dividend --date=2025-06-24
执行结果:
- 分红日期: 2025-06-24
- 当日总手续费: 11.2500000000 钻石
- 分红总金额: 2.2500000000 钻石 (20%)
- 合伙人数量: 1 人
- 每人分红: 2.2500000000 钻石
- 成功转账: 1 人
- 成功率: 100%
数据验证
- 分红记录表:成功创建记录,状态为 completed
- 分红详情表:成功创建详情,状态为 completed
- 资金日志:用户成功收到 2.25 钻石
- 重复执行检查:正确提示已处理过
技术特点
1. 安全性
- 事务处理确保数据一致性
- 重复执行检查防止重复分红
- 完整的错误处理和日志记录
2. 可扩展性
- 模块化设计,易于维护
- 支持多个转账应用
- 灵活的状态管理
3. 可监控性
文件清单
新增文件
app/Module/UrsPromotion/Models/UrsPartnerDividendRecord.php
app/Module/UrsPromotion/Models/UrsPartnerDividendDetail.php
app/Module/UrsPromotion/Logics/UrsPartnerDividendLogic.php
app/Module/UrsPromotion/Services/UrsPartnerDividendService.php
app/Module/UrsPromotion/Commands/UrsPartnerDividendCommand.php
app/Module/UrsPromotion/AdminControllers/UrsPartnerDividendController.php
app/Module/UrsPromotion/Repositories/UrsPartnerDividendRepository.php
app/Module/UrsPromotion/Database/create_partner_dividend_tables.sql
修改文件
app/Module/UrsPromotion/Providers/UrsPromotionServiceProvider.php
部署说明
- 执行SQL创建数据库表
- 确保定时任务正常运行
- 验证Transfer模块手续费统计功能正常
- 测试分红命令执行
后续优化建议
- 添加分红规则配置(分红比例、最小分红金额等)
- 支持分红暂停/恢复功能
- 添加分红通知功能
- 优化大量合伙人的分红性能
- 添加分红报表和图表展示
提交信息
Git提交: dbc44665 - 完成URS合伙人分红功能开发