智慧教务系统
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

<?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());
}
}
}