团队模块对外提供一系列服务接口,用于管理用户推荐关系、达人等级和团队收益分成。这些接口主要供其他模块调用,实现模块间的交互和数据共享。本文档详细说明了团队模块提供的服务接口、参数和返回值。
createReferralRelationgetUserReferrersget前缀,如getUserTalentInfocreate前缀,如createReferralCodeupdate前缀,如updateUserTalentdelete前缀,如deleteReferralRelationcheck前缀,如checkReferralCodeReferralException/**
* 建立推荐关系
*
* @param int $userId 用户ID
* @param int $referrerId 推荐人ID
* @return bool 是否成功
* @throws UserNotFoundException 用户不存在异常
* @throws ReferralException 推荐关系异常
*/
public function createReferralRelation(int $userId, int $referrerId): bool;
功能说明:
调用示例:
try {
$result = $referralService->createReferralRelation(1001, 1000);
if ($result) {
// 推荐关系建立成功
}
} catch (UserNotFoundException $e) {
// 用户不存在
} catch (ReferralException $e) {
// 推荐关系异常
}
/**
* 获取用户的推荐人
*
* @param int $userId 用户ID
* @param int $level 推荐层级(1=直推,2=间推,0=全部)
* @return array 推荐人列表
*/
public function getUserReferrers(int $userId, int $level = 0): array;
功能说明:
调用示例:
// 获取所有推荐人
$allReferrers = $referralService->getUserReferrers(1001);
// 只获取直推推荐人
$directReferrers = $referralService->getUserReferrers(1001, 1);
/**
* 获取用户的团队成员
*
* @param int $userId 用户ID
* @param int $level 推荐层级(1=直推,2=间推,0=全部)
* @param int $page 页码
* @param int $pageSize 每页数量
* @return array 团队成员列表和分页信息
*/
public function getPromotionMembers(int $userId, int $level = 0, int $page = 1, int $pageSize = 20): array;
功能说明:
调用示例:
// 获取所有团队成员,第1页,每页20条
$allMembers = $referralService->getPromotionMembers(1000);
// 只获取直推成员,第1页,每页50条
$directMembers = $referralService->getPromotionMembers(1000, 1, 1, 50);
/**
* 检查用户是否是另一用户的推荐人
*
* @param int $userId 用户ID
* @param int $memberId 成员ID
* @param int $level 推荐层级(1=直推,2=间推,0=任意层级)
* @return bool 是否存在推荐关系
*/
public function checkReferralRelation(int $userId, int $memberId, int $level = 0): bool;
功能说明:
调用示例:
// 检查用户1000是否是用户1001的推荐人(任意层级)
$isReferrer = $referralService->checkReferralRelation(1000, 1001);
// 检查用户1000是否是用户1001的直推推荐人
$isDirectReferrer = $referralService->checkReferralRelation(1000, 1001, 1);
/**
* 生成用户推荐码
*
* @param int $userId 用户ID
* @return string 推荐码
* @throws UserNotFoundException 用户不存在异常
*/
public function generateReferralCode(int $userId): string;
功能说明:
调用示例:
try {
$code = $referralService->generateReferralCode(1000);
// 生成的推荐码
} catch (UserNotFoundException $e) {
// 用户不存在
}
/**
* 验证推荐码并获取推荐人ID
*
* @param string $code 推荐码
* @return int|null 推荐人ID,无效返回null
*/
public function verifyReferralCode(string $code): ?int;
功能说明:
调用示例:
$referrerId = $referralService->verifyReferralCode('ABC123');
if ($referrerId !== null) {
// 有效的推荐码,获取到推荐人ID
} else {
// 无效的推荐码
}
/**
* 获取用户达人信息
*
* @param int $userId 用户ID
* @return array 达人信息
*/
public function getUserTalentInfo(int $userId): array;
功能说明:
调用示例:
$talentInfo = $talentService->getUserTalentInfo(1000);
// 达人信息数组
/**
* 检查并更新用户达人等级
*
* @param int $userId 用户ID
* @return bool 是否有等级变化
*/
public function checkAndUpdateTalentLevel(int $userId): bool;
功能说明:
调用示例:
$levelChanged = $talentService->checkAndUpdateTalentLevel(1000);
if ($levelChanged) {
// 达人等级有变化
}
/**
* 获取达人等级配置
*
* @param int $level 达人等级,0表示获取所有等级
* @return array 达人等级配置
*/
public function getTalentLevelConfig(int $level = 0): array;
功能说明:
调用示例:
// 获取所有达人等级配置
$allConfigs = $talentService->getTalentLevelConfig();
// 获取3级达人的配置
$level3Config = $talentService->getTalentLevelConfig(3);
/**
* 获取达人等级的间推分成比例
*
* @param int $level 达人等级
* @return float 分成比例
*/
public function getTalentProfitRate(int $level): float;
功能说明:
调用示例:
// 获取3级达人的分成比例
$rate = $talentService->getTalentProfitRate(3);
// 返回0.02 (2%)
/**
* 计算团队收益分成
*
* @param int $userId 产生收益的用户ID
* @param string $sourceType 收益来源类型
* @param int $sourceId 收益来源ID
* @param int $itemId 物品ID
* @param int $amount 收益数量
* @return bool 是否成功
*/
public function calculatePromotionProfit(int $userId, string $sourceType, int $sourceId, int $itemId, int $amount): bool;
功能说明:
调用示例:
// 用户1001收获农场作物,产生100个物品ID为2001的收益
$result = $promotionProfitService->calculatePromotionProfit(1001, 'farm_harvest', 5001, 2001, 100);
if ($result) {
// 分成计算成功
}
/**
* 获取用户团队收益统计
*
* @param int $userId 用户ID
* @param string $sourceType 收益来源类型,空字符串表示所有类型
* @param string $timeRange 时间范围(today,yesterday,week,month,all)
* @return array 收益统计
*/
public function getUserPromotionProfitStats(int $userId, string $sourceType = '', string $timeRange = 'all'): array;
功能说明:
调用示例:
// 获取用户1000的所有团队收益统计
$allStats = $promotionProfitService->getUserPromotionProfitStats(1000);
// 获取用户1000的本月农场收益统计
$farmMonthStats = $promotionProfitService->getUserPromotionProfitStats(1000, 'farm_harvest', 'month');
/**
* 获取用户团队收益记录
*
* @param int $userId 用户ID
* @param string $sourceType 收益来源类型,空字符串表示所有类型
* @param int $page 页码
* @param int $pageSize 每页数量
* @return array 收益记录和分页信息
*/
public function getUserPromotionProfitRecords(int $userId, string $sourceType = '', int $page = 1, int $pageSize = 20): array;
功能说明:
调用示例:
// 获取用户1000的所有团队收益记录,第1页,每页20条
$allRecords = $promotionProfitService->getUserPromotionProfitRecords(1000);
// 获取用户1000的农场收益记录,第1页,每页50条
$farmRecords = $promotionProfitService->getUserPromotionProfitRecords(1000, 'farm_harvest', 1, 50);
/**
* 获取收益分成规则
*
* @param string $sourceType 收益来源类型
* @return array 分成规则
*/
public function getProfitRule(string $sourceType): array;
功能说明:
调用示例:
// 获取农场收益的分成规则
$farmRule = $promotionProfitService->getProfitRule('farm_harvest');
团队模块会触发以下事件,其他模块可以监听这些事件:
/**
* 达人等级提升事件
*/
class TalentLevelUpEvent
{
/**
* @var int 用户ID
*/
public $userId;
/**
* @var int 旧等级
*/
public $oldLevel;
/**
* @var int 新等级
*/
public $newLevel;
/**
* 构造函数
*/
public function __construct(int $userId, int $oldLevel, int $newLevel)
{
$this->userId = $userId;
$this->oldLevel = $oldLevel;
$this->newLevel = $newLevel;
}
}
事件说明:
监听示例:
// 在EventServiceProvider中注册监听器
protected $listen = [
'App\Module\Promotion\Events\TalentLevelUpEvent' => [
'App\Module\Task\Listeners\TalentLevelUpListener',
],
];
// 监听器实现
public function handle(TalentLevelUpEvent $event)
{
// 处理达人等级提升事件
$userId = $event->userId;
$newLevel = $event->newLevel;
// 完成相关任务
$this->taskService->completeTask($userId, 'talent_level_up', ['level' => $newLevel]);
}
/**
* 推荐关系创建事件
*/
class ReferralCreatedEvent
{
/**
* @var int 用户ID
*/
public $userId;
/**
* @var int 推荐人ID
*/
public $referrerId;
/**
* @var int 推荐层级
*/
public $level;
/**
* 构造函数
*/
public function __construct(int $userId, int $referrerId, int $level)
{
$this->userId = $userId;
$this->referrerId = $referrerId;
$this->level = $level;
}
}
事件说明:
监听示例:
// 在EventServiceProvider中注册监听器
protected $listen = [
'App\Module\Promotion\Events\ReferralCreatedEvent' => [
'App\Module\Task\Listeners\ReferralCreatedListener',
],
];
// 监听器实现
public function handle(ReferralCreatedEvent $event)
{
// 处理推荐关系创建事件
$userId = $event->userId;
$referrerId = $event->referrerId;
// 完成相关任务
if ($event->level == 1) {
$this->taskService->completeTask($referrerId, 'direct_referral');
}
}
团队模块会监听以下来自其他模块的事件:
// 用户模块中定义的事件
namespace App\Module\User\Events;
class UserRegisteredEvent
{
/**
* @var int 用户ID
*/
public $userId;
/**
* @var string 推荐码
*/
public $referralCode;
/**
* 构造函数
*/
public function __construct(int $userId, string $referralCode = '')
{
$this->userId = $userId;
$this->referralCode = $referralCode;
}
}
监听处理:
namespace App\Module\Promotion\Listeners;
use App\Module\User\Events\UserRegisteredEvent;
use App\Module\Promotion\Services\ReferralService;
class UserRegisteredListener
{
/**
* @var ReferralService
*/
protected $referralService;
/**
* 构造函数
*/
public function __construct(ReferralService $referralService)
{
$this->referralService = $referralService;
}
/**
* 处理事件
*/
public function handle(UserRegisteredEvent $event)
{
// 处理用户注册事件
$userId = $event->userId;
$referralCode = $event->referralCode;
// 验证推荐码
if (!empty($referralCode)) {
$referrerId = $this->referralService->verifyReferralCode($referralCode);
if ($referrerId !== null) {
// 建立推荐关系
$this->referralService->createReferralRelation($userId, $referrerId);
}
}
// 生成用户推荐码
$this->referralService->generateReferralCode($userId);
}
}
// 农场模块中定义的事件
namespace App\Module\Farm\Events;
class CropHarvestedEvent
{
/**
* @var int 用户ID
*/
public $userId;
/**
* @var int 作物ID
*/
public $cropId;
/**
* @var int 产出物品ID
*/
public $itemId;
/**
* @var int 产出数量
*/
public $amount;
/**
* 构造函数
*/
public function __construct(int $userId, int $cropId, int $itemId, int $amount)
{
$this->userId = $userId;
$this->cropId = $cropId;
$this->itemId = $itemId;
$this->amount = $amount;
}
}
监听处理:
namespace App\Module\Promotion\Listeners;
use App\Module\Farm\Events\CropHarvestedEvent;
use App\Module\Promotion\Services\PromotionProfitService;
class CropHarvestedListener
{
/**
* @var PromotionProfitService
*/
protected $promotionProfitService;
/**
* 构造函数
*/
public function __construct(PromotionProfitService $promotionProfitService)
{
$this->promotionProfitService = $promotionProfitService;
}
/**
* 处理事件
*/
public function handle(CropHarvestedEvent $event)
{
// 处理作物收获事件
$userId = $event->userId;
$cropId = $event->cropId;
$itemId = $event->itemId;
$amount = $event->amount;
// 计算团队收益分成
$this->promotionProfitService->calculatePromotionProfit(
$userId,
'farm_harvest',
$cropId,
$itemId,
$amount
);
}
}
// 用户注册处理
public function register(Request $request)
{
// 创建用户
$userId = $this->userService->createUser($request->all());
// 处理推荐码
$referralCode = $request->input('referral_code');
if (!empty($referralCode)) {
try {
// 验证推荐码
$referrerId = $this->referralService->verifyReferralCode($referralCode);
if ($referrerId !== null) {
// 建立推荐关系
$this->referralService->createReferralRelation($userId, $referrerId);
}
} catch (\Exception $e) {
// 处理异常
Log::error('建立推荐关系失败', [
'user_id' => $userId,
'referral_code' => $referralCode,
'error' => $e->getMessage()
]);
}
}
// 生成用户推荐码
$this->referralService->generateReferralCode($userId);
// 返回结果
return response()->json([
'success' => true,
'user_id' => $userId
]);
}
// 作物收获处理
public function harvestCrop(int $cropId)
{
return DB::transaction(function () use ($cropId) {
// 收获作物
$result = $this->cropService->harvestCrop($cropId);
// 获取收获信息
$userId = $result['user_id'];
$itemId = $result['item_id'];
$amount = $result['amount'];
// 计算团队收益分成
$this->promotionProfitService->calculatePromotionProfit(
$userId,
'farm_harvest',
$cropId,
$itemId,
$amount
);
// 触发作物收获事件
event(new CropHarvestedEvent($userId, $cropId, $itemId, $amount));
return $result;
});
}
// 获取用户团队信息
public function getUserPromotionInfo(int $userId)
{
// 获取用户达人信息
$talentInfo = $this->talentService->getUserTalentInfo($userId);
// 获取直推成员
$directMembers = $this->referralService->getPromotionMembers($userId, 1, 1, 10);
// 获取团队收益统计
$profitStats = $this->promotionProfitService->getUserPromotionProfitStats($userId);
// 获取最近收益记录
$recentProfits = $this->promotionProfitService->getUserPromotionProfitRecords($userId, '', 1, 5);
// 返回结果
return [
'talent_info' => $talentInfo,
'direct_members' => $directMembers,
'profit_stats' => $profitStats,
'recent_profits' => $recentProfits
];
}
团队模块提供了丰富的服务接口,用于管理用户推荐关系、达人等级和团队收益分成。这些接口设计清晰、功能完善,能够满足团队系统的各种需求。通过事件机制,团队模块与其他模块保持松耦合的交互方式,提高了系统的可维护性和可扩展性。在使用这些接口时,需要注意异常处理和事务管理,确保数据的一致性和完整性。