文件

59 行
2.2 KiB
PHP

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace addons\shopro\service\partner;
use app\admin\model\shopro\commission\Agent as AgentModel;
/**
* 推荐提成:398/400/600 循环,计到推荐人,自购不发
*/
class Push3Reward
{
public function run($order, $buyerId, $parent, ActiveService $active, $rules = null)
{
if (!$parent) {
PartnerRewardService::writeSkip($order, $buyerId, 0, 'push3', 'taster', 'no_parent', '暂无推荐人,不计提推荐提成');
return;
}
if (intval($parent['user_id']) === intval($buyerId)) {
PartnerRewardService::writeSkip($order, $buyerId, $parent['user_id'], 'push3', 'taster', 'self_buy', '本人下单不计提推荐提成');
return;
}
if (intval($parent['level']) < 1) {
PartnerRewardService::writeSkip($order, $buyerId, $parent['user_id'], 'push3', 'taster', 'no_parent', '推荐上级未开通身份');
return;
}
if (!$active->isActive($parent['agent'] ?? $parent)) {
PartnerRewardService::writeSkip($order, $buyerId, $parent['user_id'], 'push3', 'taster', 'inactive_30d', '需 30 日内有本人订单才能领取奖励');
return;
}
$agent = AgentModel::where('user_id', $parent['user_id'])->lock(true)->find();
if (!$agent) {
return;
}
$agent->direct_order_seq = intval($agent->direct_order_seq) + 1;
$agent->save();
$amounts = (!empty($rules['push3_amounts']) && is_array($rules['push3_amounts']))
? $rules['push3_amounts']
: PartnerConfig::push3Amounts();
$seq = intval($agent->direct_order_seq);
$amount = $amounts[($seq - 1) % 3];
PartnerRewardService::account($order, $buyerId, $agent->user_id, 'push3', 'taster', $amount, $amount, [
'formula' => "推荐提成第{$seq}单,循环第" . ((($seq - 1) % 3) + 1) . "档 +{$amount}",
'seq' => $seq,
]);
}
public function rollbackSeq($userId)
{
$agent = AgentModel::where('user_id', $userId)->lock(true)->find();
if ($agent && $agent->direct_order_seq > 0) {
$agent->direct_order_seq = $agent->direct_order_seq - 1;
$agent->save();
}
}
}