vr-shopxo-plugin/_backup_20260420/test_ticket.php

155 lines
5.4 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* 测试票据生成脚本
* 用法php test_ticket.php
*
* 流程:
* 1. 查找/创建测试商品item_type=ticket
* 2. 查找/创建测试用户
* 3. 创建已支付订单
* 4. 触发 TicketService::onOrderPaid()
*/
define('ROOT_PATH', __DIR__ . '/');
define('APP_PATH', __DIR__ . '/app/');
// 加载 ThinkPHP 引导
require ROOT_PATH . 'think';
use app\plugins\vr_ticket\service\TicketService;
use app\plugins\vr_ticket\service\BaseService;
use think\facade\Db;
// ============================================================
// Step 1: 查找测试商品item_type=ticket 或 venue_data 非空)
// ============================================================
echo "[1] 查找票务商品...\n";
$goods = Db::name('Goods')->where('id', 118)->find();
if (empty($goods)) {
die("商品ID 118不存在\n");
}
// 确保 venue_data 或 item_type 有值
$isTicket = !empty($goods['venue_data']) || ($goods['item_type'] ?? '') === 'ticket';
if (!$isTicket) {
echo "商品118不是票务商品先设置 item_type=ticket\n";
Db::name('Goods')->where('id', 118)->update(['item_type' => 'ticket']);
$goods = Db::name('Goods')->where('id', 118)->find();
echo "已更新 item_type=ticket\n";
}
echo "商品: {$goods['title']} (ID={$goods['id']})\n";
echo "item_type={$goods['item_type']}, venue_data=" . (empty($goods['venue_data'])?'空':'有内容') . "\n";
// ============================================================
// Step 2: 查找测试用户
// ============================================================
echo "\n[2] 查找测试用户...\n";
$user = Db::name('User')->order('id', 'asc')->find();
if (empty($user)) {
die("没有测试用户!\n");
}
echo "用户: {$user['username']} (ID={$user['id']})\n";
// ============================================================
// Step 3: 创建测试订单(已支付状态)
// ============================================================
echo "\n[3] 创建测试订单...\n";
$now = time();
$order_no = 'TEST' . date('YmdHis') . rand(100, 999);
$order_id = Db::name('Order')->insertGetId([
'order_no' => $order_no,
'user_id' => $user['id'],
'goods_id' => $goods['id'],
'title' => $goods['title'],
'total_price' => 0.01,
'pay_status' => 1, // 已支付
'pay_time' => $now,
'status' => 1,
'address_id' => 0,
'extension_data' => json_encode([
'attendee' => [
'real_name' => '张三',
'phone' => '13800138000',
'id_card' => '110101199001011234',
]
], JSON_UNESCAPED_UNICODE),
'add_time' => $now,
'upd_time' => $now,
]);
echo "订单创建成功: order_no=$order_no, order_id=$order_id\n";
// ============================================================
// Step 4: 创建订单商品
// ============================================================
echo "\n[4] 创建订单商品...\n";
// 获取商品规格
$spec = Db::name('GoodsSpecBase')
->where('goods_id', $goods['id'])
->where('id', '>', 0)
->find();
if (empty($spec)) {
// 如果没有规格,创建虚拟规格
$spec_id = Db::name('GoodsSpecBase')->insertGetId([
'goods_id' => $goods['id'],
'spec_id' => 0,
'spec_name' => '默认座位',
'spec_type' => 'seat:A',
'price' => 0.01,
'stock' => 1,
'add_time' => $now,
]);
$spec = ['id' => $spec_id, 'spec_name' => '默认座位', 'price' => 0.01, 'goods_price' => 0.01, 'spec_base_id' => $spec_id, 'goods_id' => $goods['id']];
echo "无现有规格,创建了虚拟规格: spec_id=$spec_id\n";
}
$order_goods_id = Db::name('OrderGoods')->insertGetId([
'order_id' => $order_id,
'goods_id' => $goods['id'],
'title' => $goods['title'],
'price' => $spec['price'] ?? 0.01,
'cost' => 0,
'stock' => 1,
'spec_id' => $spec['spec_id'] ?? 0,
'spec_name' => $spec['spec_name'] ?? '',
'spec_base_id' => $spec['id'] ?? 0,
'goods_price' => $spec['goods_price'] ?? ($spec['price'] ?? 0.01),
'order_no' => $order_no,
'user_id' => $user['id'],
'add_time' => $now,
]);
echo "订单商品创建成功: order_goods_id=$order_goods_id\n";
// ============================================================
// Step 5: 触发票据生成
// ============================================================
echo "\n[5] 触发 onOrderPaid...\n";
$params = [
'business_id' => $order_id,
'business_ids' => [$order_id],
'user_id' => $user['id'],
];
$result = TicketService::onOrderPaid($params);
echo "onOrderPaid 返回: " . json_encode($result, JSON_UNESCAPED_UNICODE) . "\n";
// ============================================================
// Step 6: 检查生成的票据
// ============================================================
echo "\n[6] 检查生成的票据...\n";
$tickets = Db::name(BaseService::table('tickets'))
->where('order_id', $order_id)
->select()
->toArray();
if (empty($tickets)) {
echo "❌ 没有生成票据!\n";
} else {
echo "✅ 成功生成 " . count($tickets) . " 张票据:\n";
foreach ($tickets as $t) {
echo " - ID={$t['id']}, ticket_code={$t['ticket_code']}, 观演人={$t['real_name']}, status={$t['verify_status']}\n";
}
}
echo "\n完成!\n";