You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
5.2 KiB
174 lines
5.2 KiB
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | 学员端订单管理控制器
|
|
// +----------------------------------------------------------------------
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace app\api\controller\student;
|
|
|
|
use app\service\api\apiService\OrderTableService;
|
|
use core\base\BaseController;
|
|
use think\Request;
|
|
use think\Response;
|
|
|
|
/**
|
|
* 学员端订单管理控制器
|
|
* Class OrderController
|
|
* @package app\api\controller\student
|
|
*/
|
|
class OrderController extends BaseController
|
|
{
|
|
/**
|
|
* 获取学员订单列表
|
|
* @param Request $request
|
|
* @return Response
|
|
*/
|
|
public function getOrderList(Request $request): Response
|
|
{
|
|
try {
|
|
$student_id = $request->param('student_id', 0);
|
|
$page = $request->param('page', 1);
|
|
$limit = $request->param('limit', 10);
|
|
|
|
// 验证学员ID
|
|
if (empty($student_id)) {
|
|
return fail('学员ID不能为空');
|
|
}
|
|
|
|
$where = [
|
|
'student_id' => $student_id,
|
|
'resource_id' => '',
|
|
'staff_id' => ''
|
|
];
|
|
|
|
$orderService = new OrderTableService();
|
|
$result = $orderService->getList($where);
|
|
|
|
// 处理返回数据格式,确保与前端期望一致
|
|
$data = [
|
|
'data' => $result['data'] ?? [],
|
|
'current_page' => $result['current_page'] ?? $page,
|
|
'last_page' => $result['last_page'] ?? 1,
|
|
'total' => $result['total'] ?? 0,
|
|
'per_page' => $limit
|
|
];
|
|
|
|
return success($data, '获取成功');
|
|
|
|
} catch (\Exception $e) {
|
|
return fail('获取订单列表失败: ' . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取学员订单详情
|
|
* @param Request $request
|
|
* @return Response
|
|
*/
|
|
public function getOrderDetail(Request $request): Response
|
|
{
|
|
try {
|
|
$order_id = $request->param('id', 0);
|
|
$student_id = $request->param('student_id', 0);
|
|
|
|
// 验证参数
|
|
if (empty($order_id)) {
|
|
return fail('订单ID不能为空');
|
|
}
|
|
|
|
if (empty($student_id)) {
|
|
return fail('学员ID不能为空');
|
|
}
|
|
|
|
$where = [
|
|
'student_id' => $student_id,
|
|
'resource_id' => '',
|
|
'staff_id' => ''
|
|
];
|
|
|
|
$orderService = new OrderTableService();
|
|
$result = $orderService->getInfo($where);
|
|
|
|
if (!$result['code']) {
|
|
return fail($result['msg']);
|
|
}
|
|
|
|
// 验证订单是否属于该学员
|
|
if ($result['data']['student_id'] != $student_id) {
|
|
return fail('无权查看此订单');
|
|
}
|
|
|
|
return success($result['data'], '获取成功');
|
|
|
|
} catch (\Exception $e) {
|
|
return fail('获取订单详情失败: ' . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取学员订单统计
|
|
* @param Request $request
|
|
* @return Response
|
|
*/
|
|
public function getOrderStats(Request $request): Response
|
|
{
|
|
try {
|
|
$student_id = $request->param('student_id', 0);
|
|
|
|
// 验证学员ID
|
|
if (empty($student_id)) {
|
|
return fail('学员ID不能为空');
|
|
}
|
|
|
|
// 注意:这里会获取所有订单用于统计,可能需要优化
|
|
|
|
$where = [
|
|
'student_id' => $student_id,
|
|
'resource_id' => '',
|
|
'staff_id' => ''
|
|
];
|
|
|
|
$orderService = new OrderTableService();
|
|
$result = $orderService->getList($where);
|
|
|
|
$orders = $result['data'] ?? [];
|
|
|
|
// 统计各状态订单数量
|
|
$stats = [
|
|
'total_orders' => count($orders),
|
|
'pending_payment' => 0,
|
|
'paid' => 0,
|
|
'completed' => 0,
|
|
'cancelled' => 0,
|
|
'refunded' => 0
|
|
];
|
|
|
|
foreach ($orders as $order) {
|
|
$status = $order['order_status'] ?? 'pending';
|
|
switch ($status) {
|
|
case 'pending':
|
|
$stats['pending_payment']++;
|
|
break;
|
|
case 'paid':
|
|
$stats['paid']++;
|
|
break;
|
|
case 'completed':
|
|
$stats['completed']++;
|
|
break;
|
|
case 'cancelled':
|
|
$stats['cancelled']++;
|
|
break;
|
|
case 'refunded':
|
|
$stats['refunded']++;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return success($stats, '获取成功');
|
|
|
|
} catch (\Exception $e) {
|
|
return fail('获取订单统计失败: ' . $e->getMessage());
|
|
}
|
|
}
|
|
}
|
|
|