190 行
6.5 KiB
PHP
190 行
6.5 KiB
PHP
<?php
|
|
/**
|
|
* 区域代理结果验证
|
|
*
|
|
* 用法(项目根目录):
|
|
* php addons/shopro/tests/regional_agent_verify.php list-agents
|
|
* php addons/shopro/tests/regional_agent_verify.php list-config
|
|
* php addons/shopro/tests/regional_agent_verify.php verify-order {订单ID}
|
|
* php addons/shopro/tests/regional_agent_verify.php verify-item {订单明细ID}
|
|
*/
|
|
if (PHP_SAPI !== 'cli') {
|
|
http_response_code(403);
|
|
exit("请通过命令行运行\n");
|
|
}
|
|
|
|
define('APP_PATH', __DIR__ . '/../../../application/');
|
|
define('ROOT_PATH', __DIR__ . '/../../../');
|
|
|
|
if (!is_file(APP_PATH . 'admin/command/Install/install.lock')) {
|
|
fwrite(STDERR, "项目未安装。\n");
|
|
exit(1);
|
|
}
|
|
|
|
require ROOT_PATH . 'thinkphp/base.php';
|
|
\think\App::initCommon();
|
|
|
|
use think\Db;
|
|
|
|
$argv = $GLOBALS['argv'] ?? [];
|
|
$command = $argv[1] ?? 'list-agents';
|
|
|
|
switch ($command) {
|
|
case 'list-agents':
|
|
listAgents();
|
|
break;
|
|
case 'list-config':
|
|
listConfig();
|
|
break;
|
|
case 'verify-order':
|
|
$orderId = intval($argv[2] ?? 0);
|
|
if (!$orderId) {
|
|
fwrite(STDERR, "请指定订单ID\n");
|
|
exit(1);
|
|
}
|
|
verifyOrder($orderId);
|
|
break;
|
|
case 'verify-item':
|
|
$itemId = intval($argv[2] ?? 0);
|
|
if (!$itemId) {
|
|
fwrite(STDERR, "请指定订单明细ID\n");
|
|
exit(1);
|
|
}
|
|
verifyOrderItem($itemId);
|
|
break;
|
|
default:
|
|
echo "可用: list-agents | list-config | verify-order {id} | verify-item {id}\n";
|
|
exit(1);
|
|
}
|
|
|
|
function listAgents()
|
|
{
|
|
echo "=== 区域代理测试账号 (910001~910003) ===\n\n";
|
|
$rows = Db::name('shopro_regional_agent')
|
|
->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'] . '元/单(等级通用)';
|
|
}
|