erp-backend/app/Http/Controllers/OrderController_complete.php
2026-04-01 17:07:04 +08:00

232 lines
6.6 KiB
PHP

/**
* 获取发货状态选项
*/
public function getDeliveryStatusOptions()
{
$options = [
['value' => 'pending', 'label' => '待发货'],
['value' => 'delivered', 'label' => '已发货'],
];
return response()->json([
'code' => 200,
'data' => $options,
'message' => 'success'
]);
}
/**
* 获取平台选项
*/
public function getPlatformOptions()
{
$platforms = Order::select('platform')
->distinct()
->orderBy('platform')
->get()
->map(function ($item) {
return [
'value' => $item->platform,
'label' => $item->platform,
];
});
return response()->json([
'code' => 200,
'data' => $platforms,
'message' => 'success'
]);
}
/**
* 获取店铺选项
*/
public function getShopOptions()
{
$shops = Order::select('shop_id', 'shop_name')
->distinct()
->orderBy('shop_name')
->get()
->map(function ($item) {
return [
'value' => $item->shop_id,
'label' => $item->shop_name,
];
});
return response()->json([
'code' => 200,
'data' => $shops,
'message' => 'success'
]);
}
/**
* 更新订单备注
*/
public function updateRemark(Request $request, string $id)
{
$request->validate([
'remark' => 'required|string|max:1000',
]);
$order = Order::find($id);
if (!$order) {
return response()->json([
'code' => 404,
'message' => '订单不存在'
], 404);
}
$order->update(['remark' => $request->remark]);
return response()->json([
'code' => 200,
'message' => '备注更新成功'
]);
}
/**
* 完成订单
*/
public function completeOrder(string $id)
{
$order = Order::find($id);
if (!$order) {
return response()->json([
'code' => 404,
'message' => '订单不存在'
], 404);
}
// 只有已发货的订单可以完成
if ($order->order_status !== 'shipped') {
return response()->json([
'code' => 400,
'message' => '只有已发货的订单可以完成'
], 400);
}
$order->update([
'order_status' => 'completed',
'end_time' => now(),
]);
return response()->json([
'code' => 200,
'message' => '订单已完成'
]);
}
/**
* 同步订单到平台
*/
public function syncToPlatform(string $id)
{
$order = Order::find($id);
if (!$order) {
return response()->json([
'code' => 404,
'message' => '订单不存在'
], 404);
}
// TODO: 实现同步到平台API
// 这里应该调用对应平台的API更新订单状态
return response()->json([
'code' => 200,
'message' => '订单已同步到平台(模拟)',
'data' => [
'order_id' => $id,
'platform' => $order->platform,
'platform_order_sn' => $order->platform_order_sn,
]
]);
}
/**
* 获取订单操作历史
*/
public function getOperationHistory(string $id)
{
$order = Order::find($id);
if (!$order) {
return response()->json([
'code' => 404,
'message' => '订单不存在'
], 404);
}
// 在实际项目中,这里应该查询操作日志表
// 暂时返回模拟数据
$history = [
[
'id' => 1,
'operator' => '系统',
'action' => '创建',
'content' => '订单创建成功',
'created_at' => $order->created_at,
],
[
'id' => 2,
'operator' => '管理员',
'action' => '审核',
'content' => '订单审核通过',
'created_at' => $order->updated_at,
],
];
return response()->json([
'code' => 200,
'data' => $history,
'message' => 'success'
]);
}
/**
* 获取订单数量统计(用于仪表板)
*/
public function getDashboardStats()
{
$today = now()->startOfDay();
$yesterday = now()->subDay()->startOfDay();
$thisMonth = now()->startOfMonth();
$stats = [
'today' => [
'total' => Order::where('order_time', '>=', $today)->count(),
'pending' => Order::where('order_time', '>=', $today)->where('order_status', 'pending')->count(),
'auditing' => Order::where('order_time', '>=', $today)->where('order_status', 'auditing')->count(),
'shipped' => Order::where('order_time', '>=', $today)->where('order_status', 'shipped')->count(),
'amount' => Order::where('order_time', '>=', $today)->sum('total_amount'),
],
'yesterday' => [
'total' => Order::whereBetween('order_time', [$yesterday, $today])->count(),
'amount' => Order::whereBetween('order_time', [$yesterday, $today])->sum('total_amount'),
],
'this_month' => [
'total' => Order::where('order_time', '>=', $thisMonth)->count(),
'amount' => Order::where('order_time', '>=', $thisMonth)->sum('total_amount'),
],
'all' => [
'total' => Order::count(),
'pending' => Order::where('order_status', 'pending')->count(),
'auditing' => Order::where('order_status', 'auditing')->count(),
'shipped' => Order::where('order_status', 'shipped')->count(),
'completed' => Order::where('order_status', 'completed')->count(),
'cancelled' => Order::where('order_status', 'cancelled')->count(),
'amount' => Order::sum('total_amount'),
],
];
return response()->json([
'code' => 200,
'data' => $stats,
'message' => 'success'
]);
}