在系统中,我们有三个核心概念:
FundCurrencyModel 表示FundConfigModel 表示FundModel 表示本文档旨在明确这些概念的正确使用方式,避免混淆。
enum CONSUME_TYPE: int
{
/**
* 物品消耗
* 消耗用户背包中的物品
*/
case ITEM = 1;
/**
* 账户种类消耗
* 消耗用户特定账户种类的资金
* 注意:这里的target_id指向fund_config表的id(账户种类ID)
*/
case FUND_CONFIG = 2;
/**
* 币种消耗
* 消耗用户特定币种的资金
* 注意:这里的target_id指向fund_currency表的id(币种ID)
*/
case CURRENCY = 3;
}
enum REWARD_TYPE: int
{
/**
* 物品奖励
* 奖励用户背包中的物品
*/
case ITEM = 1;
/**
* 账户种类奖励
* 奖励用户特定账户种类的资金
* 注意:这里的target_id指向fund_config表的id(账户种类ID)
*/
case FUND_CONFIG = 2;
/**
* 宠物经验奖励
*/
case PET_EXP = 3;
/**
* 宠物体力奖励
*/
case PET_ENERGY = 4;
/**
* 币种奖励
* 奖励用户特定币种的资金
* 注意:这里的target_id指向fund_currency表的id(币种ID)
*/
case CURRENCY = 5;
/**
* 其他奖励
*/
case OTHER = 99;
}
当需要消耗用户特定账户种类的资金时,应使用 CONSUME_TYPE::FUND_CONFIG:
// 创建消耗项
$consumeItem = new GameConsumeItem();
$consumeItem->consume_type = CONSUME_TYPE::FUND_CONFIG->value;
$consumeItem->target_id = $fundConfigId; // 账户种类ID,来自fund_config表
$consumeItem->quantity = $amount;
// 检查消耗
$result = ConsumeService::checkConsumeItem($userId, $consumeItem);
// 执行消耗
$result = ConsumeService::executeConsumeItem($userId, $consumeItem, $source, $sourceId);
当需要消耗用户特定币种的资金(可能涉及多个账户)时,应使用 CONSUME_TYPE::CURRENCY:
// 创建消耗项
$consumeItem = new GameConsumeItem();
$consumeItem->consume_type = CONSUME_TYPE::CURRENCY->value;
$consumeItem->target_id = $currencyId; // 币种ID,来自fund_currency表
$consumeItem->quantity = $amount;
// 检查消耗
$result = ConsumeService::checkConsumeItem($userId, $consumeItem);
// 执行消耗
$result = ConsumeService::executeConsumeItem($userId, $consumeItem, $source, $sourceId);
当需要奖励用户特定账户种类的资金时,应使用 REWARD_TYPE::FUND_CONFIG:
// 创建奖励项
$rewardItem = new GameRewardItem();
$rewardItem->reward_type = REWARD_TYPE::FUND_CONFIG->value;
$rewardItem->target_id = $fundConfigId; // 账户种类ID,来自fund_config表
$rewardItem->quantity = $amount;
// 发放奖励
$result = RewardService::grantReward($userId, $rewardItem, $source, $sourceId);
当需要奖励用户特定币种的资金时,应使用 REWARD_TYPE::CURRENCY:
// 创建奖励项
$rewardItem = new GameRewardItem();
$rewardItem->reward_type = REWARD_TYPE::CURRENCY->value;
$rewardItem->target_id = $currencyId; // 币种ID,来自fund_currency表
$rewardItem->quantity = $amount;
// 发放奖励
$result = RewardService::grantReward($userId, $rewardItem, $source, $sourceId);
错误示例:
// 错误:使用币种ID作为账户种类消耗的target_id
$consumeItem->consume_type = CONSUME_TYPE::FUND_CONFIG->value;
$consumeItem->target_id = $currencyId; // 错误!应该使用账户种类ID
正确示例:
// 正确:使用账户种类ID作为账户种类消耗的target_id
$consumeItem->consume_type = CONSUME_TYPE::FUND_CONFIG->value;
$consumeItem->target_id = $fundConfigId; // 正确!使用账户种类ID
错误示例:
// 错误:想消耗特定账户种类的资金,但使用了币种消耗类型
$consumeItem->consume_type = CONSUME_TYPE::CURRENCY->value;
$consumeItem->target_id = $fundConfigId; // 错误!CURRENCY类型应该使用币种ID
正确示例:
// 正确:消耗特定账户种类的资金
$consumeItem->consume_type = CONSUME_TYPE::FUND_CONFIG->value;
$consumeItem->target_id = $fundConfigId; // 正确!
CONSUME_TYPE::FUND_CONFIG 和 REWARD_TYPE::FUND_CONFIG 操作特定账户种类的资金CONSUME_TYPE::CURRENCY 和 REWARD_TYPE::CURRENCY 操作特定币种的资金target_id 与消耗/奖励类型匹配:
FUND_CONFIG 类型,target_id 应该是账户种类ID(fund_config.id)CURRENCY 类型,target_id 应该是币种ID(fund_currency.id)