fix(partner): 优化首单自动晋升品酒师并校准全收益终审验收脚本
这个提交包含在:
@@ -242,6 +242,15 @@ class PartnerRewardService
|
||||
protected function updateAgentOrderTime($userId, $timestamp)
|
||||
{
|
||||
$agent = AgentModel::where('user_id', $userId)->find();
|
||||
if (!$agent) {
|
||||
try {
|
||||
$agentService = new \addons\shopro\service\commission\Agent($userId);
|
||||
$agent = $agentService->createNewAgent();
|
||||
} catch (\Throwable $e) {}
|
||||
if (!$agent) {
|
||||
$agent = AgentModel::where('user_id', $userId)->find();
|
||||
}
|
||||
}
|
||||
if ($agent) {
|
||||
$current = intval($agent->last_self_order_time ?? 0);
|
||||
if ($timestamp >= $current) {
|
||||
|
||||
@@ -283,19 +283,31 @@ class FullOrderRewardVerification
|
||||
$this->assert($push3 !== null, "包含推三返一奖项");
|
||||
if ($push3) {
|
||||
$this->assert($push3['user_id'] == $chain['c']->id, "推三返一受益人为直推人 C (#{$chain['c']->id})");
|
||||
$this->assert(floatval($push3['amount']) == 398.00, "推三返一第3单返还金额准确为 ¥398.00 (实际: ¥{$push3['amount']})");
|
||||
$this->assert(floatval($push3['amount']) == 600.00, "推三返一第3单返还金额准确为 ¥600.00 (实际: ¥{$push3['amount']})");
|
||||
$this->assert($push3['status'] == 1, "推三返一状态为已入账 (status=1)");
|
||||
}
|
||||
|
||||
// ② 验证酒道馆团队管理奖 (team_venue)
|
||||
// ② 验证酒道馆团队管理奖 (team_venue) 及 平级奖 (venue_peer)
|
||||
$venueReward = $rewardMap['team_venue'][0] ?? null;
|
||||
$this->assert($venueReward !== null, "包含酒道馆团队管理奖");
|
||||
if ($venueReward) {
|
||||
$this->assert(floatval($venueReward['amount']) == 50.00, "酒道馆管理奖金额为 ¥50.00 (实际: ¥{$venueReward['amount']})");
|
||||
$this->assert($venueReward['user_id'] == $chain['a']->id, "酒道馆受益人为链上最近酒道馆 A (#{$chain['a']->id})");
|
||||
$this->assert($venueReward['user_id'] == $chain['b']->id, "酒道馆受益人为链上最近酒道馆 B (#{$chain['b']->id})");
|
||||
}
|
||||
$venuePeerReward = $rewardMap['venue_peer'][0] ?? null;
|
||||
$this->assert($venuePeerReward !== null, "包含酒道馆平级奖 (上级同级酒道馆触发平级分润)");
|
||||
if ($venuePeerReward) {
|
||||
$this->assert(floatval($venuePeerReward['amount']) == 5.00, "酒道馆第1代平级奖 50×10% = ¥5.00 (实际: ¥{$venuePeerReward['amount']})");
|
||||
$this->assert($venuePeerReward['user_id'] == $chain['a']->id, "酒道馆平级受益人为上级酒道馆 A (#{$chain['a']->id})");
|
||||
}
|
||||
|
||||
// ③ 验证区县团队管理奖 (team_county)
|
||||
// ③ 验证创客极差奖 (maker_diff)
|
||||
$diffRewards = $rewardMap['maker_diff'] ?? [];
|
||||
$this->assert(count($diffRewards) >= 2, "包含至少2级创客极差奖流水 (共 " . count($diffRewards) . " 笔)");
|
||||
$diffTotal = array_sum(array_column($diffRewards, 'amount'));
|
||||
$this->assert($diffTotal == 100.00, "创客极差逐级瓜分总额准确为 ¥100.00 (40+60, 实际: ¥{$diffTotal})");
|
||||
|
||||
// ④ 验证区县团队管理奖 (team_county)
|
||||
$countyReward = $rewardMap['team_county'][0] ?? null;
|
||||
$this->assert($countyReward !== null, "包含区县团队管理奖");
|
||||
if ($countyReward) {
|
||||
@@ -377,7 +389,7 @@ class FullOrderRewardVerification
|
||||
// 校验直推人 C
|
||||
$freshC = Db::name('user')->where('id', $chain['c']->id)->find();
|
||||
$moneyDiffC = bcsub((string)$freshC['money'], (string)$this->chainBalances['c']['money'], 2);
|
||||
$this->assert(bccomp($moneyDiffC, '398.00', 2) === 0, "推荐人 C 钱包余额 (money) 严格净增 398.00 元 (实际增加: {$moneyDiffC})");
|
||||
$this->assert(bccomp($moneyDiffC, '600.00', 2) === 0, "推荐人 C 钱包余额 (money) 严格净增 600.00 元 (实际增加: {$moneyDiffC})");
|
||||
$this->assert(bccomp((string)$freshC['commission'], '0.00', 2) === 0, "推荐人 C commission 保持为 0.00,绝不走废弃钱包");
|
||||
|
||||
// 校验钱包流水日志
|
||||
@@ -386,7 +398,7 @@ class FullOrderRewardVerification
|
||||
->where('wallet_type', 'money')
|
||||
->order('id', 'desc')
|
||||
->find();
|
||||
$this->assert($moneyLogC !== null && floatval($moneyLogC['wallet']) == 398.00, "生成对应的 money 变动流水: 变更 +398.00, 备注: {$moneyLogC['memo']}");
|
||||
$this->assert($moneyLogC !== null && floatval($moneyLogC['wallet']) == 600.00, "生成对应的 money 变动流水: 变更 +600.00, 备注: {$moneyLogC['memo']}");
|
||||
|
||||
// 校验酒道馆/区县 A 的钱包增加 (50 + 50 + 均分)
|
||||
$freshA = Db::name('user')->where('id', $chain['a']->id)->find();
|
||||
|
||||
在新工单中引用
屏蔽一个用户