246 lines
9.3 KiB
PHP
246 lines
9.3 KiB
PHP
<?php
|
|
|
|
namespace app\store\controller;
|
|
|
|
use app\store\model\VendorOrderModel;
|
|
use app\store\model\VendorPackageModel;
|
|
use app\store\model\VendorProjectModel;
|
|
use think\facade\Log;
|
|
|
|
/**
|
|
* 供应商订单控制器
|
|
*/
|
|
class VendorOrderController extends BaseController
|
|
{
|
|
/**
|
|
* 获取订单列表
|
|
* GET /v2/store/vendor/orders
|
|
*
|
|
* @return \think\response\Json
|
|
*/
|
|
public function getList()
|
|
{
|
|
try {
|
|
$page = intval($this->request->param('page', 1));
|
|
$limit = intval($this->request->param('limit', $this->request->param('pageSize', 10))); // 兼容 pageSize 参数
|
|
$status = $this->request->param('status', '');
|
|
$keyword = $this->request->param('keyword', '');
|
|
|
|
// 确保分页参数有效
|
|
if ($page <= 0) $page = 1;
|
|
if ($limit <= 0) $limit = 10;
|
|
|
|
$userId = $this->userInfo['id'] ?? 0;
|
|
$companyId = $this->userInfo['companyId'] ?? 0;
|
|
|
|
if (empty($userId)) {
|
|
return json(['code' => 401, 'msg' => '请先登录']);
|
|
}
|
|
|
|
$where = [
|
|
['userId', '=', $userId],
|
|
['companyId', '=', $companyId], // 按公司ID查询
|
|
];
|
|
|
|
// 关键词搜索
|
|
if (!empty($keyword)) {
|
|
$where[] = ['orderNo|packageName', 'like', "%{$keyword}%"];
|
|
}
|
|
|
|
// 状态筛选
|
|
if ($status !== '') {
|
|
$where[] = ['status', '=', intval($status)];
|
|
}
|
|
|
|
$list = VendorOrderModel::where($where)
|
|
->order('id', 'desc')
|
|
->page($page, $limit)
|
|
->select();
|
|
|
|
$total = VendorOrderModel::where($where)->count();
|
|
|
|
// 格式化数据
|
|
$result = [];
|
|
foreach ($list as $item) {
|
|
$result[] = [
|
|
'id' => intval($item['id']),
|
|
'orderNo' => $item['orderNo'],
|
|
'userId' => intval($item['userId']),
|
|
'companyId' => intval($item['companyId'] ?? 0),
|
|
'packageId' => intval($item['packageId']),
|
|
'packageName' => $item['packageName'],
|
|
'totalAmount' => floatval($item['totalAmount']),
|
|
'payAmount' => floatval($item['payAmount']),
|
|
'advancePayment' => floatval($item['advancePayment'] ?? 0),
|
|
'status' => intval($item['status']),
|
|
'payTime' => !empty($item['payTime']) && is_numeric($item['payTime']) ? date('Y-m-d H:i:s', intval($item['payTime'])) : '',
|
|
'remark' => $item['remark'] ?? '',
|
|
'createTime' => !empty($item['createTime']) && is_numeric($item['createTime']) ? date('Y-m-d H:i:s', intval($item['createTime'])) : '',
|
|
'updateTime' => !empty($item['updateTime']) && is_numeric($item['updateTime']) ? date('Y-m-d H:i:s', intval($item['updateTime'])) : '',
|
|
];
|
|
}
|
|
|
|
return json([
|
|
'code' => 200,
|
|
'msg' => '获取成功',
|
|
'data' => [
|
|
'list' => $result,
|
|
'total' => $total,
|
|
'page' => $page,
|
|
'limit' => $limit
|
|
]
|
|
]);
|
|
} catch (\Exception $e) {
|
|
Log::error('获取订单列表失败:' . $e->getMessage());
|
|
return json(['code' => 500, 'msg' => '获取失败:' . $e->getMessage()]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取订单详情
|
|
* GET /v2/store/vendor/orders/:id
|
|
*
|
|
* @return \think\response\Json
|
|
*/
|
|
public function detail()
|
|
{
|
|
try {
|
|
$id = intval($this->request->param('id', 0));
|
|
|
|
if (empty($id)) {
|
|
return json(['code' => 400, 'msg' => '参数错误']);
|
|
}
|
|
|
|
$userId = $this->userInfo['id'] ?? 0;
|
|
$companyId = $this->userInfo['companyId'] ?? 0;
|
|
|
|
if (empty($userId)) {
|
|
return json(['code' => 401, 'msg' => '请先登录']);
|
|
}
|
|
|
|
// 查询订单
|
|
$order = VendorOrderModel::where([
|
|
['id', '=', $id],
|
|
['userId', '=', $userId],
|
|
['companyId', '=', $companyId]
|
|
])->find();
|
|
|
|
if (empty($order)) {
|
|
return json(['code' => 404, 'msg' => '订单不存在']);
|
|
}
|
|
|
|
// 查询套餐信息
|
|
$package = VendorPackageModel::where([
|
|
['id', '=', $order['packageId']],
|
|
['isDel', '=', 0]
|
|
])->find();
|
|
|
|
// 查询套餐项目
|
|
$projects = [];
|
|
if ($package) {
|
|
$projects = VendorProjectModel::where([
|
|
['packageId', '=', $order['packageId']],
|
|
['isDel', '=', 0]
|
|
])->select();
|
|
}
|
|
|
|
// 格式化订单信息
|
|
$orderData = [
|
|
'id' => intval($order['id']),
|
|
'orderNo' => $order['orderNo'],
|
|
'userId' => intval($order['userId']),
|
|
'companyId' => intval($order['companyId'] ?? 0),
|
|
'packageId' => intval($order['packageId']),
|
|
'packageName' => $order['packageName'],
|
|
'totalAmount' => floatval($order['totalAmount']),
|
|
'payAmount' => floatval($order['payAmount']),
|
|
'advancePayment' => floatval($order['advancePayment'] ?? 0),
|
|
'status' => intval($order['status']),
|
|
'payTime' => !empty($order['payTime']) && is_numeric($order['payTime']) ? date('Y-m-d H:i:s', intval($order['payTime'])) : '',
|
|
'remark' => $order['remark'] ?? '',
|
|
'createTime' => !empty($order['createTime']) && is_numeric($order['createTime']) ? date('Y-m-d H:i:s', intval($order['createTime'])) : '',
|
|
'updateTime' => !empty($order['updateTime']) && is_numeric($order['updateTime']) ? date('Y-m-d H:i:s', intval($order['updateTime'])) : '',
|
|
];
|
|
|
|
// 添加套餐信息
|
|
if ($package) {
|
|
$orderData['package'] = [
|
|
'id' => intval($package['id']),
|
|
'name' => $package['name'],
|
|
'originalPrice' => floatval($package['originalPrice']),
|
|
'price' => floatval($package['price']),
|
|
'description' => $package['description'] ?? '',
|
|
'cover' => $package['cover'] ?? '',
|
|
];
|
|
}
|
|
|
|
// 添加项目列表
|
|
$projectList = [];
|
|
foreach ($projects as $project) {
|
|
$projectList[] = [
|
|
'id' => intval($project['id']),
|
|
'name' => $project['name'],
|
|
'originalPrice' => floatval($project['originalPrice']),
|
|
'price' => floatval($project['price']),
|
|
'duration' => intval($project['duration'] ?? 0),
|
|
'image' => $project['image'] ?? '',
|
|
'detail' => $project['detail'] ?? '',
|
|
];
|
|
}
|
|
$orderData['package']['projects'] = $projectList;
|
|
|
|
return json(['code' => 200, 'msg' => '获取成功', 'data' => $orderData]);
|
|
} catch (\Exception $e) {
|
|
Log::error('获取订单详情失败:' . $e->getMessage());
|
|
return json(['code' => 500, 'msg' => '获取失败:' . $e->getMessage()]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 取消订单
|
|
* POST /v2/store/vendor/orders/:id/cancel
|
|
*
|
|
* @return \think\response\Json
|
|
*/
|
|
public function cancel()
|
|
{
|
|
try {
|
|
$id = intval($this->request->param('id', 0));
|
|
|
|
if (empty($id)) {
|
|
return json(['code' => 400, 'msg' => '参数错误']);
|
|
}
|
|
|
|
$userId = $this->userInfo['id'] ?? 0;
|
|
$companyId = $this->userInfo['companyId'] ?? 0;
|
|
|
|
if (empty($userId)) {
|
|
return json(['code' => 401, 'msg' => '请先登录']);
|
|
}
|
|
|
|
// 检查订单是否存在且为待支付状态
|
|
$order = VendorOrderModel::where([
|
|
['id', '=', $id],
|
|
['userId', '=', $userId],
|
|
['companyId', '=', $companyId],
|
|
['status', '=', VendorOrderModel::STATUS_UNPAID]
|
|
])->find();
|
|
|
|
if (empty($order)) {
|
|
return json(['code' => 404, 'msg' => '订单不存在或状态不允许取消']);
|
|
}
|
|
|
|
// 更新订单状态为已取消
|
|
$order->status = VendorOrderModel::STATUS_CANCELED;
|
|
$order->updateTime = time();
|
|
$order->save();
|
|
|
|
return json(['code' => 200, 'msg' => '取消成功']);
|
|
} catch (\Exception $e) {
|
|
Log::error('取消订单失败:' . $e->getMessage());
|
|
return json(['code' => 500, 'msg' => '取消失败:' . $e->getMessage()]);
|
|
}
|
|
}
|
|
}
|
|
|