alias('a') ->join('user u', 'a.user_id = u.id', 'LEFT') ->where('a.user_id', 'in', [910001, 910002, 910003]) ->field('a.*, u.nickname, u.mobile') ->select(); if (!$rows) { echo "未找到测试区域代理,请先运行 regional_agent_setup_test_users.php\n"; return; } foreach ($rows as $row) { $commission = formatAgentCommission($row); echo sprintf("#%d %s (%s)\n", $row['user_id'], $row['nickname'], $row['mobile']); echo sprintf(" 区域: %s [level=%d area_id=%d]\n", $row['area_name'], $row['area_level'], $row['area_id']); echo sprintf(" 佣金: %s\n", $commission); echo sprintf(" 订单数=%d 销售额=%s 总收益=%s 状态=%s\n\n", $row['order_count'], $row['order_money'], $row['total_income'], $row['status']); } } function listConfig() { echo "=== 区域代理配置 ===\n\n"; $configs = Db::name('shopro_regional_agent_config')->order('id asc')->select(); foreach ($configs as $cfg) { echo sprintf(" %-20s = %s\n", $cfg['name'], $cfg['value']); } echo "\n=== 代理等级 ===\n\n"; $levels = Db::name('shopro_regional_agent_level')->order('level asc')->select(); foreach ($levels as $lv) { $text = $lv['commission_type'] === 'rate' ? $lv['commission_rate'] . '%' : $lv['commission_money'] . '元/单'; echo sprintf(" L%d %s (area_level=%d) %s\n", $lv['level'], $lv['name'], $lv['area_level'], $text); } } function verifyOrder($orderId) { $order = Db::name('shopro_order')->where('id', $orderId)->find(); if (!$order) { fwrite(STDERR, "订单不存在: {$orderId}\n"); exit(1); } echo "=== 订单 #{$orderId} ===\n"; echo "买家ID: {$order['user_id']} 状态: {$order['status']}\n"; echo "地址: {$order['province_name']}{$order['city_name']}{$order['area_name']}\n"; echo "province_id={$order['province_id']} city_id={$order['city_id']} area_id={$order['area_id']}\n\n"; $items = Db::name('shopro_order_item')->where('order_id', $orderId)->select(); foreach ($items as $item) { verifyOrderItem($item['id'], false); echo str_repeat('-', 50) . "\n"; } } function verifyOrderItem($itemId, $standalone = true) { $item = Db::name('shopro_order_item')->where('id', $itemId)->find(); if (!$item) { fwrite(STDERR, "订单明细不存在: {$itemId}\n"); exit(1); } if ($standalone) { echo "=== 订单明细 #{$itemId} (order_id={$item['order_id']}) ===\n"; echo "商品ID: {$item['goods_id']} 实付: {$item['pay_price']}\n\n"; } else { echo "明细 #{$itemId} 商品={$item['goods_id']} 实付={$item['pay_price']}\n"; } $regionalOrders = Db::name('shopro_regional_agent_order') ->alias('ro') ->join('shopro_regional_agent a', 'ro.agent_id = a.id', 'LEFT') ->join('user u', 'ro.agent_user_id = u.id', 'LEFT') ->where('ro.order_item_id', $itemId) ->field('ro.*, a.area_name, a.area_level, a.commission_type as agent_commission_type, a.commission_rate as agent_commission_rate, u.nickname') ->select(); if (!$regionalOrders) { echo " [无区域代理订单记录]\n"; if ($standalone) { echo "\n可能原因: 区域代理未开启 / 商品未开 regional_enable / 地址无匹配代理\n"; } return; } $total = 0; foreach ($regionalOrders as $ro) { $rewards = Db::name('shopro_regional_agent_reward')->where('regional_order_id', $ro['id'])->select(); foreach ($rewards as $reward) { $total += floatval($reward['commission']); $statusMap = [0 => '待入账', 1 => '已入账', -1 => '已退回']; $custom = $ro['agent_commission_type'] ? "专属{$ro['agent_commission_rate']}%" : '等级通用'; echo sprintf( " 代理 %s (%s) area_level=%d 佣金=%.2f [%s] (%s)\n", $ro['nickname'], $ro['area_name'], $ro['area_level'], $reward['commission'], $statusMap[$reward['status']] ?? $reward['status'], $custom ); } } echo sprintf(" 区域佣金合计: %.2f 元\n\n", $total); } function formatAgentCommission($agent) { if (!empty($agent['commission_type'])) { if ($agent['commission_type'] === 'rate') { return $agent['commission_rate'] . '%(专属)'; } return $agent['commission_money'] . '元/单(专属)'; } $level = Db::name('shopro_regional_agent_level')->where('level', $agent['level'])->find(); if (!$level) { return '跟随等级(未配置)'; } if ($level['commission_type'] === 'rate') { return $level['commission_rate'] . '%(等级通用)'; } return $level['commission_money'] . '元/单(等级通用)'; }