任务时间: 2025年06月15日 17:00
任务类型: 架构重构
模块: UrsPromotion
版本: v3.0.0
用户指出了之前双ID系统设计的逻辑问题:
创建 urs_user_id 和 user_id 关系表来处理系统的用户关系;
上下级关系表只储存 urs_user_id 之间的关系;
发送奖励时如果urs_user_id 没有对应的 user_id 则跳过该人,继续处理其他人;比如上级没进入农场,但是上上级进入了要继续处理
用户映射表 (urs_promotion_user_mappings)
CREATE TABLE `kku_urs_promotion_user_mappings` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`urs_user_id` bigint unsigned NOT NULL COMMENT 'URS用户ID',
`user_id` bigint unsigned NOT NULL COMMENT '农场用户ID',
`mapping_time` timestamp NOT NULL COMMENT '映射建立时间(用户进入农场时间)',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1有效,0无效',
UNIQUE KEY `uk_urs_user_id` (`urs_user_id`),
UNIQUE KEY `uk_user_id` (`user_id`)
);
推荐关系表 (urs_promotion_user_referrals) - 简化版
CREATE TABLE `kku_urs_promotion_user_referrals` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`urs_user_id` bigint unsigned NOT NULL COMMENT 'URS用户ID',
`urs_referrer_id` bigint unsigned NOT NULL COMMENT 'URS推荐人ID',
`referral_code` varchar(32) DEFAULT NULL COMMENT '历史推荐码',
`referral_time` timestamp NOT NULL,
`status` tinyint NOT NULL DEFAULT '1',
UNIQUE KEY `uk_urs_user_id` (`urs_user_id`)
);
public function distributeReward($ursUserId, $sourceId, $sourceType, $profitType, $originalAmount, $rewardConfig)
{
$referralChain = $this->getReferralChain($ursUserId, count($rewardConfig));
$level = 1;
foreach ($referralChain as $referrerUrsUserId) {
$farmUserId = UrsUserMapping::getFarmUserIdByUrsUserId($referrerUrsUserId);
if ($farmUserId === null) {
// 跳过未进入农场的用户,记录跳过状态
$this->recordSkippedReward(...);
} else {
// 发放奖励给已进入农场的用户
$this->recordNormalReward(...);
}
$level++;
}
}
UrsUserMapping模型
UrsRewardDistributionService服务
UrsUserReferral模型
UrsUserTalent模型
UrsProfit模型
创建了完整的迁移脚本:
URS用户注册 → 建立推荐关系(只存储URS ID)
用户进入农场 → 建立映射关系(URS ID ↔ 农场ID)
产生收益 → 查找推荐链 → 检查映射关系 → 发放/跳过 → 记录结果
根据URS ID查询农场ID → 映射表查询
根据农场ID查询URS ID → 映射表查询
批量ID转换 → 批量映射查询
create_urs_promotion_tables_v3.sql - 新版本表结构UrsUserMapping.php - 用户映射模型UrsRewardDistributionService.php - 奖励分发服务migrate_to_separated_mapping_v3.sql - 迁移脚本UrsUserReferral.php - 移除农场用户ID字段UrsUserTalent.php - 移除农场用户ID字段UrsProfit.php - 重构字段结构,新增跳过状态README.md - 更新架构说明和表结构文档任务状态: ✅ 已完成
完成时间: 2025年06月15日 17:00
版本: UrsPromotion v3.0.0 (分离映射关系版本)