diff --git a/shopxo/app/plugins/vr_ticket/Hook.php b/shopxo/app/plugins/vr_ticket/Hook.php index 565348f..6548ea5 100644 --- a/shopxo/app/plugins/vr_ticket/Hook.php +++ b/shopxo/app/plugins/vr_ticket/Hook.php @@ -508,6 +508,7 @@ class Hook * 触发位置:plugins_service_goods_list_begin * * 向下兼容:无 user_lng/user_lat 参数时,不添加任何筛选,返回全部商品 + * 修复:只对票务商品(vr_goods_config 非空)应用城市筛选,非票务商品不受影响 * * @param array &$params 钩子参数引用 ['hook_name','is_backend','params','where','field','order_by','m','n'] */ @@ -540,12 +541,22 @@ class Hook return; } - // 注入 produce_region 城市筛选条件 + // 修复:只对票务商品应用城市筛选 + // 逻辑:(非票务商品 vr_goods_config='') OR (票务商品且城市匹配) $where = &$params['where']; if (!is_array($where)) { $where = []; } - $where[] = ['g.produce_region', '=', $cityId]; + + // 使用闭包实现 OR 条件:vr_goods_config 为空(非票务) OR produce_region = 城市ID + $where[] = function($query) use ($cityId) { + $query->where(function($q) { + $q->where('g.vr_goods_config', '=', ''); + })->whereOr(function($q) use ($cityId) { + $q->where('g.vr_goods_config', '<>', '')->where('g.produce_region', '=', $cityId); + }); + }; + // @file_put_contents($debugFile, date('Y-m-d H:i:s') . " OnGoodsListBegin: city filter applied to ticket goods only, cityId=$cityId\n", FILE_APPEND); } /** @@ -553,6 +564,7 @@ class Hook * 触发位置:plugins_service_search_goods_list_begin * * 向下兼容:无 user_lng/user_lat 参数时,不添加任何筛选,返回全部商品 + * 修复:只对票务商品(vr_goods_config 非空)应用城市筛选,非票务商品不受影响 * * @param array &$params 钩子参数引用 ['hook_name','is_backend','params','where_base','where_keywords','where_screening_price','field','order_by','page','page_start','page_size'] */ @@ -586,13 +598,23 @@ class Hook return; } - // 注入 produce_region 城市筛选条件(SearchService 使用 where_base 而非 where) + // 修复:只对票务商品应用城市筛选 + // 逻辑:(非票务商品 vr_goods_config='') OR (票务商品且城市匹配) + // SearchService 使用 where_base 而非 where $whereBase = &$params['where_base']; if (!is_array($whereBase)) { $whereBase = []; } - $whereBase[] = ['g.produce_region', '=', $cityId]; - // [调试代码] @file_put_contents($debugFile, date('Y-m-d H:i:s') . " OnSearchListBegin: city filter applied, cityId=$cityId\n", FILE_APPEND); + + // 使用闭包实现 OR 条件:vr_goods_config 为空(非票务) OR produce_region = 城市ID + $whereBase[] = function($query) use ($cityId) { + $query->where(function($q) { + $q->where('g.vr_goods_config', '=', ''); + })->whereOr(function($q) use ($cityId) { + $q->where('g.vr_goods_config', '<>', '')->where('g.produce_region', '=', $cityId); + }); + }; + // [调试代码] @file_put_contents($debugFile, date('Y-m-d H:i:s') . " OnSearchListBegin: city filter applied to ticket goods only, cityId=$cityId\n", FILE_APPEND); } /** diff --git a/shopxo/app/plugins/vr_ticket/admin/Admin.php b/shopxo/app/plugins/vr_ticket/admin/Admin.php index 82cd6be..b1511dd 100644 --- a/shopxo/app/plugins/vr_ticket/admin/Admin.php +++ b/shopxo/app/plugins/vr_ticket/admin/Admin.php @@ -197,6 +197,18 @@ class Admin extends Common $goods = \think\facade\Db::name('Goods')->find($ticket['goods_id']); + // 查询订单信息 + $order = []; + $user = []; + if ($ticket['order_id'] > 0) { + $order = \think\facade\Db::name('Order')->find($ticket['order_id']); + + // 查询用户信息 + if (!empty($order) && $order['user_id'] > 0) { + $user = \think\facade\Db::name('User')->find($order['user_id']); + } + } + $verifier = []; if ($ticket['verifier_id'] > 0) { $verifier = \think\facade\Db::name('vr_verifiers')->find($ticket['verifier_id']); @@ -204,6 +216,12 @@ class Admin extends Common $ticket['qr_code_url'] = \app\plugins\vr_ticket\service\TicketService::getQrCodeUrl($ticket['ticket_code']); + // 提取短码(从 qr_data 的前半部分) + $short_code = ''; + if (!empty($ticket['qr_data']) && strpos($ticket['qr_data'], '|') !== false) { + $short_code = explode('|', $ticket['qr_data'], 2)[0]; + } + $verifiers = \think\facade\Db::name('vr_verifiers') ->where('status', 1) ->order('id', 'asc') @@ -212,8 +230,11 @@ class Admin extends Common return MyView('../../../plugins/vr_ticket/view/admin/ticket/detail', [ 'ticket' => $ticket, 'goods' => $goods, + 'order' => $order, + 'user' => $user, 'verifier' => $verifier, 'verifiers' => $verifiers, + 'short_code'=> $short_code, ]); } diff --git a/shopxo/app/plugins/vr_ticket/api/Ticket.php b/shopxo/app/plugins/vr_ticket/api/Ticket.php index fc93bd0..5aef3b7 100644 --- a/shopxo/app/plugins/vr_ticket/api/Ticket.php +++ b/shopxo/app/plugins/vr_ticket/api/Ticket.php @@ -381,7 +381,8 @@ class Ticket ->where($where) ->order('id', 'desc') ->page($page, $page_size) - ->select(); + ->select() + ->toArray(); $total = \think\facade\Db::name('vr_verifications') ->where($where) ->count(); @@ -389,12 +390,28 @@ class Ticket // 关联票和商品信息 $ticket_ids = array_filter(array_column($list, 'ticket_id')); $tickets_map = []; + $user_ids = []; if (!empty($ticket_ids)) { $tickets_raw = \think\facade\Db::name('vr_tickets') ->where('id', 'in', $ticket_ids) - ->select(); + ->select() + ->toArray(); foreach ($tickets_raw as $t) { $tickets_map[$t['id']] = $t; + if (!empty($t['user_id'])) { + $user_ids[] = $t['user_id']; + } + } + } + + $users_map = []; + if (!empty($user_ids)) { + $users_raw = \think\facade\Db::name('User') + ->where('id', 'in', array_unique($user_ids)) + ->select() + ->toArray(); + foreach ($users_raw as $u) { + $users_map[$u['id']] = !empty($u['nickname']) ? $u['nickname'] : (!empty($u['username']) ? $u['username'] : '用户' . $u['id']); } } @@ -410,12 +427,27 @@ class Ticket $result = []; foreach ($list as $v) { $ticket = $tickets_map[$v['ticket_id']] ?? []; + + // 提取短码(从 qr_data 的前半部分) + $short_code = ''; + if (!empty($ticket['qr_data']) && strpos($ticket['qr_data'], '|') !== false) { + $short_code = explode('|', $ticket['qr_data'], 2)[0]; + } else { + $short_code = !empty($ticket['ticket_code']) ? substr($ticket['ticket_code'], 0, 8) : ''; + } + + $buyer_name = $users_map[$ticket['user_id'] ?? 0] ?? ''; + $result[] = [ 'id' => $v['id'], 'ticket_id' => $v['ticket_id'], 'ticket_code' => $v['ticket_code'], + 'short_code' => $short_code, 'seat_info' => $ticket['seat_info'] ?? '', - 'real_name' => $ticket['real_name'] ?? '', + 'real_name' => $ticket['real_name'] ?? '', + 'phone' => $ticket['phone'] ?? '', + 'order_no' => $ticket['order_no'] ?? '', + 'buyer_name' => $buyer_name, 'goods_title' => $goods_map[$v['goods_id']] ?? '已下架商品', 'created_at' => $v['created_at'], ]; diff --git a/shopxo/app/plugins/vr_ticket/hook/AdminGoodsSave.php b/shopxo/app/plugins/vr_ticket/hook/AdminGoodsSave.php index 0c14847..fd2d314 100644 --- a/shopxo/app/plugins/vr_ticket/hook/AdminGoodsSave.php +++ b/shopxo/app/plugins/vr_ticket/hook/AdminGoodsSave.php @@ -140,7 +140,7 @@ class AdminGoodsSave
票码:{{$ticket.ticket_code}}
- - -| 订单号 | +{{$order.order_no}} | +
| 用户昵称 | +{{if !empty($user)}}{{$user.nickname|default=$user.username|default='未设置'}}{{else}}-{{/if}} | +
| 订单状态 | ++ {{if $order.status == 0}} + 待确认 + {{elseif $order.status == 1}} + 待支付 + {{elseif $order.status == 2}} + 待发货 + {{elseif $order.status == 3}} + 待收货 + {{elseif $order.status == 4}} + 已完成 + {{elseif $order.status == 5}} + 已取消 + {{elseif $order.status == 6}} + 已关闭 + {{else}} + 未知 + {{/if}} + | +
| 支付状态 | ++ {{if isset($order.pay_status) && $order.pay_status == 1}} + 已支付 + {{else}} + 未支付 + {{/if}} + | +
| 订单金额 | +¥{{$order.total_price|default='0.00'}} | +
| 购买数量 | +{{$order.buy_number_count|default='0'}} 张票 | +
| 支付方式 | +{{if !empty($order.payment_name)}}{{$order.payment_name}}{{else}}-{{/if}} | +
| 支付时间 | +{{if !empty($order.pay_time) && $order.pay_time > 0}}{{:date('Y-m-d H:i:s', $order.pay_time)}}{{else}}未支付{{/if}} | +
| 下单时间 | +{{if !empty($order.add_time)}}{{:date('Y-m-d H:i:s', $order.add_time)}}{{else}}-{{/if}} | +
| 用户备注 | +{{if !empty($order.user_note)}}{{$order.user_note}}{{else}}无{{/if}} | +
订单信息不存在或已删除
+ {{/if}}| 订单号 | 票码 | 观演人 | +手机号 | 座位信息 | 商品名 | 状态 | @@ -105,8 +121,10 @@ {{if !empty($list)}} {{volist name="list" id="ticket"}}|||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{$ticket.order_no|default='—'}} | {{$ticket.ticket_code}} | {{$ticket.real_name|default='—'}} | +{{$ticket.phone|default='—'}} | {{if !empty($ticket.seat_info)}}{{$ticket.seat_info}}{{else}}无{{/if}} | {{$ticket.goods_title|default='已删除商品'}} | @@ -121,7 +139,7 @@ | {{if !empty($ticket.issued_at)}}{{:date('Y-m-d H:i', $ticket.issued_at)}}{{else}}—{{/if}} | - 查看详情 @@ -130,7 +148,7 @@ {{/volist}} {{else}} | |||||||
| 暂无数据 | +暂无数据 | ||||||||||||||